私は、画像の対応に基づいて 2 つ以上のカメラ間の相対的なカメラ ポーズを見つける必要がある状況にいます (そのため、カメラは同じポイントにありません)。これを解決するために、ここで説明したのと同じアプローチを試しました(以下のコード)。
cv::Mat calibration_1 = ...;
cv::Mat calibration_2 = ...;
cv::Mat calibration_target = calibration_1;
calibration_target.at<float>(0, 2) = 0.5f * frame_width; // principal point
calibration_target.at<float>(1, 2) = 0.5f * frame_height; // principal point
auto fundamental_matrix = cv::findFundamentalMat(left_matches, right_matches, CV_RANSAC);
fundamental_matrix.convertTo(fundamental_matrix, CV_32F);
cv::Mat essential_matrix = calibration_2.t() * fundamental_matrix * calibration_1;
cv::SVD svd(essential_matrix);
cv::Matx33f w(0,-1,0,
1,0,0,
0,0,1);
cv::Matx33f w_inv(0,1,0,
-1,0,0,
0,0,1);
cv::Mat rotation_between_cameras = svd.u * cv::Mat(w) * svd.vt; //HZ 9.19
しかし、ほとんどの場合、非常に奇妙な結果が得られます。それで、私の次の考えは、本格的なバンドルアジャスターを使用することでした(これは私が探していることをするはずです?!)。現在、私の唯一の大きな依存関係は OpenCV であり、文書化されていないバンドル調整の実装しかありません。
質問は次のとおりです。
- 依存関係がなく、商用利用可能なライセンスを使用するバンドル アジャスターはありますか?
- extrinsics を見つける他の簡単な方法はありますか?
- カメラまでの距離が大きく異なるオブジェクトは問題になりますか? (重視差)
前もって感謝します