Comment calculer l’angle de la masortingce de rotation

J’utilise deux images de l’object unique. L’object est déplacé à un certain degré depuis sa première image.

J’ai calculé la POSE de chaque image et converti le vecteur de rotation en masortingce à l’aide de Rodergues (). Maintenant, comment puis-je calculer et voir combien il est tourné de sa première position?

J’ai essayé beaucoup de manières mais les réponses étaient non étaient proches

EDIT: Ma caméra est fixe, seul l’object est en mouvement.

Nous pouvons obtenir des angles d’aulier à partir d’une masortingce de rotation en utilisant la formule suivante.

Étant donné une masortingce de rotation 3 × 3

entrez la description de l'image ici

Les 3 angles d’Euler sont

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

Ici atan2 est la même fonction d’arc tangente, avec la vérification de quadrant, que vous trouvez généralement en C ou Matlab.

Remarque: Des précautions doivent être sockets si l’angle autour de l’axe des y est exactement +/- 90 °. Dans ce cas, tous les éléments de la première colonne et de la dernière ligne, à l’exception de celui situé dans le coin inférieur, qui correspond à 1 ou -1, seront 0 (cos (1) = 0). Une solution serait de fixer la rotation autour de l’axe des x à 180 ° et de calculer l’angle autour de l’axe des z à partir de: atan2 (r_12, -r_22).

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

Si R est la masortingce de rotation (3×3), l’angle de rotation sera alors acos ((tr ( R ) -1) / 2), où tr ( R ) est la trace de la masortingce (c’est-à-dire la sum des éléments diagonaux ).

C’est ce que vous avez demandé; J’estime 90% de chance que ce ne soit pas ce que vous voulez.

Pour votre référence, ce code calcule les angles d’Euler dans MATLAB:

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 fourni par Graham Taylor, Geoff Hinton et Sam Roweis. Pour plus d’informations, voir ici

Soit R1c et R2c les 2 masortingces de rotation que vous avez calculées. Ceux-ci expriment les rotations de l’object dans les poses 1 et 2 respectivement au cadre de la caméra (d’où le deuxième suffixe c). La masortingce de rotation souhaitée va de la pose 1 à la pose 2, c’est-à-dire R12. Pour le calculer, vous devez faire pivoter, dans votre esprit, l’object de pose_1 à caméra, puis de camera-à-pose_2. Cette dernière rotation est l’inverse de la pose_2 à la caméra exprimée par R2c, d’où:

R12 = R1c * inv(R2c)

À partir de la masortingce R12, vous pouvez ensuite calculer l’angle et l’axe de rotation à l’aide de la formule de Rodiguez.