TP3: Morphage de visages

Résumé

Ce travail a pour but d'implémenter un algorithme de morphage et de produire des séquences de morphage entre deux images.

Partie A: Morphage de visages

Titre: Time lapse d'une personne


Chris Jericho (WCW) Source
Chris Jericho (WWE) Source

Titre: Fini les ressemblances!


Keanue Reeves Source
Moi

Titre: Pain ou chien?


Chien obèse Source
Miche de pain Source

On remarque que le morphage autour de la tête du chien est segmenté. Ceci est dû aux différences de structure entre le chien et le pain.

Titre: D'un grand homme à un autre

Sylvain Durif - L'homme vert, Merlin l'Enchanteur Source
Jean Chrétien Source

Dûe à la chevelure importante dans l'image de départ, on remarque une certaine cission entre les deux visages lors du morphage. Modifier les points d'intérêt pour les cheveux peut altérer l'allure du morphage, mais il est difficile d'obtenir un résultat fluide en tenant compte du volume complet des cheveux.

Images personnelles #1

Titre: Morphage de couple


Moi
L'autre

Puisqu'il n'y a pas de points d'intérêts alloués au corps, on voit les épaules se fondre dans les autres plutôt que de se transformer. Le morphage du visage est cependant réussi.

Images personnelles #2

Titre: Time lapse saisonnier


Peps - été 2016
Peps - hiver 2017

Puisque la perspective n'était pas identique, le morphage donne l'impression qu'on bouge autour des points d'intérêts.

Bonus 1: Morphage hybride

Image prise sur Internet vs. image personnelle

Résultat obtenu dans le TP2


Paramètres: lp = 0.056; hp = 0.118.

Résultat obtenu dans le TP3

Sylvain Durif - L'homme vert, Merlin l'Enchanteur Source
Jean Chrétien Source
Paramètres: fc_lp = 0.016; fc_hp = 0.048; warp_frac = 0.5; dissolve_frac = 0.3.

Les fréquences de coupure des filtres ont dû être modifiées pour tenir compte du nouvel (et bien meilleur) alignement. On remarque que le résultat est beaucoup mieux et qu'il est maintenant moins nécessaire de rendre l'image d'arrière-plan floue pour que l'effet soit réussi. Puisque les visages sont maintenant bien alignés et "morphés", les traits du visage filtré passe-bas se superposent aux traits du visage filtré passe-haut et créent une image hybride plus réaliste. Dès lors, la majeure différence entre les résultats du TP2 et du TP3 est que les images filtrées se superposent beaucoup plus naturellement dans le TP3, puisque l'alignement par triangulation est beaucoup plus performant qu'un alignement en rotation/translation/scale seulement.

Cela dit,on remarque aussi que l'image morphée hybride tend à être plus sombre que celle couleur du TP2. Ceci est dû au fondu entre les deux images. Contrairement au TP2 où les images étaient additionnées ensemble, l'image résultante ici est plutôt la moyenne des deux images. Dès lors, les zones sombres de l'image filtrée passe-haut viennent diminuer la valeur des pixels de l'image passe-bas. Plus le taux de fondu est faible, plus l'image va être claire et plus les traits passe-haut seront cachés. Il y a donc un compromis ici à faire si l'on souhaite obtenir un résultat optimal sans post-traitement.

Bonus 2: Morphage sans triangulation

Pour cette section, j'ai décidé d'implémenter l'algorithme de morphage proposé par Beier-Neely qui utilise des lignes plutôt que des triangles pour effectuer des morphages. La première version ci-dessous consiste à prendre une ligne consistuée de 2 points d'intérêts et d'effectuer la transformation avec cette droite seulement. La deuxième version présentée utilise plutôt plusieurs droites construites à partir de paires de points d'intérêts. La transformation est ensuite calculée comme une moyenne pondérée des transformations des pixels pour chacune des lignes en fonction de leur distance aux lignes. Ces poids ont d'ailleurs trois paramètres, soit a,b et p pour ajuster l'impact de la distance. Les paramètres sont présentés en détail à la section 3.3 de l'article de Beier-Neely.

Beier-Neely : Version simpliste

Exemple de résultat fonctionnel

On remarque que, contrairement à la méthode par triangulation, l'image entière se transforme en 1 bloc. Ceci est attendu puisque la transformation est construite à partir d'une seule ligne et que seule la distance à la ligne affecte le morphage des pixels. Néanmoins, le morphage est réussi.

Puisqu'on ne considère que deux points d'intérêts pour la transformation, ils doivent être choisis judicieusement pour que le résultat soit correct. Cette approche naïve fonctionne surtout si les proportions sont semblables entre les deux images. Par exemple, des visages très différents donneraient de mauvais résultats.

Exemple de résultat erroné

Exemple de mauvais résultat lorsque l'alignement se base seulement sur deux points d'intérêts proches et que les proportions varient beaucoup. On remarque qu'aucune correspondance n'est respectée lors du morphage.

Beier-Neely: Version complète


Paramètres: a = 1; b = 0.6; p = 2; 46 lignes.

On remarque que l'image entière semble être morphée en même temps, plutôt que d'avoir un focus seulement sur le visage. Ceci est dû aux paramètres utilisés, ces derniers accordant un poids plus important aux lignes longues (bordures de l'image). Par contre, puisque les lignes sont construites à partir de points d'intérêts, les pixels loin du visage ont tendance à juste se dissoudre (épaules).


Paramètres: a = 0.1; b = 0.6; p = 2; 46 lignes.

On remarque qu'en accordant plus de poids aux pixels près des lignes, on vient créer des artéfacts lors du morphage. On remarque aussi que les bouches ne se suivent pas lors du morphage. Ceci est dû au fait que les deux visages ont des expressions bien différentes et que les images ne sont pas transformées en bloc.


Paramètres: a = 1; b = 0.6; p = 2; 46 lignes.

On remarque qu'en utilisant un grand nombre de lignes pour le morphage, le résultat est beaucoup mieux réussi (comparé à celui obtenu plus haut).

Partie B1: Calcul du "visage moyen"

Visage moyen pour la classe avec points manuels

Visage moyen pour la classe avec détecteur dlib

On remarque que les points d'intérêts trouvés avec dlib se limitent au visage et ne tient pas compte de la tête, contrairement à ceux sélectionnés manuellement. Puisque les points se limitent au visage, on peut observer que le visage moyen utilisant dlib semble plus uni, si l'on ignore le reste de la tête. On observe aussi que les lunettes sont mieux camouflées dans le visage moyen avec dlib, que la forme du visage est plus détaillée et ronde et, enfin, que les traits du visage sont moins flous.

Visage moyen pour la base de données utrecht

Bonus

Puisque certaines images étaient mal classées, j'ai dû refaire le classement des visages. Ceci étant dit, tous les visages de utrecht ont été utilisés pour générer ces deux visages moyens.

Visage neutre moyen pour la base de données utrecht

Visage avec sourire moyen pour la base de données utrecht

Le visage avec sourire est nettement différent du visage moyen comprenant toutes les images. On remarque des différences importantes où les joues et les yeux.
Le visage neutre est aussi différent du visage moyen, encore une fois, au niveau des yeux et de la bouche. Puisqu'il y a environ 50% de visages neutres dans la base de données, il est logique que le visage moyen utilisant tous les visages soit différent des visages neutres et avec sourire. Il correspond à une version moyenne des deux images générées dans cette section.

Partie B2: Masculinisation et féminisation de votre visage

Visage masculin moyen

C-O masculinisé

Paramètres: warp: 0.8; dissolve: 0.5.

Paramètres: warp: 0.25; dissolve: 0.5.

Paramètres: warp: 0.5; dissolve: 0.5.

Le paramètre "dissolve" a été mis à 0.5 puisqu'il permet d'obtenir les résultats les plus intéressants avec ma photo (traits du visage moyen ressortent sans noyer l'image originale). Plus "warp" augmente et plus mon visage se morphe vers le visage moyen jusqu'au cas extrême où, dépassé 0.8, le visage se déforme. On remarque d'ailleurs que dans le cas avec "warp" = 0.8, le dessus de ma tête prend une forme étrange. Sur mon visage, augmenter "warp" se traduit vers une augmentation de la grosseur de ma tête et de ma mâchoire, ainsi qu'un élargissement de ma bouche.

Concernant l'espèce de "ghosting", ce dernier est causé par la triangulation utilisée pour faire le morphage. Puisque le détecteur dlib ne trouve que des points sur le visage, seul ce dernier est transformé suivant les contraintes de la triangulation.

Visage féminin moyen

C-O féminisé

Paramètres: warp: 0.9; dissolve: 0.5.

Paramètres: warp: 0.5; dissolve: 0.5.

Paramètres: warp: 0.8; dissolve: 0.25.

Comme pour la masculinisation, le dissolve doit être autour de 0.5 pour que le résultat soit satisfaisant. Avec un dissolve de 0.25, bien que mon visage ait une forme plus féminine, mon visage demeure plutôt masculin dû entre autres à ma moustache. À partir de 0.5, bien que ma moustache soit encore visible, le résultat est convaincant. Pour des valeurs plus élevées, mon visage se perd au travers du visage moyen utilisé.
Sur mon visage, augmenter le warp a pour effet de modifier mes yeux et ma bouche et d'arrondir mon visage. Dépassé une valeur de 0.9 pour le warp, mon visage tend à se déformer comme lors de la masculinisation.

Bonus 1: Modification du sourire

Ajout d'un sourire

Paramètres: warp: [0,0.55]; dissolve: [0,0.275]

Le warp et dissolve sont limités afin de ne pas noyer mon visage dans le visage moyen utilisé. Le dissolve est deux fois plus petit que le warp afin de conserver les traits de mon visage. Pour effectuer le morphage, tous les points calculés par le détecteur dlib ont été utilisés pour calculer la triangulation. Bien que d'utiliser tous les points a pour effet de modifier le visage entier, il demeure préférable d'agir ainsi, plutôt que de se limiter à une triangulation autour de la bouche.

Expression neutre

Paramètres: warp: [0,0.55]; dissolve: [0,0.275]

Puisque mon visage était déjà neutre, le morphage vers une expression neutre est très peu apparent.

Conclusion

Ce travail m'a permis de réaliser les avantages et inconvénients d'utiliser une triangulation pour effectuer des morphages. Bien que la triangulation rend les images plus malléables lors de morphages, les pixels à l'intérieur des triangles subissent tous la même transformation. Dès lors, le résultat final dépend beaucoup du nombre de points d'intérêts choisis dans les images. De plus, il est primordial d'avoir de bonnes correspondances entre les images afin que le morphage soit réussi. Ceci peut s'avérer difficile lorsqu'on utilise des objets différents et qu'il n'existe pas de correspondance directe.