Question

Étant donné deux nuages ​​​​de points 3D consécutifs 1 et 2 (pas le nuage entier, disons 100 points sélectionnés dans le nuage avec GoodFeaturesToMatch d'OpenCV), obtenus à partir d'une carte de profondeur Kinect, je souhaite calculer l'homographie de la caméra de 1 à 2.Je comprends qu'il s'agit d'une transformation projective, et cela a déjà été fait par de nombreuses personnes : ici (diapositive 12), ici (diapositive 30) et ici dans ce qui semble être le journal classique.Mon problème est que même si je suis un programmeur compétent, je n'ai pas les compétences en mathématiques ou en trigonométriques pour transformer l'une de ces méthodes en code.Comme ce n'est pas un problème facile, j'offre une grosse prime pour le code qui résout le problème suivant :

La caméra est à l'origine, regardant dans la direction Z, le pentaèdre irrégulier [A,B,C,D,E,F] :camera position 1

La caméra se déplace de -90 mm vers la gauche (X), de +60 mm vers le haut (Y), de +50 mm vers l'avant (Z) et pivote de 5° vers le bas, de 10° vers la droite et de -3° dans le sens inverse des aiguilles d'une montre :camera position 2

Faire pivoter la scène entière pour que la caméra revienne à sa position d'origine me permet de déterminer les emplacements des sommets en 2 :enter image description here

Les fichiers 3DS Max utilisés pour préparer ceci sont maximum 1, maximum 2 et maximum 3

Voici les positions des sommets avant et après, les intrinsèques, etc. :vertices and intrinsics

Notez que les sommets de la caméra 2 ne sont pas précis à 100 %, il y a un peu de bruit délibéré.

voici les chiffres dans un fichier Excel

Le code dont j'ai besoin, qui doit être facilement traduisible en VB.Net ou C#, en utilisant EMGUCV et OpenCV si nécessaire, prend les 2 ensembles de sommets et les intrinsèques et produit ce résultat :

Camera 2 is at -90 X, +60 Y, +50 Z rotated -5 Y, 10 X, -3 Z.
The homography matrix to translate points in A to B is:
a1, a2, a3
b1, b2, b3
c1, c2, c3

Je ne sais pas si l'homographie est 3X3 ou 3X4 pour des coordonnées homogènes, mais elle doit me permettre de traduire les sommets de 1 vers 2.

Je ne connais pas non plus les valeurs a1, a2, etc.c'est ce qu'il faut trouver >;-)

L'offre de 500 primes « remplace » la prime que j'ai offerte à cette question très similaire, j'y ai ajouté un commentaire pointant vers cette question.

EDIT2 :Je me demande si la façon dont je pose cette question est trompeuse.Il me semble que le problème réside davantage dans l'ajustement du nuage de points que dans la géométrie de la caméra (si vous savez traduire et faire pivoter A vers B, vous connaissez la transformation de la caméra et vice-versa).Si tel est le cas, la solution pourrait peut-être être obtenue avec l'algorithme de Kabsch ou quelque chose de similaire.

Pas de solution correcte

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