Travaux pratique #3 - partie A par Philippe Babin

Création des points d'intérêts (main_00_interest_points.m)

Pour généré les points d'intérêt, la fonction saveFeatures est utilisé. Il est important de faire attention de faire les points d'intérêt dans le bonne ordre sur la paire d'image.

Morphage (main_01_morph.m)

L'algorithme de morphage permet de trouver une image à mi-chemin de deux images ayant des points d'intérêts associé. L'algorithme est séparé en deux appels de la fonction half_morph, cette fonction prend en entré une image A et ses points d'intérêts et un set de points d'intérêts morphés. La fonction renvoie l'image morphé sur les points d'intérêt morphé. En faisant, un half_morph sur chacune des deux images et en mélangeant ceux-ci, on obtient l'image morphé.

L'algorithme de half_morph suit ses étapes:

Pour généré les vidéos et les gifs animés suivant, on génere 72 images entre l'image A et l'image B avec divers valeur de wrap et de dissolve. Le wrap est incrémenté linéairement entre chaque images. Le dissolve est utilisé avec une fonction de easing pour donner un changement plus naturel. L'effet du morphage est meilleur si on voit pour le moins longtemps possible l'image qui est à mi-chemin du morphage. La fonction de easing utilisé est illustré ci-dessous, elle varie le plus rapidement au milieu de la fonction:

easing fonction
Image A Image B Résultat

(video)

Morphage sur des objets, animaux politiciens, etc.

Le résultat du morphage est directement relié à la qualité des points d'intérêt. La paire d'image de picasso a été facile à faire, puisque les deux images ont plusieurs parties du visage très similaire.

La paire d'image de Trump a été très difficile à faire, les mains du de Trump et du poulet ont des différences subtiles qui rendent le choix des points d'intérêt difficile. Par exemple, Trump a son pouce de la main gauche déplier, tandis que le poulet a son index déplié. L'autre difficulté a été que le poulet n'a pas d'avant bras ni d'épaule, cela rend la transition entre les deux formes plus difforme.

La transition entre les deux circuits imprimés a été facile, les deux images ont des formes très semblable.

Image A Image B Résultat

Picasso(Source)

The Kiss(Source)

(video)

(Source)

(Source)

(video)

(Source)

(Source)

(video)

Mes propres photos

Les morphages utilisant mes propres photos ont été assez réussit. Le premire morphage comporte deux arrière-plans très différent l'un de l'autre, cela entraine un morphage moins naturel.

Le second morphage est très réussi, on peut voir que la similarité des images facilite la transition.

Image A Image B Résultat

(video)

(video)

Morphage sur image basse fréquence vers image haute fréquence

Le morphage hybride a pour avantage d'avoir un bien meilleur alignement que l'image hybride. Avec l'image hybride uniquement deux points étaient utilisés pour alignement, avec le morphage hybride autant de point d'intérêt que voulu peut-être utilisé. Dans l'image hybride du chat et du renard, on peut voir que les yeux sont alignés, mais que le museau ne l'est pas.Cela cause des déformations que alignement n'aurait pas eu.

Image A Image B Résultat Morphé Image hybride original

(video)

Morphage avec des coordonnées polaires (main_02_polaire.m)

Un morphage cartésien utilise l'équation suivante pour calculer le wrap:

midPOI = POIA * (1 - warp_frac) + POIB * warp_frac

Un morphage polaire est calculé de manière similaire, on calcule la différence des normes et des thétas, ensuite crée une nouvelle matrice de vecteurs cartésiens midPOI:

midPOIMag = (POIBMag * warp_frac + POIAMag * (1 - warp_frac));
midPOI =  ...
          [ midPOIMag .* cos(POIBTheta * warp_frac + POIATheta * (1 - warp_frac)), ...
            midPOIMag .* sin(POIBTheta * warp_frac + POIATheta * (1 - warp_frac))];

La différence principale entre les résultats du morphage en utilisant les coodonnées polaires et cartésienne est que pour le premier les rotations autours de l'origine n'affectent pas la forme de l'objet, pour le second les translations n'affectent pas la forme de l'objet. On peut voir ci-dessus que la flèche change sa forme lorsque le morphage est cartésien, mais conserve sa forme pour le morphages polaire. Le cas de la flèche est un cas particulier où le choix d'un système de coordonnée cause une différence visible. Dans des morphages normales comme avec celui de Trump/poulet, íl n'y a presque aucune différence visible.

Morphage cartésien Morphage polaire

(video)

(video)

(video)

(video)

Travaux pratique #3 - partie B

Visage moyen (main_03_average_face.m)

Le visage moyen est calculé avec l'algorithme suivant:

Visage moyen avec dataset des étudiants

Le visage moyen est un excellent indicateur de sources des points d'intérêt. On peut voir que les différences entre le visage moyen avec des points manuels et avec des points DLIB sont reliés au zone il y a et où il n'y a pas de points d'intérêt. Sur l'image avec des points manuels, on voit que les cheveux sont clairement définit, ainsi que les oreilles. Sur l'image avec des points de DLIB, la bouche, les yeux et le nez sont plus clairement définit. DLIB ne met aucun point pour le contour de la tête, mais il possède une grande densité de points de pour la bouche, le nez et les yeux. Les points manuels ont une densité uniforme sur tout le visage. Si on observe assez bien l'oeil gauche de l'image avec points manuels, on peut voir le 'bug' du triangle du sourci. Le triang;e qui relie le sourci à la bordure entre la tête et l'oreille au centre de l'oeil n'est pas bien placé sur la plupart des images. Le bug cause un oeil gauche écrasé, on peut voir ce résultat sur le visage moyen.

Visage moyen avec points manuels
(cliquez pour plein écran)
visage moyen avec DLIB
(cliquez pour plein écran)
Forme de visage moyen avec points manuels Forme de visage moyen avec DLIB

Visage moyen avec dataset d'Utrecht

Le visage moyen du dataset d'Utrecht a une allure masculine. Cela est causé par le fait que seulement 30% du dataset contient des images féminines. On peut voir une légère 'cicatrice' au milieu de la bouche. Cette erreur est causé par la présence de photo souriant et non-souriant, cela entraine des triangles ayant des transformations non-affine. Lorsqu'un de ses triangles erronés est présent, la matrice de transformation du triangle est changé pour une matrice identité. Cette solution permet des pixels qui se mélangent bien à ceux autours d'eux.

Forme visage moyen visage moyen
(cliquez pour plein écran)

Visage moyen avec dataset d'Utrecht masculin et feminin

On peut voir sur le visage féminin moyen une grosse 'cicatrice' entre les lèves de la bouche, que sur le visage masculin moyen. Il y a 50% des images féminines qui sont sourriantes, tandis que 43% des images masculines qui sont sourriantes. Comme expliqué précédemment, ce bug visuel est causé par les points d'intérêt des visages souriants.

Forme visage moyen visage moyen
(cliquez pour plein écran)

Masculinisation et féminisation de votre visage (main_04_feminazer_masculazer.m)

Féminisation

Pour généré le visage féminisé, la fonction de morphage a été utilisé avec un wrap facteur de 100%. Ainsi, le visage généré utilise entièrement la géométrie du visage féminin moyen. Cela donne une ossature féminine au visage résultant. Pour déterminer la valeur du paramètre de dissolve, un GUI avec un slider a été utilisé. Cela à permit de trouver que 0.54 donne le moins de poils visible avec le moins de dissolve possible. Un dissolve de 0.706 donne le meilleur résultat à mon opinion. Puisque, les cheveux du visage moyen féminin sont flous, les cheveux de l'autre visage sont clairement visible.

En utilisant DLIB au lieu des points manuels, les détailles du visage (boutons et cernes) sont plus visible, aussi la forme de la bouche, des yeux et du nez sont plus définie.

Image source Image moyenne féminine Source vers feminin

(video)

Féminisation avec
dissolve = 0.54
utilise points manuels
Féminisation avec
dissolve = 0.706
utilise points manuels
Féminisation avec
utilise points DLIB

Masculinisation

La masuclinisation s'est déroulé comme la féminisation, le wrap a été mis au maximum pour avoir une forme de visage plus masuline. Divers valeurs de dissolve ont été essayé pour atteindre le résultat le plus satisfaisant. On peut remarqué le bug sur l'oeil gauche qui avait été mientionné dans le texte du visage moyen de la classe. En augmentant le dissolve, le bug n'est plus visible.

Image source Image moyenne masculine Masculinisation avec
dissolve = 0.5618
utilise points manuels
Masculinisation avec
dissolve = wrap = 0.706
utilise points manuels

Morphage caricaturale de visages via PCA (main_05_PCA.m)

L'algorithme pour le caricature des visages utilise PCA pour pouvoir changer les caractéristiques fondamentaux du visage. PCA peut être utilisé de deux manières: soit sur les points d'intérêt ou directement sur les pixels de l'image.

PCA sur les points d'intérêt

L'algorithme fonctionne de la manière suivante:

Les résultats suivant ont été généré à l'aide du dataset de utrecht. On peut voir dans la figure suivante que la majorité de l'information de l'image est situé dans le premier coefficient, qui est la valeur moyenne.


Les images suivant montrent les déformations causé par la modification des coefficients des valeurs significatives. Tout d'abord le premier coefficient influence le déplacement lattéral des points du coin NW vers coin SE. Le second coefficient contrôle le déplacement lattéral du coin NE vers coin SW, en plus de contrôlé une partie de la grosseur du visage. Le troisième coefficient contrôle la grosseur du visage. Le quatrième coefficient contrôle la rotation du visage et la grosseur des yeux. Finalement, le cinquième coefficient contrôle la grosseur de la machoire.

Il est impréssionnant que cinq paramètres ont une influence aussi élocante sur les caractéristiques du visage.

C1 à 80% C2 à 1000% C3 à 10000% C3 à -14000% C4 à 1x10^6% C5 à 2x10^5%

PCA sur les pixels de l'images

L'algorithme pour le PCA sur les pixels de l'image fonctionne de mainière similaire qu'avec les points d'intérêt. La différence principale entre deux algorithmes sont les données utilisés et comment le résultat est généré. Tout d'abord, toutes les images du dataset sont morphées vers le visage moyen pour qu'ils soient tous alignés. Ensuite les images sont redimensionnés en une image 90x120 pixels et convertie en teinte de gris. Cela à pour but de réduire la quantité de variable qui représente le visage. Les images sont mis dans une matrice pour chaque colonnes contients tous les pixels de chacune des images. Le reste de l'algorithme reste le même que pour les points d'intérêt. Le résultat final est généré en faisant une moyenne de tous les colonnes de la matrice résultante.

Les résultats ont été généré avec les images féminine du dataset de utrecht. On peut voir dans la figure suivante qu'il faut grande quantité de coefficient pour atteindre 95% du contenue de l'image. Pour réduire le nombre de coefficient, un threshold de 90% a été utilisé. Ainsi, 27 coefficients sont utilisés.

Contrairement au résultat du PCA avec point d'intérêt, ce n'est pas la forme du visage qui est affectée par le changement des coefficients, mais bien la teinte des pixels de l'image. En augmentant un coefficient, on remarque que tous les coefficients sauf C1 font apparaître un visage particulier du dataset. Le coefficient C1 représente la valeur moyenne de l'image, ainsi en le faisant varier le constrast de l'image est modifié.

Image moyenne originale C1 à x1.5 C2 à x300 C3 à x1000 C4 à x100 C5 à x200