Si votre objet a 6 points connus (coordonnées 3D connues, et Z ), vous pouvez calculer l'emplacement de la caméra par rapport au système de coordonnées des objets.X,YZ
Tout d'abord quelques notions de base.
Coordonnées homogènes est la présentation du vecteur de coordonnées euclidien dans lesquels ont apposé que l' on appelle le facteur d'échelle de telle sorte que la coordonnée homogène est X = ω [ X Y Z 1 ] T . Dans vos propres calculs, essayez de garder ω = 1 aussi souvent que possible (ce qui signifie que vous "normalisez" la coordonnée homogène en la divisant par son dernier élément: X ← X(X,Y,Z)ωX=ω[XYZ1]Tω=1 ). Nous pouvons également utiliser une présentation homogène pour des points 2D tels quex=ω[ X Y 1 ](rappelez-vous que cesω,X,YetZsont différents pour chaque point, qu'il s'agisse d'un point 2D ou 3D). La présentation homogène des coordonnées facilite les calculs.X←Xωx=ω[XY1]ω,X,YZ
La matrice de la caméra est une matrice de projection du monde 3D au capteur d'image:3×4
x=PX
Où est le point sur le capteur d'image (avec des unités de pixels) et X est le point 3D projeté (disons qu'il a des millimètres comme unités).xX
On se souvient que le produit croisé entre deux vecteurs 3 peut être défini comme une multiplication matrice-vecteur telle que:
v×u=(v)xu=⎡⎣⎢0v3−v2−v30v1v2−v10⎤⎦⎥u
Il est également utile de noter que la production croisée .v×v=0
Essayons maintenant de résoudre la matrice de projection partir des équations précédentes. Permet de multiplier l'équation de projection du côté gauche avec la matrice de produits croisés x s:Px
(x)xx=(x)xPX=0
Ah! Le résultat doit être un vecteur nul. Si nous ouvrons maintenant l'équation, nous obtenons:
⎡⎣⎢0w−y−w0xy−x0⎤⎦⎥⎡⎣⎢P1,1P2,1P3,1P1,2P2,2P3,2P1,3P2,3P3,3P1,4P2,4P3,4⎤⎦⎥X=⎡⎣⎢P3,4Wy−P2,1Xw−P2,2Yw−P2,4Ww+P3,1Xy−P2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1Xw−P3,4Wx+P1,2Yw−P3,1Xx+P1,3Zw−P3,2Yx−P3,3ZxP2,4Wx+P2,1Xx−P1,4Wy−P1,1Xy+P2,2Yx−P1,2Yy+P2,3Zx−P1,3Zy⎤⎦⎥=0
Avec un peu de refactorisation, nous pouvons obtenir la matrice de projection dehors de la matrice:P
⎡⎣⎢⎢⎢0Xw−Xy0Yw−Yy0Zw−Zy0Ww−Wy−Xw0Xx−Yw0Yx−Zw0Zx−Ww0WxXy−Xx0Yy−Yx0Zy−Zx0Wy−Wx0⎤⎦⎥⎥⎥⎡⎣⎢⎢P1P2P3⎤⎦⎥⎥=0
Où est la transposée de n -ième ligne de la matrice de la caméra P . La dernière ligne de l'équation de matrice précédente (grande) est une combinaison linéaire des deux premières lignes, elle n'apporte donc aucune information supplémentaire et peut être laissée de côté.PnnP
Petite pause pour que nous puissions rassembler nos durs. Notez que l'équation de matrice précédente doit être formée pour chaque correspondance 3D-> 2D connue (il doit y en avoir au moins 6).
2×12A
A⎡⎣⎢P1P2P3⎤⎦⎥=0
⎡⎣⎢P1P2P3⎤⎦⎥=0
Heureusement, nous pouvons utiliser la décomposition en valeurs singulières (SVD) pour forcer
∥⎡⎣⎢P1P2P3⎤⎦⎥∥=1
AP[P1P2P3]TP
P
P=K[R−RC]
CPP
(Hartley, Zisserman - Géométrie à vues multiples en vision par ordinateur)
X
x1=P1Xx2=P2X
(x1)xP1X=0(x2)xP2X=0
Etc.