2013-02-22 18 views
11

Ich verwende zwei Bilder des einzelnen Objekts Das Objekt wird in gewissem Maße von seinem ersten Bild roated.So berechnen Sie den Winkel aus der Rotationsmatrix

Ich habe die POSE jedes Bildes berechnet und den Rotationsvektor mit Rodergues() in Matrix konvertiert. Wie kann ich berechnen und sehen, wie viel es von seiner ersten Position gedreht wird?

Ich habe viele Möglichkeiten ausprobiert, aber Antworten gab keine

EDIT nahe waren: Meine Kamera nur fixiert ist das Objekt bewegt.

Antwort

26

Wir können Euler Winkel von Rotationsmatrix mit folgender Formel erhalten.

ein 3 × 3-Rotationsmatrix

enter image description here

Gegeben

Die 3 Eulerwinkel sind

enter image description here

enter image description here

enter image description here

Hier ist atan2 die gleiche Arcus-Tangens-Funktion, mit Quadrantenprüfung, die Sie normalerweise in C oder Matlab finden.

Hinweis: Vorsicht ist geboten, wenn der Winkel um die y-Achse genau +/- 90 ° beträgt. In diesem Fall sind alle Elemente in der ersten Spalte und der letzten Zeile mit Ausnahme der in der unteren Ecke, die entweder 1 oder -1 ist, 0 (cos (1) = 0). Eine Lösung wäre, die Rotation um die x-Achse um 180 ° zu fixieren und den Winkel um die z-Achse aus: atan2 (r_12, -r_22) zu berechnen.

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

+1

Vielen Dank für Ihre Hilfe .. +1 –

+0

Gibt es auch eine Möglichkeit zu bestimmen, in welcher Reihenfolge diese Rotationen angewendet werden müssen, um diese Matrix zu erreichen? –

7

Wenn R die (3x3) Rotationsmatrix ist, dann wird der Drehwinkel acos sein ((tr (R) -1)/2), wobei tr ( R) ist die Spur von die Matrix (dh die Summe der diagonalen Elemente).

Das ist, was Sie gefragt haben; Ich schätze eine Wahrscheinlichkeit von 90%, dass es nicht das ist, was Sie wollen.

+0

Dies ergibt genau einen Skalarwert entsprechend dem Drehwinkel entlang ** welcher Achse **? –

+1

@ SaravanabalagiRamachandran: Der Eigenvektor der Matrix natürlich. Einfach lösen (** R ** - ** I **) X = 0 für X (wobei X und 0 Vektoren sind). – Beta

0

Lassen R1c und R2c auch die 2 Drehmatrizen sein Sie berechnet haben. Diese drücken die Drehungen von dem Objekt in den Posen 1 bzw. 2 auf den Kamerarahmen aus (daher das zweite c-Suffix). Die gewünschte Rotationsmatrix ist von Pose 1 zu Pose 2, d. H. R12. Um es zu berechnen, müssen Sie das Objekt von pose_1-to-camera und dann von camera-to-pose_2 in Ihrem Kopf drehen. Die letztere Drehung ist die Inverse der pose_2 zur Kamera durch R2c espressed, daher:

R12 = R1c * inv(R2c)

Von Matrix R12 kann man dann den Winkel berechnen und Drehachse Rodiguez-Formel.

1

Für Ihre Referenz, berechnet dieser Code die Euler in MATLAB-Winkel:

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]; 

-Code zur Verfügung gestellt von Graham Taylor, Geoff Hinton und Sam Roweis.Weitere Informationen finden Sie unter here