TP3: Morphage de visages

Par Pierre-Marc Levasseur

Description

Le but du projet était d'implémenter un algorithme de morphage que nous allions utiliser pour générer des animations de transformations entre différents visages ou objet. Cet algorithme de morphage sera aussi utilisé pour créer des visages moyens à partir d'une banque d'image. Les techniques et les algorithmes que j'ai développé sont décris dans les sections suivantes.

Algorithme de morphage

Description de l'algorithme

J'ai implémenter l'algorithme de morphage tel que décris dans l'énoncé (avec quelques modifications) avec les paramètre suivant : I1 (image source),I2 (image de destinaiton), Ipts1 (points source), Ipts2 (points destination), TRI (triangulation entre les images), warp_frac (pour calculer la forme intermédiaire, dans l'intervalle [0,1]) et dissolve_frac (pour calculer la couleur intermédiaire, dans l'intervalle [0,1]. Voici les grandes lignes de l'algorithme : je calcul tout d'abord la forme intermédiaire selon la valeur du paramètre warp_frac en utilisant la valeur suivante:

formeIntermédiaire = (1 - warp_frac) * Ipts1 + warp_frac * Ipts2

Ensuite, pour chacun des triangles de la triangulation TRI, je récupère le triangle correspondant dans l'image source, l'image de destination et dans la forme intermédiaire. Je calcul la matrice de transformation pour passer du triangle de l'image source vers le triangle intermédiaire et celle pour passer du triangle de l'image de destination vers le triangle intermédiaire en utilisant le système d'équation suivant:

T = B * A-1

où :

A = Matrice 3 par 3 où les deux premières lignes correspondent aux points (x,y) des sommets du premier triangle et où la dernièr ligne ne contient que des 1.

B = Matrice 3 par 3 suivant la même logique que la matrice A, mais pour le deuxième triangle.

T = Matrice de transformation pour passer du premier au deuxième triangle.

Je sauvegarde ainsi l'inverse de toutes les matrices de transformations dans une liste. Deuxièmement, pour chacun des pixels des images intermédiaires (source et destination), je récupère le triangle dans lequel le pixel est à l'aide de la triangulation TRI et de la fonction mytsearch. Je calcul la couleur des pixel avec les matrices de transformations inverses.

Finalement, je calcul l'image morphée intermédiaire avec la même formule que j'ai utilisée pour calculer la forme intermédiaire, mais en remplaçant le paramètre warp_frac par le paramètre dissolve_frac.

Résultats

Pour faire cette séquence vidéo, j'ai généré 90 images intermédiaires avec mon algorithme. La transformation de la forme du visage est linéaire du début à la fin tandis que la transformation des couleurs commence à partir de la 30e image et elle est ensuite linéaire.

Voici différents résultats que j'ai produit sur d'autres images. Tous les résultats suivants sont des GIF animés de 30 images où la couleur commence à changer à partir de la 10e image. Il faudra recharger la page pour voir l'animation ou télécharger le gif.

Voici les résultats utilisant mes photos.

Crédits supplémentaires

J'ai repris les images de Einstein et de Marilyn Monroe pour faire des images morphées hybride. J'ai donc fait deux animations et une image intermédiaire. Le résultat est moins convainquant que les images hybrides produites au dernier travail pratique puisque les détails des deux images sont très bien alignés et déformé. De plus, le résultat est généralement plus sombre puisqu'on ne fait pas la somme des deux images, mais on les combine selon un certain facteur. Pour produire l'image intermédiaire, j'ai combiné à 50% les formes des deux images, j'ai mis 60% des couleurs de l'image de Einstein et 40% des couleurs de l'image de Marilyn Monroe.

Calcul du visage moyen

Description de l'algorithme

Pour faire les visages moyens, j'ai réutilisé le coeur de l'algorithme de morphage avec quelques modifications pour qu'ils soient en mesure de combiner plusieurs images plutôt que seulement deux. Voici les grandes lignes de l'algorithme: j'ai tout d'abord précalculer les formes moyennes des visages en faisant la sommes de tous les points et en divisant le total par le nombre d'images. J'ai donc sauvegardé le résultat de ces calculs (moyennes des points sélectionnés et moyenne avec le détecteur de visage) dans des fichiers textes. Ensuite, pour faire la moyenne des visages, l'algorithme charge la forme moyenne que je veux utiliser et calcul une triangulation avec celle-ci. Il boucle ensuite sur toutes les images à combiner et utilise l'algorithme de morphage pour créer et combiner les images intermédiaires. à la sortie de la boucle, l'algorithme fait la moyenne des images en divisant la sommes de toutes les images combinées par le nombre d'image total.

Résultats

Voici le résultat que j'ai obtenu avec les points sélectionnés par mes camarades. Le visage moyen résultant est un peu tordu. Je crois que les points n'étaient pas tous parfaitement sélectionnés ce qui à causé ces déformations. On peut voir dans la forme moyenne à droite que la bouche est bizarrement positionné et que certains triangles ont des formes étranges.

En utilisant le détecteur de visage, le résultat est beaucoup plus convainquant. La grande quantité de points a aidé à avoir des détails plus fins au niveau des yeux et de la bouche.

Voici le résultat de mon algorithme sur les images de la base de données d'Utrecht. Le résultat est assez convainquant et il est très similaire à celui dans l'énoncé du travail.

Crédits supplémentaires

Voici les résultats des visages moyens avec et sans sourire à partir des images de la base de données d'Utrecht. La différence entre les images obtenues n'est pas très grandes puisque le visage moyen sans sourire semble quand même un peu souriant. Ces résultats sont très similaires à celui de la moyenne de tous les visages puisque toutes les photos de la bases de données sont doublées (toutes les photos avec et sans sourire). Le visage moyen est donc la moyenne des visages neutres et des visages souriant.

Masculinisation et féminisation de visage

J'ai utilisé le même algorithme que la section précédente pour générer les visages moyens masculin et féminin et j'ai utilisé mon algorithme de morphage pour générer la "masculinisation" et la "féminisation" de mon visage (bien que je trouve que la "masculinisation" m'a un peu "féminisée"!).

Voici tout d'abord les visages moyens masculin à gauche et féminin à droite.

Pour faire le morphage avec ma photo, j'ai redimensionné et coupé un peu les images précédentes pour obtenir celle-ci.

Voici la "masculinisation" de mon visage avec les paramètres suivant: à droite : 85% de la forme de mon visage avec 85% de la couleur de l'image des hommes, à gauche : 25% de la forme de mon visage avec 75% de la couleur de l'image des hommes. Le résultat à droite est assez intéressant à mon avis puisque les proportions ne sont pas trop déformées. Le résultat à gauche est bien réussi au niveau du visage, mais la forme de la tête est déformée un peu. Ces déformations sont causées par le manque de points d'intéret dans le haut de la tête.

Voici la "féminisation" de mon visage avec les paramètres suivant: à droite : 85% de la forme de mon visage avec 85% de la couleur de l'image des femmes, à gauche : 25% de la forme de mon visage avec 55% de la couleur de l'image des femmes. Encore une fois, le résultat à gauche est plus réussie que celui de droite pour les mêmes raisons.

Sources