TRAITEMENT D’IMAGES
CHAPITRE 3
CONVOLUTION ET FILTRAGE
D’IMAGES
ISTIC LGLSI2
PLAN DU CHAPITRE
Transformations de voisinage
Produit de convolution
Filtrage d’images
Filtrage dans le domaine spatial
Réduction des dégradations: filtre moyenneur, médian,
Gaussien, passe haut, passe bas
Accentuation des détails: Gradient et Laplacien
Filtrage dans le domaine spectral
Transformation spectrale: transformée de Fourier
Principe du filtrage avec la transformée de Fourier 2/69
TRANSFORMATIONS DE VOISINAGE
La nouvelle valeur d’un pixel tient compte des pixels
appartenant au voisinage du pixel considéré.
Pixel d’origine Pixel résultat
i i
Voisinage
j
j
3/69
TRANSFORMATIONS DE VOISINAGE
• Exemple d’une transformation de voisinage
• La moyenne des 5 pixels voisins.
• Taille du voisinage : 5 pixels voisins, 9 pixels
voisins, 25 pixels voisins.
• Forme du voisinage : carré, rectangle, hexagone,
octogone, ou bien une forme quelconque.
4/69
PRODUIT DE CONVOLUTION
5/69
PRODUIT DE CONVOLUTION
• Le produit de convolution continu d’une fonction f par une
fonction g est défini par :
Cas 1D: f * g ( x) g ( ). f ( x )d
Cas 2D: f * g ( x, y ) g ( , ). f ( x , y ) dd
• La fonction f est la fonction originale
• La fonction g est appelée: noyau de la convolution ou
masque de convolution ou filtre ou fenêtre ou Kernel….
• La fonction résultat est la fonction convoluée (résultat de
la convolution) 6/69
PRODUIT DE CONVOLUTION
Dans le cas discret, la double intégrale est remplacée par une
double somme et on obtient :
f *g(i, j) g(k,l).f (i k, j l)
k l
Propriétés de la convolution:
Commutativité: f *g g* f
Associativité: ( f *g)*h f *(g *h) f *g *h
7/69
Distributivité: f *(g h) ( f * g) ( f *h)
PRODUIT DE CONVOLUTION
• Dans le cas discret, (le cas d’une image numérique), le
noyau de convolution est généralement (mais pas
toujours) une matrice (image) de taille impaire, exemple
3x3 5x5 7x7
• Exemples de noyaux de convolution (3x3) et (5x5):
-1 0 1
-2 0 2
-1 0 1
8/69
ALGORITHME DE LA CONVOLUTION DISCRÈTE
Si le noyau de convolution g est de de taille 3x3 alors F = f*g
(la convolution de f par g) peut être calculée par l’algorithme
suivant:
F = zeros(N,N)
for i = 2:N-1
for j = 2:N-1
for k = 1:3
for l = 1:3
F(i,j)= F(i,j) +g(k,l)*f(i+k-2, j+l-2)
end
end
end
end 9/69
• Remarque: pas de valeurs calculées pour les bords de l’image
ALGORITHME DE LA CONVOLUTION DISCRÈTE
Exemple sur une image avec un noyau de convolution K de
taille 3x3
10/69
ALGORITHME DE LA CONVOLUTION DISCRÈTE
PROBLÈME DES BORDS DE L’IMAGE
Pas de valeurs calculées pour les bords de l’image
15/69
PROBLÈME DES BORDS DE L’IMAGE
Pour calculer les valeurs pour les bords de l’image, nous
avons besoin de points situés à l’extérieur de l’image
16/69
SOLUTIONS POUR LES BORDS DE L’IMAGE
création d’une image de plus grande taille (par
emeple L+2, C+2 pour un noyau 3x3)
Considérer une valeur par défaut (exemple mettre 0).
Miroirisation : imaginer un miroir sur le bord, ceci
provoque l’effet de symétrie.
Périodisation : considérer que l’image est périodique.
Recopiage des valeurs du bord à l’extérieur de l’image.
Ne pas calculer le produit de convolution sur le bord de
l’image.
Pas de solution miracle…
17/69
EXEMPLE D’APPLICATION DU PRODUIT DE
CONVOLUTION
18/69
FILTRAGE D’IMAGES
19/69
FILTRAGE D’IMAGES
• Les techniques de filtrage essayent de réduire les
dégradations qu’a subi l’image.
• Il existe différentes catégories de filtres :
Filtres opérant dans le domaine spatial:
Opèrent généralement par convolution dans
l’espace (x,y) de l’image
Filtres opérant dans le domaine fréquentiel:
Transporter l’image vers un espace fréquentiel en
appliquant soit la transformée de Fourier soit
d’autres transformations
Effectuer une sélection des fréquences
Appliquer la transformée inverse 20/69
FILTRAGE SPATIAL
• L’utilisation principale de la convolution est le filtrage
d’images
• Filtrage d'images
• Filtre moyenneur
• Filtre passe haut
• Filtre passe bas
• Filtre Gaussien
• Rehaussement d’images par accentuation des détails
• Gradient
• Laplcien
21/69
FILTRE MOYENNEUR
• Principe
L’image résultat sera une image filtrée tel que chaque pixel
sera remplacé par la moyenne de son voisinage
• Effets
(+) Réduit le bruit,
(+) Lisse l’image
(-) Rend l’image floue
22/69
FILTRE MOYENNEUR
• Exemples de filtres moyenneurs dont tous les coefficients sont
égaux
• Pour éviter de modifier la luminance de l’image:
• le résultat du produit de convolution sera diviser par le
nombre de coefficients du filtre
• ou on utilise des coefficients non entières (on divise les
coefficients par le nombre de coefficients)
23/69
noyau g (3x3) noyau g (3x3) noyau g (5x5)
FILTRE MOYENNEUR
• Un exemple de filtre moyenneur dont les coefficients ne sont pas
égaux
1 2 1
1/17 2 5 2
1 2 1
noyau g (3x3)
• Le résultat sera une image filtrée telle que chaque pixel sera remplacé
par la moyenne pondérée de son voisinage 3x3
Moyenne = le résultat du produit de convolution sera divisé par
la somme des coefficients du filtre (17) pour éviter de modifier
la luminance de l’image
24/69
Pondérée: attribuer plus de poids aux pixels les plus proches
FILTRE MOYENNEUR
Image originale Filtre moyenneur 5*5 Filtre moyenneur 11*11
25/69
FILTRES D’ORDRE
• Filtres non linéaires ne peuvent pas être
implémenté avec un produit de convolution
fournissent aussi de bons résultats.
• Principe:
considérer les valeurs des pixels appartenant à
un voisinage V
ordonner ces valeurs par ordre croissant
sélectionner la valeur minimale (filtre
minimum)
ou maximale (filtre maximum)
26/69
ou bien médiane (filtre médian)
Ou la kième valeur (filtre d’ordre k)
FILTRE MEDIAN
Exemple: filtre médian
Principe: remplacer la valeur du pixel par la valeur
médiane de son voisinage
27/69
FILTRE MOYENNEUR ET FILTRE MEDIAN
Remarque:
Le filtre médian ne peut pas être implémenté avec un produit de 28/69
convolution
EXERCICE 1
12 5 6 6
Soit une image I,
un bruit impulsionnel est ajouté à cette image : 11 156 9 8
5 6 7 9
I(2,2) = 156
6 9 11 4
1. Appliquer le filtre médian de taille 3*3 sur l’image I et
donner l’image résultat. Pour les bords de l’image, on
va utiliser une valeur par défaut = zéro.
2. Quelle remarque pouvez-vous faire sur l’image
résultat ? (c’est-à-dire dire à quoi a servi le filtre
médian dans cette question?)
3. Proposez le code Matlab pour implémenter ce filtrage. 29/69
EXERCICE 1 : CORRECTION
• Image résultat R:
Pour les bords : mettre à zéro les pixels sur les bords
ajoutés création d’une matrice de taille L+2, C+2
R = 0 6 6 0
5 7 7 6
6 9 9 7
0 6 6 0
• Eliminer le bruit impulsionnel (la valeur 156 correspond à un
bruit impulsionnel remplacé par la valeur 7)
30/69
EXERCICE 1 : CORRECTION
Code Matlab
[n,p]=size(I);
C=zeros(n+2,p+2);
C(2:n+1,2:p+1) = I(1:n,1:p);
R=zeros(n,p);
for i=2:n+1
for j=2:p+1
X=[C(i,j) C(i,j+1) C(i,j-1) C(i+1,j) C(i+1,j+1) C(i+1,j-1) C(i-1,j)
C(i-1,j+1) C(i-1,j-1)];
X=sort(X);
R(i-1,j-1)=X(5);
end
end
figure(); imshow(uint8(C))
• Tester le code ci-dessous sur l’image J
• Code Matlab permettant d’appliquer à l’image 'coins.png' le
bruit impulsionnel (Sel et Poivre). Image bruitée image J
I=imread('coins.png');
J=imnoise(I,'salt & pepper’);
FILTRE PASSE HAUT
• Les filtres passe haut favorisent les hautes
fréquences spatiales qui correspondent aux détails
dans l’image
• Effet: amélioration du contraste
• Noyau du filtre passe haut comporte des valeurs
négatives autour du pixel central
32/69
FILTRE PASSE HAUT
• Objectif:
Accentuer les zones de transitions (hautes
fréquences).
• Avantage:
Éliminer le flou
• Inconvénient:
Amplification du bruit dans les régions homogènes
33/69
FILTRE PASSE BAS
• Les filtres passe bas agissent en sens inverse du
filtre passe haut.
• Effet: adoucissement des détails et réduction du
bruit granuleux.
34/69
FILTRE BASSE BAS
FILTRE GAUSSIEN
• Le filtre Gaussien:
1 x2 y2
h ( x, y ) exp( )
2 2 2
C’est une moyenne pondérée de l'image en
fonction de la distance du pixel voisin
(coefficients de pondération déterminés sur une
fonction Gaussienne) 35/69
est l’écart type de la Gaussienne
FILTRE BASSE BAS
FILTRE GAUSSIEN
• L'effet de ce filtre sur l'image est assez similaire au filtre
moyenneur (moyenne pondérée)
• Les pixels près du centre ont un effet ou un "poids" plus
important que ceux qui sont situés plus loin
• En pratique on effectue une convolution par un masque
• Exemple de masque
4 8 10 8 4
8 17 22 17 8
1
10 22 28 22 10
304
8 17 22 17 8 36/69
4 8 10 8 4
FILTRE BASSE BAS
FILTRE GAUSSIEN
• La largeur du filtre Gaussien est donnée par son
écart-type σ
• Pour un filtre Gaussien si:
σ < 1 : réduction du bruit
σ > 1 : fabrication d’une image qui sera utilisée
pour faire un « masque flou»
37/69
FILTRE BASSE BAS
FILTRE GAUSSIEN
• Si σ est plus petit qu’un pixel le lissage n’a
presque pas d’effet.
• Plus σ est grand, plus la cloche Gaussienne est
large, plus on réduit le bruit, mais plus l’image
filtrée est floue.
• Si σ est choisi trop grand, tous les détails de
l’image sont perdus.
On doit donc trouver un compromis entre la
quantité de bruit à enlever et la qualité de l’image 38/69
en sortie
REHAUSSEMENT D’IMAGES PAR ACCENTUATION
DES DÉTAILS
• Calcul du Gradient
• Quelques opérateurs Gradient
Gradient de Sobel
Gradient de Prewitt
• Calcul du Laplacien
39/69
GRADIENT ET LAPLACIEN
• Les détails correspondent généralement à des changements de
niveau de gris = les contours de l'image
• Ils peuvent être mis en relief par la dérivée première ou bien
par la dérivée seconde
– Pas de changement dérivée première est nulle
– Transition dérivée première passe par un maximum et
dérivée seconde passe par zéro
Image avec 2 régions
Profil
40/69
Dérivée première
Dérivée seconde
GRADIENT ET LAPLACIEN
• En 2D on parle de Gradient et de Laplacien
2 f 2 f
G ( f ( x , y )) f / x f x 2 y 2
2
f /y
• Gradient est un vecteur dont le module donne la pente
maximale et la direction donne la direction de la plus forte
pente.
• Une des approximation du module du gradient :
G(f(x, y)) f(x, y) f(x1, y) f(x, y) f(x, y 1) 41/69
GRADIENT
• L'approximation la plus sommaire du gradient dans la
direction x consiste à prendre la différence entre deux pixels
voisins en utilisant le masque de convolution 1 -1
1
dans la direction y
-1
1
• On utilise plus souvent 1 0 -1 , respectivement 0 qui
-1
produisent des frontières plus épaisses mais bien centrées
• Ces opérations étant très sensibles au bruit, on les combine en
général avec un filtre lisseur dans la direction orthogonale42/69
à
celle de dérivation, par exemple par le noyau 1 2 1
GRADIENT
• Le calcul des dérivées directionnelles en x et en y
revient finalement à la convolution avec les noyaux
suivants, respectivement :
Masques de Sobel
• fx(i,j) = (f*hx)(i,j)
• fy(i,j) = (f*hy)(i,j) -1 0 1 -1 -2 -1
-2 0 2 0 0 0
-1 0 1 1 2 1
Noyau hx Noyau hy
43/69
GÉNÉRATION DE L’IMAGE REHAUSSÉE
• Une fois la méthode d’approximation du gradient choisie,
l’image rehaussée par le gradient peut être générée de
différentes manières selon l’application.
Méthode 1 Méthode 4
g ( x, y ) G ( f ( x, y )) G ( f ( x, y ))
g ( x, y )
si G ( f ( x, y )) Seuil
L sin on
Méthode 2 Méthode 5
G ( f ( x, y )) si G ( f ( x, y )) Seuil
g ( x, y ) g ( x, y ) L si G ( f ( x, y )) Seuil
f ( x, y ) sin on
Méthode 3 Méthode 6: Utilisation du module
et
L si G ( f ( x , y )) Seuil de la direction du Gradient pour la 44/69
g ( x, y )
f ( x, y ) sin on détection des contours
DÉTECTION DES CONTOURS AVEC LE
GRADIENT
Méthode 6: détection des contours
45/69
DÉTECTION DES CONTOURS AVEC LE
GRADIENT
Le principe de la détection de contours par
l'utilisation du gradient consiste à:
• calculer d'abord le gradient de l'image dans deux
directions orthogonales puis le module du
gradient.
• effectuer une sélection des contours les plus
marqués, c'est-à-dire les points de plus fort
contraste par un seuillage adéquat, les directions
des contours étant orthogonales à la direction
α0 déterminée en tout pixel de l'image 46/69
DÉTECTION DES CONTOURS AVEC LE
GRADIENT
En considérant l'image dans un repère orthogonal (Oxy) tel
que (Ox) désigne l'axe horizontal et (Oy) l'axe vertical,
le gradient de l'image (ou plutôt de la luminance f ) en
tout point ou pixel de coordonnées (x,y) est désigné par :
Le module du gradient permet de quantifier
l'importance du contour mis en évidence, c'est-à-dire
l'amplitude du saut d'intensité relevé dans l'image
La direction du gradient permet de déterminer l'arête
présente dans l'image. En effet, la direction du gradient
est orthogonale à celle du contour
47/69
48/69
GRADIENT DE SOBEL
Gradient de Sobel
• Gradient horizontal et vertical
-1 0 1 -1 -2 -1
-2 0 2 0 0 0
-1 0 1 1 2 1
Noyau Gx Noyau Gy
Résultat de la convolution: rehaussement du contour
49/69
Original Horizontal (Gx) Vertical (Gy) Vert+horiz
Noyau [-1 0 1]
Image originale
50/69
GRADIENT DE PREWITT
Gradient de Prewitt
• Gradient horizontal et vertical
-1 0 1 1 1 1
-1 0 1 0 0 0
-1 0 1 -1 -1 -1
Noyau Gx Noyau Gy
Résultat de la convolution: rehaussement du contour
51/69
LAPLACIEN
• L'approximation par différences finies la plus
simple de la dérivée seconde est la convolution par
le noyau 1 2 1 pour l'approximation de 2 f
1 2x
2 f
• et 2 pour l'approximation de 2
y
1
52/69
LAPLACIEN
53/69
EXERCICE 2
• Soit l’image im1 suivante
• Appliquer le filtre linéaire défini par le masque 1x3 suivant
1 0 1
puis représenter le résultat sur une matrice img1.
1
• Appliquer le filtre linéaire défini par le masque 3x1 suivant 0
puis représenter le résultat sur une matrice img2.
1
• Pour les bords de l’image, adopter la méthode de
miroirisation.
• Calculez l’image module selon la formule
• Donnez le code Matlab qui correspond à ce filtrage
54/69
EXERCICE 2 : CORRECTION
• Solution adoptée pour les bords :
Miroirisation (imaginer un miroir sur le bord)
Création d’une matrice de taille L+2, C+2 : augmenter la
taille de l’image (ajouter 2 lignes, 2 colonnes)
La ligne 1 copie de la ligne 1 originale de l’image
La ligne n+2 copie de la ligne n originale de l’image
La colonne 1 copie de la colonne 1 originale de l’image
La colonne « c+2 » copie de la colonne « c » originale de
l’image
Les pixels des coins copie des pixels des coins de
l’images originale.
55/69
EXERCICE 2 : CORRECTION
img1 img2
-1 -2 -2 -1
-1 -1 -1 13
-1 -2 12 13
-2 -2 12 11
-1 12 11 -2
-2 12 11 -6
13 11 -6 -4
-1 13 -2 -4
IMM
2 3 3 14
3 4 24 24
3 24 22 8 56/69
14 24 8 8
EXERCICE 2 : CORRECTION
[n,c]=size(im1);
for i=2:n+1
img1=zeros(n,c);
for j=2:c+1
img2=zeros(n,c);
img1(i-1,j-1) = imbord(i-1,j)-
imbord(i+1,j);
imbord=zeros(n+2,c+2);
end;
end;
for i=1:n
for j=1:c
for i=2:n+1
imbord(1,j+1)=im1(1,j);
for j=2:c+1
imbord(n+2,j+1)=im1(n,j);
img2(i-1,j-1) = imbord(i,j-1)-
imbord(i+1,1)=im1(i,1);
imbord(i,j+1);
imbord(i+1,c+2)=im1(i,c);
end;
end;
imbord(i+1,j+1)=im1(i,j);
for i=1:n
end;
for j=1:c
end;
MM(i,j) = abs(img1(i,j)) +
abs(img2(i,j)); 57/69
%%On n’a pas besoin des 4 pixels
end
%%(1,1) (1,c+2) (n+2,1) (n+2,c+2)
end
%%dans les calculs
FILTRAGE OPÉRANT DANS LE DOMAINE
FRÉQUENTIEL
• Transporte l’image vers un espace fréquentiel en
appliquant soit la transformée de Fourier soit
d’autres transformations, appelés transformations
spectrales
• Principe
Appliquer la transformation spectrale
Effectuer une sélection des fréquences
Applique la transformée inverse (transporter l’image
dans le domaine spatial)
58/69
TRANSFORMATIONS SPECTRALES:
• Il y a plusieurs transformations spectrales:
• Transformée de fourrier
• Walsh
• Hadamard
• Cosinus
• Transformée en ondelettes
• On s’intéresse dans ce cours à la Transformée de
Fourrier
59/69
TRANSFORMÉE DE FOURIER
• La transformée de Fourier fait partie de toute une
famille de transformations qui porte l’image de
son espace d’origine dit « spatial » vers un
deuxième espace dit « fréquentiel ».
• Elle est réversible puisqu’il est possible de
retrouver la fonction de départ à partir de sa
transformée.
60/69
TRANSFORMÉE DE FOURIER
Transformée de Fourier 2D continue : (x,y) coordonnées
spatiales et (u, v) coordonnées fréquentielles
TF directe : F (u , v ) f ( x, y )e ( 2 j ( ux vy ))
dxdy
f(x, y) F(u,v)e
TF inverse : (2j(ux vy))
dudv
61/69
TRANSFORMÉE DE FOURIER DISCRÈTE
Soit f(x,y) définie par une matrice d’échantillons
régulièrement espacés :
N : Le nombre de lignes
M : Le nombre de colonnes
x : Le pas d’échantillonnage selon x
y : Le pas d’échantillonnage selon y
posons :
f ( x, y ) f ( x 0 x.x, y 0 y.y )
62/69
TRANSFORMÉE DE FOURIER DISCRÈTE
Alors la TF-2D discrète est donnée par :
N 1M 1
F (u ,v) 1 f(x, y)exp( 2 j(ux / N vy / M ))
MN x 0 y 0
et sa transformée inverse est donnée par :
N 1M 1
f(x, y)F(u,v)exp(2j(ux/ N vy/ M))
u 0 v 0
63/69
TRANSFORMÉE DE FOURIER : INTÉRÊT
• Composantes fréquentielles en 2d
basses fréquences spatiales: u2+v2 faible
hautes fréquences spatiales: u2+v2 élevé
v
64/69
TRANSFORMÉE DE FOURIER : INTÉRÊT
• Dans le domaine spectral
les basses fréquences représentent les grandes surfaces
homogènes et les parties floues
les hautes fréquences représentent les contours, plus
généralement les changements brusques d'intensité et enfin
le bruit.
65/69
TRANSFORMÉE DE FOURIER : INTÉRÊT
• Objectif: isoler le signal du bruit
• Hypothèse: le bruit et le signal utile vont être portés par des
composantes fréquentielles différentes
Signal BF (basses fréquences),
bruit HF (hautes fréquences)
• Débruitage: mettre les composantes fréquentielles
correspondant aux hautes fréquences à zéro
66/69
TRANSFORMÉE DE FOURIER: PROPRIÉTÉS
Produit de convolution:
La transformée de Fourier d'un produit de
convolution est le produit des transformées de
Fourier
TF[f(x)*g(x)] F(u).G(u)
Dans le domaine spectral (ou fréquentiel), le produit
de convolution se fait par multiplication
67/69
FILTRAGE DANS LE DOMAINE SPECTRAL
• Dans le domaine spatial, le filtrage se fait par le produit
de convolution
• Dans le domaine spectral (ou fréquentiel), il se fait par
multiplication
68/69
FILTRAGE DANS LE DOMAINE SPECTRAL
Principe du filtrage dans le domaine spectral
f(x,y) TF
F(u,v)
Image
d’entrée F(u,v) ×H(u,v)
h(x,y) TF TF-1
H(u,v)
Masque
f(u,v) *h(u,v)
Image filtrée
69/69