我正在使用單個對象的兩個圖像,該對象從其第一個圖像旋轉一定程度。如何從旋轉矩陣計算角度
我已經計算了每個圖像的POSE並使用Rodergues()將旋轉向量轉換爲Matrix。現在我該如何計算並查看它從第一個位置旋轉多少?
我已經嘗試了許多方法,但答案是沒有接近
編輯:我的相機僅固定物體運動。
我正在使用單個對象的兩個圖像,該對象從其第一個圖像旋轉一定程度。如何從旋轉矩陣計算角度
我已經計算了每個圖像的POSE並使用Rodergues()將旋轉向量轉換爲Matrix。現在我該如何計算並查看它從第一個位置旋轉多少?
我已經嘗試了許多方法,但答案是沒有接近
編輯:我的相機僅固定物體運動。
我們可以使用下面的公式從旋轉矩陣中得到歐拉角。
給定一個3×3旋轉矩陣
3個歐拉角是
這裏atan2是相同的反正切函數,象限檢查,你通常在C或Matlab中找到。
注意:如果y軸周圍的角度精確爲+/- 90°,則必須小心。在這種情況下,第一列和最後一行中的所有元素(除了下角中的元素除外)都是1或-1,將爲0(cos(1)= 0)。一種解決方案是將繞x軸的旋轉固定在180°,並從atan2(r_12,-r_22)計算圍繞z軸的角度。
如果- [R是(3×3)的旋轉矩陣,然後旋轉的角度將是ACOS((TR(- [R)-1)/ 2),其中tr(- [R)是的跡矩陣(即對角元素的總和)。
這就是你要求的;我估計有90%的機會不是你想要的。
這給出了恰好一個標量值,對應於沿哪個軸**的旋轉角度? – 2017-12-06 22:37:40
@SaravanabalagiRamachandran:矩陣的特徵向量,當然。只需求解(** R ** - ** I **)X = 0(其中X和0是向量)。 – Beta 2017-12-07 01:19:15
讓R,C和R 2c是你已經計算了2點旋轉矩陣。它們將姿勢1和姿勢2中的物體分別表示到相機框架(因此是第二個c後綴)。你想要的旋轉矩陣是從姿勢1到姿勢2,即R12。要計算它,您必須在頭腦中旋轉從pose_1到camera,然後從camera到pose_2的對象。後者旋轉是pose_2對照相機通過R2C espressed的倒數,因此:
R12 = R1c * inv(R2c)
從矩陣R12可以使用Rodiguez公式然後計算的角度和旋轉軸線。
供您參考,代碼是計算歐拉角MATLAB:由格拉漢姆 - 泰勒,傑夫·欣頓和薩姆Roweis提供
function Eul = RotMat2Euler(R)
if R(1,3) == 1 | R(1,3) == -1
%special case
E3 = 0; %set arbitrarily
dlta = atan2(R(1,2),R(1,3));
if R(1,3) == -1
E2 = pi/2;
E1 = E3 + dlta;
else
E2 = -pi/2;
E1 = -E3 + dlta;
end
else
E2 = - asin(R(1,3));
E1 = atan2(R(2,3)/cos(E2), R(3,3)/cos(E2));
E3 = atan2(R(1,2)/cos(E2), R(1,1)/cos(E2));
end
Eul = [E1 E2 E3];
代碼。有關更多信息,請參閱here
非常感謝你的幫助.. +1 – 2013-02-26 10:03:43
還有一種方法可以確定這些旋轉必須用於實現這個矩陣的順序嗎? – 2014-09-13 11:20:50