La segmentation des images

Segmentation

On appelle segmentation d'une image l'opération consistant à identifier les structures d'intérêt dans cette image. On distingue deux types d'approches pour la segmentation : contour ou région.

Dans l'approche contour, on cherche à isoler le ou les contours des objets d'intérêt. Le résultat se présente en général sous la forme d'un ensemble de chaînes de pixels, et des traitements additionnels sont souvent nécessaires pour associer les contours aux objets d'intérêt.

L'autre approche cherche à identifier des régions de pixels homogènes au sein de l'image. Le critère d'homogénéité peut être l'intensité, la couleur, ou même la texture locale. Le résultat se présente soit sous la forme d'une image binaire, soit d'une image étiquetée, chaque étiquette ou label correspondant à une région. Les méthodes de seuillage et la ligne de partage des eaux sont les représentantes emblématiques de cette approche.

8.1 Seuillage

Le seuillage (en anglais threshold) est sûrement la méthode de segmentation la plus simple. Elle consiste à tester pour chaque pixel de l'image si sa valeur est supérieure ou inférieure à un certain seuil, et produit une image binaire regroupant les résultats. Il est aussi possible d'utiliser plusieurs seuils, voire de sélectionner les pixels appartenant à une plage spécifique de niveaux de gris.

Segmentation d'une image en niveaux de gris avec Otsu
Segmentation d'une image en niveaux de gris avec Otsu

Figure 8.1: Segmentation d'une image en niveaux de gris par la méthode d'Otsu sous ImageJ. A gauche, le résultat de la segmentation est affiché en surimpression. A droite, l'histogramme de l'image est affiché, avec la plage de niveaux de gris sélectionnée.

8.1.1 Détection automatique du seuil

Il existe plusieurs méthodes pour détecter de manière automatique la valeur du seuil à appliquer. L'une des plus répandue est la méthode d'Otsu. Elle consiste à faire l'hypothèse que l'image contient deux classes, décrites chacune par une partie de l'histogramme de l'image. La qualité du seuillage est quantifiée en mesurant la variance des niveaux de gris de chaque classe. On cherche ensuite la valeur de seuil qui minimise les variances des deux classes, et on utilise cette valeur pour binariser l'image (Figure 8.1).

8.1.2 Seuillage à hystéresis

Le seuillage à hystéresis est une méthode un peu plus perfectionnée, qui permet d'améliorer la détection des contours des zones contrastées, tout en évitant de détecter des zones du fond.

Le principe est d'utiliser deux seuils : un seuil « haut » et un seuil « bas ». On sélectionne d’abord l'ensemble des pixels au dessus du seuil haut, puis l'ensemble des pixels au-dessus du seuil bas. On ne garde ensuite que les composantes connexes du seuil bas qui contiennent au moins un pixel au dessus du seuil haut.

En pratique, cette détection peut se faire soit par reconstruction géodésique, soit par étiquetage des composantes connexes de l'image des seuils bas et détection des étiquettes présentes dans l'image des seuils hauts.

8.1.3 Seuillage d'image couleurs

Dans le cas d'images couleurs, chaque pixel est défini par un triplet (R, G, B) de valeurs, et on ne peut plus se baser sur un seuil simple. Une première possibilité pour segmenter une image couleur est de la convertir en niveaux de gris, et de travailler sur l'image d'intensité. L'inconvénient est que l'on perd de l'information, et que certaines couleurs différentes présentent un niveau de gris après conversion très proche.

Pour tirer parti de l'ensemble des canaux, une solution est de segmenter chaque canal séparément, et de combiner les résultats des différents seuillages. On remarque cependant que les informations portées par les différents canaux sont souvent fortement corrélées, et qu'il est plus judicieux de travailler sur des images dans un espace de couleur transformé. L'espace HSV, par exemple, permet de séparer les notions de teinte, de saturation, et d'intensité, ce qui simplifie la recherche des seuils. Sous ImageJ, le plugin « Color Threshold » se révèle très pratique pour la segmentation d'images couleur.

Segmentation d'une image couleur avec le plugin ColorThreshold sous ImageJ
Segmentation d'une image couleur avec le plugin ColorThreshold sous ImageJ

Figure 8.2: Segmentation d'une image couleur par seuillage des composantes de l'image après conversion dans l'espace HSV. Le canal de teinte permet de sélectionner les pixels de couleur bleue, et le canal d'intensité permet d'éviter la sur-segmentation.

Chaque pixel couleur pouvant être vu comme un point dans un espace tridimensionnel, il est aussi envisageable d'utiliser des méthodes de classification, supervisées ou non supervisées.

Segmentation d'une image couleur par la méthode des k-means sous ImageJ
Segmentation d'une image couleur par la méthode des k-means sous ImageJ

Figure 8.3: Segmentation d'une image couleur par la méthode des k-means : sélection des marqueurs pour les différentes classes, et résultat de la classification appliquée à l'ensemble de l'image.

Pour une classification non supervisée (clustering), le principe est d'identifier les pixels formant des groupes homogènes. La figure 8.3 présente le cas d'une segmentation par les k-means appliquée à une image de coupe de tige maïs colorée au Fasga, et préalablement filtrée. Dans le cas d'une classification supervisée, les groupes seront définis à partir d'un ensemble de pixels d'apprentissage, utilisés pour déterminer les caractéristiques colorimétriques des différentes classes. L'avantage de ces méthodes est que les frontières entre classes peuvent être beaucoup plus libres que dans le cas d'un simple seuillage.

8.2 Classification de pixels

Les méthodes de classification, utiles pour la segmentation d'images couleur, peuvent aussi s'employer pour segmenter des images complexes en niveaux de gris. Pour discriminer efficacement les différentes classes de pixel, on cherche à décrire chaque pixel par un ensemble de caractéristiques. En appliquant une large variété de filtres de différente nature à l'image d'origine, on obtient pour chaque pixel autant de valeurs que le nombre de filtres appliqués. En choisissant des régions représentatives de chaque classe ou catégorie dans l'image, on peut initialiser un classifieur, qui va calculer les caractéristiques de chaque classe. En appliquant le résultat sur l'image d'origine, et si la famille de filtres a été correctement choisie, il est possible d'obtenir une segmentation d'image qu'il aurait été difficile d'obtenir autrement.

8.3 Détection de contours (edge detection)

Exemple : filtre de Canny.

8.4 Segmentation de régions par ligne de partage des eaux

La ligne de partage des eaux est un outil de segmentation issu de la morphologie mathématique, qui trouve de nombreuses applications aussi bien en segmentation que comme outil de post-traitement. Une application est la segmentation de cellules séparées par leurs parois. En appliquant la ligne de partage des eaux sur une image gradient, on peut détecter les contours des objets. On l'utilise ainsi couramment pour séparer des particules binarisées qui se touchent (section [sec:Séparation-de-particules]).

8.4.1 Principe

L'algorithme s'applique à des images en niveaux de gris. L'image est assimilée à un paysage dont l'altitude de chaque point est donnée par l'intensité du pixel correspondant. Les pixels de forte intensité (blancs) correspondent à des sommets, tandis que les pixels de faible intensité (noir) correspondent à des fonds de vallées.

Le principe de l'algorithme est de partitionner l'image selon une approche topographique : on recherche les bassins versants, séparés par des lignes de crêtes.

8.4.2 Application sur une image de tissu végétal

La ligne de partage des eaux est particulièrement bien adaptée pour la segmentation d'images de tissus végétaux, dans lesquelles les parois des cellules sont bien contrastées par rapport au fond. L'utilisation d'un seuillage n'est pas toujours le plus efficace : les variations d'intensité du fond rendent difficile l'identification du seuil, et le résultat de la segmentation laisse beaucoup de bruit à l'intérieur des cellules sous la forme de pixels isolés (Fig. 8.4).

Segmentation d'une image de maïs par seuillage et par ligne de partage des eaux

Figure 8.4 :Une image de cellules végétales (à gauche), et le résultat de la segmentation par deux méthodes : seuillage (au centre), et ligne de partage des eaux (à droite).

L'application de la ligne de partage des eaux permet de segmenter efficacement les cellules dans l'image. Les fonds des cellules représentent les bassins versants, tandis que les parois sont les lignes de crête de l'image. Le résultat est indépendant des variations d'intensité globales dans l'image, et l'image binaire résultante produit des structures dont l'épaisseur est régulière (1 ou 2 pixels). Le résultat est soit l'image binaire de la ligne de partage des eaux (8.4-b), soit l'image étiquetée corresondant aux différentes régions, ici les cellules.

Il y a cependant quelques précautions à prendre avant d'appliquer la ligne de partage des eaux :

  • Les images gagnent à être filtrées au préalable, sous peine de voir apparaître de trop nombreuses régions (phénomène de sur-segmentation)
  • Il est possible d'imposer les minima à appliquer à l'image, soit manuellement, soit sur la base de la dynamique des niveaux de gris des régions
  • les régions obtenues peuvent éventuellement faire l'objet de post-traitements : division de particules non convexes, fusion de régions correspondant à une même cellule...

8.4.3 Application sur une image gradient

La ligne de partage des eaux est souvent utilisée sur des images de gradient pour identifier le contour d'objets qui apparaissent contrastés par rapport au fond. On commence par calculer le gradient de l'image, par exemple à l'aide de filtres de Prewitt ou de Sobel. On calcule ensuite la norme du gradient (Fig. 8.5-b).

Segmentation d'une image de grains de riz par ligne de partage des eaux sur la norme du gradient.

Figure 8.5 : Application de la ligne de partage des eaux sur le gradient d'une image pour détecter le contour des grains. (a) image d'origine (b) norme du gradient (représenté en inversé) (c) résultat de la ligne de partage des eaux superposée sur l'image d'origine.

En filtrant un peu (ici : détection et imposition des minima étendus), on obtient une ligne de partage des eaux sur l'image gradient qui correspond aux contours des particules (ici des grains) dans l'image ([8.5-c).

On note sur la figure exemple que la segmentation s'affranchit très bien de la variation d'intensité du fond.

8.5 Détection de structures (feature detection)

8.5.1 Détection des coins

Plutôt que des bords, on cherche parfois à extraire les extrémités, ou les coins des structures observées. Pour cela, le détecteur de coins de Harris est une des méthodes les plus populaires.

8.5.2 Détection de lignes ou de cercles

Il est possible d'identifier des structures linéaires ou circulaires dans les images, en utilisant la transformée de Hough.

Date de modification : 05 juillet 2023 | Date de création : 12 juin 2019 | Rédaction : DL