我正在嘗試使用我的攝像頭從已知全局位置的四個基準圖像獲取全局姿態估計值。攝像機姿態估計(OpenCV PnP)
我檢查了很多stackexchange問題和一些論文,我似乎無法得到一個正確的解決方案。我確實得到的位置編號是可重複的,但與攝像機的運動絲毫不成比例。僅供參考我正在使用C++ OpenCV 2.1。
At this link is pictured我的座標系和下面使用的測試數據。
% Input to solvePnP():
imagePoints = [ 481, 831; % [x, y] format
520, 504;
1114, 828;
1106, 507]
objectPoints = [0.11, 1.15, 0; % [x, y, z] format
0.11, 1.37, 0;
0.40, 1.15, 0;
0.40, 1.37, 0]
% camera intrinsics for Logitech C910
cameraMat = [1913.71011, 0.00000, 1311.03556;
0.00000, 1909.60756, 953.81594;
0.00000, 0.00000, 1.00000]
distCoeffs = [0, 0, 0, 0, 0]
% output of solvePnP():
tVec = [-0.3515;
0.8928;
0.1997]
rVec = [2.5279;
-0.09793;
0.2050]
% using Rodrigues to convert back to rotation matrix:
rMat = [0.9853, -0.1159, 0.1248;
-0.0242, -0.8206, -0.5708;
0.1686, 0.5594, -0.8114]
到目前爲止,任何人都可以看到什麼毛病這些數字?如果有人會檢查他們,例如MatLAB(上面的代碼是m文件友好的),我將不勝感激。
從這一點,我不確定如何從rMat和tVec獲得全局姿態。 從我讀this question,擺脫RMAT和tVec姿勢很簡單:
position = transpose(rMat) * tVec % matrix multiplication
不過,我從我讀過它不是簡單其它來源的懷疑。
要獲得相機在真實世界座標系中的位置,我需要做什麼? 由於我不確定這是否是一個實現問題(但最有可能是一個理論問題),我希望有人在OpenCV中成功使用solvePnP函數來回答這個問題,儘管也歡迎任何想法!
非常感謝您的時間。
。所以正確的做法是 - 傳輸(rMat)* tVec – Vlad 2014-04-23 02:19:58