Projet de spécialité

Emmanuel Klein, Thomas OBERLIN


 

 

Un nouveau filtre pour le traitement multi-échelle

 

 

Tuteurs : Pierre G Bénard, Joëlle Thollot, Adrien Bousseau

 


Table des matières

Introduction :

 

La décomposition d'images multi-échelles est de plus en plus répandue, car elle permet des traitements complexes différents pour chaque échelle. Ces dernières années ont vu l'apparition et l'utilisation massive de filtres gaussiens non linéaires (Non-Linear Gaussian Filters Performing Edge Preserving Diffusion, V. Aurich and J. Weule, Proceedings of the DAGM Symposium, 1995). Notamment, de nombreuses recherches ont été menées sur le filtre bilatéral (Bilateral Filtering for Gray and Color Images, C. Tomasi and R. Manduchi, Proceedings of the international Conference on Computer Vision, 1998). Cependant, si les qualités du filtre bilatéral sont indéniables, notamment sa capacité à préserver les discontinuités de l'image, il crée des artefacts, principalement des halos autour des zones discontinues.

Nous allons ici étudier un nouveau filtre non-linéaire préservant les bords, introduit par Farbman et. al en 2007, qui pallie à certains défauts du filtre bilatéral, tout en étant également très performant. Le travail a d'abord consisté en une implémentation C++ du filtre. Nous l'avons alors expérimenté sur plusieurs applications importantes, notamment le tone-management pour un travail photographique, ou encore la stylisation d'images et de vidéo.

Principe du filtre weighted least squares (WLS)

Filtre WLS

Il s'agit de transformer l'image d'entrée en une image proche, la plus lisse possible sauf autour de valeurs significatives du gradient. Soit l'image d'entrée g, on va donc calculer l'image u qui minimise la quantité :

$\displaystyle \sum_p(u_p-g_p)^2+\lambda \left[q_{x,p}(u,g)+q_{y,p}(u,g)\right]$

, où les termes $ q_{x,p}$ et $ q_{y,p}$ sont quadratiques en u, et prennent en compte les dérivées de u et g selon l'axe des x et des y. Le filtre WLS pose :

$\displaystyle q_{x,p}(u,g) = \frac{\left(\frac{\partial u}{\partial x} \right)^2_p}{ \left\vert \frac{\partial l}{\partial x} \right\vert ^\alpha _p + \epsilon}$

l étant la log-luminance de l'image g. $ \lambda$ et $ \alpha$ sont les paramètres du filtre, nous allons voir leur influence.

On voit donc que l'importance donnée au terme de discontinuité en x est inversement proportionnel à la discontinuité de la log-luminance (qui se rapproche de notre perception visuelle des contours d'une image). Pour les pixels p où l'image est lisse, ce dernier terme devient prépondérant. Inversement, autour d'un contours, ce terme devient négligeable, et u se rapprochera très fortement de g. Le paramètre epsilon évite d'avoir des valeurs infinies pour une portion d'image constante, sa valeur est typiquement 0.00001.

On définit de même le terme de discontinuité selon y :

$\displaystyle q_{y,p}(u,g) = \frac{\left(\frac{\partial u}{\partial y} \right)^2_p}{ \left\vert \frac{\partial l}{\partial y} \right\vert ^\alpha _p + \epsilon}$

En notations matricielles, notant Dx et Dy des opérateurs différentiels, on obtient l'écriture suivante :

$\displaystyle (u-g)^T(u-g)+\lambda \left( u^TD_x^TAD_xu+u^TD_y^TAD_yu \right)_{ }$

$ D_x$ et $ D_y$ sont des opérateurs différentiels discrets (matrices bi-diagonales). Enfin, en posant $ L_g = u^TD_x^TAD_xu+u^TD_y^TAD_yu$, il s'agit de résoudre le système suivant :

$\displaystyle (I+\lambda L_g)u=g$

On est donc ramené à résoudre un système linéaire creux, puisque la matrice $ L_g$ est penta-diagonale. Pour l'implémentation, on aura utilisé la formule suivante, plus simple :

Décomposition multi-échelle

L'idée ici est de construire une pyramide d'images de plus en plus lisses, ce qui donnera une décomposition multi-échelle. En considérant l'image à peu près constante, l'opérateur $ L_g$ devient un Laplacien homogène, à une constante près. Dès lors, lorsqu'on multiplie $ \lambda$ par une constante $ c^2$, on monte d'un facteur $ c$ dans le domaine des fréquences.

Pour obtenir une pyramide, on va donc itérer le filtre sur l'image, en multipliant à chaque fois $ \lambda$ par un facteur $ c$. On obtiendra alors les versions de plus en plus filtrées $ u_1,u_2,...,u_K$ de $ g$, où $ u_0=g$ et :

$\displaystyle u^{i+1}=WLS(u^i,c^i \lambda,alpha)$

On obtient parallèlement les couches successives de détail $ d_i = u_{i-1}-u_i$.

Exemples

Présentons d'abord le filtrage WLS, et montrons l'influence des paramètres.

Les figures suivantes montre deux décompositions de la même image, pour des paramètres différents.

Image originale et ses deux premières décompositions, faible lissage
Image rock Image dec1 Image dec2

Image originale et ses deux premières décompositions, faible lissage
Image rock Image rockD1 Image rockD2

Applications

Tone Management

Grâce à cette décomposition, on peut aisément augmenter les détails à n'importe quelle échelle. Il suffit, dans notre décomposition $ g = u_K \sum_{i=1}^K d_i$, de pondérer les échelles $ d_i$. Nous avons principalement travaillé sur des décompositions 2 échelles, nous allons présenter ici nos principaux résultats.

La figure qui suit montre plusieurs reconstructions de l'image originale à partir de la pyramide des décompositions. Les détails sont fortement exagérés et peuvent paraitre artificiels, mais cela montre le très bon comportement du filtre WLS : on n'obtient pas d'artefacts comme des halos lumineux.

De gauche à droite : image originale, accentuations des détails fins, accentuations des détails moyens, et combinaison des deux.
Image S Image S1 Image S2 Image S3

Les paramètres ont ici aussi toute leur importance : on présente ici leur influence, en montrant la même image recombinée obtenue à partir de pyramides de décomposition différentes. On observe que pour des paramètres trop élevés, le filtrage est grossier, et les détails augmentés sont de moins en moins fin. Par ailleurs, on observe un halo lumineux parasite. --> $ (\alpha,\lambda)$, le paramètre $ c$ valant toujours $ 1.3$.

Image R1 Image R2 Image R3

Image R4 Image R5 Image R6

Recomposition des images en accentuant les détails, pour différents paramètres de filtrage. De haut en bas et de gauche à droite, Le filtrage WLS est de plus en plus fort.

Cette reconstruction est une des plus simples possible, il existe de nombreuses façons de l'améliorer, pour un rendu plus réaliste notamment. Une de ces façons consiste à augmenter les détails en fonction de l'éloignement à la prise de vue : les éléments du premier plan seront bien plus détaillés, ce qui améliore la perception de la profondeur, et donne une image plus réaliste; Notons que l'inverse est possible également, pour des effets stylistiques.

La figure suivante montre l'utilisation de ce procédé. On a utilisé une décomposition deux échelles, en forçant les détails fins au premier plan, et les détails grossier à l'arrière-plan. Concrètement, cela revient à multiplier le mode $ d_1$ par la carte de profondeur, et le mode $ d_2$ par son inverse. La différence est surtout nette entre les deux dernières images : dans la recomposition inversée, on accentue les détails grossiers, ce qui crée des artefacts autour des feuilles, alors que les briques, au fond, sont très détaillées.

De gauche à droite : image originale, recomposition simple, recomposition avec profondeur, recomposition inversée
Image house-output Image Hres Image HresMap Image HresMapInv

On peut accentuer cet effet stylistique en quantifiant la carte de profondeur au lieu d'utiliser une profondeur continue. Dans le filtrage WLS, on modifie alors les paramètres selon le plan de l'image considéré. Cette technique est plus aprofondie dans la partie suivante, on donne néanmoins un exemple d'utilisation :

De gauche à droite : image originale, filtrage WLS par paliers en utilisant une carte de profondeur quantifiée, et résultat de la recomposition en augmentant les détails
Image house-output Image Hres Image HresMap
On remarque bien que les détails sont de plus en plus grossiers à mesure que l'on s'éloigne de l'objectif. Cela est partiiculièrement visible sur le portillon en bois, au centre.

Comparaison avec le filtre bilatéral

Nous ne rappelons pas ici le principe du filtre bilatéral, on pourra pour cela se référer au site de S. Paris. Ce filtre, non-linéaire et préservant également les contours, a été beaucoup étudié et a donné lieu à de nombreuses application. Nous allons ici comparer les résultats donnés par les deux filtres, pour le Tone-Management sur différentes images.

A gauche, l'image originale. Au centre, la recomposition obtenue par le filtre WLS. A droite, celle obtenue par le filtre bilatéral.
Image S Image Hres Image HresMap
Image house-output Image Hres Image HresMap
Image house-output Image Hres Image HresMap

Stylisation d'images et vidéos

L'un des principaux avantages du fitre WLS est de respecter les bords avec soin. L'idée qui en vient est d'utiliser les filtre WLS pour styliser des photos, en aplanissant les couleurs et ne gardant que les contours principaux.

Exemple sur un village : l'architecture est très bien respectée
Image v Image V1


Ici nous travaillons sur une image préalablement filtrée par l'algorithme WLS. Nous commençons par convertir l'image à un autre format que RGB : le format Lab, qui est supposé respecter davantage la sensibilité de l'oeil humain. En effet nous sommes plus sensibles aux changements de luminosité que des couleurs RGB.

Les différentes étapes de cartoonisation
Procédures de cartoonisation

Sur cette image nous appliquons 2 traitements en parallèle :

Detection des contours
Nous appliquons à l'image l'algorithme de sobel : les gradians horizontaux sont detetés par convolutions de l'image par la matrice Dx :

+1 0 -1
+2 0 -2
+1 0 -1
les gradians verticaux par convolution avec la matrice Dy :
+1 +2 +1
 0  0  0
-1 -2 -1
L'image des bords est obtenue en prenant la norme des 2 gradians, et en supprimant les bords de faibles intensités (qui correspondent à de faibles gradians).

Quantification des couleurs
En parallèle nous quantifions sur l'image la luminance, pous un effet plus cartoon.

Le résultat est une image cartoon qui ne semble pas provenir d'une photo.

Dans l'ordre : Photo, contours, quantification des couleurs, image finale.
Image d1 Image d3 Image d4 Image d5


Utilisation des cartes de profondeurs
Nous pouvons aussi utiliser les cartes de profondeur afin de permettre un effet cartoon plus fidèle. En effet, il est courant que les dessinateurs dessinent le premier plan en détail, alors que l'arrière plan est dessiné grossièrement. L'idée est d'appliquer diffentes valeures du filtre WLS sur une image, selon la profondeur estimée des éléments.

Dans nos exemples nous utilisons 3 échelles, ou la première ne subit qu'un léger filtrage alors que la dernière ne garde que les formes générales. Pour pouvoir distinguer ces 3 zones nous quantifions la carte de profondeur. Nous appliquons 3 filtrages sucessifs à l'image et calculons deux masques qui correspondent à la différence entre le premier filtre et les deux autres. Nous multiplions ensuite ces masques par la zone correspondante (1 si le pixel appartiens à la zone, 0 sinon). Enfin nous calculons la somme de l'image avec les 2 masques.

Figure : De gauche à droite : photo, carte de profondeur, quantification, application à l'image.
Image bottes1 Image bottes2 Image bottes3 Image bottes4

Nous pouvons aussi créer la carte de manière artificielle : soit pour pallier à une absence de carte, soit pour créer un effet de style. On voudra par exemple mettre en valeur un objet au milieu de l'image, en omettant le premier plan.

Figure : De gauche à droite : photo et WLS uniforme, deux exemples de carte de profondeur et le résultat.
Image maison1 Image maison2 Image maison3
Image maison4 Image maison5 Image maison6

Figure : WLS uniforme à droite et montagne mise en arrière-plan à gauche.
Image V2 Image v3

Conclusion

 

On a présenté ici la décomposition modale empirique, ses motivations, ses qualités, en insistant sur son gros inconvénient : l'absence de formalisme et un temps de calcul important.  

 

References

Edge-Preserving Decompositions for Multi-Scale Tone and Detail Manipulation Link
Zeev Farbman - Raanan Fattal - Dani Lischinski - Richard Szeliski

Two-scale Tone Management for Photographic Look Link
Soonmin Bae - Sylvain Paris - Frédo Durand

Single Image Dehazing Link
Raanan Fattal

Real-time Video Abstraction Link
Bruce Gooch - Sven Olsen - Holger Winnemöller

Code source


Librairies utilisées

Cimg Link
Manipulation d'images
CSparse Link
Résolution d'équations linéaraires à matrices creuses