originale | accentuée | originale | accentuée |
En général, l'algorithme prend deux images, calcule les basses fréquences de l'une (avec un filtre gaussien) et les hautes fréquences de l'autre (l'image - l'image filtrée avec un filtre gaussien) et les additionne. L'alignement des deux images est fait par une fonction qui a été mise à notre disposition. Pour obtenir des bons résultats, il faut ajuster les sigmas pour les filtres gaussiens et aussi l'intensité de l'image de hautes fréquences (par multiplication).
originale | originale | hybride | |
---|---|---|---|
1 | |||
2 | |||
source | source | ||
3 | |||
source | source | ||
4 | |||
source | source | ||
5 | |||
source | source |
C'est inutile d'essayer de garder la couleur dans les images de hautes fréquences, car ils sont exclusivement composées d'arêtes. Donc ils n'ont pas de couleur. Cependant, garder la couleur pour les images de basses fréquences peut vraiment améliorer l'effet. Le fait important pour que cela fonctionne bien est de trouver des images où les couleurs marchent aussi pour l'image de hautes fréquences. Ṕar exemple, image 6 marche moins bien en couleur, parce que le cadre orange du vélo et les vêtements ne font pas de belles couleurs pour un loup. Mais il y a des exemples moins évidents aussi. Si on regarde image 8 et 9, on peut voir que j'ai laissé 8 en couleur mais pas 9. À cause de l'alignement presque parfait des lèvres dans 8, le résultat est excellent en couleur. En même temps, les lèvres ne sont pas aussi bien alignées dans 9 et les lèvres rouges de l'image en basses fréquences dérange l'effet.
Pour quelques images, j'ai prétraité l'image avant d'extraire les hautes fréquences, par exemple pour ne pas avoir des détails partout (p.e. 6). Pour l'image 5 j'ai aussi essayé plusieurs versions et là j'ai découvert qu'invertir les couleurs avant d'extraire les détails donne des bons effets.
originale | originale | hybride | ||
---|---|---|---|---|
6 | Mufasa dans les nuages | |||
source | source | |||
7 | Morphage entre homme et femme (mon chum et moi) | |||
privée | privée | |||
8 | L'effet marche super bien ici | |||
privée | privée | |||
9 | Comme j'ai mentionné en haut, les lèvres sont aussi mal alignées que l'image en couleur ne marche pas bien. | |||
privée | privée | |||
10 | Ici, on voit encore un peu le vélo et la personne même quand on regarde l'image de près. Mais c'était voulu pour rendre l'image un peu artistique. Sinon il fallait augmenter le sigma pour enlever encore plus les hautes fréquences. | |||
image privée | source | 11 | Moi en 1996 vs moi en 2016 | |
privée | privée |
1. On commence doucement avec le chaton démon. Le tigre de l'image de base était évidemment un peu trop aggressif et parce qu'il manquait d'oreilles, on mélange trop les images. J'ai finalement décidé d'utiliser un autre tigre |
2. Il y a vraiment des effets bizarres quand on mélange deux images d'une personne à deux ages différents. Ici, l'intensité des détails est trop haut par rapport à l'image des basses fréquences. Et parce que les charactéristiques vont aussi bien ensemble, cela me donne la tête d'enfant. |
||
3. J'ai aussi essayé de changer les images par rapport aux fréquences. Le résultat était encore pire. |
4. Mais rien est aussi affreux que ce monstre-là. J'ai tout de suite décidé de pas utiliser un image où on voit les dents. Il y a quelque chose inquiétante avec des dents superposées sur quelque chose d'autre. |
Les piles laplaciennes contiennent des bandes de fréquences d'une image. On les crée en faisant une pile gaussienne (une suite d'images filtrées par un filtre gaussien avec un sigma de plus en plus grand). Pour obtenir les bandes différentes, on subtrahit toujours les deux images filtrées successives. Finalement, on stocke les bandes différentes et la dernière image filtrée pour pouvoir reconstruire l'image de base
La fonction stacks cree une pile laplacienne (en utilisant une pile gaussienne). On peut voir les bandes de fréquences distinctes dans les exemples. Pour reconstruire une image à partir d'une telle pile, on peut utiliser la foncion rebuild_stacks.
Dali | |
le "tigron" |
Pour sauver de l'espace dans la mémoire (ce qui est vraiment pertinant surtout quand on traite des images de grande taille), on peut implanter une pyramide en lieu d'une pile. Cela veut dire que à chaque couche de la pyramide, l'image filtrée est échantillonnée pour réduire la taille (p.e. dans mon code par un facteur de 2). Sinon le processus est pareil à la pile.
Pour reconstruire l'image, il faut "dééchantillonner" (upsample) l'image avant de l'additionner. Pour eviter des effets aliasing, j'utilise un filtre gaussien après chaque dééchantillonage. Naturellement l'image reconstruite n'est pas exactement la même car des informations ont été perdues en faisant l'échantillonnage.
Les "couches" de la pyramide affichées ont été redimensionnées pour l'affichage, comme ça on voit bien le changement de résolution. Le ratio de l'image change aussi un petit peu à cause de l'échantillonnage.
Dali en pyramide | |
le "tigron" |
reconstruction à partir de la pyramide |
originale | reconstruction à partir de la pyramide |
originale |
Pour mélanger deux images sur les fréquences différentes, il faut utiliser les piles gaussiennes/laplaciennes de l'exercise précédent. Pour chaque image, on crée d'abord les piles (qui consitituent des bandes de fréquences différentes). Puis on crée une "pile" de la masque qui contient la masque avec des fréquences de moins au moins hautes (par exemple en utilisant un filtre gaussien de plus en plus fort). Après on multiplie la masque avec la première image et l'inverse de la masque avec la deuxième image. Cela donne des images avec une bordure de moins en moins dure (avec moins de fréquences hautes) pour les fréquences les plus en plus bas. Ces images sont affichées en bas: Le premier rang contient les bandes de fréquences de la première image, multiplié par la masque et le deuxième rang contient ceux de la deuxième image. Puis on additionne les images, chaque bande de fréquence pour soi (première image du premier rang + première image du deuxième etc). Cela donne le troisième rang, la pile du résultat, avec duquel on peut (re)construire une image en utilisant la fonction rebuild_stacks.
Pour pouvoir utiliser de la couleur d'une façon réaliste, il faut souvent ajuster les images de base à la main car l'algorithme implanté ignore complètement la couleur. Une exemple est en bas, où j'ai changé la couleur du lion pour lui rendre aussi jaune que la dent-de-lion.
originale | originale | masque | mélange | |
---|---|---|---|---|
De loin, le résultat est assez bon, si on regarde de près, on voit un peu la bordure. Ici, j'ai enlevé la couleur parce que c'était trop difficile à mélanger la neige avec l'eau. | ||||
source | source | |||
Comme j'ai mentionné en haut, j'ai changé la couleur du lion avant de mélanger les images. Le résultat est assez bon. | ||||
source | source | |||
Ici il y a des régions où la bordure est presque invisible, mais aussi des régions où on la voit bien (p.e. entre 8h et 9h). Cependant, c'est difficile à dire quelles structures marchent bien. | ||||
source | source | |||
Pour cette image, je n'ai pas changé les couleurs, et cela apparaît un peu sur le résultat. | ||||
privée | source | |||
Ici on voit bien que ce n'est pas seulement la couleur que a un effet sur la bordure mais aussi la luminosité. C'était très difficile de bien ajuster les luminosités et le résultat n'est pas parfait. | ||||
privée | privée | |||
Cependant, cet mélange a vraiment bien fonctionné. Le fait que les deux images ont été fait au même endroit avec la même lumière simplifie extrêmement le mélange. | ||||
privée | privée |
Ce qui est vraiment remarquable est que j'ai fait un traitement du dernier image à la main il y a quelques ans pour un autre tp (et oui c'était voulu que c'est affreux). Quand on compare les résultats, ils sont très semblables, mais j'ai pris beaucoup moins de temps cette fois-ci.
traitement à la main | traitement automatique |