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
Les 3 angles d’Euler sont
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.