Matrice d'étalonnage de la caméra Comment faire?
-
27-09-2019 - |
Question
Avec cette Boîte à outils J'effectuait l'étalonnage de mon appareil photo.
Cependant, la boîte à outils sort des résultats sous forme de matrice et, en tant que noob, je ne comprends pas vraiment les trucs mathématiques.
La matrice est sous la forme suivante.
Lorsque R est une matrice de rotation, T est un vecteur de traduction.
Et ce sont les résultats que j'ai obtenus de la boîte à outils. Il produit des valeurs en pixels.
-0.980755 -0.136184 -0.139905 217.653207
0.148552 -0.055504 -0.987346 995.948880
0.126695 -0.989128 0.074666 371.963957
0.000000 0.000000 0.000000 1.000000
En utilisant ces données, puis-je savoir combien mon appareil photo est tourné et la distance de l'informatique de l'objet d'étalonnage?
La solution
La partie de distance est facile. La traduction de l'origine est donnée par les trois premiers nombres de la colonne la plus à droite. Cela représente respectivement la traduction dans les directions x, y et z. Dans votre exemple, la position de la caméra p = (pX, Py, Pz) = (217.653207, 995.948880, 371.963957). Vous pouvez prendre la distance euclidienne entre l'emplacement de la caméra et l'emplacement de l'objet d'étalonnage (CX, Cy, Cz). C'est ce serait juste sqrt ((pX-CX)2 + (py-Cy)2 + (pz-Cz)2 )
La partie la plus difficile concerne la rotation qui est capturée dans les éléments 3X3 supérieure gauche de la matrice. Sans savoir exactement comment ils sont arrivés à cela, vous avez un peu de chance. C'est-à-dire qu'il n'est pas facile de convertir cela en Angles d'Euler, si c'est ce que tu veux. Cependant, vous pouvez transformer ces éléments en un Rotation du quaternion Ce qui vous donnera le vecteur d'unité unique et l'angle pour faire pivoter la caméra à cette orientation. Les spécificités du calcul sont fournies ici. Une fois que vous avez la rotation du quaternion, vous pouvez facilement l'appliquer aux vecteurs n = (0, 0, 1), up = (0, 1, 0) et à droite = (1, 0, 0) pour obtenir la normale (direction La caméra est pointée), les vecteurs de haut en bas. Le vecteur droit n'est utile que si vous êtes intéressé à courir la caméra à gauche ou à droite à partir de sa position actuelle.
Autres conseils
Je suppose que le code utilise le 'la norme'Formation - alors vous trouverez plus de détails dans le Docs de la bibliothèque OpenCV ou leur livre.