Les filtres usuels en traitement d'images

Xavier Philippeau

Cet article a pour objectif de présenter les filtres communément utilisés en traitement d'images.

- Titre : Les filtres usuels en traitement d'images

- Auteur : Xavier Philippeau

- Parution : 15 octobre 2007

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2012 Xavier Philippeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Convention de représentation d'une image

- III. Définition du Filtrage

- III-A. Filtrage Global

- III-B. Filtrage Local

- III-B-1. Filtrage Local Linéaire

- III-B-2. Filtrage Local Non-Linéaire

- IV. Flou uniforme (uniform blur)

- V. Flou Gaussien (gaussian blur)

- VI. PREWITT

- VII. ROBERTS

- VIII. SOBEL

- IX. KIRSCH

- X. MDIF

- XI. Difference of Gaussian (DOG)

- XII. Laplacian of Gaussian (LOG)

- XIII. Coupe mediane (median cut)

- XIV. Diffusion

- XV. KUWAHARA

- XVI. Symmetric Nearest Neighbor (SNN)

- XVII. Déparasitage ( Despeckle )

- XVIII. Harris

I - Introduction

Le filtrage d'image à pour but d'améliorer la qualité d'une image numérique.

Le terme qualité peut prendre plusieurs sens suivant la raison qui nécessite d'effectuer cette amélioration. Par exemple, on parle de qualité visuelle lorsqu'on cherche à avoir un meilleur aspect de l'image ou de qualité du signal lorsqu'on cherche à atténuer les distorsions liées aux techniques de numérisation.

Le filtrage manipule uniquement les données de l'image numérisée. On ne fait aucune supposition sur ce que représente l'image. Le résultat obtenu suite à un filtrage dépend donc énormément de la qualité du signal de l'image d'origine. Si le signal est très détérioré, le filtrage seul sera très peu efficace. Dans ce genre de situation le filtrage est juste une première étape dans un traitement plus complexe qui fera intervenir des informations sémantiques sur l'image (modèle, …).

Chaque filtre cherche à atténuer un type de défaut bien précis. Il n'y a pas de filtre universel capable de corriger tous les défauts. Il faut choisir les bons filtres suivant les défauts que vous désirez corriger. Ce document à pour but de vous présenter les principaux filtres utilisés en traitement d'image.

II - Convention de représentation d'une image

Dans le reste de ce document, on considérera qu'une image est stockée sous forme d'un tableau à deux dimensions (largeur * hauteur).

Image[x][ y]
0 <= x (entier) < largeur
0 <= y (entier) < hauteur

Chaque élément du tableau représente la valeur du pixel de l'image de coordonnées correspondantes. L'élément d'index (0,0) correspond au pixel en haut à gauche de l'image, et l'élément (largeur-1,hauteur-1) correspond au pixel en bas à droite de l'image :

structure de stockage d'une image

Le type de valeur du pixel dépend du format de l'image. Dans ce document, nous nous limiterons aux deux formats suivants :

- Image à niveaux de gris (NDG): la valeur du pixel est un entier représentant l'intensité du gris, variant de 0 (noir) à 255 (blanc).

- Image à couleurs additives (RVB) : la valeur du pixel est un triplé d'entiers (R,V,B) représentant les intensités des 3 couleurs de base, Rouge, Vert et Bleu, chacun variant entre 0 et 255.

III - Définition du Filtrage

Le principe du filtrage est de modifier la valeur des pixels d'une image, généralement dans le but d'améliorer son aspect. En pratique, il s'agit de créer une nouvelle image en se servant des valeurs des pixels de l'image d'origine.

N'entrent pas dans la catégorie du filtrage toutes les transformations de l'image d'origine : zoom, découpage, projections, …

III-A - Filtrage Global

Dans le filtrage global, chaque pixel de la nouvelle image est calculé en prenant en compte la totalité des pixels de l'image de départ. Dans cette catégorie on trouve, par exemple, les opérations sur les histogrammes ou les opérations qui nécessitent de passer dans l'espace de Fourier.

III-B - Filtrage Local

Dans le filtrage local, chaque pixel de la nouvelle image est calculé en prenant en compte seulement un voisinage du pixel correspondant dans l'image d'origine. Il est d'usage de choisir un voisinage carré et symétrique autour du pixel considéré. Ces voisinages sont donc assimilables à des tableaux à deux dimensions (matrices) de taille impaire.

Voisinage 3x3 du pixel x,y

Voisinage 5x5 du pixel x,y

Gestion des bords

Lorsque le pixel considéré est proche du bord de l'image, certains points du voisinage sont en dehors de l'image d'origine. Il convient alors de choisir une stratégie pour gérer ces pixels extérieurs. Les stratégies couramment employées :

- Mise à zéro : Si un pixel du voisinage est en dehors de l'image d'origine, sa valeur est considérée comme nulle. C'est à dire : Image[-1][y]=0

- Continuité : Si un pixel du voisinage est en dehors de l'image d'origine, sa valeur est celle du pixel le plus proche qui est dans l'image d'origine. C'est à dire : Image[-1][y]= Image[0][y]

- Miroir : Si un pixel du voisinage est en dehors de l'image d'origine, sa valeur est celle du pixel symétrique par rapport au bord de l'image. C'est à dire : Image[-1][y]= Image[1][y]

- Sphérique : Si un pixel du voisinage est en dehors de l'image d'origine, sa valeur est celle du pixel correspondant si l'image était projetée sur une sphère. C'est à dire : Image[-1][y]= Image[Largeur-1][y]

III-B-1 - Filtrage Local Linéaire

Le filtre local est dit linéaire si la valeur du nouveau pixel est une combinaison linéaire des valeurs des pixels du voisinage.
combinaison linéaire des pixels du voisinage

avec i,j variant entre -h et +h, la demi taille du voisinage (pour 3x3 h=1, pour 5x5 h=2, …)
et Ai,j = valeur, entière ou réelle, spécifique au filtre linéaire.

Normalisation

Si la valeur obtenue n'est dans les limites imposées par le format d'image (entier(s) entre 0…255), alors la valeur doit être normalisée. Le facteur de normalisation peut être facilement calculé en cherchant la valeur maximale (positive) et minimale (négative) que peut atteindre la combinaison linéaire.

La valeur maximale est atteinte lorsque tous les pixels associés aux coefficients positifs ont la valeur maximale (255) et ceux associés aux coefficients négatifs ont la valeur minimale (0). Il suffit donc de faire la somme des coefficients positifs pour connaître le facteur de normalisation positif.

facteur de normalisation positif

Idem pour le facteur de normalisation négatif, qui est la somme des coefficients négatifs.

facteur de normalisation négatif

Le facteur de normalisation est le plus grand (en valeur absolu) de ces deux facteurs.

facteur de normalisation du filtre linéaire

Une fois la combinaison linéaire calculée, il suffit de diviser le résultat par le facteur de normalisation (et de convertir en entier, si besoin). La valeur obtenue peut être négative.

Une fois la normalisation effectuée, les valeurs obtenues sont dans la plage [-255,+255]. La conversion finale à effectuer (pour être dans la plage [0,255]) dépend du type de filtre et du résultat visuel souhaité : seuillage à zéro, mise à l'échelle, valeur absolue, …

Noyau

Il est d'usage de présenter les coefficients sous forme d'une matrice (appelée noyau de convolution) facilitant ainsi la mise en correspondance avec les valeurs du voisinage.

noyau de convolution 3x3

voisinage 3x3

multiplication du noyau et du voisinage

La nouvelle valeur du pixel Px,y est alors la somme des éléments de la dernière matrice (au facteur de normalisation près).

III-B-2 - Filtrage Local Non-Linéaire

Si le filtre ne peut pas être exprimé par une combinaison linéaire, il est appelé " non-linéaire ". Les filtres non-linéaires sont plus complexes à mettre en œuvre que les filtres linéaires. Cependant les résultats obtenus avec les filtres non-linéaires sont très souvent de meilleure qualité que ceux obtenus par les filtres linéaires.

IV - Flou uniforme (uniform blur)

- Description : Atténuation des changements brusques d'intensité

- Noyau : noyau=3x3 normalisation=9

- Calcul du noyau : tous les coefficients sont à 1.

- Principe : calculer la moyenne arithmétique des valeurs du voisinage

- Exemple :

Image originale

Flou uniforme

V - Flou Gaussien (gaussian blur)

- Description : Atténuation des changements brusques d'intensité

- Noyau : noyau=5x5 normalisation=273

- Calcul du noyau : coefficients du noyau gaussien

- Principe : calculer la moyenne pondérée des valeurs du voisinage. Les pixels du voisinage qui sont proches du pixel central ont un poids plus fort (= plus d'influence) que ceux qui sont plus éloignés.

- Exemple :

Image originale

Flou gaussien

VI - PREWITT

- Description : Détection des contours

- Noyau :

noyau 3 x 3
Détection verticale
normalisation=3

noyau 3 x 3
Détection horizontale
normalisation=3

- Calcul du noyau : les coefficients symétriques par rapport à l'axe vertical/horizontal sont de signes opposés. La somme des coefficients est nulle.

- Principe : Calculer la différence d'intensité de part et d'autre de l'axe vertical/horizontal

- Exemple :

Image originale

Somme des résultats obtenus avec les 2 noyaux

noyau vertical (valeur absolue, échelle logarithmique)

noyau horizontal (valeur absolue, échelle logarithmique)

VII - ROBERTS

- Description : Détection des contours

- Noyau :

noyau 3 x 3
Détection -45°
normalisation=1

noyau 3 x 3
Détection +45°
normalisation=1

- Calcul du noyau : les coefficients symétriques par rapport aux diagonales sont de signes opposés. La somme des coefficients est nulle.

- Principe : Calculer la différence d'intensité de part et d'autre des diagonales

- Exemple :

Image originale

Somme des résultats obtenus avec les 2 noyaux

noyau +45° (valeur absolue, échelle logarithmique)

noyau -45° (valeur absolue, échelle logarithmique)

VIII - SOBEL

- Description : Détection des contours

- Noyau :

noyau 3 x 3
Détection verticale
normalisation=4

noyau 3 x 3
Détection horizontale
normalisation=4

- Calcul du noyau : les coefficients peuvent être calculés grâce à la formule d'Asfar :

- Principe : Calculer la différence d'intensité de part et d'autre de l'axe vertical/horizontal, en pondérant l'importance des pixels suivant leur distance au pixel central.

- Exemple :

Image originale

Somme des résultats obtenus avec les 2 noyaux

noyau vertical (valeur absolue, échelle logarithmique)

noyau horizontal (valeur absolue, échelle logarithmique)

IX - KIRSCH

- Description : Détection des contours

- Noyau :

noyau 3 x 3
Détection verticale
normalisation=15

noyau 3 x 3
Détection horizontale
normalisation=15

- Calcul du noyau : les coefficients d'un coté de l'axe vertical/horizontal sont positifs. Les coefficients de l'autre coté (et sur l'axe) sont négatifs et tous égaux. La somme des coefficients est nulle.

- Principe : Calculer la différence d'intensité de part et d'autre de l'axe vertical/horizontal

- Exemple :

Image originale

Somme des résultats obtenus avec les 2 noyaux

noyau vertical (valeur absolue, échelle logarithmique)

noyau horizontal (valeur absolue, échelle logarithmique)

X - MDIF

- Description : Détection des contours

- Noyau :

noyau 3 x 3
Détection verticale
normalisation=12

noyau 3 x 3
Détection horizontale
normalisation=12

- Calcul du noyau : les coefficients représentent la dérivée première sur x (resp. y) d'une gaussienne G(i,j). C'est a dire :

- Principe : Calculer la différence d'intensité de part et d'autre de l'axe vertical/horizontal, en pondérant l'importance des pixels par une loi gaussienne.

- Exemple :

Image originale

Somme des résultats obtenus avec les 2 noyaux

noyau vertical (valeur absolue, échelle logarithmique)

noyau horizontal (valeur absolue, échelle logarithmique)

XI - Difference of Gaussian (DOG)

- Description : Détection des contours (2nd ordre)

- Noyau :

noyau 7 x 7
sigma1² = 2.0, sigma2² = 1.0
normalisation=28

- Calcul du noyau : les coefficients sont le résultat de la soustraction de 2 gaussiennes de variances différentes :

- Principe : Un filtre gaussien peut être vu comme un filtre passe-bas (seule les basses fréquences sont conservées), d'où l'effet de flou observé dans le filtre " flou gaussien ". En effectuant une soustraction de 2 gaussiennes, on a alors l'équivalent d'un filtre passe-bande.

- Exemple :

Image originale

Difference of Gaussian

XII - Laplacian of Gaussian (LOG)

- Description : Détection des contours (2nd ordre)

- Noyau :

noyau 3 x 3
sigma² = 1.0
normalisation=4

noyau 5 x 5
sigma² = 4.0
normalisation=16

- Calcul du noyau : somme des dérivées secondes sur x et y de la gaussienne G(i,j).C'est à dire :

Le coefficient central est ajusté de manière à ce que la somme des coefficients du filtre soit égale à zéro.

- Principe : Le laplacien mesure la rapidité des changements d'intensité sur le voisinage.

- Exemple :

Image originale

Laplacian of Gaussian 5x5

XIII - Coupe mediane (median cut)

- Description : atténuation du bruit (impulsions)

- Principe : prendre dans le voisinage la valeur la moins extrême. Pour cela, on crée une liste des valeurs du voisinage, puis on trie cette liste et on prend la valeur qui se trouve au milieu de la liste. Cette valeur " médiane " est la plus éloignée des deux extrêmes :

- Exemple :

Image bruitée (impulsionnel 20%)

Coupe Mediane 5x5 sur bruit impulsionnel

Image bruitée (gaussien 20%)

Coupe Mediane 5x5 sur bruit gaussien

XIV - Diffusion

- Description : atténuation du bruit

- Principe : atténuer les différences d'intensité entre le pixel central et ses voisins. Pour chaque voisin, on calcule la différence d'intensité avec le pixel central. Plus la différence est faible, plus elle est propagée vers le pixel central. Cela permet d'uniformiser les zones d'intensité proche et de conserver les forts contrastes (et donc les contours).

En pratique, cela revient à calculer une " moyenne pondérée " des voisins du pixel central. Les poids tiennent compte de la différence d'intensité avec le pixel central. Malik et Perona ont proposé les fonctions suivantes pour calculer les poids :

ou " s " représente la différence d'intensité et " k " est un facteur permettant de modifier la forme de la courbe.

La nouvelle valeur du pixel est calculée en ajoutant la somme des propagations à la valeur actuelle.

Le facteur " delta " permet de contrôler la force de la propagation, et d'éviter ainsi de saturer la nouvelle valeur. En pratique, on utilise une faible valeur de " delta " (de l'ordre de 0.1) et on effectue plusieurs itérations.

- Exemple :

Image bruitée (gaussien 20%)

Diffusion delta=0.1, k=1, 35 itérations

Diffusion delta=0.1, k=5, 35 itérations

Diffusion delta=0.1, k=10, 35 itérations

XV - KUWAHARA

- Description : atténuation du bruit avec conservation des contours

- Principe : calculer la valeur moyenne des sous-voisinages et conserver celle qui a la plus petite variance. Les 4 sous-voisinages 3x2 dans un voisinage 5 x 5 sont numérotés ainsi:

- Exemple :

Image bruitée (gaussien 20%)

filtre de Kuwahara

XVI - Symmetric Nearest Neighbor (SNN)

- Description : atténuation du bruit avec conservation des contours

- Principe : calculer la valeur moyenne des pixels voisins qui ont une valeur proche du pixel central. Les paires de voisins dans un voisinage 3 x 3 sont identifiées ainsi:

Pour chacune des 4 paires de voisins, on conserve la valeur qui est la plus proche du pixel central. On fait ensuite la moyenne des 4 valeurs.

- Exemple :

Image bruitée (gaussien 20%)

filtre SNN

XVII - Déparasitage ( Despeckle )

- Description : atténuation du bruit (impulsionnel)

- Principe : remplacer une valeur statistiquement aberrante par la moyenne des voisins. Pour cela, on calcule la moyenne et l'écart type des valeurs des voisins. On calcule ensuite l'écart entre le pixel central et cette moyenne. Si cet écart est plus grand que l'écart type (à un facteur près), alors on considère que la valeur du pixel central est aberrante et on la remplace par la moyenne des voisins.

- Exemple :

Image bruitée (impulsionnel 20%)

déparasitage 5x5

XVIII - Harris

- Description : détecteur de coins

- Principe : rechercher les virages brusques dans le contour d'une image. La première étape consiste à mesurer la courbure des bords de l'image. La seconde étape consiste à rechercher les maxima locaux de cette courbure qui seront alors considérés comme les coins.

Pour calculer la courbure d'un bord, on utilise la formule suivante :

où A est la matrice de Harris, c'est à dire la moyenne des dérivées partielles sur le voisinage:

Ix et Iy représentent les dérivées de l'intensité suivant x et suivant y. On peut calculer ces valeurs en utilisant, par exemple, les filtres de Sobel horizontaux (pour Ix) et verticaux (pour Iy) sur chaque pixel du voisinage.
Le paramètre lambda permet de contrôler la tolérance de la détection des coins. Habituellement, on choisi lambda entre 0.05 et 0.15.
Une amélioration consiste à remplacer la moyenne arithmétique par une moyenne pondérée (par exemple avec une gaussienne).

- Exemple :

Image originale

Image + Mesure de la courbure (harris 5x5). Les + représentent les maxima locaux