Majeure "Mathématiques et Informatique"
Enseignement d'approfondissement
"Images: Analyse et Synthèse"

Reconstruction Stéréo

Projet Réalisé par Grégory Massal(promo 97)

Visitez ma page web:
Grégory Massal

Récuperez le rapport complet au format pdf:
stereovision.pdf (1,53 Mo)

 

Description du projet

 Il s'agit à partir d'une série de 3 vues distinctes d'une même scène 3D, de reconstruire cette scène. Pour cela on extrait les contours des images, sous forme de segments puis on tente d'apparier ces segments trois à trois, ce qui par triangulation donne le segment d'origine en 3D.

cliquez sur les images pour les afficher en grand.

 

Résultats obtenus

Les résultats sont assez peu spectaculaires, le programme tourne longtemps pour un résultat peu parlant. J'ai passé plus de temps à écrire mes fonctions et à les déboguer qu'à pouvoir jouer avec les paramètres pour voir où se posaient les problèmes de la détection proprement dite. Le projet gagnerait à être revu en partie et à être grandement optimisé.

Ceci est une capture d'écran d'une reconstitution 3D sous Geomview de l'image de départ.
La scène est à peu près reconnaissable. (cliquez sur l'image pour un agrandissement)

Par contre dès que l'on dévie un peu du point de vue des images de départ,
on se rend compte que la reconstruction est loin d'être parfaite..
Sur cette image on commence à avoir du mal à reconnaitre l'image originale.

Le temps m'a manqué pour déterminer si ce genre de problème est lié à une mauvaise détection des contours, à une mauvaise définition de la géométrie des caméras dès le départ (bien que les matrices de projection aient été fournies au départ), à des erreurs dans le processus de reconstruction proprement dit, où à la sélection des appariements qui étaient mauvaise.

 

Techniques utilisées et problèmes rencontrés

- Une grande partie du temps imparti a servi à apprendre à programmer en C/C++, ce qui était nouveau pour moi. Heureusement, mes expériences précédentes en caml, java et pascal m'ont un peu aidé, même si finalement j'ai passé beaucoup de temps sur ce point notamment lors du déboguage.

- La détection de contour s'est faite sans trop de problème, je disposais des algorithmes nécessaires grâce à un programme réalisé précédemment: il s'agissait de rechercher les points de contour aux maximums du gradient dans la direction du gradient. Le découpage des contours se fait par un algorithme de "split/merge" qui doit s'assurer que les segments soient suffisamment grands pour assurer une bonne reconstruction et en même temps assez fidèles à la courbe originale.

- Le choix des meilleurs appariements se fait par une combinaison de relaxation où l'on commence à supprimer les appariements les plus faibles, tendant vers l'unicité pour chaque segment et la recherche d'un sous-graphe maximal d'un graphe composé des appariements possibles.

- Le principal problème rencontré a été le temps, je crois: les séances de TD étaient largement insuffisantes pour réaliser le travail et la majorité de la programmation s'est faite en dehors des crénaux, mobilisant quelques week-ends et les vacances de Noël.


Partner websites : LEGREG | GRAPHICS | GRAPHISME | PHOTOGRAPHY | OUT OF MY MIND | ANIMATION MENTOR | GREEN LIVING | VOXEL | RAY TRACING