Stéréoscopie

Reconstruction 3D

Par reconnaissance de contours

 

 


Projet réalisé par Nicolas Godlewski (X96)

 

Description du projet

La stéréoscopie est naturelle pour l'être humain, qui, à partir des informations légèrement différentes fournies par chacun de ses yeux, est capable d'estimer la position d'uin objet dans l'espace. Cela est extrêment utile pour saisir un objet, ou se déplacer enter des obstacles. Il est donc très intéressant, pour un robot, par exemple, d'être capable lui aussi de reconstruire un modèle de son environnement en trois dimensions, à partir d'images venant de deux (ou plus) caméras.

Il existe plusieurs approches à ce problème. On s'intéresse ici uniquement à la mise en correspondance de contours, que l'on aura découpé en segments par l'approximation polygonale. On utilise trois images, au lieu de deux, pour se donner des informations supplémentaires.

 

Algorithmes

La calibration des caméras consiste à trouver, pour une caméra, la matrice projective qui détermine les coordonnées dans l'image en deux dimensions de la projection d'un point de l'espage. C'est une matrice 4x3. Pour la trouver, on utilise une mire, comme celle que l'on peut voir sur les images. Un petit programme permet de détecter dans l'image les points d'intérêts de la mire. Ensuite, on rentre à la main les coordonnées dans l'espace de ces points d'intérêt, que l'on connaît puisqu'on a fabriqué la mire soi même, et on utilise un autre petit programme, qui à partir d'un fichier de point 2D, et d'un fichier de points 3D, donne la matrice projective qui a permis de passer de l'un à l'autre.

Cet algorithme permet de travailler avec de segments, plus facile à manipuler que des contours naturels, sous forme de liste de points.

Prenons un contour quelconque. L'idée de l'algorithme est de prendre comme segment de départ celui rejoignant les deux extrêmités du contour. Pour chaque point, on calcule ensuite la distance de ce point au segment, et on s'intéresse au point le plus éloigné. Si celui-ci est suffisamment proche du segment, on considère que le segment représente une bonne approximation du contour. Si par contre il se trouve au delà d'un certain seuil, on remplace le segment de départ par deux segments, joignant les extrêmités à ce nouveau point d'intérêt, et on recommence récursivement sur les deux nouveaux segments, et les deux moitiés de contour.

Cet algorithme est optimisé pour des contours présentant des arêtes et des angles vifs. C'est pourquoi on a choisi pour le projet des images d'objet relativement réguliers et polygonaux.

La principale difficulté de l'algorithme est de mettre en correspondance les segments des différentes images. Si on prend un segment au hasard dans l'image 1, quel segment de l'image 2 représente la même arête du même objet?

L’algorithme de reconnaissance des segments s’écrit schématiquement de la façon suivante :

On a essayé d'introduire une étape supplémentaire : utiliser la non symètrie de l'algorithme. Ainsi, si D est candidat pour corrrespondre à G, mais que G n'est pas candidat pour D, ce qui est possible, on ne va pas les apparier.

 

Résultats obtenus

Les résultats obtenus, comme on m'en avait averti, sont très décevants.

Voici ce qui est obtenu sans utiliser l'étape supplémentaire (cliquer sur l'image pour l'aggrandir)

Comme on peut le voir, quelques segments sont bien appariés (le 10 ou le 104 entre autres), mais la majorité sont associés n'importe comment. De plus, un même segment de l'image de droite a été associé plusieurs fois, ce qui est anormal. Cela arrive chaque fois qu'un label est illisible : c'est parce que plusieurs nombres sont écrits les uns sur les autres.

En essayant d'ajouter une étape, le résultat n'est cependant pas tellement meilleur :

 

Le résultat n'est pas terrible non plus. On a perdu un grand nombre de segment, dont certains qui étaient bien appariés, et sur ceux que l'on voit, seul le 56 bien apparié.

Je n'ai pas programmé la reconstruction 3D, car la mise en correspondance est trop mauvaise pour donner quoi que ce soit.

 

Limites et améliorations

Les qualités de cette méthode sont sa robustesse et sa rapidité. En effet, on travaille sur un nombre limité de segment (autour de 100), et non pas sur une image entière de 10 ou 100 000 pixel. Pour une image qui se prête à l'approximation polygonale, le résultat doit être très satisfaisant.

Limites

Le problème principal est la calibration des caméras. On s'aperçoit en utilisant xobserve que les épipolaires ne passent pas exactement où elle le devrait. Cela fausse tous les calculs, et c'est pour cela que l'on associe n'importe quoi. Un bon résultat demande une précision énorme, que nous n'avions pas, avec notre mire malheureusement pas aussi précise que belle.

Ainsi lorsqu'on sélectionne un segment parmi les candidats en calculant la distance des épipolaires, cette distance se trouve trop imprécise pour obtenir un bon résultat.

 

Améliorations

Plusieurs améliorations sont possibles

Retour à la liste des projets réalisés