2 つの画像ペア間の基本行列を計算したいと考えています。その目的のために、 を介して一致する SIFT-Features を使用しますcv::FlannBasedMatcher
。cv::findFundamentalMat(left_pts, right_pts, CV_RANSAC, 2.0, 0.99, ransac_mask)
その後、見つかった一致を呼び出します。
計算された基本行列を視覚化するために、エピポーラ線を描きたいと思います。そのためにcv::computeCorrespondEpilines
、 Point を使用した手動の乗算と、結果の直線方程式 (ax + by + c = 0) の抽出を試みました。
線を引くには、切り取ったものを使用するだけです(他の多くの例で見つけました)
for (cv::vector<cv::Vec3f>::const_iterator it = lines1.begin(); it!=lines1.end(); ++it)
{
cv::line(left_new,
cv::Point(0,-(*it)[2]/(*it)[1]),
cv::Point(left.cols,-((*it)[2] + (*it)[0]*left.cols)/(*it)[1]),
cv::Scalar(255,255,255));
}
しかし、対応する点はエピポーラ線上にありません。すでに修正された画像でも試してみましたが、線は水平ではありません。
今、私はその例もテストしました: http://opencv-cookbook.googlecode.com/svn/trunk/Chapter%2009/estimateF.cpp だけで、同じ問題があることがわかりました。
誰かがそのようなユースケースの実際の例を共有したり、何がうまくいかないかのヒントを教えてくれますか? (マッチングは良さそうなので実際の見積もりとの兼ね合いですね)