TP1: On s'amuse en fréquences
Par Pierre-Marc Levasseur
Description
La tâche étant assez variée d'une section à l'autre, j'ai mis beaucoup de détail sur mon approche au début de chacune de celles-ci.
De plus, il y a de l'information supplémentaire dans le fichier readme.txt
fourni avec le code.
Toutes les images sur cette page peuvent ĂȘtre vu en plein écran si vous cliquez sur celles-ci.
Les sources pour toutes les images prises sur internet sont dans le bas de la page dans la section Sources.
Réchauffement
Pour accentuer les détails des images de cette section, j'ai simplement pris une impulsion (une matrice avec un 2 comme élément central et des zéros ailleur) à
laquelle j'ai soustrait un filtre gaussien de σ = 4. J'ai ensuite filtré les images avec le filtre résultant et la fonction imfilter
.
Les images originales sont à gauche et les images filtrées sont à droite.
![](images/deer.jpg)
![](images/result-deer.jpg)
![](images/forest.jpg)
![](images/result-forest.jpg)
Images hybrides
Mon approche pour cet algorithme est bien simple, j'ai utilisé des filtres gaussiens pour filtrer les basses fréquences dans les images d'origines. Pour récupérer les
hautes fréquences dans la seconde image, j'ai soustrait l'image originale à l'image filtrée. L'algorithme est implémenté dans le fichier hybridImage.m
.
Les fréquences de coupures sont en bas de l'image lorsque vous les regardez en plein écran.
Voici mon résultat pour la paire d'images fourni.
![](images/result-hybrid-image.jpg)
Résultats sur d'autres images
J'ai utilisé le même algorithme pour ces images. Par contre, j'ai parfois aligné manuellement certaines images pour avoir un plus beau résultat.
![](images/bat.png)
![](images/eagle.jpg)
![](images/darthvader.jpg)
![](images/luke.jpg)
![](images/batman.jpg)
![](images/joker2.jpg)
![](images/tiger.jpg)
![](images/chucknorris.jpg)
![](images/result-tiger-norris.jpg)
Résultat détaillé
Voici l'analyse détaillé de l'image hybride aigle + chauve-souris. Vous pouvez voir en premier l'analyse fréquentielle des images avant qu'elles soient filtrées (aigle à gauche, chauve-souris à droite). Ensuite, on voit l'analyse fréquentielle des images filtrées et finalement l'analyse de l'image hybride.
![](images/unfiltered-bat-eagle-freq.jpg)
![](images/filtered-bat-eagle-freq.jpg)
![](images/image_hybride.jpg)
Crédits supplémentaires: Résultat sur mes photos
Voici le résultat de mon algorithme sur quelques photos que j'ai prises.
![](images/happy.jpg)
![](images/frown.jpg)
![](images/rum.png)
![](images/pepsi.png)
Piles gaussienne et laplacienne
Pour cette partie, j'ai fait un algorithme récursif qui sépare le spectre de l'image en 6 bandes de fréquences. Pour chacune des bandes, l'algorithme filtre les hautes fréquences avec un filtre gaussien (σ = 4) en utilisant la même technique que dans la section précédente (imageOriginale - imageFiltrée). Il fait ses appels récursifs en redimenssionnant l'image originale en deux à chaque étape.
Crédit supplémentaire: J'ai donc implémenté l'algorithme avec une pyramide d'image au lieu d'une pile.
L'algorithme est codé à l'aide de deux fonctions: stacks(image, nombreDeBandes)
et highPassFilter(image, sigma)
.
Voici le résultat de mon algorithme sur l'image Lincoln et Gala. Les hautes fréquence sont en haut à gauche et les basse en bas à droite.
![](images/result-lincoln5.jpg)
![](images/result-lincoln4.jpg)
![](images/result-lincoln3.jpg)
![](images/result-lincoln2.jpg)
![](images/result-lincoln1.jpg)
![](images/result-lincoln0.jpg)
Voici ensuite le résultat de mon algorithme sur l'image hybride de l'aigle et de la chauve-souris de la section précédente.
![](images/result-eagle5.jpg)
![](images/result-eagle4.jpg)
![](images/result-eagle3.jpg)
![](images/result-eagle2.jpg)
![](images/result-eagle1.jpg)
![](images/result-eagle0.jpg)
Mélange multirésolution
Pour faire la "pommange", j'ai fait un algorithme récursif dans la class ImagesMixer
qui divise le spectre fréquentiel des images à l'aide d'une pyramide.
Cet algorithme est très semblable à celui de la section précédente. Il prend donc en argument les deux images à filtrer et le masque. Il fait
5 itérations (donc 5 bandes de fréquences) dans lesquelles il fait tout d'abord un appel récursif (s'il reste des bandes à filtrer) en divisant les images et
le masque par 2. Il filtre ensuite les basses fréquences des images en soustrayant l'image originale avec une version filtrée par un filtre gaussien (σ = 1) de l'image
(voir highPassFilter.m
). Finalement, il combine les images avec la formule suivante:
I = αF + (1 - α)B + Ilf
- où
- I = image finale
- α = masque
- F et B = respectivement, image de devant et de derrière
- Ilf = image combinée des bandes de fréquences précédentes
Crédit supplémentaire: j'ai implémenté mon algorithme pour des images en couleur.
![](images/result-pommange.jpg)
Résultats sur d'autres images
Voici mon algorithme en action sur quelques images. Le résultat est assez convaincant dans la plupart des images. J'ai utilisé un logiciel de dessin (ArtRage Studio) pour aligner certaines parties des images et pour faire les masques. J'ai donc redimmensionné les images de devant et les masques pour qu'ils aient la taille de l'image de derrière.
Les images sont toujours présentées dans l'ordre suivant (de gauche à droite): Devant, Derrière, Masque, Résultat (en dessous).
![](images/joker.jpg)
![](images/Seneca_Crane.jpg)
![](images/mask_seneca.png)
![](images/result-seneca.jpg)
![](images/mailloux.png)
![](images/gandalf.jpg)
![](images/mask_mailloux.png)
![](images/result-gandalf.jpg)
![](images/cat.jpg)
![](images/Kylo_Ren.jpg)
![](images/mask_kyloFace.png)
![](images/result-kyloCat.jpg)
Résultats sur mes photos
Je n'ai pas eu besoin de faire de modification à mon algorithme pour le faire fonctionner sur mes photos. J'ai appliqué la même méthode que sur les images de la section précédente.
![](images/main2.png)
![](images/main1.png)
![](images/mask_main.png)
![](images/result-main.jpg)
![](images/bouteil1.png)
![](images/bouteil2.png)
![](images/mask_bouteil.png)
![](images/result-bouteil.jpg)
Illustration détaillée du procédé
Cette section présente la séparation de chacune des bandes de fréquences pour le premier mélange que j'ai fait sur d'autres images (Seneca Crane + Joker).
![](images/result-senecaFreqBand_seneca0.jpg)
![](images/result-senecaFreqBand_joker0.jpg)
![](images/result-senecaFreqBand_final0.jpg)
![](images/result-senecaFreqBand_seneca1.jpg)
![](images/result-senecaFreqBand_joker1.jpg)
![](images/result-senecaFreqBand_final1.jpg)
![](images/result-senecaFreqBand_seneca2.jpg)
![](images/result-senecaFreqBand_joker2.jpg)
![](images/result-senecaFreqBand_final2.jpg)
![](images/result-senecaFreqBand_seneca3.jpg)
![](images/result-senecaFreqBand_joker3.jpg)
![](images/result-senecaFreqBand_final3.jpg)
![](images/result-senecaFreqBand_seneca4.jpg)
![](images/result-senecaFreqBand_joker4.jpg)
![](images/result-senecaFreqBand_final4.jpg)
![](images/result-senecaFreqBand_seneca5.jpg)
![](images/result-senecaFreqBand_joker5.jpg)
![](images/result-senecaFreqBand_final5.jpg)
Résultat final
![](images/result-seneca.jpg)
Sources
Partie 0:
- Chevreuil: http://www.backcountrygallery.com/
- ForĂȘt: http://www.orderofinterbeing.org/
Partie 1:
- Chauve-souris: http://www.pestvictoria.com/
- Aigle: http://www.robertotoole.com/
- Darth Vader: http://a.dilcdn.com/
- Batman: http://static.comicvine.com/
- Joker: http://i.stack.imgur.com/
- Tigre: http://tigerday.org/
- Chuck Norris: http://www.mrctv.org/
Partie 3:
- Joker : https://i.ytimg.com/
- Seneca Crane : http://vignette4.wikia.nocookie.net/
- Doc Mailloux : http://lapravda.ca/
- Gandalf : https://jesssultaire.files.wordpress.com/
- Chat : http://www.hdwallpapersnew.net/
- Kylo Ren : http://vignette4.wikia.nocookie.net/