2010-02-03 15 views
10

Dans MATLAB j'ai calculé le Fundamental matrix (de deux images) en utilisant le normalisé Eight point algorithm. De cela, j'ai besoin de triangulate les points d'image correspondants dans l'espace 3D. D'après ce que je comprends, pour ce faire, j'aurais besoin de la rotation et de la traduction des caméras de l'image. Le moyen le plus simple serait bien sûr d'abord de prendre les images, mais c'est trop contraignant pour mon application car cela nécessiterait cette étape supplémentaire. Donc, ça me laisse avec auto (self) camera calibration. Je vois la mention de bundle adjustment, cependant en An Invitation to 3D Vision il semble qu'il nécessite une translation et une rotation initiales, ce qui me fait penser qu'une caméra calibrée est nécessaire ou que ma compréhension est en deçà. Donc, ma question est de savoir comment puis-je automatiquement extraire la rotation/traduction pour que je puisse reprojeter/trianguler les points de l'image dans l'espace 3D. Tout code MATLAB ou pseudocode serait fantastique.Correspondances 3D à partir de la matrice fondamentale

Répondre

8

Vous pouvez utiliser la matrice fondamentale pour récupérer les matrices de caméra et trianguler les points 3D à partir de leurs images. Cependant, vous devez être conscient que la reconstruction que vous obtiendrez sera une reconstruction projective et non euclidienne. Ceci est utile si votre objectif est de mesurer les invariants projectifs dans la scène originale tels que le rapport croisé, les intersections de lignes, etc. mais cela ne sera pas suffisant pour mesurer les angles et les distances (vous devrez calibrer les caméras). Si vous avez accès à Hartley and Zisserman's textbook, vous pouvez vérifier la section 9.5.3 où vous trouverez ce dont vous avez besoin pour passer de la matrice fondamentale à une paire de matrices de caméra qui vous permettra de calculer une reconstruction projective (je crois que la le même contenu apparaît dans la section 6.4 du livre de Yi Ma). Depuis le source code for the book's algorithms is available online, vous pouvez vérifier les fonctions vgg_P_from_F, vgg_X_from_xP_lin et vgg_X_from_xP_nonlin.

+0

J'ai fini par utiliser l'algorithme 12.1 "La méthode de triangulation optimale" dans le livre de Hartley/Zisserman. Calibré les caméras avec "Camera Calibration Toolbox for Matlab" – yxk

1

Si votre 3D espace peut être choisi arbitrairement, vous pouvez définir votre première matrice de la caméra comme

P = [I | 0] 

Pas de traduction, pas de rotation. Cela vous laisserait avec un système de coordonnées défini à partir de la caméra 1. Ensuite, il ne devrait pas être trop difficile de calibrer la deuxième caméra.

+0

Utiliseriez-vous un algorithme comme Ajustement de paquet à partir de là? – yxk

+0

Si possible, je pense que j'essaierais d'utiliser une sorte d'objet d'étalonnage pour trouver la rotation de la deuxième caméra en fonction de la première caméra idéale. Sinon, je suppose que l'ajustement du faisceau serait un bon point de départ. –

+1

Pour effectuer le calibrage, une sorte d'objet d'étalonnage, comme un damier, doit être utilisé.Cela peut toujours être fait avec un objet non calibré mais les résultats ne sont pas aussi bons, sauf si l'on peut extraire un nombre élevé de correspondances * précises *. D'autres lectures, l'ajustement de faisceau est un algorithme qui améliore les résultats d'étalonnage une fois qu'ils existent. – yxk

5

code de Peter Matlab serait beaucoup plus utile pour vous que je pense:

http://www.csse.uwa.edu.au/~pk/research/matlabfns/

Peter a posté un certain nombre de solutions de matrice fondamentale. Les algorithmes originaux ont été mentionnés dans le livre de Zisserman

http://www.amazon.com/exec/obidos/tg/detail/-/0521540518/qid=1126195435/sr=8-1/ref=pd_bbs_1/103-8055115-0657421?v=glance&s=books&n=507846

En outre, pendant que vous y êtes, ne pas oublier de voir la chanson matrice fondamentale:

http://danielwedge.com/fmatrix/

une belle composition dans mon Opinion honnête!