TP3: Morphage de visages et de scènes
GIF-7105 : Photographie algorithmique (Hiver 2015)
Il est naturel pour l'humain de trouver des ressemblances entre divers objets ou formes. Par exemple, le visage et le corps d'une personne changent au fil de la vie, mais il subsiste une ressemblance. Il peut être intéressant de chercher à projeter l'apparition de ces différences. Malheureusement, les techniques de base de mélange d'images fonctionnent assez mal lorsque les différentes images ne sont pas alignées, c'est-à-dire que les points d'intérêts ne peuvent être tous alignées avec une seule translation. Pour résoudre ces problèmes, de nombreuses techniques ont été proposées; dans le cadre de ce travail, nous utilisons une technique basée sur la triangulation des points d'intérêt, et analysons les résultats obtenus.
Les résultats sont d'abord présentés, suivis d'une explication des algorithmes utilisés et d'une analyse des forces et faiblesses des différentes approches.
Résultats obtenus
1) Morphage de visages
Ce premier exemple consiste à passer d'un visage à un autre de façon fluide.
2) Morphage artistique (corps et visage)
En plus d'un morphage réaliste comme celui de l'exemple précédent, il est possible de faire une métamorphose entre deux objets plus complexes. Dans ce cas-ci, l'image cible est une section de la murale "L'homme devant la science", de Jordi Bonet, tiré de la façade du pavillon Adrien-Pouliot.
3) Morphage de bâtiment (3 images)
Si le morphage tel que nous le présentons s'applique bien au cas d'un humain, il peut également donner des résultats intéressants pour montrer l'évolution de bâtiments. Dans ce cas-ci, nous avons utilisé trois photos du Colisée de Québec prises à diverses époques : 1949, 1975 et 2013.
4) Morphage de scène
Lorsque deux photos urbaines prises à des époques différentes sont suffisamment bien alignées, il est aussi possible d'appliquer notre technique, bien que le résultat ne soit pas optimal. Ici, une vue de la Place Québec, dans le quartier Saint-Jean-Baptiste a été prise à 44 ans d'intervalle (1970 et 2014).
5) Morphage de scène (2)
Dans le même style que l'exemple précédent, l'évolution d'une vue de la rue St-Jean entre 1929 et 2014.
Explication de la méthode utilisée
Obtention des points de référence
Une suite de correspondances doit être définie entre les images source et cible, afin de permettre à l'algorithme de déterminer les transformations à appliquer. Bien que cette étape puisse être automatisée (par exemple avec la recherche de descripteurs), les résultats sont plus aléatoires dans ce cas, en plus de complexifier l'approche. Pour ce TP, nous avons utilisé une désignation manuelle des points d'intérêt.
Par exemple, dans les images de gauche, on peut voir les 52 points d'intérêt, manuellement sélectionnés sur chacune des images.
Notons que des points supplémentaires sont automatiquement ajoutés par l'algorithme sur les bords de l'image, afin d'assurer que tous les pixels soient inclus dans au moins un triangle.
Triangulation des images
Les points de correspondance précédemment obtenus sont groupés en triangles. Les triangles doivent être suffisamment petits, puisque l'on suppose que tous les pixels contenus dans chaque triangle subissent la même transformation pour passer d'une image à l'autre. Les triangles sont obtenus grâce à une triangulation de Delaunay, qui évite la formation de triangles aux angles internes trop petits (autrement dit, qui évite la formation de pointes).
(1)
(2)
(3)
Calcul des transformations
Pour chaque pas de l'animation, on recherche un fondu pondéré entre les deux images. Par exemple, à mi-chemin de l'animation, on s'attend à ce que les points de correspondance soient exactement au milieu des segments reliant les points de l'image source à ceux de l'image cible.
Trouver la position des points de correspondance est donc simple, et se résume à une moyenne pondérée des coordonnées des points dans les deux images; la difficulté provient de la recherche des autres points (autrement dit, ceux n'étant pas directement un sommet). Pour ceux-ci, on recherche une transformation affine possédant six degrés de liberté. Cette transformation peut être vue sous sa forme matricielle à l'équation (1), ou sous sa forme algébrique à l'équation (2).
De ces équations, on peut construire un système permettant cette fois de déterminer les paramètres [a-f] de la transformation à partir de correspondances P->P'. Étant donné que nous avons six inconnues, il faut au moins posséder six équations, qui nous sont fournies par les sommets des triangles (2 équations par sommet, une pour x et une pour y). L'équation (3) montre le système Ax = B à résoudre.
Une fois ce système résolu pour chaque triangle, nous obtenons les transformations applicables à chaque pixel individuel : elle correspond tout simplement à la transformation du triangle dans lequel il est situé. La figure de gauche donne une exemple d'une telle transformation combinant rotation, translation et mise à l'échelle. Le triangle utilisé provient du bras, entre l'épaule et le coude, sur les images précédentes.
Calcul de la couleur de chaque pixel
Pour chaque pixel de l'image intermédiaire, on calcule les transformations inverses (en d'autres termes, celles qui ramènent de l'image intermédiaire aux l'images source et cible). La couleur est ensuite déterminée par une combinaison linéaire entre la couleur des pixels de l'image source et cible. Étant donné que les transformations n'assurent pas de donner des coordonnées entières en sortie, nous utilisons une interpolation bilinéaire pour obtenir la couleur avec une précision au niveau sous-pixel.
Un exemple d'une telle interpolation est donné à la figure ci-contre.
Exemples supplémentaires
Une animation incluant la triangulation en surimpression est présentée plus bas (lien vers le vidéo) :
Finalement, les animations suivantes présentent une vue au ralenti d'un morphage de visage. L'animation de gauche inclus l'affichage de la triangulation utilisée. Dans le cas de l'animation de droite, aucun mélange de couleur n'a été fait, les couleurs provenant toutes uniquement de l'image originale, ce qui permet d'apprécier la déformation induite par le morphage.
Problèmes rencontrés
Choix de la fonction de dissolution et de morphage
Chaque image est générée en utilisant deux paramètres : la fraction de morphage (warp), exprimant la distance entre l'image source et intermédiaire, et la fraction de dissolution, exprimant la distance entre les couleurs de l'image source et intermédiaire. Ces deux constantes doivent être ajustées au fil de l'animation pour obtenir une suite logique dans les images.
Le premier choix possible est d'utiliser une fonction linéaire similaire pour ces deux constantes. Cela donne de bons résultats, mais entraîne quelques conséquences néfastes. Par exemple, dans les exemples donnés plus bas, l'utilisation de deux fonctions linéaires entraîne l'apparition précoce de caractéristiques telles que les lunettes, avant même que le visage n'ait été réellement modifié. Pour éviter ce genre de problème, il est possible de découpler ces deux fonctions. Dans l'exemple de droite, une fonction sigmoïde centrée à 0.5 a été utilisée pour calculer les constantes de dissolution. Comme on peut le constater, le changement de couleur se fait alors plus tard, bien que plus rapidement. Au final, l'appréciation du meilleur résultat reste subjectif.
Absence de certains points de correspondance dans une des images
Dans certains cas, un point de correspondance n'a tout simplement pas d'équivalent dans l'autre image. C'est le cas par exemple des vues urbaines, où de nouveaux immeubles sont apparus au fil du temps. Bien que cela puisse donner des résultats graphiquement intéressants (par exemple l'immeuble qui se "déplie" dans le cas de Place Québec), l'effet est la plupart du temps indésirable, puisque l'algorithme doit transformer une zone inexistante, et exige une désignation habile des points de correspondance.
Une solution potentielle serait de permettre à l'opérateur de désigner des zones où la constante de dissolution ne s'appliquerait pas (la couleur serait prise d'une seule image, source ou cible). Cela permettrait par exemple, dans le cas d'un gratte-ciel, de le voir "pousser" plutôt que d'apparaître rapidement en transparence en combinaison avec une déformation accrue de l'autre image
Calcul du visage moyen et ACP
Visage moyen
Une autre application intéressante du morphage est le calcul du visage moyen. En effet, notre approche nous permet de déformer les visages afin que tous leurs points de correspondances soient superposées. Par la suite, un visage moyen peut être obtenue en prenant simplement la valeur moyenne de chacun des pixels. Le résultat est présenté à droite (notons que l'image n'inclut que les pixels contenus à l'intérieur des points de correspondance; le reste n'étant pas aligné, il n'est pas de beaucoup d'intérêt).
Comme on peut le constater, le visage moyen des 25 étudiants de la classe est un visage assez masculin, ce qui est logique vu la proportion homme/femme de la classe. On remarque la marque que laissent les lunettes des quelques personnes qui en portent, de même que la barbe, qui est un mélange entre les barbes bien fournies de certaines personnes et les visages glabres des autres.
Analyse en composantes principales
L'alignement des visages entraîne un autre bénéfice : nous pouvons utiliser des méthodes d'analyse et de réduction de dimensionnalité supposant cet alignement, ce qui n'est pas le cas en temps normal. Par exemple, nous pouvons produire une analyse en composantes principales (ACP, ou PCA) afin d'extraire les directions de déformation les plus fortes.Pour ce faire, la moyenne des visages est d'abord retirée de tous les visages. Une décomposition en valeurs singulières est par la suite utilisée afin d'extraire les valeurs et vecteurs propres. La figure ci-contre présente les 16 premiers vecteurs propres. Il est à noter que, au vu de la taille d'échantillonage relativement faible (25 données au total), une analyse poussée des vecteurs au delà des quelques premiers n'est pas forcément utile, puisqu'il n'y a tout simplement pas assez de données pour diversifier suffisament les vecteurs propres. Il est probable que certains de ces vecteurs n'expliquent en tout et pour tout qu'une seule personne : on peut par exemple le remarquer en voyant les motifs spiralés présents dans les cheveux de certaines projections, motifs provenant du châle d'une unique étudiante.
Modification du visage moyen à partir des vecteurs propres
À partir des vecteurs propres obtenus à l'étape précédente, il est possible d'extrapoler leurs caractéristiques. Pour ce faire, une image est recomposée en mettant toutes les valeurs propres à zéro, sauf une qui est conservée à 1 (celle du vecteur dont on veut voir l'effet). L'image générée est par la suite additionnée au visage moyen précédemment calculé. Un facteur multiplicatif appliqué à l'image recomposée permet d'ajuster la quantité d'effet voulu. Les images plus bas présentent des exemples d'addition d'images générées à partir de différents vecteurs propres. On voit bien que certains vecteurs se concentrent plus sur les lunettes, d'autres sur la barbe, les cheveux, etc.
Malheureusement, tous les visages étant par définition alignés, il est difficile d'utiliser l'ACP calculée à partir des valeurs de pixel pour modifier un visage. Par contre, une approche alternative aurait pu être de calculer l'ACP non pas sur l'image, mais sur la position des points de correspondance (après en avoir retiré la moyenne afin d'assurer une origine commune). Cette fois, l'ACP aurait pu modéliser la transformation géométrique entre les visages (et non la transformation entre les couleurs des visages), ce qui aurait pu permettre d'obtenir des vecteurs propres plus à même de déformer un visage donné.