J'ai une caméra (iPhone), j'ai un objet de contrôle 3D dans l'image dont je connais très bien les propriétés. (Mon objet de contrôle). Il y a aussi un objet secondaire en mouvement. Le but ultime est d'établir la trajectoire 3D de l'objet en mouvement pour une période de temps donnée. (Suivi)
J'aime demander, pourrais-je le savoir?
Distance du téléphone à l'objet de contrôle (pour les besoins de la discussion, supposons que la caméra soit à une certaine hauteur et à une certaine distance, aucune d'entre elles n'est connue mais la caméra est perpendiculaire à la surface connue)
L'objet secondaire où je peux localiser l'objet dans chaque trame suivante. Mon objectif est d'estimer sa trajectoire 3D comme je l'ai indiqué plus haut.
Question bonus, nous pouvons rendre le système tel que la distance du téléphone à l'objet de contrôle peut être définie (bien que cela ne soit pas préféré), cela m'aiderait-il avec le deuxième point?
Réponses:
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,Y Z
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,Y Z
La matrice de la caméra est une matrice de projection du monde 3D au capteur d'image:3×4
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).x X
On se souvient que le produit croisé entre deux vecteurs 3 peut être défini comme une multiplication matrice-vecteur telle que:
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:P x
Ah! Le résultat doit être un vecteur nul. Si nous ouvrons maintenant l'équation, nous obtenons:
Avec un peu de refactorisation, nous pouvons obtenir la matrice de projection dehors de la matrice:P
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é.Pn n P
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).
Heureusement, nous pouvons utiliser la décomposition en valeurs singulières (SVD) pour forcer
(Hartley, Zisserman - Géométrie à vues multiples en vision par ordinateur)
Etc.
la source