0% ont trouvé ce document utile (0 vote)
52 vues14 pages

Détection et Segmentation d'Images

Transféré par

nbh
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
52 vues14 pages

Détection et Segmentation d'Images

Transféré par

nbh
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

I

IN
TP 2

D
DETECTION DE CONTOURS ET

AM
SEGMENTATION
H
Grâce à la détection de contours, nous pouvons détecter les bordures des objets et les localiser facilement
dans une image. Il s’agit souvent de la première étape de nombreuses applications intéressantes, telles que
l’extraction d’images au premier plan, la segmentation, la détection et la reconnaissance d’images simples.
Apprenons donc les contours et la détection de contours, à l’aide d’OpenCV, et voyons par nous-mêmes
ah

comment ils peuvent être utilisés pour créer diverses applications.

2.1 Que sont les contours?


ab

Lorsque nous joignons tous les points sur la frontière d’un objet, nous obtenons un contour. En règle générale,
un contour spécifique fait référence à des pixels limites qui ont la même couleur et la même intensité. OpenCV
permet de trouver et de dessiner très facilement des contours dans des images. Il fournit deux fonctions
simples :
r.R

– findContours()

– drawContours()

En outre, il dispose de deux algorithmes différents pour la détection des contours :


D

– CHAIN APPROX SIMPLE

– CHAIN APPROX NONE

Nous les aborderons en détail, dans les exemples ci-dessous. La figure suivante montre comment ces algo-
rithmes peuvent détecter les contours d’objets simples.

1
2 TP 2. DETECTION DE CONTOURS ET SEGMENTATION

I
IN
D
Figure 2.1: Image comparative, image d’entrée et image de sortie avec contours superposés.

Maintenant que vous connaissez les contours, parlons des étapes impliquées dans leur détection.

AM
2.2 Étapes pour détecter et dessiner des contours dans OpenCV

OpenCV rend cette tâche assez simple. Suivez simplement ces étapes :
H
2.2.1 Charger et afficher une image

Pour commencer, téléchargez et renommez cette image en (image [Link]), puis placez cette image dans votre
ah

dossier de travail Cette image est disponible dans le lien suivant :


ab
r.R
D

Figure 2.2: (image [Link])

Lien de téléchargement.
2.2. ÉTAPES POUR DÉTECTER ET DESSINER DES CONTOURS DANS OPENCV 3

I
IN
2.2.2 convertir l’image en niveaux de gris

La conversion de l’image en niveaux de gris est très importante car elle prépare l’image pour l’étape suivante.

D
La conversion de l’image en une image en niveaux de gris à canal unique est importante pour le seuillage, qui
à son tour est nécessaire au bon fonctionnement de l’algorithme de détection de contour.

AM
H
ah
ab
r.R

2.2.3 Appliquer un seuil binaire

Lors de la recherche de contours, appliquez toujours d’abord un seuil binaire ou une détection de contour
Canny à l’image en niveaux de gris. Ici, nous appliquerons un seuil binaire.
D

Cela convertit l’image en noir et blanc, mettant en évidence les objets d’intérêt pour faciliter les choses pour
l’algorithme de détection de contour. Le seuil rend la bordure de l’objet dans l’image complètement blanche,
tous les pixels ayant la même intensité. L’algorithme peut désormais détecter les bordures des objets à partir
de ces pixels blancs.

Remarque. Les pixels noirs, de valeur 0, sont perçus comme pixels d’arrière-plan et ignorés.
4 TP 2. DETECTION DE CONTOURS ET SEGMENTATION

À ce stade, une question peut se poser. Et si nous utilisions des canaux uniques comme R (rouge), G (vert)
ou B (bleu) au lieu d’images en niveaux de gris (avec seuil) ? Dans un tel cas, l’algorithme de détection de
contour ne fonctionnera pas correctement. Comme nous l’avons vu précédemment, l’algorithme recherche des
bordures et des pixels d’intensité similaire pour détecter les contours. Une image binaire fournit bien mieux ces
informations qu’une image à canal couleur unique (RVB).

I
IN
D
AM
H
ah

2.2.4 Trouver les contours


On utilisez la fonction findContours() pour détecter les contours de l’image.
ab
r.R

2.2.5 Dessinez des contours sur l’image RVB d’origine


Une fois les contours identifiés, utilisez la fonction drawContours() pour superposer les contours sur l’image
RVB d’origine.
D
2.3. LA SEGMENTATION D’IMAGE 5

I
IN
D
AM
2.2.6 Enregistrer l’image du résultat

Une fois l’image résultat obtenue, utilisez la fonction [Link] pour sauvegarder cette image.

H
2.3 La segmentation d’image
ah

La segmentation d’image est une tâche de traitement d’image dans laquelle l’image est segmentée ou parti-
tionnée en plusieurs régions de telle sorte que les pixels d’une même région partagent des caractéristiques
communes.
ab

Il existe deux formes de segmentation d’image :

– Segmentation locale : Elle concerne une zone ou une région spécifique de l’image.

– Segmentation globale : Il s’agit de segmenter l’ensemble de l’image.


r.R

2.3.1 Types d’approches de segmentation d’images

– Détection de discontinuité : Il s’agit d’une méthode de segmentation d’une image en zones basées sur
la discontinuité. C’est là qu’intervient la détection des contours. La discontinuité des contours générée
D

en raison de l’intensité est reconnue et utilisée pour établir les limites des zones. Exemples : Filtrage
d’histogramme et détection de contours.

– Détection de similarité : Une méthode de segmentation d’une image en sections basées sur la ressem-
blance. Le seuillage, l’expansion de zone, ainsi que le fractionnement et la fusion de régions sont tous
6 TP 2. DETECTION DE CONTOURS ET SEGMENTATION

inclus dans cette méthodologie. Tous divisent l’image en sections avec un nombre de pixels compa-
rable. Sur la base de critères établis, ils divisent le tableau en un groupe de groupes présentant des
caractéristiques comparables. Exemple : Kmeans, Détection/classification des couleurs.

– Approche des réseaux neuronaux : Aux fins de prise de décision, les algorithmes de segmentation
basés sur les réseaux neuronaux reproduisent les techniques d’apprentissage du cerveau humain. Cette

I
approche est largement utilisée pour segmenter les images médicales et les séparer de l’arrière-plan. Un

IN
réseau de neurones est constitué d’un grand nombre de nœuds liés, chacun ayant son propre poids.

2.3.2 Segmentation d’images dans OpenCV Python

D
Nous examinerons les 4 manières différentes suivantes d’effectuer une segmentation d’image dans OpenCV
Python et Scikit Learn –

AM
1. Segmentation d’images à l’aide de K-Means

2. Segmentation d’image à l’aide de la détection de contour

3. Segmentation d’image à l’aide du seuil

4. Segmentation d’image à l’aide du masquage des couleurs


H
[Link] Segmentation d’images à l’aide de K-means

1. Importation de bibliothèques et d’images : Nous commençons par importer les bibliothèques requises
ah

et charger l’exemple d’image. l’image de test est disponible dans le lien suivant:

Lien de téléchargement.
ab
r.R
D
2.3. LA SEGMENTATION D’IMAGE 7

I
IN
2. Prétraitement de l’image : Ensuite, nous remodelons l’image en un vecteur 2D, c’est-à-dire que si
l’image a la forme (100,100,3) (largeur, hauteur, canaux), elle sera convertie en (10000,3). Ensuite,
convertissez-le en type de données float.

D
AM
3. Définir les paramètres : Nous définissons maintenant les critères selon lesquels l’algorithme K-means
est censé regrouper les pixels. La variable ’K’ définit le nombre de clusters/groupes auxquels un pixel
peut appartenir (vous pouvez augmenter cette valeur pour augmenter le degré de segmentation).
H
4. Application de K-Means pour la segmentation d’images : La variable K initie aléatoirement K
ah

différents clusters et la variable (centre) définit le centre de ces clusters. La distance de chaque point
à ces centres est calculée puis ils sont attribués à l’un des clusters. Ensuite, ils sont divisés en différents
segments en fonction de la valeur de leur(variable d’étiquette).
ab
r.R
D
8 TP 2. DETECTION DE CONTOURS ET SEGMENTATION

5. Résultats de segmentation d’image pour différentes valeurs de K : En exécutant le même code ci-
dessus pour différentes valeurs de K, nous obtenons les résultats ci-dessous de segmentation d’image :

I
IN
D
(a) K=3. (b) k=4.

AM
H
(c) k=5. (d) k=6.
ah

Figure 2.3: Résultats de segmentation d’image pour différentes valeurs de K

[Link] Segmentation d’image à l’aide de la détection de contour


ab

1. Importation de bibliothèques et d’images Nous commençons par importer les bibliothèques requises
et charger l’exemple d’image. Pour notre commodité, nous redimensionnons également l’image à 512∗512
car nous créerons le masque de la même taille dans les étapes suivantes. L’image de test est disponible
dans le lien suivant:
r.R

Lien de téléchargement.
D
2.3. LA SEGMENTATION D’IMAGE 9

I
IN
D
AM
2. Application du seuil d’image Maintenant, nous convertissons l’image en niveaux de gris, puis ap-
pliquons un seuil, de sorte que le pixel au-dessus du seuil se voit attribuer 255, sinon 0. La valeur
du seuil est conservée comme moyenne de toutes les valeurs de pixels de l’image en gris. L’image de
sortie montre le résultat de cette étape.
H
ah

3. Détection des bords

Ensuite, nous appliquons une détection astucieuse des bords à l’image seuillée avant d’utiliser la fonction
ab

’[Link]’ pour dilater les bords détectés.


r.R

4. Détection des contours pour créer un masque

– Utilisez la fonction OpenCV ’findcontours’ pour rechercher toutes les régions ouvertes/fermées dans
D

l’image et les stocker (cnt). Utilisez l’indice -1 puisque la fonction renvoie un tuple à deux éléments.

– Passez-les par la fonction triée pour accéder en premier aux contours les plus grands.

– Créez un masque de zéro pixel dont la forme et la taille sont égales à celles de l’image d’origine.

– Dessinez les contours détectés pour créer le masque.


10 TP 2. DETECTION DE CONTOURS ET SEGMENTATION

I
IN
5. Segmenter les régions

Afin d’afficher uniquement les parties segmentées de l’image, nous effectuons une opération ET bit à bit
sur l’image originale (img) et le masque (contenant les contours des contours détectés).

D
AM
H
ah
ab

[Link] Segmentation d’images à l’aide du seuil Otsu


r.R

1. Importation de bibliothèques et d’images : On commence d’abord par installer la bibliothèque requise


en exécutant l’instruction suivante dans le terminal Visual Studio Code

pip install scikit-image


D
2.3. LA SEGMENTATION D’IMAGE 11

Nous passons ensuite à l’importation des bibliothèques requises et au chargement de l’exemple d’image.
l’image de test est disponible dans le lien suivant :

Lien de téléchargement.

I
IN
D
AM
H
2. Appliquer le seuil Otsu sur l’image : Le seuillage Otsu est une technique dans laquelle la valeur seuil
ah

est déterminée automatiquement pour convertir l’image en image binaire. Nous convertissons d’abord
l’image en niveaux de gris, puis utilisons la fonction threshold otsu() de la bibliothèque skimage pour
trouver la valeur du seuil. En utilisant cela, nous créons l’image binaire.
ab
r.R
D
12 TP 2. DETECTION DE CONTOURS ET SEGMENTATION

3. Processus de segmentation: Ici, nous créons d’abord une fonction filter image qui multiplie le masque
(créé dans la section précédente) avec les canaux RVB de notre image. De plus, ils sont concaténés pour
former une image normale.

Enfin, appliquez la fonction filter image sur l’image originale (img) et le masque formé par seuillage
(img otsu)

I
IN
D
AM
H
ah

[Link] Segmentation d’image à l’aide du masquage des couleurs


ab

1. Importation de bibliothèques et d’images : Encore une fois, nous commençons par charger les
bibliothèques requises et l’exemple d’image.
r.R
D
2.3. LA SEGMENTATION D’IMAGE 13

I
IN
2. passer de l’espace colorimétrique BGR à l’espace colorimétrique RVB

D
AM
H
ah

3. Créer un masque en détectant la couleur : Nous utilisons la fonction OpenCV inRange() qui nous oblige
à donner les plages RVB basse et haute de la couleur qui doit être détectée dans l’image pour créer le
masque. Pour donner la plage RVB, cela nécessite votre compréhension de l’image. Par conséquent,
cette approche peut ne pas être utile dans les images multicolores complexes.
ab
r.R
D
14 TP 2. DETECTION DE CONTOURS ET SEGMENTATION

4. Appliquer le masque : Enfin, nous utilisons l’opération bitwise AND pour appliquer notre masque de
segmentation de l’image.

I
IN
D
AM
H
ah
ab
r.R
D

Vous aimerez peut-être aussi