TP3: Morphage de visages

Explications additionnelles

Toutes les images sont des hyperliens vers l'original.

Partie A : Algorithme de morphage

L'algorithme de morphage est relativement simple. On commence par établir des points de correspondance dans les deux images. Ensuite on peut calculer une moyenne des points et faire une triangulation. À partir de la triangulation on peut utiliser les points moyens et les points de l'image initiale pour trouver la matrice de transformation affine qui relie les deux. Pour chaque triangle fait à partir de la moyenne pondéré des points, on peut prendre tous ses pixels, leur appliquer la matrice de transformation et allez voir leur correspondace dans l'image originale. On prend leur couleur avec une interpolation et on obtient l'image 'wraped'. On fait ensuite une moyenne pondéré des deux images 'wraped' ce qui nous donne l'image 'morphed'. Pour enregistrer les mp4, j'ai utilisé le VideoWriter de OpenCV, mais pour les .gif j'ai utilisé le videoWriter de imageIO. Pour l'interpolation j'ai utilisé scipy.ndimage.interpolation.map_coordinates.

Voici les résultats pour les images que j'ai essayé :


Pour le chien on peut voir que le morph du museau était un peu trop intense et n'est pas très fluide.

Pour le pistolet on peut voir que le contour au-dessous de la gachette n'est pas très fluide puisque les triangles devaient être très étroits.




Partie B-1: Calcul du "visage moyen"

Comme mentionné dans l'énoncé, j'ai commencé par calculer les points moyens de toutes les images, ensuite j'ai 'warped' toutes les images vers cette forme moyenne et finalement j'ai fait une moyenne de toutes les images 'warped'. Le seul détail qui peut valoir la peine d'être mentionné est que j'ai rajouter une colonne avec le nom du fichier dans la matrice matlab du détecteur de visage pour faciliter mon implémentation.

Voici les résultats obtenu. À gauche la forme moyenne, au milieu l'image moyenne et à droite une superposition des deux.
Si on compare les deux visages moyens de la classe, il est intéressant de noter que le visage est plus clair pour les points automatique puisque le détecteur est plus constant que les étudiants, mais avec les points manuelles, les cheveux sont plus clair puisque nos points incluaient le dessus de la tête.

Classe - Points manuelles

Classe - Points automatiques

Utrecht - Points automatique

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

Pour cette partie j'ai resize l'image de mon visage pour prendre les mêmes dimension que l'image moyenne, soit 900x1200. Toutefois on peut voir dans les résultats que les deux visages n'était pas parfaitement aligné et pas exactement sur la même échelle. Le visage lui même reste relativement bon, mais le contour du visage (et plus particulièrement le dessus de la tête) en on souffert.

Voici le visage moyen masculin (gauche) et le visage moyen féminin (droite).


Afin de comparer la différence de forme entre les deux, on peut utilser leur forme moyenne avec mon apparence. Le visage masculin est clairement plus large et long que le visage féminin. Le nez semble légèrement plus étroit sur le visage féminin. Il y a également une légère différence au niveau des yeux et de la bouche


De la même façon, afin de comparer la différence entre les deux apparences, on peut utiliser ma forme avec leur apparence. En ignorant leur énorme tête (mon visage était plus petit sur ma photo et il n'y a pas de point automatique pour le dessus de la tête), On peut voir que les sourcis féminin sont plus fin et que l'homme moyen a un début de barbe. Les lèvres féminines semble légèrement plus rosées.


Visage masculinisé
Étant déjà un homme, j'ai considéré que j'avais déjà une apparence masculine et que je n'ai pas besoin d'un gros niveau de fondu. J'ai décidé de simplement prendre une forme plus moyenne pour voir la différence. Au finale, j'ai utilisé un wrap_frac de 0.6 et un dissolve_frac de 0.1. À gauche le résultat et à droite l'image initiale.


Visage féminisé
Pour le visage féminisé, j'ai du utiliser un dissolve_frac plus élevé (0.8) pour cacher le début de barbe et pour obtenir un meilleur résulat en générale. À gauche j'ai garder un grand pourcentage de ma forme (warp_frac = 0.25) et à droite une forme qui tend plus vers le visage féminin (warp_frac = 0.6). En gardant majoritairement ma forme, je reste facilement reconnaissable. Sur l'autre image je suis un peu plus dur à reconnaître et le gain de féminité est plutôt minime. J'en conclu que l'apparence joue un plus grand rôle que la forme. Cette hypothèse semble se confirmer si on compare l'image qui contient que ma forme et l'apparence moyenne à l'image qui contient que la forme moyenne et mon apparence !


Références

Tel que demander voici les sources des images que je prit sur les internets :