TP3: Morphage de visages

Algorithme de morphage

La première partie de ce travail consistait à prendre une photo de mon visage, et de générer une animation d'une transition de mon visage vers le visage d'une autre personne.

L'algorithme permettant d'effectuer cette tâche était déjà en grande partie prédéfinie :

  1. Définir les correspondances
  2. Calculer une triangulation
  3. Créer le morphage:
    1. Calculer la transformation affine des triangles
    2. Calculer le fondu des couleurs

Correspondances

Pour la partie définir les correspondances, une ébauche de code était déjà fournie sur le site du cours. Il fallait cependant s'assurer que les points choisies correspondent l'un à l'autre. Autrement dit, si le premier point de l'image 1 correspond au centre d'un oeil, je m'attends à la même chose du premier point de la seconde image.

J'ai par la suite calculé une moyenne entre les 2 images et ai ajouté des points aux quatres coins des images afin d'avoir au final une image complète, et non pas seulement un visage.

Triangulation

Pour cette partie du travail, j'ai utilisé la fonction delaunay de Matlab. Mon code calcule cette triangulation à partir de la moyenne des points fournies.

Morphage

Transformation affine

Pour chaque triangle de ma triangulation, j'ai calculé sa matrice de transformation vers les triangles de mes images de départ. Cette opération est simple dans Matlab : l'opérateur "slash" (/) effectue cette tâche pour nous.

Le fondu des couleurs

Pour ce calcul, j'ai simplement trouvé tous les points se situant dans le triangle courant. J'ai ensuite appliqué les transformations calculés précédemment à chacun de ses points afin de trouver sa coordonné correspondante dans les images précédantes. Finalement j'ai eu à interpolé à l'aide de la fonction interp2 afin de trouver la couleur de mon pixel.

Résultat


Le résultat est très satisfaisant. Le tout est d'une grande fluidité.

Visage moyen

Méthode

Pour cette partie du travail, j'ai procédé avec mon algorithme utilisé précédemment. J'ai calculé ma triangulation avec la moyenne de tous les points de toutes les images, et j'ai envoyé mes images à mon algorithme.

Mon algorithme est un algorithme du type diviser pour régner. C'est-à-dire que je divisait mon tableau d'images en 2 jusqu'à mes cas de bases : où je n'ai qu'une ou 2 images, puis j'appliquait mon algorithme de morphage aux images résultantes des cas précédant.

Résultat


Le tout s'est bien déroulé. Les yeux de tous sont au bon endroit ainsi que la majorité des points. Le chandail est un peu flou car il n'y avait aucun points dans cette zone. Nous avons obtenu un visage masculin, avec une courte barbe brune, ainsi que des cheveux brun. Cela s'explique par une majorité de sujet mâle brun dans la classe.

Crédits supplémentaires : retouche de photos

Mise en situation

J'ai travaillé pendant longtemps sur une ferme. Travailler avec des animaux peut parfois s'avérer dangereux. Je n'ai pas toujours été à l'abri de ces dangers. Le gif suivant illustre assez bien un accident qui m'est arrivé :


Depuis ce temps, je suis complexé par mon nez croche. J'ai donc décidé de me redresser le nez grâce à mon algorithme de morphage.

Méthode

Sur ma photo, j'ai pris une dizaine de points tous le tour de mon nez. J'ai ensuite repris une série de points, plus à droite sur l'image, à l'endroit où je voulais mon nez. Finalement, j'ai donné ces points à mon algorithme, en donnant 2 fois ma photo en entré, et la deuxième série de points à l'arrivé.

Résultat

On a ici le résultat de 2 essaies. La première photo étant la photo de départ. La seconde photo a redressé le millieu de mon nez, mais pas le bas. La troisième photo montre un nez plus droit, mais mon oeil gauche n'est plus aligné avec l'autre.

Je peux donc conclure ce test comme étant positif à condition de connaître exactement la position d'arrivé des points.