3

2 つの画像ペア間の基本行列を計算したいと考えています。その目的のために、 を介して一致する SIFT-Features を使用しますcv::FlannBasedMatchercv::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 だけで、同じ問題があることがわかりました。

誰かがそのようなユースケースの実際の例を共有したり、何がうまくいかないかのヒントを教えてくれますか? (マッチングは良さそうなので実際の見積もりとの兼ね合いですね)

4

0 に答える 0