3

openCVs findFundamentalMat() を使用して、2 つの一致するポイント セットの基本的なマトリックスを取得しようとしています。画像が歪んでいるので、キーポイントを検出して一致させます。undistortPoints を使用すると基本行列の結果が改善されると思いましたが (カメラの固有パラメーターはわかっています)、undistortPoints の後で findFundamentalMat を実行すると奇妙な結果が得られます。まず、結果のマスク配列では、すべてのポイントがインライアと見なされます。2 つ目は、エラーが非常に大きいことです。次のようにエラーを計算します。

        vector<Point2f> points1Raw; //Raw points from Keypoints
        vector<Point2f> points1; //Undistorted points
        vector<Point2f> points2Raw;
        vector<Point2f> points2;
        for(int k=0; k<matches.size(); k++) {
            points1Raw.push_back(keypoints1[matches[k].queryIdx].pt);
            points2Raw.push_back(keypoints2[matches[k].trainIdx].pt);
        };

        undistortPoints(points1Raw, points1, cameraMatrixm, distCoeffsm);
        undistortPoints(points2Raw, points2, cameraMatrixm, distCoeffsm);

        vector<uchar> states;

        Mat f = findFundamentalMat(points1, points2, FM_RANSAC, 3, 0.99, states);

            //For all k matches
            Mat p1(3, 1, CV_64F);
            p1.at<double>(0, 0) = points1[k].x;
            p1.at<double>(1, 0) = points1[k].y;
            p1.at<double>(2, 0) = 1;
            Mat p2(1, 3, CV_64F);
            p2.at<double>(0, 0) = points2[k].x;
            p2.at<double>(0, 1) = points2[k].y;
            p2.at<double>(0, 2) = 1;

            Mat res = abs(p2 * f * p1); // f computed matrix

            if((bool)states[k]) //if match considered inlier (in my strange case all)
                err = err + res.at<double>(0, 0); //accumulate errors

結果として生じるエラーの合計は、100 から 1000、またはそれ以上になります。しかし、基本行列を計算する前に一致を手動でチェックすると、それらのほとんどが正しいように見えます。私は何を間違っていますか?:/

4

2 に答える 2

2

あなたは何点持っていますか?インライアとしてカウントされるには、(あなたの場合) 3 ピクセルまでのエラーが許容されます... したがって、数百ポイントがある場合、累積エラーが大きいことは明らかです。

于 2013-03-07T22:41:20.457 に答える
0

undistortPoints の後、座標はもはやピクセル単位ではないため、3はあまり意味がありません。次を使用して試すことができます。

0.006 * maxVal

のように: http://www.learningace.com/doc/568776/daa602b585fb296681f344b08bc808f0/snavely_ijcv07セクション 4.1

double minVal, maxVal;
cv::minMaxIdx(points1, &minVal, &maxVal);
于 2014-07-07T12:15:46.030 に答える