29/11/2025
Vision industrielle
Segmentation
2ème année AE3S-GI Pr. Ibtissam BENMILOUD
Année universitaire 2025/2026
Plan de la séance
• Introduction et Objectifs
• Définitions
• Vue d’ensemble des méthodes de segmentation
• Seuillage
o simple, par la méthode Otsu et adaptatif
• Kmeans
• Template Matching
• Etiquetage des régions
• Fonctions utilisées en OPENCV
1
29/11/2025
Introduction
Partitionnement de l’image en régions disjointes
Objectif : identifier les objets d’intérêt dans une image (objet = région à segmenter)
Il existe 2 approches:
• Approche «régions» : les régions sont déterminées en fonction d’un critère
comme: le niveau de gris, la texture ou la couleur
• Approche «contours»: les régions sont délimitées par les contours des objets
qu’elles représentent (séparation)
Représentation de la région
Segmentation
Recherche de frontières: Recherche de régions:
approches «contours» approches «régions»
Labélisation
4
2
29/11/2025
Objectifs
La segmentation est liée à la reconnaissance d’objets présents dans l’image.
• Objet = région à segmenter
• Quels objets voit-on dans l’image ?
• Définition d’objets
• Connexe, couleur cohérente, délimité par des contours nets.
• Texture cohérente
Remarques
• Chaque région est une composante connexe
• Le résultat de la segmentation n’est pas unique (méthode, critère de
l’homogénéité, initialisation, etc.)
• Une segmentation peut être interprétée comme un graphe (nœuds = régions,
liens entre régions voisines)
3
29/11/2025
Segmentation par la couleur
Segmentation par la par la texture
4
29/11/2025
Segmentation par la forme
Applications
Télédétection: classification d’une région agricole
10
5
29/11/2025
Applications
Segmentation d’images médicales
11
Applications
Effets spéciaux: incruster un objet
12
6
29/11/2025
Définition
• La segmentation consiste à partitionner une image suivant un critère d’homogénéité H
• La partition est un ensemble de région Ri disjointes qui recouvrent l’intégralité de l’image
• Le critère d’homogénéité H:
• est vérifié par chaque région Ri
• n’est pas vérifié pour l’union de deux régions adjacentes
13
Vue d’ensemble
Techniques de segmentation
Histogramme
Seuillage
Approches Template Approches régions
Méthodes de classification:
K-means frontières Matching
Modèles paramétriques
Croissance des Texture
régions
Méthodes dérivatives Méthodes variationnelles
Détection de contours (contours actifs) Division/Fusion
+
Fermeture des contours
14
7
29/11/2025
Exemple de méthodes de segmentation
La méthode de seuillage dont le critère est les niveaux de gris
La méthode de classification dont le critère est la couleur
15
Exemple de méthodes de segmentation
La méthode de classification dont le critère est la texture
La méthode de contours actifs dont le critère est les contours
16
8
29/11/2025
Exemple de méthodes de segmentation
La méthode de croissance des régions dont le critère est la différence d’intensité
La méthode de détection de contours dont le critère est la recherche des pixels
dissemblables
17
Segmentation par seuillage
But: affecter chaque pixel d’une image en niveaux de gris à une classe en fonction d’un seuil S.
C’est une binarisation dans le cas de deux classes
Principe:
• Extraire des seuils à partir de l’histogramme
• Classification d’un pixel p par comparaison aux seuils
Seuillage:
• Trouver le (s) seuil(s) qui sépare à mieux les deux objets (ou plus)
• Exemple de valeur de seuil: la moyenne des niveaux de gris
Deux types de méthodes de seuillage:
• Seuillage global: un seuil pour toute l’image
• Seuillage adaptatif: un seuil s’ajustant selon les parties de l’image
18
9
29/11/2025
Seuillage pour une binarisation
Seuillage à 2 classes:
Si valeur(pixel)> seuil alors valeur(pixel)=1
Si valeur(pixel)≤ seuil alors valeur(pixel)=0
Le résultat est une image binaire
19
Seuillage pour une binarisation
Choix du seuil est moins évident
20
10
29/11/2025
Fonction [Link]
[Link]
• Syntax: [Link](source, thresholdValue, maxVal, thresholdingTechnique)
• ret,thresh1 = [Link](img,127,255,cv.THRESH_BINARY)
• ret,thresh2 = [Link](img,127,255,cv.THRESH_BINARY_INV)
• ret,thresh3 = [Link](img,127,255,cv.THRESH_TRUNC)
• ret,thresh4 = [Link](img,127,255,cv.THRESH_TOZERO)
• ret,thresh5 = [Link](img,127,255,cv.THRESH_TOZERO_INV)
I. Benmiloud 21
Méthode de «Otsu»
La méthode de Otsu permet de déterminer un seuil optimal qui minimise la
variance intra-classe σ2w
σ2w t = q1 t σ12 t + q 2 t σ22 t
Cela revient à maximiser la variance inter-classe 𝜎𝑏2
𝜎𝑏2 (𝑡) = 𝑞1 (𝑡)𝑞2 𝑡 (𝜇1 (𝑡) − 𝜇2 (𝑡))2
La variance 𝜎 2 des intensités de l’image est 𝜎 2 = 𝜎𝑤2 + 𝜎𝑏2
22
11
29/11/2025
Méthode de «Otsu»
La probabilité de chaque classe:
𝑡 256
𝑞1 𝑡 = 𝑖=1 𝑃(𝑖) et 𝑞2 𝑡 = 𝑖=𝑡+1 𝑃(𝑖)
• Avec
h
• 𝑷(𝒕) = 𝑵t la probabilité de t
• ht: le nombre de pixels du niveau de gris t
• N: Nombre total de pixels
La moyenne de chaque classe:
1 𝑡 1 256
• 𝜇1 𝑡 = 𝑖=1 𝑖 𝑃(𝑖) et 𝜇2 𝑡 = 𝑖=𝑡+1 𝑖 𝑃(𝑖)
𝑞1 (𝑡) 𝑞2 (𝑡)
La variance de chaque classe :
1 𝑡 1
• 𝜎12 𝑡 = 𝑞 𝑖=1(𝑖 − 𝜇1 𝑡 )2 𝑃(𝑖) et 𝜎22 𝑡 = 𝑞 𝑖=𝑡+1256(𝑖 − 𝜇2 𝑡 )2 𝑃(𝑖)
1 (𝑡) 2 (𝑡) 23
Méthode de «Otsu»
Implémentation de la méthode
Calculer pour tous les seuils t ∈ [1, 256] la variance inter-classe𝜎𝑏2 𝑡 et retenir le seuil
T qui maximise 𝜎𝑏2 𝑡
24
12
29/11/2025
Etapes d’«Otsu»
Wikipedia
Seuil S=0 S=1 S=2 S=3 S=4 S=5
Variance intra-classe 𝜎𝑤2 =3.1196 𝜎𝑤2 =1.5268 𝜎𝑤2 =0.5561 𝜎𝑤2 =0.4909 𝜎𝑤2 =0.9779 𝜎𝑤2 =2.2491
Variance inter-classe 𝜎𝐵2=0 𝜎𝐵2=1.5928 𝜎𝐵2 =2.5635 𝜎𝐵2=2.6287 𝜎𝐵2=2.1417 𝜎𝐵2=0.8705
25
Fonction pour le seuillage avec OTSU
Syntaxe :
ret,th1 = [Link] (img, 0, 255, cv2.THRESH_OTSU)
ret = 131
26
13
29/11/2025
Cas de l’éclairage non uniforme
La variation d’illumination ne permet pas de seuiller l’image correctement avec un
seul seuil.
27
Seuillage adaptatif
• On divise l’image en un certain nombre de sous-régions
• On calcule le seuil pour chaque région indépendamment
28
14
29/11/2025
Fonction [Link]
Syntaxe:
[Link](source, maxVal, adaptiveMethod, thresholdType, blocksSze, C)
adaptiveMethod
Exemple :
th2 = [Link](img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,41,2)
Cela signifie :
Un seuillage adaptatif en utilisant des voisinages de 41(doit être impair) et en mettant les valeurs au-dessus
de la moyenne locale moins 2 à la valeur 255.
29
Résultat
BlockSize = 11 BlockSize = 41
C=2 C=0
31
15
29/11/2025
Seuillage multi-seuils
Lorsque plusieurs modes sont visibles sur l’histogramme, il est possible d’utiliser
plusieurs seuils pour aboutir à plusieurs classes
2 𝑠𝑖 𝑓 𝑥, 𝑦 ≥ 𝑇2
𝑔 𝑥, 𝑦 = 1 𝑠𝑖 𝑓 𝑥, 𝑦 ≥ 𝑇1
0 𝑠𝑖 𝑓 𝑥, 𝑦 < 𝑇1
32
Exemple de seuillage avec 2 seuils
# Définir les seuils pour 3 classes
threshold1 = 75 # Premier seuil
threshold2 = 120 # Deuxième seuil
# Créer une image vide pour stocker les classes
segmented_image = np.zeros_like(gray_image)
# Appliquer la segmentation
segmented_image[gray_image < threshold1] = 0
segmented_image[(gray_image >= threshold1) & (gray_image < threshold2)] = 1*127
segmented_image[gray_image >= threshold2] = 2*127
33
16
29/11/2025
Avantages/Inconvénients
Avantages:
• Universel, temps réel, simplicité
• Fonctionne bien sur des histogrammes multimodaux
Inconvénients:
• Apparition de faux éléments (aucune prise en compte de la composante spatiale)
• Nombre de modes souvent différents du nombre de classes attendues
• Il faut connaitre le nombre de classes
Deux modes mais trois classes 34
Méthodes de clustering: K-means
Extension du seuillage d’histogramme aux images couleurs
Chaque pixel contient 3 composantes R, V et B
3 histogrammes pour représenter chaque bande.
Difficulté à exploiter la méthode basée sur l’histogramme
Principe des méthodes de clustering: regrouper les vecteurs
en groupes homogènes.
35
17
29/11/2025
Algorithme de K-means
On veut diviser les points en k groupes (clusters) (k est donné à l’avance)
Algorithme
- Partionnement aléatoire des points en k groupes
- Calcul du centroïde de chacun des groupes
- Répéter tant que les centroïdes varient:
• Pour chaque point:
• Calcul des distances du point à tous les centroïdes
• Affectation au point au groupe le plus proche
• Calcul du centroïde de chacun des groupes
36
Exemple en 2D
Partionnement aléatoire des points Calcul du centroïde de chacun des groupes
en 2 groupes
Calcul des distances du point aux 2
centroïdes
Affectation du point au groupe le plus
proche
Mise à jour du centroïde de chacun Arrêt de l’algorithme quand les centroïdes
des groupes et l’affectation ne varient plus
des points au nouveau groupe
[Link]
37
18
29/11/2025
Comparaison entre OTSU et Kmeans
Image originale Segmentation par OTSU Segmentation par Kmeans
avec 2 seuils avec k = 3
38
Avantages/Inconvénients
Avantages Inconvénients
Méthode simple Nécessite de connaître le nombre de
classes
Implémentation facile Sensible à l’initialisation
Fonctionne correctement lorsque Peut être lent en grande dimension
les clusters sont sphériques Échoue pour des structures non
sphériques
Sensible aux valeurs aberrantes
39
19
29/11/2025
Template Matching
Basée sur la recherche de la position spatiale d’un motif (objet) M connu dans une image I
La recherche se fait par le calcul de l’intercorrélation bidimensionnelle 𝐶 𝑥, 𝑦 entre l’image I et
l’image motif M:
𝑖=ℎ/2 𝑗=𝑤/2 ℎ 𝑤
1 (𝐼 𝑥 + 𝑖, 𝑦 + 𝑗 − 𝜇𝑥𝑦 )(𝑀 𝑖 + 2 , 𝑗 + 2 − 𝜇𝑀 )
𝐶 𝑥, 𝑦 =
𝑤ℎ 𝜎𝑥𝑦 𝜎𝑀
𝑖=−ℎ/2 𝑗=−𝑤/2
• w et h représentent respectivement la largeur et la hauteur de l’image motif M.
• mxy et sxy sont respectivement la moyenne et l’écart type des pixels dans la fenêtre autour du pixel (x,y)
de l’image source I
• et mM et sM sont sont respectivement la moyenne et l’écart type des pixels de l’image motif M
40
Exemple de code avec opencv
Result = [Link](img_gray,template_gray,cv2.TM_CCOEFF_NORMED)
Conversion en NDG
Image RGB img_gray
Conversion en NDG
Template Result
template_gray
RGB
41
20
29/11/2025
Tracé d’un rectangle
# Trouver toutes les positions où la correspondance est supérieure au seuil
locations = [Link](result >= 0.8)
# Afficher toutes les correspondances trouvées
for pt in zip(*locations[::-1]): # Inverser les coordonnées
top_left = pt
bottom_right = (top_left[0] + template_width, top_left[1] + template_height)
[Link](imageRGB, top_left, bottom_right, (0,255,0), 2)
imageRGB
42
Utilité d’une image «étiquette»
Cas d’une image binaire
• Numériquement, on ne distingue pas les 2 oiseaux
Cas d’une image «étiquette»
• Chaque oiseau est une entité propre et peut être étudié individuellement.
43
21
29/11/2025
Relations entre les pixels (1)
(m,n) (m,n)
4-voisinages 8-voisinages Composante connexe
44
Relations entre les pixels (2)
Combien de composantes connexes ?
5 composantes connexes en 4-voisinage 4 composantes connexes en 8-voisinage
45
22
29/11/2025
Exemple
2 composants
3 composants avec 8
avec 4 connectivités
connectivités
46
Etiquetage des régions (labels)
Un plan d’étiquettes est une image de même dimension et parallèle au plan image. Il indique les
étiquettes correspondant aux pixels (toutes les étiquettes sont différentes).
47
23
29/11/2025
Les composants connectés avec OpenCV
nb_components, output, stats, centroids = [Link](threshold, connectivity=K)
print("Nombre de composantes connectées : ", nb_components)
[Link](output, cmap='jet')
K = 4 , nb_components = 90 K = 8 , nb_components = 87
48
Analyse des composants connectés (1)
areas = []
for i in range(1, nb_components): # On commence à 1 pour ignorer le fond (composante 0)
area = stats[i, cv2.CC_STAT_AREA]
[Link](area)
# Afficher l'histogramme des surfaces
[Link](areas, bins=20)
[Link]('Surface')
[Link]('Nombre d\'objets')
[Link]('Histogramme des surfaces des objets')
[Link]()
49
24
29/11/2025
Analyse des composants connectés (2)
# Filtrer les objets en fonction de leur superficie
filtered_objects = []
for i in range(1, nb_components):
area = stats[i, cv2.CC_STAT_AREA]
if 200 <= area <= 400:
filtered_objects.append(i)
# Créer une nouvelle image pour afficher uniquement les objets filtrés
filtered_image = np.zeros_like(output)
for obj_index in filtered_objects:
filtered_image[output == obj_index] = 255
50
Limites de la segmentation (1)
La segmentation ne peut pas trouver tous les objets de l’image tel que nous les
interprétons!
52
25
29/11/2025
Limites de la segmentation (2)
Un objet n'appartient pas à une région !
53
Indices de forme
Attributs géométriques d’une région R
Surface: S(R) = K, avec K est le nombre de pixels de la région R
Périmètre: P(R), calculé comme la somme des distances des pixels consécutifs du
contour.
Le facteur de circularité
4𝜋𝑆(𝑅)
(>=1, ne vaut 1 que pour les disques)
𝑃2 (𝑅)
Ce facteur nous renseigne sur la forme de l’objet s’il est circulaire ou allongé
54
26
29/11/2025
Application 3
• Identifier les objets ronds
• Identifier_objets_circulaire.mlx
I. Benmiloud 55
Fonctions utiles de Matlab
strel: crée un élément structurant en une forme quelconque, avec une taille donnée.
imerode: utilisée pour l’érosion (Elimination des objets dont la taille est plus petite que l’élément
structurant).
imdilate: utilisée pour la dilatation (Grossissement des objets d’une partie correspondante à la taille de
l’élément structurant).
imopen: utilisée pour une ouverture (une érosion suivie d’une dilatation)
imclose: utilisée pour une fermeture (une dilatation suivie d’une érosion)
bwlabel: permet d’étiqueter les objets présents dans une image binaire selon la connexité (4 ou 8).
regionprops: permet de déterminer les propriétés des objets présents dans l’image avec des labels.
label2rgb: permet d’affecter des couleurs aux différents objets présents dans l’image labélisée.
Imfill : permet de remplir les trous dans une région
56
27