2013-02-22 146 views
11

我正在使用單個對象的兩個圖像,該對象從其第一個圖像旋轉一定程度。如何從旋轉矩陣計算角度

我已經計算了每個圖像的POSE並使用Rodergues()將旋轉向量轉換爲Matrix。現在我該如何計算並查看它從第一個位置旋轉多少?

我已經嘗試了許多方法,但答案是沒有接近

編輯:我的相機僅固定物體運動。

回答

26

我們可以使用下面的公式從旋轉矩陣中得到歐拉角。

給定一個3×3旋轉矩陣

enter image description here

3個歐拉角是

enter image description here

enter image description here

enter image description here

這裏atan2是相同的反正切函數,象限檢查,你通常在C或Matlab中找到。

注意:如果y軸周圍的角度精確爲+/- 90°,則必須小心。在這種情況下,第一列和最後一行中的所有元素(除了下角中的元素除外)都是1或-1,將爲0(cos(1)= 0)。一種解決方案是將繞x軸的旋轉固定在180°,並從atan2(r_12,-r_22)計算圍繞z軸的角度。

參見http://www.soi.city.ac.uk/~sbbh653/publications/euler.pdf

+1

非常感謝你的幫助.. +1 – 2013-02-26 10:03:43

+0

還有一種方法可以確定這些旋轉必須用於實現這個矩陣的順序嗎? – 2014-09-13 11:20:50

7

如果- [R是(3×3)的旋轉矩陣,然後旋轉的角度將是ACOS((TR(- [R)-1)/ 2),其中tr(- [R)是的跡矩陣(即對角元素的總和)。

這就是你要求的;我估計有90%的機會不是你想要的。

+0

這給出了恰好一個標量值,對應於沿哪個軸**的旋轉角度? – 2017-12-06 22:37:40

+1

@SaravanabalagiRamachandran:矩陣的特徵向量,當然。只需求解(** R ** - ** I **)X = 0(其中X和0是向量)。 – Beta 2017-12-07 01:19:15

0

讓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公式然後計算的角度和旋轉軸線。

1

供您參考,代碼是計算歐拉角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