Question

J'ai 3 points dans un espace 3D dont je connais les emplacements exacts. Supposons qu'il s'agisse de: (x0, y0, z0) , (x1, y1, z1) et (x2, y2, z2) .

J'ai également une caméra qui regarde ces 3 points et je connais l'emplacement 2D de ces trois points sur le plan de la caméra. Ainsi, par exemple, (x0, y0, z0) sera (x0 ', y0') et (x1, y1, z1) être (x1 ', y1') et (x2, y2, z2) sera (x2 ', y2') à partir du point de la caméra de vue.

Quel est le moyen le plus simple de trouver la matrice de projection qui projettera ces points 3D en points 2D sur le plan de vue de la caméra. Nous ne savons rien de l'emplacement de la caméra.

Était-ce utile?

La solution

Ceci vous donne deux ensembles, chacun de trois équations à 3 variables:

a*x0+b*y0+c*z0 = x0'
a*x1+b*y1+c*z1 = x1'
a*x2+b*y2+c*z2 = x2'

d*x0+e*y0+f*z0 = y0'
d*x1+e*y1+f*z1 = y1'
d*x2+e*y2+f*z2 = y2'

Utilisez simplement la méthode de résolution d’équations simultanées qui vous convient le mieux (il n’est même pas difficile de les résoudre "à la main"). Alors votre matrice de transformation est juste ((a, b, c) (d, e, f)).

...

En fait, cela est trop simpliste et suppose une caméra pointant vers l’origine de votre système de coordonnées 3D et aucune perspective.

Pour la perspective, la matrice de transformation fonctionne plus comme suit:

               ( a, b, c, d )   ( xt )
( x, y, z, 1 ) ( e, f, g, h ) = ( yt )
               ( i, j, k, l )   ( zt )

( xv, yv ) = ( xc+s*xt/zt, yc+s*yt/zt ) if md < zt;

mais la matrice 4x3 est plus contrainte que 12 degrés de liberté puisque nous devrions avoir

a*a+b*b+c*c = e*e+f*f+g*g = i*i+j*j+k*k = 1
a*a+e*e+i*i = b*b+f*f+j*j = c*c+g*g+k*k = 1

Donc, vous devriez probablement avoir 4 points pour obtenir 8 équations couvrant les 6 variables pour la position et l’angle de la caméra et 1 plus pour la mise à l’échelle des points de vue 2D, car nous pourrons éliminer le "centre". coordonnées (xc, yc).

Donc, si vous avez 4 points et que vous transformez vos points de vue 2D en rapport avec le centre de votre affichage, vous pouvez obtenir 14 équations simultanées dans 13 variables et les résoudre.

Malheureusement, six des équations ne sont pas linéaires. Heureusement, toutes les variables de ces équations sont limitées aux valeurs comprises entre -1 et 1, il est donc probablement encore possible de résoudre les équations.

Autres conseils

Votre caméra a (au moins) 7 degrés de liberté - 3 pour la position, 3 pour l'orientation et 1 pour le FOV. Je suis sûr que quelqu'un me corrigera si je me trompe, mais il ne semble pas que 3 points suffisent pour une solution complète.

Pour une solution généralisée à ce problème, recherchez "Corrélation de vues" dans Graphics Gems II.

Ce que vous recherchez s'appelle un algorithme d'estimation de la pose. Consultez l'implémentation POSIT sous OpenCV: http://opencv.willowgarage.com /documentation/c/calib3d_camera_calibration_and_3d_reconstruction.html#posit

Vous aurez besoin de quatre points ou plus, et ils ne peuvent pas se situer dans le même plan.

Un tutoriel pour cette implémentation est ici: http://opencv.willowgarage.com/wiki/Posit

Faites attention cependant: dans le tutoriel, une fenêtre carrée est utilisée, ainsi toutes les coordonnées de la vue sont comprises entre -1, -1 et 1,1. Cela laisse supposer que ces éléments doivent se trouver dans le système de coordonnées de la caméra (avant la correction du rapport de format). Ce n'est pas le cas, donc si vous utilisez une fenêtre d'affichage avec par exemple Un rapport hauteur / largeur de 4: 3, alors vos coordonnées en entrée doivent se situer dans la plage -1,3333, -1 à 1,3333,1.

En passant, si vos points doivent se situer dans le même plan, vous pouvez également consulter l'algorithme CameraCalibration de OpenCV, mais cette opération est plus complexe à configurer et nécessite davantage de points en entrée. . Cependant, cela vous donnera également les informations de distorsion et les paramètres intrinsèques de votre appareil photo.

Je ne pense pas qu'il y ait suffisamment d'informations pour trouver une solution définitive. Sans connaître l'emplacement de votre caméra et votre plan de vision, un nombre infini de matrices peuvent résoudre ce problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top