cvreprojectimageto3d-modélisation 3d à partir d'images 2d-

j'ai vraiment besoin de votre aide. j'essaie de modéliser une scène simple en 3d à partir d'images 2d. j'utilise 2 images (à gauche et à droite-la célèbre scène de tsukuba) http://www.cc.gatech.edu/classes/AY2003/cs7495_fall/ProblemSets/Data/tsukuba-right.bmp je reçois une disparité de la carte. comme celui-ci. http://www.robots.ox.ac.uk / ~ojw/2op / tsukuba_score.png

après ici, j'ai quelques questions. je pense que les étapes devraient être:

cvStereoRectify ( pour obtenir Q) cvreprojectiftimageto3d (carte des disparités, 3dimage , Q )

mais je ne sais pas quoi passer comme entrées dans stereoRectify Je n'ai que 2 images, je n'ai aucune information sur les caméras. (peut-être que je peux utiliser stereoRectifyUncalibrated à la place, si oui comment puis-je?)

s'il vous plaît aider merci

3
demandé sur ardavar 2011-07-19 12:11:06

1 réponses

extrait de opencv doc :

" la fonction stereoRectify calcule les matrices de rotation pour chaque caméra qui (virtuellement) font les deux plans d'image de la caméra le même plan. Par conséquent, cela rend toutes les lignes épipolaires parallèles et simplifie ainsi le problème de correspondance stéréo dense. En entrée la fonction prend les matrices calculées par stereoCalibrate () et en sortie elle donne 2 matrices de rotation et aussi 2 matrices de projection en les nouvelles coordonnées. "

réponse:

cela signifie 3 options :

  • ou vous avez deux images et vous connaissez le modèle de votre appareil photo (intrisics) que vous avez chargé à partir D'un XML par exemple loadXMLFromFile() => stereoRectify () = > reprojectImageTo3D()

  • Ou vous ne les avez pas, mais vous pouvez calibrer votre appareil = > stéréocalibrate () = > stéréorectify () = > reprojectImageTo3D()

  • ou vous ne pouvez pas calibrer l'appareil photo (c'est votre cas, parce que vous n'avez pas l'appareil photo de Monsieur Tsukuba, puis : vous devez trouver des points de touches de paire sur les deux images avec SURF, SIFT par exemple (vous pouvez utiliser n'importe quel détecteur de blob en fait), puis calculer des descripteurs de ces points de touches, puis correspondant points de touches de l'image droite et l'image gauche selon leurs descripteurs, et puis trouver le tapis fondamental d'eux. Le traitement est beaucoup plus difficile et serait comme ceci: detect keypoints (SURF, SIFT) = > extract descriptors (SURF, SIFT) => compare and match descriptors (BruteForce, Flann based approaches) => find fundamentalmat ()) from these pairs => stereorectifuncalibrated () = > reprotimageto3d()

j'espère que cela vous a aidé, sinon, s'il vous plaît, laissez-moi savoir

Julien,

12
répondu jmartel 2011-07-19 21:26:46