Pré-traitement & Amélioration
MIDMS – Département GE – BABA 42 modifié : le 28 Sep. 2024
Prétraitement d’images
❑ Transformations géométriques : l’image est considérée comme
un seul bloc. On peut par exemple inverser ses couleurs, filtrer
un bruit ou même appliquer une rotation avec un angle
déterminé
❑ Operations sur un voisinage : pour changer le niveau de gris
d’un pixel on a besoin de savoir simplement celui des pixels
situés au voisinage du pixel considéré (exemple : filtrage)
❑ Operations pixel à pixel : un pixel est modifié sans
considération des pixels qui l’entourent.
Les opérations sur les pixels sont la simple méthode pour
faire des travaux de prétraitements où une image a besoin
d’être modifiée avant de passer au traitement principal.
MIDMS – Département GE – BABA 43 modifié : le 28 Sep. 2024
Opérations arithmétiques
❑ Opération par application d’une simple fonction % = !(#)
pour chaque valeur du pixel.
❑ La fonction ! est définit de [0 … 255] à [0 … 255]
❑ En plus, il faut s’assurer que le résultat est dans [0 … 255]
par :
255 23 % > 255,
%←0
0 23 % < 0.
a–b
a. Ajout de 128
b. Suppression de 128
ajouter 128 et toutes les valeurs
supérieures à 127 seront égales à 255
soustraire 128 et toutes les valeurs
inferieures à 127 seront égales à 0
MIDMS – Département GE – BABA 44 modifié : le 28 Sep. 2024
Opérations arithmétiques : fonctions imadd() et imsubtract()
❑ Exemple sur l’image greyscale [Link] :
>> x=imread('[Link]'); x1=imadd(x,128); x2=imsubtract(x,128);
x. [Link] x1. Ajout de 128 x2. Soustraction de 128
256×256 uint8 256×256 uint8 256×256 uint8
❑ Plusieurs détails manquent (contours) dans les images x1 et x2
❑ Le complément d’une image est donné par :
>> img=imcomplement(x);
MIDMS – Département GE – BABA 45 modifié : le 28 Sep. 2024
Opérations arithmétiques : fonctions immultiply() et imdivide()
a–b–c
a. Division par 2
b. Multiplication
par 2
c. Division par 2
et ajout de
128
>> x3=imdivide(x,2);x4=immultiply(x,2);x5=imadd(x3,128);
x3. Division par 2 x4. Multiplication par 2 x5. Division par 2, ajout de 128
MIDMS – Département GE – BABA 46 modifié : le 28 Sep. 2024
Histogramme
❑ Comptage des pixels ayant un niveau de gris donné
❑ Il représente la densité de probabilité des niveaux de gris
❑ La fonction imhist() affiche l’histogramme d’une image :
>> x=imread('[Link]');
>> imhist(x), axis tight;
a–b
a. [Link]
291×240
uint8
b. Histogramme
avec
ajustement
d’échelle
valeurs de gris
sont groupées
au centre, le
contraste est
pauvre
MIDMS – Département GE – BABA 47 modifié : le 28 Sep. 2024
Histogramme : problème de contraste
❑ Le contraste est la différence de luminosité entre deux
couleurs. Par exemple, le noir contre le blanc.
❑ Contraste chaud/froid : entre couleurs "chaudes" (comme
rouge et l'orange) et celles "froides" (comme le bleu et le vert).
❑ Un contraste insuffisant entre un texte et l'arrière-plan peut
entraîner des problèmes de compréhension notamment pour
les personnes ayant des handicaps visuels.
MIDMS – Département GE – BABA 48 modifié : le 28 Sep. 2024
Étendage d’histogramme
❑ La fonction imadjust(x,[a,b],[c,d]) étende le contraste
$−& !
!=# ( (* − + ) + +
'−&
paramètre gamma & décrit la forme de la
fonction aux coordonnées (a,c) et (b,d)
gamma = 1
$−& !
!=# ( (* − + ) + +
'−&
paramètre gamma & décrit la forme de la
fonction aux coordonnées (a,c) et (b,d)
MIDMS – Département GE – BABA 49 modifié : le 28 Sep. 2024
Étendage d’histogramme
❑ L’utilisation du paramètre gamma seul peut être suffisante
pour changer considérablement l’apparence de l’image.
>> x=imread('[Link]'); x1=imadjust(x,[.3 .8],[.1 .9],0.5);
>> imhist(x1), axis tight;
a–b
a. Pout_adj.tif
291×240
uint8
image ajustée
b. Histogramme
étendu.
valeurs de gris
sont groupées au
centre, le contraste
est pauvre
❑ L’étendage du contraste il dépend de paramètres utilisateur.
MIDMS – Département GE – BABA 50 modifié : le 28 Sep. 2024
Égalisation d’histogramme
❑ La nouvelle valeur du pixel est : ! : nombre de niveaux de gris
# : nombre de pixels
;! + ;" + ⋯ + ;#$" + ;# #! : nombre d’occurrence du
(7 − 1) : > niveau de gris d’indice k
;
❑ La fonction histeq() égalise automatiquement l’histogramme:
>> x=imread('[Link]'); x1=histeq(x); imhist(x1), axis tight;
a–b
a. Pout_histeq.tif
291×240
uint8
image ajustée
b. Histogramme
égalisé.
l’égalisation de
l’histogramme
peut se faire de
façon manuelle
par l’utilisateur
MIDMS – Département GE – BABA 51 modifié : le 28 Sep. 2024
Opération sur un voisinage : filtrage
❑ Modification d'un pixel en fonction de ses voisins
❑ Filtrage linéaire
• Domaine spatial : filtres FIR 2D (masque), filtres IIR
• Domaine fréquentiel dans le plan de Fourier
Filtre Image filtrée
Image f(x,y)
h(x,y) g(x,y)
g(x,y) = h(x,y)*f(x,y)(convolution bidimensionnelle)
G(u,v) = H(u,v) . F(u,v)
❑ Filtrage non-linéaire dans le domaine spatial
MIDMS – Département GE – BABA 52 modifié : le 28 Sep. 2024
Filtrage spatial FIR 2D : masque de convolution
❑ Un pixel f(i,j) est remplacé par une somme pondérée de lui-
même et des pixels de son voisinage
❑ Convolution par une réponse impulsionnelle finie appelée
masque de convolution
?(3, @) = A A ℎ(C, D )!(3 − C, @ − D)
(&,()*+
❑ f est l’image d’origine
❑ h est le masque de convolution
❑ W défini un voisinage
MIDMS – Département GE – BABA 53 modifié : le 28 Sep. 2024
Filtrage spatial FIR 2D : masque de convolution
'(), +) = - - ℎ(/, 0 )1() − /, + − 0)
(",$)&'
MIDMS – Département GE – BABA 54 modifié : le 28 Sep. 2024
Exemple de filtre moyenneur 3×3
❑ W: voisinage 3×3
❑ Le masque de convolution ℎ(C, D) :
1 k = -1,0,1
si -2 < k < 2 et -2 < l < 2
ℎ(3, @) = E9 l = -1,0,1
0 sinon
a b c
d e f 1
(G + H + I + J + K + ! + ℎ + 3)
g h i 9
❑ Pixel e prend la valeur moyenne de ses voisins (lui inclus)
MIDMS – Département GE – BABA 55 modifié : le 28 Sep. 2024
Exemple de filtre moyenneur 3x3
❑ Appliquons ce filtre sur une matrice donnée par :
>> x=uint8(10*magic(5)) filtre décrit par une équation linéaire ou
x= par sa matrice :
170 240 010 080 150
230 050 070 140 160 1
(' + ) + * + + + , + - + ℎ + / )
040 060 130 200 220 9
100 120 190 210 030 1 1 1 1
11 1 1 2
110 180 250 020 090
9 1 1 1
❑ Soit le coin haut de gauche :
170 240 010 080 150
230 050 070 140 160 >> p1=round(mean2(x(1:3,1:3)))
040 060 130 200 220 p1 =
100 120 190 210 030 111
110 180 250 020 090
MIDMS – Département GE – BABA 56 modifié : le 28 Sep. 2024
Exemple de filtre moyenneur 3x3
❑ Pour le voisin suivant (k croissant) :
170 240 010 080 150
230 050 070 140 160 >> p2=round(mean2(x(1:3,2:4)))
040 060 130 200 220 p2 =
100 120 190 210 030 109
110 180 250 020 090
❑ On parcoure tous les pixels valides
❑ En final :
111 109 129 La matrice est le résultat
110 130 150 de filtrage de x par le
filtre moyenneur 3×3
131 151 149
MIDMS – Département GE – BABA 57 modifié : le 28 Sep. 2024
Problème des pixels de bord
❑ Le masque tombe en d’hors de l’image de départ
❑ Données insuffisantes pour appliquer le filtre
❑ Ignorer les pixels de bord :
• Le masque sera appliqué uniquement aux pixels dits valides
• Si le masque est large, un nombre important d’information
sera perdu.
• C’est la méthode appliquée dans l’exemple précédant
• La taille de la nouvelle image obtenue est égale à celle de
l’image formé par les pixels valides
❑ Remplacer les données manquantes par des zéros
• L’image obtenue sera de même taille que l’image originale
• Un effet artéfact non désirable aux bords
MIDMS – Département GE – BABA 58 modifié : le 28 Sep. 2024
Filtrage d’images dans Matlab
❑ Utiliser filter2(filtre, image, shape) pour un filtrage linéaire
❑ Le résultat est une matrice de type double
❑ Le paramètre shape décrit la méthode de traitement des bords
❑ Par défaut shape = 'same', la fonction filter2() produit une
matrice de même taille que celle de l’image de départ :
>> x=uint8(10*magic(5)); >> round(filter2(filter,x, 'same'))
>> filter=ones(3,3)/9 ans =
filter = 077 086 066 068 059
0.1111 0.1111 0.1111 088 111 109 129 106
0.1111 0.1111 0.1111 067 110 130 150 107
0.1111 0.1111 0.1111 068 131 151 149 086
057 106 108 088 039
MIDMS – Département GE – BABA 59 modifié : le 28 Sep. 2024
Filtrage d’images dans Matlab
❑ Pour shape = valid, la fonction filter2() applique le masque sur
les pixels dits valides et produit une image de taille réduite :
>> round(filter2(filter,x, 'same'))
ans =
111 109 129
110 130 150
131 151 149
❑ La fonction fspecial('average',[3,3]) permet d’obtenir un bon
résultat. Elle retourne un filtre moyenneur de taille 3×3 :
>> x=imread('[Link]');f1= fspecial('average',3);xf1=filter2(f1,x);
❑ L’image xf1 est aussi de taille 256×256 mais de type double.
Pour l’afficher avec imshow(), il faut la convertir à uint8,
utiliser mat2gray(), ou simplement diviser les pixels par 255
MIDMS – Département GE – BABA 60 modifié : le 28 Sep. 2024
Filtrage d’images dans Matlab
>> imshow(cf1/255) ;
a–b
c–d
a. [Link]
256×256
uint8
b. Filtre moyenneur
3×3
c. Filtre moyenneur
9×9
d. Filtre moyenneur
25×25
le filtre moyenneur remplace les pixels non-
valides par des zéros.
quand la taille du filtre augmente (img. c et d),
beaucoup d’information sont perdues.
apparition d’effets non souhaités sur les bords
MIDMS – Département GE – BABA 61 modifié : le 28 Sep. 2024
Filtre passe-haut et filtre passe-bas
❑ La notion de fréquences d’une image sont des mesures qui
décrivent la variation des niveaux de gris sur une distance
❑ Un composant d’une image est qualifié de haute-fréquence, si
les valeurs de ses pixels varient de façon importante.
❑ Un composant d’une image est qualifié de basse-fréquence, si
les valeurs de ses pixels varient de peu.
❑ Un composant basse fréquence : background, texture
a–b
a. [Link]
image binaire
- au voisinage des contours les
fréquences sont élevées.
- en dehors de ce voisinage les
fréquences sont nulles
b. [Link]
image très bruitée : haute-fréquence
MIDMS – Département GE – BABA 62 modifié : le 28 Sep. 2024
Filtre passe-haut et filtre passe-bas
❑ Un filtre passe-bas laisse passer les composants basses
fréquences et atténue les composants hautes fréquences
❑ Un filtre passe-haut laisse passer les composants hautes
fréquences et atténue les composants basses fréquences
01 −2 01 un filtre passe-haut
!−2 4 −2' • somme des éléments est nulle
• un composant passe-bas d’une image
01 −2 01 aura une moyenne proche de 0
>> x=imread('[Link]');
>> f2=[1 -2 1;-2 4 -2;1 -2 1];
>> xf2=filter2(f2,x);
❑ Les valeurs des pixels de xf2 varient entre -541 et 593
❑ mat2gray adapte ces valeurs pour être comprises entre 0 et 255
MIDMS – Département GE – BABA 63 modifié : le 28 Sep. 2024
Filtre passe-haut
>> imshow(mat2gray(xf2));
>> imshow(mat2gray(xf2/32)); imshow(mat2gray(xf2/128));
a–b
c–d
a. [Link]
256×256
uint8
b. Utilisation de mat2gray
c. Division par une constante =32
d. Division par une constante =128
la valeur de la constante de division
dépend de la figure de d2part
un filtre passe-haut est souvent
utilisé pour la détection des
contours
MIDMS – Département GE – BABA 64 modifié : le 28 Sep. 2024
Le masque flou
❑ Le filtrage spatial peut être utilisé pour améliorer les contours
d'une image
❑ On parle de la netteté des contours ou du masque flou.
❑ Le masque flou peut être appliqué par :
>> x=imread('[Link]'); f=fspecial('average'); xf=filter2(f,x);
>> xu=double(x)-xf/1.5; imshow(xf/64)
a–b
a. [Link]
280×272
uint8
b. résultat d’un masque flou.
le facteur 1.5 dépend de l’image (a)
noter une division par 64 pour avoir
un bon résultat
les contours sont nettement clairs
MIDMS – Département GE – BABA 65 modifié : le 28 Sep. 2024
Le masque flou
❑ La dernière commande est vue comme un filtre d’équation :
0 0 0 1 1 1 1 0 0 0 est le filtre
!0 1 0$
ℎ = !0 1 0' − * × !1 1 1' 0 0 0
identité
0 0 0 9 1 1 1
% = 1/1.5
c. valeurs de pixel d’un contour c. Contour flou b. (a) – k(b)
❑ Avec l’option 'unsharp', la 1 −- - − 1 −-
fonction fspecial() produit ce !- − 1 - + 5 - − 1'
- + 1 −- - − 1 −-
genre de filtre
Par défaut * = 0.2
MIDMS – Département GE – BABA 66 modifié : le 28 Sep. 2024
Le masque flou
>> x=imread('[Link]'); f=fspecial('unsharp', 0.5);
>> xf=filter2(f,x); imshow(xf/255);
a–b
a. [Link]
280×272
uint8
b. Résultat d’un masque flou, avec
option unsharp et " = 0.5
❑ On peut utiliser aussi un 1 −1 −1 −1 filtre moyenneur
filtre passe-bas pour avoir !−1 0 −1'
9 −1 −1 −1 de taille 3, , > 8
des contours plus nets
MIDMS – Département GE – BABA 67 modifié : le 28 Sep. 2024
Filtrage non-linéaire
❑ Filtre min (filtre max) : la sortie est le min (max) des valeurs du
masque
❑ La fonction nlfilter() applique un filtrage non-linéaire :
>> x=imread('[Link]');
>> cmax=nlfilter(im2double(x),[3,3], 'max(x(:))');
>> cmin=nlfilter(im2double(x),[3,3], 'min(x(:))');
>> imshow(im2gray(cmax)); imshow(im2gray(cmin));
a–b
a. Utilisation d’un filtre max
b. Utilisation d’un filtre min
un filtre non-linéaire utilisant
nlfilter est lent, il consomme plus
de temps. on peut utiliser :
- ordfilt()
- ordfilt2()
MIDMS – Département GE – BABA 68 modifié : le 28 Sep. 2024
Filtrage non-linéaire
❑ La fonction ordfilt2() produit un résultat similaire à celui
produit par nlfilter(), mais dans un temps convenable :
>> cmax=ordfilt2(im2double(x), 9, ones (3,3));
>> cmin=ordfilt2(im2double(x), 1, ones (3,3));
>> cmed=ordfilt2(im2double(x), 5, ones (3,3));
Filtre max Filtre Min Filtre Médian
❑ Le filtre médian a sa propre fonction medfilt2()
MIDMS – Département GE – BABA 69 modifié : le 28 Sep. 2024
Restauration d’images
MIDMS – Département GE – BABA 70 modifié : le 28 Sep. 2024