Filtrage linéaire

Le filtrage linéaire

Les filtres linéaires sont une classe particulière de filtres, dont les propriétés mathématiques les rendent intéressants à utiliser.

5.1 Principe des filtres linéaires

Dans le cas d'un filtrage linéaire de l'image, les opérations impliquées ne sont que des additions (ou soustractions) et multiplications (ou divisions) par des valeurs constantes. En pratique, cela consiste à réaliser une moyenne pondérée de la valeur des pixels du voisinage. Par exemple, une opération courante consiste à remplacer la valeur de chaque pixel par la valeur moyenne de ses voisins. La nouvelle valeur du pixel I(u,v) est déterminée par l'équation suivante :

filtre moyenneur sur un voisinage 3x3
filtre moyenneur sur un voisinage 3x3

On peut classer les filtres linéaire en fonction de leur effet sur l'image de départ. Les filtres moyenneurs réduisent le bruit tout en lissant les structures. Les filtres dérivatifs permettent de mettre en évidence les bords des structures, et sont très utilisés pour détecter les contours. Les filtres dérivatifs du second ordre sont une alternative aux filtres dérivatifs simples, et permettent aussi de mettre en évidence les contours.

5.1.1 Filtres moyenneurs

Les filtres moyenneurs, comme leur nom l'indique, calculent la moyenne, éventuellement pondérée, des pixels situés dans le voisinage de chaque pixel. Cette famille de filtres permet de réduire le bruit dans l'image, ce qui rend les zones homogènes plus lisses. Par contre, les contours sont fortement dégradés, et les structures trop fines peuvent devenir moins visibles.

Filtres plats

Les filtres qui calculent une moyenne directe des pixels sont appelés filtres plats (flat smoothing). Ils utilisent en général des voisinages carrés (3x3, 5x5...). Pour un filtre plat de taille 3x3, la matrice de voisinage correspondante est la suivante :

Noyau de convolution pour un filtre moyenneur 3x3
Noyau de convolution pour un filtre moyenneur 3x3

Pour des filtres plats de taille n x n, la matrice est de la forme :

Noyau de convolution pour un filtre moyenneur NxN

Le résultat d'un filtre plat avec trois tailles de filtre différentes est donné sur la figure 5.1.

Différents filtres plats sur une image en niveaux de gris
Différents filtres plats sur une image en niveaux de gris

Figure 5.1: Influence de la taille du voisinage sur le résultat d'un filtre plat. En dessous, on montre les profils d'intensité des niveaux de gris le long d'une ligne horizontale passant au niveau de l'aile de l'avion.

Moyennes pondérées

On peut vouloir pondérer le poids associé à la valeur de chaque voisin. En particulier, on peut supposer que l'influence d'un voisin proche est plus importante que celle d'un voisin éloigné. On utilise donc aussi des filtres pondérés selon la distance au pixel central :

Noyau de convolution pour un filtre gaussien 3x3
Noyau de convolution pour un filtre gaussien 3x3

Les pondérations les plus classiques sont d'utiliser un noyau gaussien ou parabolique. Pour un noyau gaussien, les coefficients sont calculés à partir de la distance au pixel central du noyau du filtre :

Noyau de convolution gaussien

Un noyau discret 5 x 5 approchant un filtrage par un noyau gaussien avec sigma=2 est le suivant :

Noyau de convolution pour un filtre Gaussien 5x5

5.1.2 Filtres dérivatifs

Dans une image en niveaux de gris, les contours des structures d'intérêt peuvent être mis en évidence en utilisant des filtres linéaires qui calculent les variations de niveaux de gris. Pour cela on utilise des noyaux qui calculent la différence entre les niveaux de gris dans une direction, et les niveaux de gris dans la direction opposée. Les filtres de Prewitt, par exemple, sont de la forme :

eqFiltresPrewitt

Résutlat d'un filtre gradient dans la direction horizontale
Résutlat d'un filtre gradient dans la direction horizontale
Résultat d'un filtre gradient dans la direction verticale
Résultat d'un filtre gradient dans la direction verticale

Figure 5.2: Une image en niveau de gris, et le résultat d'un filtre de Prewitt dans les directions horizontale et verticale. Les images filtrées ont été renormalisées entre 0 et 255.

Le résultat de leur application sur une image en niveaux de gris est donné figure 5.2. Un filtre assez similaire est le filtre de Sobel, qui donne un poids plus important aux pixels plus proches du pixel central :

eqFiltresSobel

Il est aussi possible de considérer les directions diagonales, en orientant différemment les coefficients :

eqFiltresGradientDiag

L'image finale des contours est obtenue en combinant les résultats des filtres Prewitt ou Sobel dans plusieurs directions. Une combinaison pratique est de calculer le module des directions orthogonales (Figure [fig:Resultat-Contours]), pour obtenir une image gradient :

eqn_normeGradient

Extraction de contours par filtre de Prewitt
Extraction de contours par filtre de Prewitt
Extraction de contours par filtre de Sobel
Extraction de contours par filtre de Sobel

Figure 5.3 : Résultat de la détection des contours en utilisant les fitres de Prewitt (à gauche) ou de Sobel (à droite), et en calculant le module sur les directions horizontales et verticales.

5.2 Autres filtres classiques

5.2.1 Filtres d'ordre

Les filtres d'ordre considèrent l'ensemble des pixels du voisinage, classés par ordre croissant d'intensité, et sélectionnent le i-ème pixel de la liste pour l'affecter au résultat. Les filtres les plus utilisés de cette famille sont les filtres min, max, et médian.

Le filtre médian, comme sont nom l'indique, sélectionne la valeur médiane des pixels du voisinage. Pour un voisinage carré 5x5, par exemple, les valeurs des 25 voisins sont ordonnées par ordre croissant, et la 13-ième valeur est gardée comme résultat.

Filtres médians
Filtres médians

Figure 5.4 : Influence de la taille du voisinage sur le  résultat d'un filtre médian. En dessous, on montre les profils d'intensité des niveaux de gris le long d'une ligne horizontale passant au niveau de l'aile de l'avion. À comparer avec la figure équivalente pour les filtres moyenneurs (Figure 5.1).

L'avantage du filtre médian est qu'il permet de réduire fortement le bruit dans l'image, et qu'il préserve beaucoup mieux les bords que les filtres moyenneurs.

Les filtres minimum et maximum ordonnent l'ensemble des pixels du voisinage, et sélectionnent soit la plus petite ou la plus élevée. Cette famille de filtre permet de supprimer des petits détails très lumineux ou très sombres, mais affecte fortement la taille des objets.

Filtres de minimum et maximum dans le voisinage sur une image d'avion
Filtres de minimum et maximum dans le voisinage sur une image d'avion

Figure 5.5 : Influence de la taille du voisinage sur le résultat des filtres min et max.

Le filtre de dynamique locale (« range filter ») permet de quantifier si un pixel est dans une zone homogène ou non. Il se calcule à partir de la différence entre les filtres minimum et maximum. Il donne des résultats souvent assez similaires à ceux du gradient. Un avantage est que les résultats peuvent être codés avec le même type de données que l'image d'origine, alors que le gradient nécessite en général de passer par des nombre à virgule flottante.

Filtre de dynamique locale sur une image d'intensité représentant un avion
Filtre de dynamique locale sur une image d'intensité représentant un avion

Figure 5.6 : Calcul du filtre de dynamique locale sur une image d'avion.

Il existe de nombreux autres filtres de réduction du bruit dans les images numériques. Parmi les plus connus, on peut citer les filtres de Nagao, de Kuwahara, ou encore le filtre bilatéral.

5.3 Traitement des images couleur

Le traitement des images couleurs pose parfois quelques difficultés, du fait que chaque pixel est représenté non pas par une valeur, mais par un ensemble de valeurs. Le même problème se rencontre pour le traitement des images multicanaux ou multispectrale.

Une solution radicale consiste à convertir l'image en niveaux de gris, et à ne travailler que sur l'image d'intensité. Cette approche présente l'inconvénient de perdre la richesse de l'information couleur, mais est parfois la plus rapide à mettre en oeuvre.

Une approche plus satisfaisante est l'approche marginale, qui consiste à séparer les différents canaux, et à travailler séparément sur chacun des canaux qui peuvent être vus comme des images en niveaux de gris. Il est parfois préférable de d'abord changer l'espace de représentation des couleurs afin de mieux séparer les différentes informations. En particulier, les espaces HSV ou Lab se révèlent souvent très utiles. Les résultats des traitements sur les différents canaux peuvent ensuite être recombinés, pour former une nouvelle image couleur ou en niveaux de gris.

Le traitement des images couleur peut aussi se faire en tenant compte de la nature vectorielle de l'information fournie par chaque pixel. Cette approche globale nécessite de développer des algorithmes spécifiques, et est donc moins souvent représentée dans la palette des outils disponibles.