TP3 (7105): Morphage de visages

Par : Bernard Lebel

Le but de ce travail a été de mettre en application la théorie derrière les techniques de morphage d'objets (transformer un objet en un autre sous la forme d'une animation) afin de réaliser le morphage d'un visage. De plus, en appliquant des techniques similaires, il a été possible de reconstituer un visage moyen d'un ensemble de visages. Finalement, la technique a pu être essayée dans le but de transformer différents objets en d'autres. Les résultats sont rapportés ci-dessous.

1- Algorithme de morphage

L'algorithme de morphage se divise en plusieurs étapes.

a) Sélection des points

Dans cette étape, il est requis de choisir dans chaque image des points jugés équivalents dans l'image de départ et l'image de fin désirée. Dans le cas de la photo de deux étudiants, les points placés sont présentés dans les 2 figures ci-dessous. Pour illustrer que le processus peut s'appliquer à d'autres objets, il est illustré avec le montage d'un chat et de Yoda (source) qui seront utilisés plus loin pour un montage.

b) Triangulation

Afin de pouvoir calculer le morphage requis entre les images, on effectue la procédure expliquée dans les notes de cours sur le morphage. Les triangles sont déterminés en appliquant une triangulation de Delaunay sur la position moyenne des points entre l'image d'origine et de destination. Le résultat de cet algorithme produit un ensemble de points regroupé par 3 désignant le rang de chacun de l'image. En d'autres mots, si le premier triangle est composé de [36,37,38], chacune possèdera un triangle dont les coordonnées de ses coins corresponds à l'emplacement de ses valeurs pour [36,37,38]. Le résultat de cette opération est une grille de triangles couvrant la majeure partie de l'image.

c) Calcul de la matrice de transformation

En déterminant un niveau de transformation arbitraire, on effectue une moyenne pondérée des points d'intérêt de l'image de départ et de l'image de destination. Le résultat peut s'exprimer \[PointsVises = Points_{src} * (1-warp) + Points_{dest} * warp \]\(warp\) est le coefficient de transformation entre 0 et 1. En appliquant la triangulation obtenue à l'étape précédente sur les points transformés obtenus, il est possible de calculer deux matrices de transformation pour chaque triangle, la première étant la matrice à appliquer pour obtenir l'image d'origine à partir de l'image intermédiaire et la deuxième pour l'image de fin à partir de l'image intermédiaire. La matrice de transformation dite affine est présentée ci-dessous sous sa forme algébrique. \[ \begin{pmatrix} x' \\ y' \\ 1 \end{pmatrix} = \begin{pmatrix} a & b & c \\ d & e & f \\ 0 & 0 & 1 \end{pmatrix} \times \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} \] Afin d'obtenir les valeurs des coefficients \(a,b,c,d,e,f\), les 3 coins de chaque triangle sont utilisés. Les valeurs de \(x',y'\) sont celles du triangle de l'image ciblée (origine ou de fin) et \(x,y\) celles du triangle de l'image intermédiaire. En résolvant ce système d'équations linéaires, il est possible de cette façon d'obtenir la matrice de transformation pour chaque triangle pour chaque destination (image d'origine ou de fin).

d) Identification des pixels de l'image de transition

Afin de reconstituer l'image transition, chacun de ses pixels se voit appliquer la matrice de transformation affine correspondante au triangle dans lequel il se trouve afin de trouver la valeur du pixel dans l'image d'origine ou de fin qui lui correspond. En appliquant cette méthode, on parvient à reconstruire une image déformée pour les valeurs des pixels de l'image d'origine et une autre image pour les valeurs des pixels dans l'image de fin. Le résultat de ce processus produit, dans le cas des photos d'étudiants, le résultat suivant lorsque les images sont déformées pour arriver à mi-chemin entre les deux.

e) Fondu

Finalement, afin de superposer les deux images produites en un tout, la valeur du pixel final est calculée en effectuant une moyenne pondérée entre les deux valeurs possibles (image d'origine ou image de fin). La pondération de cette moyenne s'effectue avec un coefficient \(diss\) compris en 0 et 1 et qui définit le niveau de fondu désiré entre chacune des deux images.

\[ValeurPx_{final} = ValeurPx_{src} * (1-diss) + ValeurPx_{dest} * diss \]

f) Résultat final

Le résultat final est présenté ci-dessous sous la forme d'une animation du fondu.

2- Calcul du visage moyen

Le calcul du visage moyen consiste à faire la moyenne de toutes les coordonnées des points d'intérêts d'un ensemble de visages. Le visage moyen est obtenu en appliquant à tous les visages de l'ensemble la déformation nécessaire pour que leurs points concordent avec ceux du visage moyen. Finalement, la valeur de chacun des pixels de l'image finale est obtenue en calculant la valeur moyenne de chacun des pixels des visages déformés et en assignant cette valeur au pixel correspondant sur l'image finale. L'image ci-dessous correspond à l'image obtenue à l'aide de cette technique.

Il est intéressant de constater que ce visage moyen peut être vu comme ressemblant un peu à tout le monde, lorsque comparé avec les images originales. Il est par ailleurs possible d'utiliser la technique du visage moyen pour arriver à effectuer différentes transformations parfois surprenantes. Ce sujet sera abordé dans la section suivante.

3- Section Boni

a) Photos personnelles

À des fins d'expérimentations, ce même algorithme a été appliqué sur un pingouin en peluche (dénommé Momo pour la cause) afin de le transformer en un autre pingouin célèbre, soit la mascotte de Linux, Tux. La figure ci-dessous présente dans un premier temps les points de correspondance utilisés entre chacune des images.

Ensuite, en appliquant le même procédé sur ces images, nous obtenons l'animation suivante.

b) Application sur des animaux

Encore une fois, en appliquant ce même algorithme il est possible d'obtenir des résultats assez impressionnants. Par exemple, il a été possible de transformer chat domestique en Yoda à l'aide de ce procédé tel qu'annoncé ci-haut. Le résultat de ce rendu a permis de produire l'animation suivante.

c) Caricatures, Féminisation et Masculinisation

L'idée générale derrière ces procédés provient de l'idée précédemment explorée des visages moyens. Cependant, au lieu d'appliquer une moyenne où tous les éléments d'un ensemble apportent une contribution équivalente à la moyenne, le procédé consiste à faire une moyenne pondérée où certains éléments ont plus de poids par rapport aux autres. De cette façon, il a été possible de faire un visage moyen masculinisé en accordant un poids minimal aux visages féminins et un plus grand poids aux visages masculins. Le même procédé a été appliqué pour faire un archétype féminin.

-Féminisation

Ici, il est intéressant de noter que la légère déformation (grossissement) du visage moyen féminin est due au fait que l'un des visages féminins ne comportait pas le même type de cadrage, ce qui a provoqué cette distorsion. De plus, le fondu a été préservé uniforme puisque les photos de visages féminins disponibles comportaient beaucoup de bruit en arrière-plan et le résultat final n'était pas aussi bon qu'escompté.

-Masculisation

Ce résultat est plus satisfaisant, mais est très près du visage moyen déjà calculé puisque l'ensemble d'échantillons était majoritairement constitué d'hommes.

Caricatures

Pour les caricatures, l'idée est similaire. La moyenne pondérée est calculée en donnant peu d'importance au visage que l'on désire caricaturer et beaucoup aux autres. Une transformation est ensuite appliquée uniquement sur le visage ciblé. Comme aucune de ses caractéristiques n'a eu beaucoup de poids, cela résulte d'une déformation de ce visage et peut donner lieu à des déformations comiques. Ci-dessous quelques exemples. La variation observée dans certains cas provient de la pondération différente qui a été accordée au visage ciblé.

-Caricatures

Ci-dessous se trouvent les caricatures générées. À gauche se trouve l'original, à droite la caricature.

De plus, afin d'augmenter le facteur de comédie, une modification additionnelle a été apportée au code. En effet, certains sous-ensembles de points représentant des caractéristiques du visage ont été choisis afin d'augmenter ou de diminuer proportionnellement leur distance par rapport au centre de l'image afin de créer des traits loufoques. Par exemple, les caricatures présentées ci-dessous ont augmenté d'un ratio de 1.25 la distance par rapport au centre de l'image les points d'intérêts délimitant les yeux. En revanche, la distance des points d'intérêt délimitant le contour de la bouche a été réduite. Ces altérations ont été appliquées sur l'image du visage moyen pondéré où la photo de l'individu ciblée possédait un poids fort. Quelques-uns des résultats les plus marquants sont rapportés ci-dessous.

-Caricatures loufoques

Ci-dessous se trouvent les caricatures générées. À gauche se trouve l'original, à droite la caricature.

Comme il est possible de voir, l'effet de cette caricature est de "poisson-iser" les visages, au plus grand amusement de tous. L'ensemble des autres résultats est accessible ici.