Emmanuel Caruyer
2024-2025, L3 SIF (ENS Rennes, Université de Rennes)
La segmentation d’une image \(f[x, y]\) correspond au découpage de l’image en un ensemble (fini) de \(k\) zones connexes, qui correspondent aux constituants ou objets présents dans l’image.
On associe généralement une étiquette (ou label en anglais) à chaque zone. La tâche qui consiste à ajouter une sémantique à ce découpage, c’est-à-dire à nommer les objets, s’appelle la reconnaissance ; le cours d’aujourd’hui ne se consacre qu’à la segmentation, c’est-à-dire au découpage.
Une image (source : Adonis annua, Pl@antnet) et la segmentation du premier plan
Le découpage de l’arrière-plan d’une image peut être utile pour :
Une scène prise depuis une voiture et la segmentation sémantique de la scène (source : Cityscapes dataset)
Le découpage sémantique, ici appliqué à la reconnaissance d’objets sur une route. NB : ici les objets d’une même classe ont été regroupés ; les zones ne sont donc plus forcément connexes.
Les applications sont nombreuses :
Une image IRM (à gauche), sa segmentation en zones anatomiques (au centre) et rendu 3d des différentes zones (à droite). Source : plateforme Neurinfo, segmentation réalisée à l’aide de l’atlas de Desikan-Kelliany et le logiciel Freesurfer
En imagerie médicale, la segmentation d’une image peut avoir plusieurs applications :
Axones vues au microscopie électronique à balayage (ligne du haut) et segmentation de la gaine de myéline (en rouge) et de l’intérieur de l’axone (en bleu) (ligne du bas). Image reproduite de (Zaimi et al, 2018)
En microscopie, la segmentation peut permettre de
Le principe d’un algorithme de segmentation se base sur deux propriétés naturelles des images et des objets qu’elle contient :
On va aborder deux techniques qui exploitent respectivement ces deux propriétés pour segmenter un objet dans une image.
Segmentation d’une image avec la méthode des \(k\)-moyennes. Image originale dont on souhaite segmenter l’inflorescence au premier plan (à gauche - source : Taraxacum campylodes, Plantnet). Nuage de point représentant les couleurs présentes dans l’image (au centre), chaque point représente un des pixels de l’image, dans le repère 3d (rouge, vert, bleu) ; l’algorithme des \(k\)-moyennes (ici \(k = 2\)) cherche à trouver un hyperplan qui sépare de façon optimale les deux classes. Segmentation résultant de la partition des couleurs avec l’algorithme des \(k\)-moyennes (à droite)
La méthode des \(k\)-moyennes est une méthode « globale », qui cherche à partitionner les pixels de l’image en \(k\) sous-ensembles uniquement en fonction des valeurs prise par l’image sur ces pixels. La partition essaie de minimiser la somme des variances à l’intérieur de chacune des \(k\) classes. Si on note \(\mathcal{S} = \{\mathcal{S}_i, i = 1\ldots k\}\) une partition de l’image, on cherche à minimiser
\[ \sum_i \sum_{(x,y)\in \mathcal{S}_i} ||f[x, y] - \mathbf{\mu}_i ||^2, \qquad\text{où les centroïdes sont définis par } \mathbf{\mu}_i = \frac{1}{|\mathcal{S}_i|} \sum_{(x,y)\in \mathcal{S}_i} f[x, y]. \]
L’image peut être à valeurs vectorielles, par exemple pour une image couleur ; c’est pour cette raison qu’on utilise une norme \(||\cdot||\). On remarque que dans le critère qu’on cherche à optimiser, il n’y a aucune référence à la position des pixels dans l’image.
L’algorithme classique des \(k\)-moyennes, aussi algorithme de Lloyd, est un algorithme itératif. Il démarre par une étape d’initialisation, où un centroïde pour chaque classe \(i \in \{1, \ldots, k\}\) est choisi aléatoirement ; puis l’algorithme alterne entre les deux étapes suivantes jusqu’à convergence :
Pour plus de détails sur cette méthode, on pourra se reporter à la description de l’algorithme sur Wikipédia.
Cette méthode est simple, mais comporte un certain nombre de limites pour la segmentation d’images.
Intuitivement, le contour d’un objet dans une image correspond à une zone de discontinuité de la fonction \(f\). On présente dans la suite une méthode qui permet de détecter les contours dans une image de manière
Pour localiser les discontinuités de la fonction \(f\), on va s’intéresser aux variations de \(f\), en particulier au gradient \(\nabla f\) dont on rappelle la définition \[ \nabla f(x, y) = \left[ \begin{array}{c} \partial f/\partial x\\ \partial f/\partial y \end{array} \right]. \]
L’objectif du TP5 est d’implémenter le Détecteur de contour de Canny [2], qui se base sur un calcul du gradient et une méthode de seuillage intelligente.
Zaimi, A., Wabartha, M., Herman, V., Antonsanti, P. L., Perone, C. S., & Cohen-Adad, J. (2018). AxonDeepSeg: automatic axon and myelin segmentation from microscopy data using convolutional neural networks. Scientific reports, 8(1), 1-11.
Canny, J. (1986). A computational approach to edge detection. IEEE Transactions on pattern analysis and machine intelligence, (6), 679-698.