2

部分的にキャリブレーションされたカメラの画像修正を使用する必要があります。つまり、固有パラメーターのみがわかっています。そのため、最初にいくつかのキーポイントを一致させて使用しますfindFundamentalMat(...)。ここまでの結果ですが、大丈夫ですか?

見栄えの良いキーポイント

私が得た平均誤差は次のとおりです: 274.326 (多いように見えますか?) この値を計算するために使用したコードは次のとおりです。

vector<Point3f> linesL;
vector<Point3f> linesR;
computeCorrespondEpilines(pL, 1, f, linesL);
computeCorrespondEpilines(pR, 2, f, linesR);
double avgErr = 0;

for(int i = 0; i < linesL.size(); i++ ) {

    double err = fabs(pL[i].x*linesR[i].x +
    pL[i].y*linesR[i].y + linesR[i].z) +
    fabs(pR[i].x*linesL[i].x +
    pR[i].y*linesL[i].y + linesL[i].z);
    if(err != err)
        cout << "nan" << endl;
    cout << err << endl;
    avgErr += err;
}
cout << "avg err = " << avgErr/linesL.size() << endl;

これは、同次座標の単純な距離式ですよね? それから私は基本的にこれをしました:

Mat h1, h2;
Mat w;
stereoRectifyUncalibrated(pL, pR, f, imgL.size(), h1, h2);
warpPerspective(imgL, w, h1, imgL.size());

しかし、画像を表示しようとすると、次のようになります。 不正な変換

だから私の質問は次のとおりです。私は何を間違っていますか? また、ransac が非決定論的であることは知っていますが、私の平均誤差は、前述の 270 前後になることもありますが、3.79508e+19 などになることもあります。

PS: pL と pR は、f のマスクを使用してフィルター処理された一致点です。しきい値は 3 でした。現在の状況で問題の原因を見つけます。

4

0 に答える 0