Utiliser la matrice fondamentale pour calculer la translation des coordonnées en utilisant OpenCV

j'essaie de calculer la correspondance des coordonnées de plusieurs points entre deux images. J'ai un groupe de points dont les correspondances sont connues, je les utilise avec le findFundamentalMatrix() D'OpenCV pour trouver la matrice fondamentale. J'ai vérifié que x^T * F * x' = (0) pour chaque point, et le résultat est toujours juste ou très proche.

La chose est, maintenant, je voudrais utiliser les coordonnées d'un point sur la première image ( y ) et la matrice fondamentale ( F ) afin de trouver les coordonnées du point sur la deuxième image ( y' ). J'ai d'abord pensé à utiliser simplement l'équation ci-dessus, mais étant donné seulement le z du y' point, il peut y avoir une infinité de solutions .

Comment puis-je utiliser la matrice fondamentale pour calculer les traductions ?

pour être plus clair: connaître la matrice fondamentale "reliant" deux projections, Comment puis-je l'utiliser pour traduire les coordonnées de n'importe quel point connu (a, b, 1) de la première projection à la deuxième projection?

considérant que nous connaissons a , b et F dans cette équation: (a', b", 1) T * F * (A, b, 1) = (0)

j'avais fait un dessin simple comme exemple: http://i.imgur.com/drNr2.jpg . L'idée est de trouver les coordonnées du point rouge (xq, yq) dans la projection 2, étant donné que nous connaissons ses coordonnées dans la projection 1 et celles de tous les autres points dans les deux projections (et quelques autres comme l'algorithme pour trouver la matrice fondamentale nécessite en fait au moins 8 points)

autre précision: dans mon exemple, les points connus sont coplanaires, mais le point recherché ne le sera pas nécessairement.

j'espère que cela a rendu mon problème plus clair :)

5
demandé sur Community 2012-04-30 19:38:27

2 réponses

la matrice fondamentale transforme les points d'une image en lignes dans l'autre. Pourriez-vous nous en dire plus sur

Comment puis-je utiliser la matrice fondamentale pour calculer les traductions?

s'il vous plaît. Nous dire ce que vous voulez accomplir peut-être avec un exemple aiderait aussi.

Modifier : Si vous avez calibré l'appareil photo vous pouvez calculer la matrice essentielle, E , de la matrice fondamentale, F . E transforme un point d'une image en un point de l'autre. Mais bien sûr, l'exigence est d'avoir la matrice interne. Si K est la matrice interne E=transpose(K)FK . L'autre méthode consiste à trouver la ligne correspondante pour un point dans l'autre image, puis à rechercher le patch le plus proche en apparence du patch entourant le point dans la première image. Il ya d'autres façons aussi, mais vraiment besoin de plus des informations sur le problème à dire qui convient à votre cas.

Edit 2 : dans le dessin vous avez les points sont coplanar. Par conséquent, une homographie établit la position des points entre les deux images, et il n'est pas nécessaire de trouver la matrice fondamentale. OpenCV a une fonction d'estimation des homographies, qui n'a besoin que de quatre points.

3
répondu fireant 2012-04-30 18:23:13

vous pouvez utiliser F pour calculer une ligne épipolaire l ( L = Fa) dans la deuxième image pour chaque point intéressant a dans la première image, et ensuite vous pouvez trouver le meilleur point correspondant b sur l avec la plus haute corrélation avec le point a.

2
répondu Marina Tolkachov 2016-03-20 02:09:54