部分的にキャリブレーションされたカメラの画像修正を使用する必要があります。つまり、固有パラメーターのみがわかっています。そのため、最初にいくつかのキーポイントを一致させて使用します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 でした。現在の状況で問題の原因を見つけます。