RECONSTRUCTION 3D

méthode : corrélation binocculaire

Projet Réalisé par Jean-Jacques PARMENTIER (promo 96)


Description du projet

    A partir de deux images photographiques d'un visage sous deux angles différents, le projet consiste à reconstruire le visage en trois dimensions.
    L'appariement par une méthode de corrélation ne marche bien que sur des objets suffisemment diffusants puisque l'on compare des luminosités et des variances. Un visage est un bon candidat.
 
    Le traitement des données se fait en quatre étapes.
1 :  Acquisition des images à l'aide d'un appareil photo numérique
    Nous photographions un visage et une mire qui sert à calibrer l'appareil photo.
2 :  Rectification des images pour obtenir des épipolaire horizontales
3 :  Calcul des cartes de disparité pour chaque image, conservation des disparités communes, puis filtrage des erreurs.
4 :  Construction d'un fichier de points 3 dimensions lisible par geomview.

Algorithmes utilisés

1 : La calibration se fait à partir des programmes proposés par Regis Vaillant.
    Avec calib_single puis cal_camera on obtient les matrices de projection perspective des deux images.

2 :  La rectification a pour intéret de ne pas avoir à parcourir les épipolaires lors du calcul des coefficients de correlation .
    Algorithme :
    a) A partir des matrices de projection perspective, calculer les coordonnées des centres optiques des deux images.
    b) Calculer l'équation du plan de rectification qui doit  etre parallèle à l'axe formé par ces deux centres optiques, et parallèle à la droite d'intersection des plans contenant les deux images.
    c) Projeter  les 4 coins des deux images sur ce plan et déterminer la position et le cadrage des images rectifiées.
    d) Partir de chaque pixel de l'image rectifiée et retrouver son antécédent sur les images de départ. Comme on ne tombe pas sur des valeurs entières de pixels, on effectue une interpolation.
    e) Recalculer les nouvelles matrices de projection perspective, utiles pour la reconstruction 3D finale.

3 : Pour chaque pixel d'une image, on calcule la corrélation d'un voisinage de ce pixel avec le meme voisinage de tous les pixels de l'horizontale correspondante sur l'autre image.  On retient alors la disparité pour laquelle la corrélation est maximale.  On effectue en meme temps ce calcul dans l'autre sens, de la deuxième image vers la première.
    Enfin on conserve les disparités qui correspondent sur ces deux calculs.
    Le critère de corrélation est un critère de variance.
 
    On obtient des erreurs de corrélation en dehors du visage. Nous éliminons ces erreurs à l'aide d'un filtre : nous partons des bords de l'image en supposant que nous sommes hors du visage. Nous testons si nous sommes arrivés sur le visage alors on change de ligne, sinon nous imposons une disparité lointaine arbitraire et nous nous rapprochons du centre du visage..

4 : Avec la correspondances des pixels d'une image à l'autre, on peut reconstruire les coordonnées 3D en calculant l'intersection des droites passant par les pixels associés et par les centres optiques.
    Il suffit alors d'une triangulation simple pour visionner dans geomview.

Résultats obtenus

1 : La calibration correspondant aux images que nous avons prises ne nous donne pas une bonne correspondance des epipolaires.
        Images de départ    : 

2 : Puis après rectification : 
     Le fichier de points de mire étant mauvais, les images obtenues ne sont pas exploitables correctement. J'ai donc utilisé les fichiers rectifiés de Régis Vaillant pour la corrélation.

                                           
3 :  La carte de disparité obtenue est :                            puis après avoir complété les vides :
                     

4 : Enfin l'objectif final est atteint :
                                        
 

Problèmes rencontrés et solutions apportées

1 : La mire doit avoir des contours bien définis et  les deux grilles doivent etre perpendiculaires et ne  pas etre en contact. Elle doit etre rigide et suffisamment grande.
    L'idéal aurait été d'avoir deux appareils photos numériques afin de prendre  les deux points de vues à la fois, d'abord avec la mire puis avec le visage. Le visage est trop petit sur notre image.
2 : Pour la rectification, la position exacte du plan de rectification n'a pas d'importance puisque nous réalisons un recadrage.
    Attention à la prise de vue : la rectification ne marche pas si les épipoles sont sur les images.
3 : Le calcul de correlation prend énormément de temps.  On peut ne pas effectuer deux fois les calculs :
    Pour une ligne de pixel (après rectification), on conserve en mémoire les coefficients de corrélation calculés entre 1 pixel de la première image et un pixel de la deuxième image. Ainsi, lorsque toutes les disparités de la ligne sur la première image ont été calculées, celles de la deuxième image vers la première s'obtiennent immédiatement.
4 : Il est quasiment impossible que lors du calcul de la reconstruction 3D, les deux droites issues des pixels en correspondance se croisent réellement.
    Comme nous connaissons les équations de ces deux droites sous la forme d'intersection de deux plans, on calcul l'intersection de chaque droite avec un des deux plans de l'autre droite et on prend le barycentre des points obtenus.


Retour à la liste des projets réalisés