Vous êtes sur la page 1sur 4

TP Traitement d’images

TP 4- Segmentation des images

But de la Manipulation :

1. Binarisation par seuillage simple.


2. Segmentation par seuillage multiple
3. Segmentation par approche région : croissance de région
4. Segmentation pat la méthode k-means

I. Seuillage d’une image


Le seuillage est une technique permettant de classifier les pixels d'une image en deux ou plusieurs
niveaux d'intensité, permettant ainsi de faire apparaitre certaines régions par rapport au reste de
l'image.

I.1 Binarisation par seuillage simple


La binarisation permet de séparer en deux classes les pixels d’une image initiale I en utilisant un
seuil S. La première classe contient les pixels de l'arrière-plan et la deuxième contient les pixels de la
scène (l'objet). Les couleurs noir (0) et blanc (1) représentent ces deux classes. En effet, soit S un
seuil fixé par l'utilisateur ou déterminé à partir de l'analyse de l'histogramme de l'image. Les intensités
de l'image I’ (x, y) résultante sont calculées comme suit :
1 𝑠𝑖 𝐼(𝑥, 𝑦) ≥ 𝑆
𝐼 ′ (𝑥, 𝑦) = {
0 𝑠𝑖 𝐼(𝑥, 𝑦) < 𝑆
Fonction imbinarize
La fonction imbinarize permet de binariser une image 2D en niveau de gris ou un volume 3D par
seuillage.
Syntaxe :
BW = imbinarize (I, T) : crée une image binaire à partir de l'image I en utilisant la valeur de seuil
T. T peut être un seuil d'image global, spécifié comme une valeur de luminance scalaire, ou un seuil
localement adaptatif, spécifié comme une matrice de valeurs de luminance.
BW = imbinarize (I) : crée une image binaire à partir d'une image I en niveaux de gris en remplaçant
toutes les valeurs au-dessus d'un seuil par des 1 et les valeurs restantes par 0. Par défaut, imbinarize
utilise la méthode d'Otsu pour choisir la valeur du seuil qui minimise la variance intra-classe pondérée
entre deux groupes de pixels.
BW = imbinarize(I, "adaptive", Name,Value) : crée une image binaire à partir de l'image I en
utilisant les paires nom-valeur pour contrôler les aspects du seuillage adaptatif.
TP4 – Segmentation des images 1
TP Traitement d’images

Exercice 1:
1. Ecrivez un programme Matlab permettant d’afficher sur la même figure :
− L’image ‘printedtext.png’ ayant pour titre ‘Image_Initiale’.
− Cinq images résultantes de la binarisation de l’image initiale globalement, de façon
adaptative et en utilisant trois seuils fixes de votre choix (les seuils doivent être entre 0 et 1).
Chaque image doit avoir un titre par la transformation subie.
2. Commenter les résultats obtenus.
3. En utilisant la même image appliquer une binarisation adaptative en utilisant le paramètre
“ForegroundPolarity” pour indiquer que le premier plan est plus sombre que l'arrière-plan et en
spécifiant la sensitivité à 0.4. Que remarquez-vous ?

1.2 Segmentation par seuillage multiple


L’histogramme d’une image permet de mettre en évidence les différentes régions de l’image. En effet,
lorsque les régions de l’image (objets de la scène) présentent des niveaux de gris distincts,
l’histogramme montre cet aspect par la présence des formes concaves et convexes ou l’existence de
séparation entre les niveaux. Le calcul des seuils de séparation permet de dégager les régions de
l’image ce qui mène à sa segmentation.

La méthode d'Otsu permet de calculer de façon automatique un ou plusieurs seuils de séparations


entre les zones d’un histogramme, dits seuils de segmentation des régions dans l'image.

Fonction multithresh :
La fonction multithresh permet de calculer N seuils de séparation entre les régions de l’image en
utilisant la méthode d’Otsu.

Syntaxe : thresh = multithresh(A,N) : retourne un vecteur thresh contenant N valeurs de seuil


calculées en utilisant la méthode d'Otsu. Le vecteur thresh peut servir comme argument d'entrée pour
la fonction imquantize permettant de convertir l'image A en une image avec N+1 niveaux discrets.
Fonction imquantize
La fonction imquantize permet de quantifier l’image par des valeurs de quantification spécifiées.

Syntaxe : quant_A = imquantize(A, levels) : quantifie l'image A en utilisant les valeurs de


quantification spécifiées par le vecteur levels. L'image de sortie quant_A a la même taille que A et
contient N + 1 valeurs entières discrètes comprises entre 1 et N + 1 qui sont déterminées par les
critères suivants :
− Si A(k) ≤ levels(1), alors quant_A(k) = 1.
− Si levels(m-1) < A(k) ≤ levels(m), alors quant_A(k) = m.
− Si A(k) > levels(N), alors quant_A(k) = N + 1.

TP4 – Segmentation des images 2


TP Traitement d’images

Notant que imquantize attribue des valeurs aux deux intervalles de fin définis implicitement :
− A(k) ≤ levels(1)
− A(k) > niveaux(N)

Exercice 2:
1. Ecrivez un programme Matlab permettant d’afficher sur la même figure :
− L’image ‘foggysf2.jpg’ ayant pour titre ‘Image_Initiale’.
− L’image en niveaux de gris.
− L’histogramme de l’image.
− Le résultat de binarisation de l’image (un seul seuil de segmentation N=1).
2. Selon l’histogramme de l’image identifiez approximativement le nombre de seuils à choisir pour
segmenter l’image.
3. Utilisez ce nombre pour segmenter l’image et affichez le résultat dans une nouvelle fenêtre (vous
pouvez utiliser la fonction label2rgb pour convertir l’image segmentée en une image couleur).

II. Segmentation par croissance de région


La segmentation par régions est basée sur la recherche des zones ayant les mêmes caractéristiques.
La segmentation par croissance de régions (region growing) commence par la sélection d’un
ensemble de pixels appelés points germes (seeds) puis accroit la région autour du point germe en
ajoutant les pixels du voisinage vérifiant un critère de similarité. La procédure s’arrête lorsqu'il n’y a
plus de croissance (tous les pixels sont traités).

Une bonne segmentation de l’image est généralement liée au bon choix du critère d’homogénéité et
des pixels germes de départ. Une mauvaise sélection des pixels de départ peut entrainer des
phénomènes de sous segmentation ou de sur segmentation.

Exercice 3 :
1. Ecrivez un programme Matlab permettant de lire l'image 'medtest.png' (voir le fichier Zip
region_growing) , de l’affecter à la variable I et de l’afficher.
2. Convertissez l’image en double précision.
3. Choisir comme point germe le pixel de coordonnées x=120 et y=260 ;
4. Segmentez l’image par application de l'algorithme de croissance de région autour du point germe
de coordonnées (x,y) et varier le critère d’homogénéité (écart du niveau d’intensité maximal)
avec les valeurs 0.1, 0.2 et 0.4 autour du germe germe [x y]. Noter les trois images J1, J2, et J3.
5. Affichez sur une même figure, les images I, J1, J2 et J3 (pour les images segmentées, on peut
utiliser la commande imshow (I+J))
6. Utilisez l’algorithme suivant pour segmenter l’image en quatre régions :
TP4 – Segmentation des images 3
TP Traitement d’images

a. Initialiser la matrice des étiquettes à zéros (on peut utiliser la fonction zeros
(Js=zeros(size(I)); ))
b. Initialiser la matrice des germes G avec les coordonnées des quatre points germes à utiliser.
c. Pour i de 1 à 4 (nombre de régions)
• Sélectionner un germe de la matrice des germes
• Segmenter la région J au tour du germe en utilisant un écart d’intensité de 0.2.
• Additionner la région segmentée à la matrice des étiquettes : Js=Js+J*i
d. Convertir la matrice des étiquettes en une image couleur par la fonction « label2rgb ».
e. Afficher le résultat final

III. Segmentation par la méthode k-means


K-means (ou K-moyennes) est une méthode de regroupement automatique permettant de diviser
l’image en k classes (régions ou clusters) statistiquement homogènes. Les niveaux de gris dans chaque
cluster sont similaires ou proches du centre (moyenne) du cluster. Cette méthode suppose la
connaissance à priori du nombre de cluster. Pour estimer la similarité entre les pixels et le centre de
chaque cluster. L’algorithme des K-means utilise une distance qui est généralement la distance
euclidienne.

Fonction kmeans
La fonction kmeans permet de classer (segmenter) une image I en k classes.
Exemples :
[mu,mask]=kmeans(ima,k) : segmente l’image ima en k cluster et retourne dans mask la
matrice de l’image résultante et dans mu un vecteur des moyennes de chaque classe

Exercice 4 :
1. Ecrivez un programme Matlab permettant d’afficher sur la même figure :
− L'image 'medtest.png' ayant comme titre ‘Image initiale.
− Le résultat de segmentation de cette image en choisissant comme nombre de cluster 2, 3 et 4.
2. Comparez le résultat obtenu par celui de la méthode de croissance des régions.
3. Refaites le même travail avec l’image ‘foggysf2.jpg’ et comparez le résultat obtenu avec celui de
l’exercice 2 (il faut transformer l’image en niveaux de gris avant la segmentation).
4. Essayez de segmenter une image RGB de votre choix et précisez le nombre de cluster final à
adopter.

TP4 – Segmentation des images 4

Vous aimerez peut-être aussi