TP3: Morphage de visages

Nicolas-Marcel Lemoine

Partie A

Introduction

Le but de ce travail est de morpher des visages de manière continue. Une fois ce morphage réalisé il faut en faire une vidéo et essayer sur nos propres photos et des objets/animaux de notre choix

Explications algorithme

Le fichier principal de mon code est le fichier TP3.py qui contient le code à lancé pour réaliser le morphage. Dans ce fichier j'ouvre les images et les listes de points, j'ajoute aussi aux listes de points ceux nécessaire pour faire les bordures grâce à la fonction "AjoutPointsBordure" que j'ai codé dans le fichier morphage. La méthode utilisée est celle décrite en cours et dans l'énoncé: j'utilise une triangulation de Delaunay sur les points repères moyens des deux images à morpher. On calcul ensuite le point d'origine dans les deux images pour la nouvelle image moyenne à l'aide des transformées sur chacun des triangles. On pondère ensuite les deux valeurs ainsi trouvées par le valeur warp_frac, ce facteur évolue d'image en image. Une fois qu'environ 15% des images sont calculées on commence à aussi faire varier le deuxième paramètre de la fonction morph: dissolv_frac qui atteindra 1 une fois 85% des images calculées.
Pour réaliser la fonction morph demandée plusieurs fonctions ont étées codées, de plus le paramètre triangles d'entrée a été supprimé. Le fichier Morphage.py contient toutes les fonctions utiles au TP et à la fonction morph. La fonction morph calcul premièrement les points moyens pour la nouvelel image à générée, puis elle calcul une triangulation de Delaunay sur ces points grâce à la fonction Delaunay de la librairies scipy.spatial. Le processus est ensuite le même pour chaque image: la fonction calcul toutes les transformations linéaires des triangles ainsi que les interpolations des canaux RGB. Vient ensuite le calcul des coordonnées des points dans l'image d'origine pour la nouvelle image. J'utilise ensuite l'interpolation calculée précédement pour déterminer les valeurs des canaux RGB. Les deux images ainsi créées sont moyennées grâce au paramètre dissolv_frac pour former l'image finale.
Enfin j'ai réalisé un fichier gifMaker.py basé sur un code trouvé sur stackoverflow afin de générer des gifs.
Les fichiers affichage.py et sauvegarde.py servent uniquement à sauvegarder ou à afficher des images.

Résultats

Mes résultats pour cette partie ont étés envoyés dans l'archive du TP3a, je ne les ai donc pas réinclus ici afin de ne pas alourdir la remise. Les gifs se trouvent dans les dossiers images, avec toutes les images qui ont étées utilisées pour les générés.
Le résultat du morphage de mon visage vers celui de Vincent (suivant dans la liste) présente des défauts notamemnt au niveau de l'oreille droite. J'ai essayé de limiter au maximum ces effets mais celui de l'oreille n'a jamais disparu, cela est lié à la triangulation mais peut être causé par la sélection des points ou simplement l'algorithme qui ne calcul pas correctement une tranformation.
Mon résultat préféré est celui de l'orange transformé en Terre, on ne voit même pas que l'arrière plan change de couleur et les deux objets se confondent bien.
Je trouve aussi que les deux morphage de visage vers des animaux sont réussis bien que celui où je me morphe en chat me fasse gonfler la tête, le résultat est satisfaisant.

Sources

Partie B

Je n'ai pas eu le temps de faire cette partie.