Nov 21, 2024

Wiki

Python

Aide

edit SideBar

Search

Les Filtres Matriciels


Filtrage matriciel

Filtres passe-bas : moyenne

Présentation des filtres passe-bas

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.

Le filtre le plus simple

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)$

Le flou uniforme

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.

Les filtres pondérés

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)$

Les filtres pondérés : le flou gaussien

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) $

Travaux pratiques

  1. Réalisez chacun des précédents filtres matriciels.
  2. En créez d'autres, de votre composition (en augmentant la taille de la matrice, etc.).
  3. Altérez une image récupérée sur le web (avec Gimp, en modifiant aléatoirement des pixels, ou en appliquant des filtres spectraux), et utilisez vos filtres matriciels pour améliorer l'image altérée.

Filtres passe-haut

Présentation des filtres passe-haut

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.

Filtre Prewitt

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)$

Filtre Roberts

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)$

Filtre Sobel

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)$

Filtre Kirsch

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)$

Filtre MDIF

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)$

Filtre DOG (Difference Of Gaussian)

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

  • $G1(i,j)=exp(-(i^2+j^2)/ 2 \sigma1^2)$
  • $G2(i,j)=exp(-(i^2+j^2)/2 \sigma2^2)$

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$.

Travaux pratiques

  1. Réalisez les filtres gaussiens, et comparez-les sur des images de votre choix (en noir et blanc et en niveaux de gris).
  2. Faire de meme avec les filtres laplaciens.
  3. Renforcez les contours d'une image.

Le module ImageFilter

Présentation

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.

Comment utiliser ce module

  >>> import Image as im
  >>> import ImageFilter
  >>> tt=im.open('nath.jpg')
  >>> dd=tt.filter(ImageFilter.CONTOUR)
  >>> dd.save('test.jpg')

Description de certains filtres

BLUR
Filtre flou.
CONTOUR
Détermination du contour.
DETAIL
Filtre de détail.
EDGE_ENHANCE, EDGE_ENHANCE_MORE
Filtres de perfectionnement de bord.
EMBOSS
Donne un effet de relief (3D) à l'image.
SMOOTH, SMOOTH_MORE
Filtres de lissage SHARPEN.

Plus de détails dans notre documentation du module sur ce wiki...

Page Actions

Recent Changes

Group & Page

Back Links