sujet

Image TP2
Traitements locaux : filtrage spatial
1
Convolution spatiale : aperçu
La convolution spatiale consiste en la transformation d’une image, où la valeur des pixels est modifiée
en fonction de leurs voisinages locaux, comme l’illustre la figure ci-dessous. Pour effectuer un produit de
convolution (désigné par le symbole ∗ ou parfois ⊗), on utilise un masque de convolution, qui représente la
transformation à effectuer autour du voisinage souhaité. On fait alors « glisser » le masque de convolution
en chaque point de l’image pour obtenir l’image transformée.
Figure 1 – Convolution spatiale : chaque pixel de l’image est modifiée en fonction de son voisinage local.
Les pixels notés « ? » sur la figure illustrent un phénomène appelé effet de bord : à ces emplacements, une
partie de l’information nécessaire pour calculer la transformation n’est pas disponible. Il existe plusieurs
possibilités pour gérer ce phénomène : effet miroir, considérer que les points situés à l’extérieur sont à 0,
ne pas filtrer les bords, rogner les bords, etc.
Définition Soit I une image et M un masque de convolution. En tout point (x, y) situé hors de la zone
affectée par l’effet de bord, le résultat du produit de convolution est donné par :
J(x, y) = (I ∗ M )(x, y) =
XX
u
I(x − u, y − v) × M (u, v)
v
Le domaine de définition de u et v dépend de la taille du masque de convolution. En général, un masque
de convolution est une matrice carrée de dimension impaire, et on considère que l’origine (0, 0) du masque
est au centre.
1
Exemple Considérons un détail de l’image I et un masque de convolution M de taille 3 × 3 définis
comme ci-dessous :
x
x
145 154 140 145 141
137 135 143 149 139
y
150 155 130 157 152
0

148 151 154 144 147
143 150 147 148 143
1/6
0
1/6 1/3 1/6
0
1/6
=
J(x, y) =
y
0
M
I
On a alors :
145
J
1
1
X
X
I(x − u, y − v) × M (u, v)
u=−1 v=−1
1
1
1
1
1
= ( × 154) + ( × 155) + ( × 153) + ( × 157) + ( × 130)
6
6
6
6
3
≈ 145
Dans le fichier Outils.java, complétez la méthode convoluer(...) en suivant les consignes indiquées en commentaire. N’hésitez pas à consulter les commentaires du fichier Masque.java afin de
comprendre comment utiliser cette classe.
2
Lissage et élimination du bruit
Dans cette section, on utilisera des filtres de convolution dont la somme des valeurs est égale à 1, ceci
afin de conserver la dynamique de l’image (i.e. ne pas modifier le contraste).
2.1
Filtre moyen
Comme son nom l’indique, le filtre moyen remplace chaque pixel par la moyenne des pixels de son
voisinage.
h 1 1 1 iIl a pour but de lisser l’image et d’éliminer le bruit. Un exemple de filtre moyen est : M =
1
111
×
9
111
Dans le fichier FiltreMoyen_.java, complétez le code de la méthode run(...) en suivant les
consignes indiquées en commentaire. Vous testerez votre plugin avec des filtres de différentes tailles.
2.2
Filtre gaussien
Comme le filtre moyen, le filtre gaussien a pour objet de lisser l’image et d’éliminer le bruit. Il présente
l’avantage de diminuer l’effet de flou ainsi généré. Le masque de convolution utilisé est une gaussienne
2D. Les coefficients de la matrice sont calculés de la manière suivante :
G(u, v) =
1
u2 + v 2
exp(−
)
2
2πσ
2σ 2
Idéalement, on doit créer un filtre de taille (6σ + 1) × (6σ + 1) pour bien représenter la gaussienne.
2
Dans le fichier FiltreGaussien_.java, complétez le code de la méthode run(...) en suivant les
consignes indiquées en commentaire. Vous testerez votre plugin avec des filtres de différentes tailles.
3
Filtre médian
Le filtre médian a lui aussi pour objet l’élimination du bruit. À la différence des deux précédents, ce
n’est pas un filtre de convolution (dans le sens où la transformation appliquée n’est pas une combinaison
linéaire du voisinage du pixel). Il s’agit de remplacer le niveau de gris du pixel (x, y par la valeur médiande
des niveaux de gris des pixels de son voisinage.
30
10
20
10 250 25
20
25
10
10
20
20
25
25
30
30 250
30
Médiane = 25
Dans le fichier FiltreMedian_.java, complétez le code de la méthode run(...) en suivant les
consignes indiquées en commentaire. Vous testerez votre plugin avec des filtres de différentes tailles.
3