Gif-4105 - Photographie Algorithmique

Projet de session: Tamisage et décomposition en fréquence

Alexandre Picard - 111 080 041

Travail présenté à M. Jean-François Lalonde

Remis le 3 mai 2018

Description du projet

Suivant les instructions de la publication de SIGGRAPH 2016 Band-Sifting Decomposition for Image Based Material Editing, les résultats ont été reproduit dans matlab. Le travail est assé simple et c'est un peu l'objectif. L'objectif est surtout de faire des retouches d'images sur de la vidéo en direct. Alors, les gros traitement lourds ne sont pas une bonne idée pour avoir un nombre d'images par secondes intéressant. Pour y arriver, la publication suggère de prendre une image en cie*LAB de lui appliquer un certain filtre passe-haut/bas, ensuite de tamiser les valeurs selon leurs amplitudes, conserver seulement les valeurs positives/négatives et finalement d'ajouter cette transformation à l'image initiale pour obtenir des résultats intéressants. Dans l'ensemble, ces opérations demandent peu de temps de calcul et peuvent donc être faites en temps réel sur un flux vidéo. Le projet n'a pas été jusqu'à faire du temps réel, mais les résultats ont été reproduits sur un grand nombre d'images aux caractéristiques variées.

Algorithme

Explications techniques

Dans cette section, les détails des filtres et de tamisage appliqué sur l'image seront expliqués.

Représentation de l'image.

Contrairement à tous les projets faits dans ce cours, la représentation RGB n'a pas été utilisée. Pour ce travail, l'idée est de manipuler la luminance de chaque pixel et la meilleure représentation de celle-ci est donné dans l'espace de couleur CIE lab. Pour faire simple, chacun des pixels est alors représenté par un vecteur de 3 dimensions, L pour la luminance, A pour les chrominances de vert à rouge et B pour les chrominances de bleu à jaune. Les détails exacts pour la gestion de la chrominance m'échappent. Dans le contexte, ces détails ne sont vraiment pas pertinents. Nous n'utiliserons que la dimension de la (L)uminance. Voici une représentation plus imagée de l'espace de couleur CIE lab:


source

Filtre en fréquence

La publication n'est pas précise sur le type de filtre à utiliser. Mais avant de parler de filtre, il est important d'appliquer une manipulation de contraste local sensible aux contours des images. La méthode localcontrast fait se travail efficacement et sans trop poser de questions. Ensuite, il est possible d'appliquer un filtre linéaire passe-bas classique tel qu'un filtre gaussien. Pour obtenir un filtre passe-haut, il suffit de faire 1 - Fpasse-bas. Voici une représentation des filtres utilisés:

Fpasse-bas

size = 50 sigma = 7
Fpasse-haut

size = 50 sigma = 7




Ce qui peut être intéressant c'est de regarder la distribution des valeurs suite au filtrage. Comme on peut voir dans les figures de plot, la distribution semble segmentée en deux zones pour les basses fréquences. Une zone entre 0 et 10 et une autre entre 40 et 70. Cette séparation n'est absolument pas présente avec les hautes fréquences. C'est tout à fait normal, le filtre passe-haut est un filtre qui élimine les valeurs "DC". Donc, il normalise les valeurs à zéro. Nous allons alors jouer avec ces valeurs.

Tamisage en amplitude

Le tamisage en amplitude est une méthode empirique de filtrage sur la distribution des amplitudes de chaque pixel en valeur absolue. Le paramètre sera δ pour le threashold. Comme mentionné plus haut, les valeurs ne sont pas distribuées de façon uniforme et il est possible de tamiser ces deux groupes pour ajuster le bruit de l'image. En termes de programmation, il s'agit de garder ou non un pixel s'il est plus grand que telle amplitude en valeur absolue. La valeur d'un pixel qui n'est pas conservée est zéro.
Note: Cette étape est réalisée seulement sur les hautes fréquences.

mean(mean(abs( varHF ))) = 3.5581
Valeur utilisée δ = 4





Après cette étape, trois images ont été créées à partir de l'image d'origine.

Tamisage en signe

Exactement comme le tamisage en amplitude, ici, l'idée c'est de tamiser la décomposition entre les valeurs positives et les valeurs négatives. La procédure est appliquée sur les images de hautes et de basses amplitudes.









Cette dernière étape donne alors 5 images qui peuvent être utilisées comme outils de modification d'une image.

Représentation des différentes possibilités de tamisage.

Utilités

C'est ici que l'art commence. Pour présenter de façons claire et consise les images utilisées dans le procédé de modification d'une image, un code de trois lettres est utilisé. La première lettre c'est pour le choix de filtre passe (H)aut ou (L)Bas. La deuxième pour les (H)autes ou (L)basses amplitudes, la lettre (A) pour tous est aussi utilisable. Et finalement, (P)ositif, (N)égatif ou (A)ll comme dernier critère. Donc par exemple, le code HHP veut dire hautes-fréquences, hautes-amplitudes et les valeurs positif. Les derniers paramètres de l'algorithme sont le facteur de multiplication λ et s'il s'agit d'une multiplication ou d'une addition.

Chaque résultat a des paramètres différents qui seront indiqués clairement. Pour récapituler, il y a:

Résultats

Le point d'entré de code est main.m

Images de la publication


Projet Orange
Image initiale

size = 50
σ = 7
δ = 4
Plus mouiller

code = "HHP"
Opérateur +
λ = 3
Pourrite

code = "HLN"
Opérateur +
λ = 3
Trop parfaite

code = "HLP"
Opérateur -
λ = 2

Demoiselle asiatique

Image initiale

size = 50
σ = 4
δ = 4
Plus mouiller

code = "HHP"
Opérateur +
λ = 2
Plus vieille

code = "HLN"
Opérateur +
λ = 2
Plus jeune

code = "HLN"
Opérateur -
λ = 2

Évier en acier innoxidable

Image initiale

size = 50
σ = 2
δ = 4
Neuf

code = "HLA"
Opérateur -
λ = 2
Usé

code = "HLA"
Opérateur +
λ = 5
Vraiment usé

code = "HLN" δ = 9
Opérateur +
λ = 5

La chope d'acier

Image initiale

size = 50
σ = 5
δ = 19
Poli

code = "HHN"
Opérateur +
λ = 5
Brossé

code = "HLP"
Opérateur +
λ = 5
Défaut du métal

code = "HLN"
Opérateur +
λ = 5

Metal 01

Image initiale

size = 50
σ = 5
δ = 10
Poli

code = "HHN"
Opérateur -
λ = 2
Shiny

code = "HLP"
Opérateur +
λ = 5
Usure du temps

code = "HLA"
Opérateur +
λ = 3

Divan de cuire

Image initiale

size = 50
σ = 5
δ = 10
Usé

code = "HLP"
Opérateur +
λ = 5
En tissu?

code = "HLP" σ = 9
Opérateur +
λ = 2

Les bonnes patates

Image initiale

size = 50
σ = 5
δ = 4
Terreuse

code = "HLN"
Opérateur +
λ = 3
Brune

code = "HLP"
Opérateur +
λ = 3

Images personnelle

Le grand axe

Image initiale

size = 50
σ = 5
δ = 30
Trace dans la neige

code = "HLN"
Opérateur +
λ = 10

Le beau mur vert si parfait

Image initiale

size = 50
σ = 5
δ = 30
Il n'est pas si parfait !

code = "HLN"
Opérateur +
λ = 5

Chute Rivière-du-loup

Image initiale

size = 50
σ = 9
δ = 4
La rivière est plus agité

code = "HHP"
Opérateur +
λ = 2
Masque utilisé
Sortie de la fonction

Discussion

La procédure de la publication suivie était plutôt simple à implanter, mais la difficulté du projet vient lors de la création des résultats. Il n'y a pas de solution parfaite toute les images et il est toujours possible d'ajuster les paramètres pour obtenir de meilleurs résultats. Dans ce projet, la taille du filtre est restée constante afin de réduire et de stabiliser une des variables. Malgré cette limitation auto-imposée, les résultats ressemblent beaucoup à ceux de la documentation fournie avec la publication. D’ailleurs, la plupart des résultats qui ont été créés pour ce projet utilisent des images de la publication. Si le projet avait eu plus de temps, l'utilisation d'un flux vidéo comme entré aurait pus être testée. Ainsi, les performances en temps réel auraient été prouvées.