Les filtres dits passe-bas ont généralement pour but de réduire les parasites (bruits de mesure).
Ils agissent par moyenne sur un voisinage et suppriment donc les détails.
Présentons le premier de ces filtres, le plus simple :
On remplace chaque pixel par la moyenne des pixels au-dessus, en-dessous, au centre, à droite et à gauche.
Cela revient à appliquer le masque matriciel, dit filtre carré :
$\frac{1}{5} \left( \begin{array}{ccc} 0 & 1 & 0 \\ 1 & 1 & 1 \\ 0 & 1 & 0\end{array}\right)$
Cette technique générale admet pour variante le Flou uniforme (uniform blur), qui permet l'atténuation des changements brusques d'intensité.
Le noyau de convolution est ici :
$\frac{1}{9} \left( \begin{array}{ccc} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1\end{array}\right)$
On effectue donc la moyenne arithmétique des valeurs du voisinage.
On peut aussi imaginer ne pas attacher la même importance à chaque pixel, dans la moyenne.
On obtient alors des filtres pondérés, comme :
$\frac{1}{16} \left( \begin{array}{ccc} 1 & 2 & 1 \\ 2 & 4 & 2 \\ 1 & 2 & 1\end{array}\right)$
Ou encore :
$\frac{1}{8} \left( \begin{array}{ccc} 0 & 1 & 0 \\ 1 & 4 & 1 \\ 0 & 1 & 0\end{array}\right)$
On peut encore imaginer appliquer une matrice de taille 5, comme dans le flou gaussien (gaussian blur)
$\frac{1}{273} \left( \begin{array}{ccccc} 1 & 4 & 7 & 4 & 1 \\ 4 & 16 & 26 & 16 & 4 \\ 7 & 26 & 41 & 26 & 7 \\ 4 & 16 & 26 & 16 & 4 \\1 & 4 & 7 & 4 & 1 \\\end{array}\right)$
Il permet aussi l'atténuation des changements brusques d'intensité : on calcule encore la moyenne -pondérée- du voisinage (les pixels les plus proches ont un plus grand poids).
Ses coefficients sont calculés ainsi :
$ M_{i,j} = exp \left( \frac{-(i^2+j^2)}{2 \sigma^2} \right) $
Ces filtres ont pour but d'augmenter le contraste et de mettre en évidence les contours.
Notez qu'on définit un contour comme une discontinuité locale de l'intensité lumineuse.
Le filtre Prewitt est notre premier exemple de filtre de détection de contours.
On met ici en évidence la différence d'intensité en suivant les axes vertical et horizontal.
On effectue la somme des deux images obtenues respectivement avec les noyaux
$\frac{1}{3} \left( \begin{array}{ccc} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1\end{array}\right)$
et
$\frac{1}{3} \left( \begin{array}{ccc} -1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1\end{array}\right)$
Le filtre Roberts est un autre exemple de filtre élémentaire de détection de contours.
On met ici en évidence la différence d'intensité en suivant les diagonales de l'image.
On effectue, ici aussi, la somme des deux images obtenues respectivement avec les noyaux
$\left( \begin{array}{ccc} 0 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & -1 & 0\end{array}\right)$
et
$\left( \begin{array}{ccc} 0 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1\end{array}\right)$
Le filtre Sobel est semblable aux deux précédents filtres (même finalité, même utilisation).
On effectue encore la somme des deux images obtenues respectivement avec les noyaux
$\frac{1}{4} \left( \begin{array}{ccc} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1\end{array}\right)$
et
$\frac{1}{4} \left( \begin{array}{ccc} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1\end{array}\right)$
Le filtre Krisch est identique aux trois précédents filtres (même finalité, même utilisation).
On effectue encore la somme des deux images obtenues respectivement avec les noyaux
$\frac{1}{15} \left( \begin{array}{ccc} -3 & -3 & 5 \\ -3 & 0 & 5 \\ -3 & -3 & 5\end{array}\right)$
et
$\frac{1}{15} \left( \begin{array}{ccc} -3 & -3 & -3 \\ -3 & 0 & -3 \\ 5 & 5 & 5\end{array}\right)$
Le filtre MDIF est semblable aux précédents filtres (même finalité, même utilisation), sauf qu'il utilise des noyaux de taille 5.
Le principe est ici de calculer la différence d'intensité (suivant les axe vertical et horizontal), en modulant l'importance des pixels par une loi gaussienne.
On retrouve le principe de détection horizontale et verticale :
$\frac{1}{12} \left( \begin{array}{ccccc} 0 & -1 & 0 & +1 & 0 \\-1 & -2 & 0 & +2 & 1 \\-1 & -3 & 0 & +3 & 1 \\-1 & -2 & 0 & +2 & 1 \\0 & -1 & 0 & +1 & 0 \\\end{array}\right)$
et
$\frac{1}{12} \left( \begin{array}{ccccc} 0 & -1 & -1 & -1 & 0 \\-1 & -2 & -3 & -2 & -1 \\0 & 0 & 0 & 0 & 0 \\1 & 2 & 3 & 2 & 1 \\0 & 1 & 1 & 1 & 0 \\\end{array}\right)$
Comme son nom l'indique, ce filtre effectue une soustraction entre 2 gaussiennes. Comme chaque gaussienne peut être vue comme un filtre conservant certaines fréquences, le filtre DOG correspond donc à un filtre passe-bande.
Les coefficients constituants le noyau du filtre sont obtenus en soustrayant deux gaussiennes dont les variances $\sigma1$ et $\sigma2$ sont différentes :
$F(i,j)=G1(i,j)-G2(i,j)$
avec
Voici le noyau que l'on obtient pour une taille de 7 par 7
$\frac{1}{28} \left( \begin{array}{ccccccc} 0 & 0 & 1 & 1 & 1 & 0 & 0\\ 0 & 1 & 1 &1 & 1 & 1 & 0\\ 1 & 1 & -1 & -4 & -1 & 1 & 1\\ 1 & 1 & -4 & -8 & -4 & 1 & 1\\ 1 & 1 & -1 & -4 & -1 & 1 & 1\\ 0 & 1 & 1 &1 & 1 & 1 &0\\ 0 & 0 & 1 & 1 & 1 & 0 & 0\\ \end{array} \right)$
pour $\sigma1^2=2$ et $\sigma2^2=1$.
Le module Image est en fait une partie du projet PIL (Python Imaging Library)
Un autre module de ce projet est ImageFilter, qui permet d'appliquer des filtres (pré-programmés) à une image donnée.
Ces filtres sont : BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE, EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN.
>>> import Image as im >>> import ImageFilter >>> tt=im.open('nath.jpg') >>> dd=tt.filter(ImageFilter.CONTOUR) >>> dd.save('test.jpg')
Plus de détails dans notre documentation du module sur ce wiki...