Par Maxime Guillemette, le 3/3/2019.
Pour le cours GIF-4105 - Photographie algorithmique
Ce travail est divisé en 2 parties: A et B. Dans la partie A, on doit produire une animation qui affiche un visage d’un étudiant du cours et le métamorphosera vers le visage d’un autre étudiant du cours, le tout dans une séquence vidéo. D’autres animations doivent être créées avec d’autres photos. Dans la partie B, on utilise notre algorithme de morphage afin de calculer le visage moyen d’un ensemble de visages. Avec ce visage moyen, il est possible de modifier un visage, ce qui sera fait en se prenant soi-même comme cobaye.
L’algorithme utilisé est celui décrit en classe. On établi d’abords des points d’intérêts dans les 2 images (appellons-les A et B). Ensuite, pour chaque valeur alpha entre 0 et 1, on calcul la forme de l’image moyenne (établie à partir de la moyenne pondérée des points de A et de B, selon alpha) et on calcul une triangulation avec les points de l’image moyenne et l’algorithme de Delaunay. Ensuite, pour l’image A et l’image B, pour chaque triangle de la triangulation, on calcul la transformation affine T qui transforme les points de l’image A vers l’image A’ (de forme moyenne). On effectue la même chose pour l’image B. Ensuite, on applique la transformation inverse de T à chacun des pixels de l’image A’, afin de retrouver leur emplacement dans l’image A. On interpole ensuite la valeur RGB (un canal à la fois) à cet endoit et on l’applique dans l’image A’, à l’emplacement prévu. Un fois ce procédé répété pour l’image B, on obtient 2 images A’ et B’, qui ont la forme moyenne, mais les couleurs de A et B respectivement. Finalement, on fait la moyenne pondérée des images selon alpha ce qui nous donne une trame. Lorsque toutes les trames pour alpha allant de 0 à 1 ont été générées, on les rassemble en une seule séquence vidéo afin de faire le morphing.
Morph de mon visage vers le prochain visage:
Morph des frères Bodganoff jeunes vers maintenant:
Morph d’une SNES vers une Gamecube:
Morph de 2 directeurs de (mauvais) films (Neil Breen et Tommy Wiseau:
Morph de Frodon (dans les films “Le Seigneur des Anneaux”) au début de sa quête vers la fin de sa quête:
Morph d’une manette de Playstation 3 vers une manette de Playstation 4:
On voit que les résultats sont biens lorsque ce sont des visages qui sont morphés. En effet, lorsque les points sont choisis sur des centres d’intérêts (e.g. les yeux, la bouche, etc), l’effet est plus convainquant. Par contre, lorsque les points sont choisis arbitrairement (comme sur l’image de la SNES vers la Gamecube), les triangulations changent entre les images ce qui crée des discontinuitées dans la séquence de morphage. Un moyen de mitiger ce problème serait de choisir plus de points d’intérêts, mieux répartis.
L’algorithme est très semblable à celui utilisé à la partie A. Pour N images avec l’ensemble des N ensembles de points de correspondance, on débute en calculant la moyenne des points, qui sera donc la forme du visage moyen. La triangulation est calculée sur les points moyens. Ensuite, pour chaque image, on applique les mêmes procédés décrits à la partie A, afin de déformer l’image \(A_i\) vers l’image \(A_i^{'}\). Ainsi, on déforme chaque image vers la forme moyenne et on interpole pour reconstruire les couleurs. Finalement on calcule le visage moyen tout simplement en faisant la moyenne des images déformées.
La forme et le visage moyen de la classe:
La forme et le visage moyen de la classe obtenu avec le détecteur dlib:
La forme et le visage moyen de la collection Utrecht, avec le détecteur dlib:
On voit que le visage moyen de la classe est bien réussi. Il faut noter que puisque les lunettes n’ont pas de points de correspondances associés à elles, elles apparaissent en fondu dans le résultat. Comme on s’y attend, les résultats obtenus avec le détecteur dlib sont meilleurs au niveau des points d’intérêts, i.e. les yeux, le nez et la bouche.
Pour cette section, quelques préparatifs ont dûs être faits: modifier l’image de mon visage pour qu’il ait la même résolution que celui des visages de la collection Utrecht et redétecter les points sur cette nouvelle image, en plus de séparer les images d’hommes des images de femmes. Ensuite, on calcul la forme moyenne du visage de femme avec la moyenne des points des visages de femmes. On effectue une triangulation sur ces points et on calcul le visage de femme moyen, avec l’algorithme décrit dans les sections plus haut. Ensuite, pour différents facteurs de couleur et de déformation, on crée l’image de mon visage dont la couleur est déterminée par la moyenne pondérée par le facteur de couleur avec le visage de femme moyen, et la forme est déterminée par la moyenne pondérée par le facteur de déformation avec la forme de visage moyen de femme. Le même principe s’applique pour la masculinisation de mon visage.
Masculinisation de mon visage pour un facteur de couleur allant de 0 à 0.75 par bonds de 0.25, et pour un facteur de déformation allant de 0 à 1 par bonds de 0.25:
Féminisation de mon visage pour un facteur de couleur allant de 0 à 0.75 par bonds de 0.25, et pour un facteur de déformation allant de 0 à 1 par bonds de 0.25:
Les résultats sont assez biens. Le facteur de couleur n’a pas pris une valeur au dessus de 0.75, puisqu’il ne resterait que la forme de mon visage. On voit tout de même que, pour le visage masculin, la forme de mon visage est élargie, mais le reste des traits (e.g. les yeux, le nez, etc) ne sont pas trop déformés. Quant à la couleur, mon teint devient plus rosé et mes poils faciaux tendent à disparaître. Mes cheveux deviennent également plus foncés.
Pour le visage féminin, on voit que la hauteur de mon visage diminue, que mes yeux s’agrandissent et que mon visage est plus rond. Quant à la couleur, les mêmes effets que pour le visage masculin sont observés, en plus de voir que mes sourcis sont amincis.