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 kitxmlcodeinlinelatexdvp\begin{pmatrix} {P}_{x-1,y-1} & {P}_{x,y-1} & {P}_{x+1,y-1} \\ {P}_{x-1,y} & {P}_{x,y} & {P}_{x+1,0} \\ {P}_{x-1,y+1} & {P}_{x,y+1} & {P}_{x+1,y+1} \end{pmatrix}finkitxmlcodeinlinelatexdvp
Voisinage 5x5 du pixel x,y kitxmlcodeinlinelatexdvp\begin{pmatrix} {P}_{x-2,y-2} & {P}_{x-1,y-2} & {P}_{x,y-2} & {P}_{x+1,y-2} & {P}_{x+2,y-2} \\ {P}_{x-2,y-1} & {P}_{x-1,y-1} & {P}_{x,y-1} & {P}_{x+1,y-1} & {P}_{x+2,y-1} \\ {P}_{x-2,y} & {P}_{x-1,y} & {P}_{x,y} & {P}_{x+1,0} & {P}_{x+2,y} \\ {P}_{x-2,y+1} & {P}_{x-1,y+1} & {P}_{x,y+1} & {P}_{x+1,y+1} & {P}_{x+2,y+1} \\ {P}_{x-2,y+2} & {P}_{x-1,y+2} & {P}_{x,y+2} & {P}_{x+1,y+2} & {P}_{x+2,y+2} \end{pmatrix}finkitxmlcodeinlinelatexdvp
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 kitxmlcodeinlinelatexdvp{NouvelleValeur}_{x,y} = \sum_{i,j}^{} {A}_{i,j}*{P}_{x+i,y+j}finkitxmlcodeinlinelatexdvp
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 kitxmlcodeinlinelatexdvpFacteurPositif = \sum_{i,j}^{ } {A}_{i,j}, \;\; si \; {A}_{i,j}>0finkitxmlcodeinlinelatexdvp
Idem pour le facteur de normalisation négatif, qui est la somme des coefficients négatifs.
facteur de normalisation négatif kitxmlcodeinlinelatexdvpFacteurNegatif = \sum_{i,j}^{ } {A}_{i,j}, \;\; si \; {A}_{i,j}<0finkitxmlcodeinlinelatexdvp
Le facteur de normalisation est le plus grand (en valeur absolu) de ces deux facteurs.
facteur de normalisation du filtre linéaire kitxmlcodeinlinelatexdvpFacteur = max(\left|FacteurPositif\right|, \left|FacteurNegatif\right|)finkitxmlcodeinlinelatexdvp
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 kitxmlcodeinlinelatexdvp\begin{pmatrix} {A}_{-1,-1} & {A}_{0,-1} & {A}_{1,-1} \\ {A}_{-1,0} & {A}_{0,0} & {A}_{1,0} \\ {A}_{-1,1} & {A}_{0,1} & {A}_{1,1} \end{pmatrix}finkitxmlcodeinlinelatexdvp
voisinage 3x3 kitxmlcodeinlinelatexdvp\begin{pmatrix} {P}_{x-1,y-1} & {P}_{x,y-1} & {P}_{x+1,y-1} \\ {P}_{x-1,y} & {P}_{x,y} & {P}_{x+1,0} \\ {P}_{x-1,y+1} & {P}_{x,y+1} & {P}_{x+1,y+1} \end{pmatrix}finkitxmlcodeinlinelatexdvp
multiplication du noyau et du voisinage kitxmlcodeinlinelatexdvp\begin{pmatrix} {A}_{-1,-1}*{P}_{x-1,y-1} & {A}_{0,-1}*{P}_{x,y-1} & {A}_{1,-1}*{P}_{x+1,y-1} \\ {A}_{-1, 0}*{P}_{x-1,y} & {A}_{0, 0}*{P}_{x,y} & {A}_{1, 0}*{P}_{x+1,0} \\ {A}_{-1, 1}*{P}_{x-1,y+1} & {A}_{0, 1}*{P}_{x,y+1} & {A}_{1, 1}*{P}_{x+1,y+1} \end{pmatrix}finkitxmlcodeinlinelatexdvp
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.