2D 特徴点と三角形分割された 3D ランドマーク ポイントを使用して、画像データセットで solvePnPRansac を実行しています。それは素晴らしく走り、回転、そして前軸と横軸の結果は見栄えがします。ただし、Y 軸は完全に間違っています。
データ セットのグラウンド トゥルースに照らして出力をテストしていますが、下降するはずの場所で上昇し、グラウンド トゥルースから非常に急速にずれています。他の軸は、はるかに長い間ロックされたままになります。
これは奇妙に思えますが、他の軸では正しく、1 つの軸では間違っているのでしょうか? さすがにそんなことはあり得ないので、どの軸も悪いか、どの軸も良いかのどちらかだと思っていたでしょう。
これを実現するために何が間違っている可能性がありますか? そして、どうすればこの奇妙さをデバッグできますか? 私の PnP コードは非常に標準的です。
cv::Mat inliers;
cv::Mat rvec = cv::Mat::zeros(3, 1, CV_64FC1);
int iterationsCount = 500; // number of Ransac iterations.
float reprojectionError = 2.0; //2.0 // maximum allowed distance to consider it an inlier.
float confidence = 0.95; // RANSAC successful confidence.
bool useExtrinsicGuess = false;
int flags = cv::SOLVEPNP_ITERATIVE;
int num_inliers_;
//points3D_t0
cv::solvePnPRansac(points3D_t0, points_left_t1, intrinsic_matrix, distCoeffs, rvec, translation_stereo,
useExtrinsicGuess, iterationsCount, reprojectionError, confidence,
inliers, flags);