TP3: Morphage de visages

Partie A: Algorithme de morphage

Fichiers pincipaux: main_morph.m

Fonctions utilisées: morph.m et morph2tri.m

Afin de réaliser le morphage des images, la fonction calcule les points de la triangulation intermédiaire et trouve la transformation entre chacun des triangles de l'image 1 et 2. Les images 1 et 2 sont ensuite mappé sur l'image intermédiaire avec la tranformation inverse en interpolant les pixels de l'image source. L'interpolation est répété 3 fois pour obtenir les canaux R,G et B.

Sur les 6 premiers GIFs, on constate des effets de cords assez dérangeant. Ceci est du à la fonction interp2 qui renvoit un nan lorsque le pixel demandé doit être extrapoler si l'option 'bilinear' est utilisée (par défaut). Ce problème à été corrigé dans les 2 derniers GIFs. Pour regler ce problème, il aurait été possible d'utiliser l'option 'spline' de interp2, mais une autre solution à été implanté. Tout d'abord, l'algorithme trouve l'emplacement des nan dans l'image est les remplace par 0. Ensuite, cette image est filtrée par un filtre gaussian de variance élevé. Finalement, les pixels identifiés comme des nan sont remplacés par la valeur de l'image filtrée. Ceci permet de faire l'interpolation sur ces points.

Lorsque les images sont assez différentes, l'effet est peu réussi (voir marios). Certaines parties semblent sortir de nulle part car certaines parties ne sont pas dans les deux images (second oeil, partie de la main, etc.). Lorsque les images sont semblable (marteaux, visages), l'effet est reussi car la triangulation fait du sens.

Partie 1B: Calcul du "visage moyen"

Fichier pincipal: main_meanface.m

Fonctions utilisées: morph2tri.m, detect_landmark_call.m

Afin de réaliser le visage moyen, la triangulation moyenne est calculé. Ensuite, chaque visage est déformé vers la triangulation moyenne et sont moyennées. Il s'agit du même algorithme que la partie A appliqué sur une seule image (équivalent à moprh avec dissolve = 0)

Visage moyen de la classe

Forme du visage moyen de la classe

Visage moyen de la classe (dlib):

Forme du visage moyen de la classe (dlib):

Visage moyen utrecht:

Forme du visage moyen utrecht:

Visage moyen utrecht (sourire):

Visage moyen utrecht (sans sourire):

Forme du visage moyen utrecht (sourire):

Forme du visage moyen utrecht (sans sourire):

Si on compare les visages moyens avec les points de la classe et les points avec dlib ont constates des différences. Tout d'abord, les cheveux ne sont pas définis avec dlib. On obtient donc des cheveux moyens plus définis. Par contre, dlib permet d'obtenir une meilleure bouche moyenne. Sur les formes moyennes, on constate que les points sont très concentrés dans le milieu du visage tandis que ceux de la classe sont plus répartis autour du visage.

Pour la base de donnée d'Utrecht, on constate que le visage moyen est très bien défini. La forme du visage est différentes de celle de la classe mais on constate la même moustache grisatre. Le reste de la forme est très similaire.

Pour les visages avec et sans sourire, on voit bien la différence sur la bouche et le reste du visage est identique. On voit également les faucettes dans les joues, ce qui indique un sourire.

Partie 2B: Masculinisation et féminisation de votre visage

Fichier pincipal: main_facetform.m

Fonctions utilisées: morph.m, detect_landmark_call.m

Afin de modifier le visage, la fonction morph est utilisé avec une image de visage moyen. Ensuite, on ajuste les facteurs alpha de warp et de dissolve.

Le paramètres de wrap et de dissolve a été varié entre 0.1 et 0.5 pour les 9 images ci dessous. On constate que seulement modiifer la forme du visage n'est pas assez pour donner l'effet souhaité. Lorsqu'on augmente le fondu des couleurs, on constate bien la féminisation. Ceci est probablement du à la barbe qui disparait avec le fondu.

Le paramètres de wrap et de dissolve a été varié entre 0.1 et 0.6 pour les 9 images ci dessous. La masculinisation est plus difficile à obtenir puisque le visage est déjà masculin... Seule la dernière ligne à un effet intéressant. Le visage à l'air plus agé mais il est assez déformé par rapport à celui original. On ne dirait plus vraiment la même personne.

L'alignement de l'image moyenne des sourires et mon image n'est pas parfait, alors le cou ralouge durant la tranformation. Par contre, on voit bien le sourire apparaitre sur le visage.

Animation sourire (F5 pour relancer):