Morphage de Visages

Morphage de Visages

Christophe Bolduc

Introduction

Le présent document présente le résultat du travail consistant à expérimenter avec la transformation géométrique d'images. La première partie décrit le principe de morphage d'un visage à l'autre. Le même principe est ensuite appliqué à d'autres images. La seconde partie utilise ces transformations pour produire le visage moyen d'une base de données. Finalement, ces moyennes sont appliquées à une image pour produire une masculinisation et une féminisation d'un visage.

Note: Cliquer sur une image l'ouvre en pleine taille, permettant de l'agrandir.

Partie A:

L'algorithme de morphage d'une image à une autre fonctionne de la manière suivante:

  • Les points d'intérets des images sont identifiés
  • Une triangulation moyenne est calculée par fonction de Delaunay
  • Une liste de coefficients de distortion et de fondu est créée pour chaque image de l'animation. Pour chaque paire d'éléments:
    • Pour chacune des deux images (une avec les éléments et l'autre avec (1-élément)):
      • Calcul de la matrice de transformation affine entre les points pondérés et les points originaux pour chaque triangle
      • Identification des pixels dans chaque triangle
      • Calcul de l'intensité de chaque pixel de chaque canal selon l'interpolation de la transformation affine du triangle dans l'image originale
    • Addition des deux images résultantes multipliés par leur coefficient de fondu
    • Enregistrement de l'image
  • Mise en place d'une animation avec chacune des images enregistrées

L'algorithme est implémenté dans le fichier Main_PartieA.py.

L'algorithme appliqué à ma photographie et à la photographie de la prochaine personne de la classe résulte en l'animation suivante:

Image Initiale

Image Finale

Triangulation moyenne

Animation

Image de Futur Bébé Yoda :

Image Initiale

Source

Image Finale

Source

Triangulation moyenne

 

Animation

 

Image de Pizza the Hutt :

Image Initiale

Source

Image Finale

Source

Triangulation moyenne

 

Animation

 

Image du redesign de Sonic :

Image Initiale

Source

Image Finale

Source

Triangulation moyenne

 

Animation

 

Le côté obscure de la force:

Image Initiale

Source

Image Finale

Source

Triangulation moyenne

 

Animation

 

Cousin de la giraffe:

Image Initiale

Source

Image Finale

Source

Triangulation moyenne

 

Animation

 

Des bonhommes SumikkoGurashi (photos personnelles):

Image Initiale

Image Finale

Triangulation moyenne

Animation

Deux oscilloscope (photos personnelles):

Image Initiale

Image Finale

Triangulation moyenne

Animation

L'algorithme produit des animations très convaincantes. Comme attendu, les images ayant des géométries similaires (par exemple l'animation d'Anakin/Darth Vader) donnent d'excellents résultats. Surprenamment, les images avec de grandes différences (par exemple la giraffe) produisent également de très bons résultats. Puisque les arrières plans des images sont négligés dans l'établissement des points de correspondance, la transistion entre ceux-ci est peu convaincante. Ceci pourrait être réglé en choisissant des arrières plans similaires et en sélectionnant des points de correspondance. Finalement, en regardant de près les animations, la délimitation entre les différentes matrices de transformation des triangles peut être identifiée. Augmenter le nombre de points de correspondance permetterait d'éliminer (ou du moins réduire) cet effet non-souhaité.

Image hybride et morphage

L'algorithme peut aussi être appliqué à une image hybride pour obtenir une plus grande correspondance spaciale:

Image Initiale

Image Initiale

Image Hybride Normale

Image Hybride et Morphage

Avec l'image hybride faisant usage de l'algorithme de morphage, il y a moins de 'ghosting' visible, c'est à dire qu'il est plus difficile de remarqué une partie du visage semi-transparente. Le coin inférieur droit du visage est un exemple d'amélioration. Cependant, dans la version déformée, il est plus difficile d'identifier les deux personnalités. Pour cette raison, je considère que la version origniale produit une meilleure illusion.

Partie B

Visage Moyen

L'algorithme de calcul du visage moyen est implémenté de la manière suivante:

  • Mise en place d'une structure de données contenant les points d'intéret de chaque image
  • Calcul des points d'intéret moyens
  • Pour chaque image, calcul de la derformation vers les points d'intéret moyens (algorithme de la partie A adapté à une seule image)
  • Calcul de l'image moyenne des images morphées

L'algorithme est implémenté dans le fichier Main_Visage_moyen.py.

En appliquant l'algorithme du visage moyen sur les photographies des étudiants de la classe avec les points identifiés manuellement par chacun, l'image suivante est obtenue:

Triangulation Moyenne

Visage Moyen

En appliquant l'algorithme aux mêmes images, mais avec des points d'intéret détectés automatiquement à l'aide d'un script fourni, faisant usage de la librairie dlib, le visage moyen suivant est obtenu:

Triangulation Moyenne

Visage Moyen

L'algorithme produit des résultats appréciables, résultant en un visage convaincant. De manière prévisible, l'utilisation des points sélectionnés par les étudiants engendre un centre de visage légèrement plus flou qu'avec l'utilisation des points détectés automatiquements en raison des différences et du manque d'uniformité dans la sélection des caractéristiques. Cependant, la forme supérieur de la tête est mieux défini avec les points sélectionnés par les étudiants, une différence qui pourrait être réglée en modifiant le script de détection des caractéristiques pour identifier des points supérieurs aux yeux.

En appliquant le même algorithme sur les photos de la base de données d'Utrecht en utilisant la détection automatique des caractéristiques, le visage moyen suivant est obtenu:

Triangulation Moyenne

Visage Moyen

Pusique la base de données comporte considérablement plus d'images que ceux de la classe (131 contre 34), les bordures ont moins de coupures secs.

Chaque photographie de la base de données d'Utrecht est dédoublée: une où le sujet sourit et une autre où il ne sourit pas. En appliquant l'algorithme sur les deux groupes indépendamment, les visages moyens suivant sont obtenus:

Visages sans sourire

Visages avec sourires

Comme prévu, le visage moyen obtenu initialement est un entre-deux du visage moyen sans sourire et du visage moyen avec sourire.

Masculinisation et féminisation

La technique de morphage d'images peut être utilisé pour créer une masculinisation ou une féminisation d'un portrait. Cet effet est réalisé de la manière suivante:

  • Calcul d'un visage moyen masculin ou féminin
  • Morphage d'une image d'un visage vers le visage moyen calculé avec des facteurs de fondu et de déformation

Les valeurs des paramètres de morphage sont établies par tâtonnement et l'algorithme est implémenté dans le fichier Masculinisation_feminisation.py.

Visage moyen masculin

Visage moyen féminin

La masculinisation de mon visage produit les résultats suivants.

Image initiale

Masculinisation (wrap_fact = 0.5, dissolve_frac = 0.5)

Masculinisation (wrap_fact = 0.7, dissolve_frac = 0.6)

La feminisation de mon visage produit les résultats suivants.

Image initiale

Feminisation (wrap_fact = 0.5, dissolve_frac = 0.5)

Feminisation (wrap_fact = 0.7, dissolve_frac = 0.5)

Le résultat produit est près de l'effet attendu, mon visage est reconnaissable dans les 4 versions et des traits masculins ou féminins sont intensifiés. Cependant, l'expression sur la photo rend difficile la déformation de "l'anti-sourire" vers le sourire des visages moyens, produisant une bouche peu réaliste.

Analyse en Composantes Principales

L'analyse en composantes principales de l'espace des visages de la base de données de l'Utrecht à été effuctée dans le fichier ACP.py. La fonction PCA de la librairie sklearn a été utilisée pour faciliter l'implémentation. Les 22 images suivantes représentent les vecteurs propres incluant 80% de l'inforamtion des images de la base de données. Les images ont étés transformées en noir et blanc pour alléger le temps de calcul.

Dans ce nouvel espace, chacune des bases peut avoir un coefficient différent pour faire ressortir certains visages. Voici quelques exemple avec les vecteurs propres affectés (fichier ACP_Utilisation.py):

Coefficient vecteur 4 = 1000

Coefficient vecteur 7 = -500

Coefficient vecteur 9 = 1000

Coefficient vecteur 15 = 800

Coefficient vecteur 18 = -1000

Coefficient vecteur 11 = 700

Les 22 images représentent bien des bases de visages de la base de données. Les reconstructions de visages produisent des traits et coupures, semblables à des coups de pinceau, en raison de la perte de 20% des informations initiales en limitant le nombre de vecteurs. Quoique la décomposition des composantes principales s'est faite sur chaque pixel, il serait possible de faire la même procédure sur les listes de points des visages pour pouvoir modifier la géométrie du visage plutôt que l'intensité des pixels.

Mon évolution

J'ai la chance d'avoir un père qui a écrit un journal mensuel depuis ma naissance, je ne manque donc pas de photos pour produire une animation de morphage au travers des années. Les points d'intérets ont été identifiés avec l'algorithme automatique faisant usage de la librairie dlb et les vidéos de morphage ont été formées avec le fichier .py de la Partie A, puis ont étés mises bout à bout sur Premiere Pro. La musique par Kevin MacLeod est disponible sur Youtube Studio.

Cet exemple illustre une situation réelle dans laquelle une telle technique peut être utile.

Image parlante

Cette section décrit l'extraction de caractéristiques d'un visage sur une sequence vidéo pour appliquer ces transformations à une image, obtenant ainsi une image parlante. La séquence suivante (trouvé à https://www.youtube.com/watch?v=QjkkTSFKJco) sera utilisée:

La séquence est décomposée en 138 images, puis le programme utilisant dlib est exécuté pour obtenir les caractéristiques de chaque image. Le fichier image_parlante.py implémente la déformation de l'image de mon visage vers chaque points d'intérets des 138 images de la séquence vidéo. En produisant une vidéo des images résultantes et en ajoutant l'audio original, le résultat suivant est obtenu:

Le résultat est très peu réaliste. Ceci était attendu puisque la vidéo initiale contient plus d'information que l'image déformée, notamment l'intérieur de la bouche. De plus, les mouvements de tête résultent en des étirements de l'image peu convaincant. Malgré tout, il est possible de distinguer, de manière très irréaliste, que l'image parle.

Conclusion

Le morphage d'image, par la transformation de la géométrie, est un outil pouvant produire des résultats surprennants, comme démontré au travers du document. Cependant, malgré son utilité dans certain contextes, la technique a ses limites, comme démontré dans l'image parlante. Toutefois, la technique est un bon exemple de ce qui peut être accompli par la déformation de la géométrie d'images.