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

La stéréovision, par corrélation


Projet Réalisé par KUBLER Laurent (promo 95)


Description du projet

Le but du projet et de réaliser un programme permettant de calculer la profondeur d'un pixel sur une image. Pour ce faire je dispose de deux images prises de la même scène avec deux caméras placées sous un angle légèrement différent. grâce a un calibrage effectué en prenant en photo une mire dont les coordonné des différents points était parfaitement connue.

Algorithmes utilisés

Je me sers de deux images: une prise par la caméra de gauche, l'autre prise par la caméra de droite. L'algorithme que j'ai utilise fonctionne par corrélation: pour chaque pixel de l'image de gauche il cherche le pixel de l'image de droite dont le voisinage ressemble le plus au sien. Le critère prend en compte la variation de l'intensité des pixels, et non pas l'intensité elle même, pour diverses raisons (ouverture de la caméra, surface qui reflète plus dans une direction que dans l'autre...). Pour limiter le nombre d'erreurs, je suis obligé de fonctionner par corrélation croisée: après avoir trouvé le point de l'image de droite le plus ressemblant, je vérifie que le point de départ est aussi le point qui ressemble le plus au point trouvé. Enfin, une observation géométrique, basée sur les épipoles fait que le point correspondant du point d'une image, ne peut se trouver que sur une droite donné ce qui permet de réduire la dimension de recherche de deux (un plan) à une droite. Cette droite est la projection de la droite partant d'un pixel d'une image, passant par le centre optique de la camera, sur la seconde image.


Résultats obtenus

Mon programme, si il fonctionne pour des images contenant beaucoup de textures (comme un visage), montre ses limites lorsqu'il s'agit d'une image contenant des surfaces lisses. Dans un premier temps, il faut lui fournir les images prises par la camera des mires, de manière à ce qu'il soit possible de calibrer les camera. A partir de là; il est possible de rectifier les images, dans le seul but de simplifier l'écriture du programme. La rectification rend les epipoles horizontales. De plus, l'épipole correspondant à un point d'une image aura la même ordonné que ce point. Voici les deux images de visage rectifiées. *

 



A ce moment là, il devient possible de traiter les images de manière à déterminer la profondeur. L'opération suivante est la corrélation, qui donne pour chacun des points de l'image 1 la disparité.
Il suffit alors de lire le tableau de disparité, pour sortir deux fichiers contenant la liste des pixels se correspondant. Un dernier programme acheve la recontitution.