我處於需要根據圖像對應關係找出兩個或多個相機之間的相對位置(所以相機不在同一個點)的情況。爲了解決這個問題,我嘗試了與here(代碼如下)中描述的相同的方法。尋找相機之間的extrinsics
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?
- 距離攝像機距離很遠的物體是否有問題? (重視差)
在此先感謝
你能提供更多的細節嗎?請問,這兩款相機都有一個共同的視場(FOV)? –
相機是相同的型號 - 但不完全相同 - 因此內在因素可能會稍有不同。理想情況下,內部調整也得到調整,但目前這不是我的優先 – Daniel
我的問題是兩臺相機是否有可以成像的公共區域。如果是的話,你可以在該公共區域放置一個棋盤,並找出相機之間的相對位置。 –