Segmentation des images couleurs : méthode d'Ohlander, Price et Reddy.
Introduction à la segmentation par classification.

 

Segmenter une image ? Le but de la segmentation est l'extraction d'attributs caractérisant des entités telles que des surfaces homogènes ou texturées, distinguables de leur environnement à la manière des tableaux cubistes. Il ne faut pas confondre ce travail avec celui qui consiste à discerner les formes ou les objets, qui semble pourtant si intuitif, si primitif à notre conscience. C'est l'étape de localisation informelle qui synthétise le perçu visuel avant le "traitement" qui lui donne une consistence cognitive.

Segmentation : le niveau zéro de l'analyse d'images

On raconte qu'un enseignant avait donné à un élève un travail d'été qui consistait à faire "voir" un ordinateur. C'était il y a un demi siècle, et tous les scientifiques étaient tombés amoureux de leur nouveau calculateur programmable (ordinateur), à tel point qu'ils y voyaient en toute confiance la possibilité de simuler l'intelligence ! A ce prix, la sensation ne devait être qu'une piètre besogne à concocter. L'étudiant s'appelait Gerald Sussman, l'enseignant, Marvin Minsky. Sussman fut écoeuré, Minsky qui a reçu le plus gros budget de l'époque n'a pas réussi à synthétiser son observateur-descripteur. Et on y travaille encore.[1]

La vision informatique est depuis devenu un domaine de recherche indépendant, et des plus prolifiques.
David Maar a distingué trois niveaux de traitement de l'information visuelle [2] :
i- extraction de caractéristiques 2D (primal sketch);
ii- mise en relation de ces caractéristiques entre elles en incluant le point de vue de l'observateur (ébauche 2,5D);
iii- description de la scène en terme d'objets et de relations entre objets, indépendamment du point de vue (information 3D).

La segmentation représente l'ambition de l'étape (i). La diversité des images et la difficulté du problème ont conduit à l'introduction d'une multitude d'algorithmes que nous n'aurons pas ici l'ambition de résumer (se reporter par exemple à [3]). Les résultats obtenus, évalués souvent de façon très empirique, ainsi que l'évolution des capacités de traitement des ordinateurs, ont souvent amené des scientifiques de profils variés à traiter le problème de manières très différentes.

Historiquement, deux approches duales se sont concurrencées : la première, appelée détection de contours, s'est appliquée à rechercher les discontinuités locales, à discerner leur pertinence, à recomposer leurs connexions. La deuxième, la segmentation à proprement parler (approche par régions), extrait des régions en considérant leur homogénéité vis-à-vis de caractéristiques considérées comme pertinentes, et leur proximité. Si l'objectif est le même, les résultats n'ont pas convergé.

Dans cet article, nous vous proposons de revenir sur le travail de Ohlander, Price et Reddy [4], qui, en 1977 à Carnegie Mellon University (PA, USA), ont proposé une des premières méthodes de segmentation par classification un peu évoluée. Avant d'en détailler le contenu, nous vous proposons quelques rappels sur les notions de couleurs et de segmentation.
NB : par commodité, "O-P-R" fera référence à l'article [4].

[1] CREVIER, A la recherche de l'IA, Champs-Flammarion
[2] HORAUD, MONGA, Vision par ordinateur : outils fondamentaux, Hermès
[3] MAITRE, Le traitement des images, Lavoisier-Hermès
[4] OHLANDER, PRICE, REDDY, in Computer Graphics and Image Processing 8, Academic Press

Traitement d'images en couleur

La lumière est un support propagatif multidimensionnel particulièrement riche en informations : le vue stéréo photométrique (environ douze niveaux de gris) nous permet à la fois de comprendre les distances, et de savoir les ordonner ; la vue chromatique nous permet d'aller beaucoup plus loin dans la discrimination des éléments de notre environnement (plusieurs centaines de couleurs et d'ombres sont détectées : cf modèle Retinex) : nous pouvons par ce biais ressentir leur nature microscopique (où les photons interagissent avec la matière) !

En analyse d'images, l'exploitation de la donnée chromatique permet de simplifier effectivement l'identification des objets et leur extraction d'une scène. Jusqu'aux années 80, la plupart des images "colorées" étaient en fait des images en pseudo-couleurs (une couleur étant appliquée à une intensité monochromatique particulière) : ce n'est pas le cas des images "couleur" dont nous disposons à l'heure actuelle et dont nous allons étudier le codage. Nous partirons cependant de l'hypothèse que l'article de O-P-R utilisait les mêmes considérations de colorimétrie que celles définies par la CIE (Comission Internationale de l'Eclairage) qui avait posé dès les années 30 les longueurs d'onde des trois couleurs "primitives".
Un nombre incroyable d'applications ont été développées autour de l'exploitation systématique des données spectrales. Nous citerons la télédétection et son application à l'agriculture de précision (prévision des rendements) ou à la géothermie (climatologie) (ex: SPOT du CNES).

Base de colorimétrie

Les physiciens utilisent trois caractéristiques pour décrire les qualités d'une source de lumière polychromatique :
- la radiance (l'énergie émise, en W)
- la luminance (l'énergie qu'un observateur humain perçoit, en lm)
- la brillance (traduit l'intensité chromatique perçue, subjective). C'est finalement la grandeur qui nous intéresse.

En tenant compte des propriétés "normales" des yeux humains, il apparait que le spectre perceptible (d'environ 400 nm à 700 nm) est décompasable en trois couleurs primaires : rouge, bleu, et vert. La différence entre les couleurs primaires des lumières et celles des pigments est importante : pour les premières, elles sont additives (superposition) ; pour les secondes, elles sont soustractives (absorption d'une couleur primaire de la lumière, réflection des deux autres), de sorte que l'on considère que les couleurs primaires des pigments sont plutôt le magenta, le cyan, et le jaune (qui sont les couleurs secondaires, c'est-à-dire mélange des primaires deux à deux, de la lumière). (voir figures 1a et 1b)

fig 1a- Trois couleurs primaires (lumières)

fig 1b- Trois couleurs primaires (pigments)

Les trois couleurs "primaires" sont :
Rs = 700 nm
Gs = 546,1 nm
Bs = 435,8 nm
Toutes les couleurs C du spectre visuel (ou presque) peuvent être exprimées dans la base RGB :
C = X.Rs + Y.Gs + Z.Bs



L'application classique de cette décomposition est la télévision.(voir figures 2a et 2b)
Remarque : une jolie démo à ce sujet existe sur : http://pages.infinit.net/niuton/ntv/lumino.html


fig 2a - Coupe d'un écran

fig 2b - Luminophores

Pour une brillance donnée, on obtient le cône de la figure 4.
Les coefficients trichromatiques standarts x, y et z sont tels que :

; x + y + z = 1
soit

Le cône standardisé donne le diagramme de chromaticité (la fameuse "langue", "horse shoe" en anglais) _ figure 3 : les axes correspondent à x (rouge) et à y (vert).

fig 3 - Diagramme de chromaticité (CIE)

fig 4 - Cône du visible selon le CIE

NB : Les valeurs codables en (x,y,z) se trouvent à l'intérieur du triangle dont les sommets sont les trois couleurs primaires standarts.

Modèles

Un modèle de couleur vise à généraliser et à standardiser la représentation des couleurs. Comme vu précédemment, on se ramène pour le visible à un espace borné 3D : chaque couleur y est représentée par un seul point (x,y,z).

Il existe plusieurs types de modèles ; certains sont privilégiés selon que l'on a une approche "hardware" (écran -> RGB, imprimante -> CMY) ou une approche "manipulation de palettes" (graphisme -> HSV).

Modèles tri-bandes : RGB, CMY, YIQ

- Le modèle RGB (rouge, vert, bleu) explicité plus haut (cf figures 2) est un codage qui sert essentiellement aux tubes lumineux à balayage.

- Nous avons vu que les primaires des pigments étaient le magenta, le cyan, et le jaune. Pour les imprimantes, on utilisera donc préférentiellement le modèle CMY.
On a évidemment :

[C, M, Y] = [1, 1, 1] - [R, G, B]

- Le modèle YIQ est le standard pour la télétransmission des signaux TV. De la même manière qu'il s'est agit de trouver une astuce pour rendre compatible les récepteurs radiostéréos avec les récepteurs radiomonos plus anciens, il a fallu conserver le signal d'intensité pour les postes noir et blanc. "Y" correspond donc à la luminance, et les deux autres termes aux composantes chromatiques ("Inphase" et "Quadrature").

Modèle perceptif : HSV

Nous partons ici de la grandeur "brillance" ( le V ) : elle traduit indépendament de la fréquence l'intensité de notre flux lumineux perçu.
Le terme suivant, la saturation ( le S ), explicite l'éloignement vis-à-vis de la lumière blanche : on dira qu'elle traduit la pureté relative de notre grandeur.
Le dernier terme, la teinte ou hue, ( le H ) est un attribu associé à la longeur d'onde dominante dans la distribution polychromatique perçue. Pour un H correspondant à 700 nm et une saturation maximale, on aura donc une couleur purement rouge.
NB : la teinte se code de manière angulaire, et est donc périodique.

La saturation et la teinte caractérisent la chromaticité de notre signal : cela est très proche du système perceptif de notre corps. La brillance est une grandeur séparée, ce qui permet de faire des considérations sur les dégradés d'intensité indépendemmant des considérations de couleurs.

Pour bien comprendre l'avantage de ce modèle par rapport au codage RGB par exemple, prenons l'exemple du rehaussement d'un visage humain partiellement ombragé. L'outil idéal pour faire ce genre de translation dans le contraste est le relèvement isotonique d'histogramme : on égalise dans les zones souhaitées les trois histogrammes de R, G, B. Cependant, ces modifications ne se feront pas de manière identique pour chaque couleur, et la resuperposition va donc entraîner un décalage dans le spectre très surprenant, la couleur de la chair prenant par exemple des teintes incohérentes. Dans le modèle HSV, une égalisation de V, voire éventuellement de S, suffisent à résoudre correctement le problème.

Les formules de passage entre RGB et HSV étant complexes, on se rapportera par exemple à [5] pour plus d'informations.

Exemple :


Luminosité plus faible

Désaturation

Rotation de teinte (hue)

[5] GONZALEZ, WOODS, Digital Image Processing, Addison-Wesley Publishing Company

Segmentation par seuillage

La communauté des chercheurs s'est entendue pour définir une segmentation d'image comme étant un partition de cette image (les parties, disjointes et connexes, étant nommées des régions). Relativement à un prédicat d'homogénéité P donné (en général l'écart min-max, la variance ou la moyenne), une segmentation sera dîte maximale si pour tout (i,j) tels que Ri et Rj connexes, P( Ri U Rj ) => ( i = j )

Ce problème a été correctement posé dans son approche par minisation d'énergie [Mumford et Shah, 1989] : il n'existe pas de solution analytique à ce problème. Les autres approches ne sont donc pas disqualifiées.

Il existe deux approches principales au problème de la segmentation :
- méthodes de partition de l'espace des luminances (dites "de classification") : on y exploite ensuite la notion de connexité des régions.
- méthodes (dites "de croissance de régions") exploitant les relations spatiales des pixels et les associant sur la base de leur connexité de luminance.

La méthode de O-P-R faisant partie de la première catégorie, nous allons ici résumer les travaux qui ont précédé celui décrit par les auteurs, qui a fait rupture à l'époque. Il s'agit de la technique de segmentation par seuillage.

Idées de base

L'espace des luminances peut être naturellement partitionné en utilisant les niveaux de gris (n.d.g.) des composantes (par exemple R, G, B) de l'image. On associe alors à chaque pixel la classe de niveaux de gris à laquelle il appartient : les ensembles maximaux connexes appartenant à la même classe constituent les régions.

L'illustration classique de ce point de vue est l'image de la mariée à la sortie de l'église, blanc sur fond noir. On pense alors à seuiller l'histogramme entre les tons clairs et les tons foncés. De manière plus générale, le seuillage signifie extraire de l'image I les pixels (k,l) correspondant à un intervalle de n.d.g. : T1 < I ( k, l ) < T2

Il apparait clairement que ce type de discrimination va donc dépendre très précisement de la possibilité de partitionner notre histogramme. Or, il faut se représenter l'histogramme comme la projection sur l'axe des luminances de l'ensembre 3D { k, l, I(k,l) }. L'idée qui sous-tend le seuillage est que l'information de localisation (k, l) n'apporte rien au problème de la segmentation.

Nous vous présentons une série d'exemples partant d'un cas simple qui illustre la difficulté d'appliquer l'idée intuitive du seuillage pour segmenter une image.

Image

Histogramme

1.
2.
3.
4.
5.
6.
7.

Avant de commenter l'ensemble de ces couples d'image/histogramme, nous remarquerons la proximité "visuelle" des six premiers cas au moins. La discrimination visuelle des divers ensembles ne parait pas nous poser de problème, et l'effort cognitif accompli pour repérer les régions nous semble équivalent.

On notera que la proximité "visuelle" des cas 3, 4 et 5 illustre clairement la difficulté inhérente à attaquer le problème de la segmentation par l'angle des luminances : nous savons par exemple que nous pouvons donner à peu près n'importe quelle forme voulue à l'histogramme de n'importe quelle image par translation isotonique. Il ne faut donc pas trop compter sur quelques modifications du contraste pour clarifier notre problème. Pas d'espoir de ce côté là !
Toutefois, comme dit l'expression populaire, “il ne faut pas jeter bébé avec l'eau du bain”. L'idée de partitionner l'histogramme est une "idée forte" que nous allons retrouver dans tout ce qui suit : qu'il s'agisse dans un premier temps de faire une statistique unidimensionnelle sur une localisation donnée (cas O-P-R décrit plus loin), ou qu'il s'agisse comme nous le verrons ensuite de faire une statistique multidimensionnelle qui améliore la manière de considérer l'interdépendance des informations connues ("clustering" détaillé encore plus loin).

Comme souligné plus tôt (cas 3), il nous faut réintroduire la localisation. Cela veut dire définir des seuils "locaux" qui tiennent non seulement compte de la valeur de la luminance de notre pixel mais aussi de celles des pixels voisins : T ( k ,l , I(k,l), V(k,l) ), V(k,l) correspondant à une propriété locale des points du voisinage de (k,l) _ par exemple la moyenne de leur n.d.g.
L'image seuillée S sera donc telle que : S(k,l) = I(k,l) x Test_T(k,l) où Test_T est la fonction caractéristique qui vérifie si I(k,l) est inclu dans l'intervalle T(k ,l , I(k,l), V(k,l) ).

Face à une formulation aussi complexe, la première idée est donc de masquer la notion de localité en créant une nouvelle image pour laquelle chaque point voit sa luminance pondérée avec celles de ses proches voisins : c'est typiquement du filtrage par correlation.
On pourra faire par exemple un moyennage : c'est l'équivalent d'un filtre passe-bas.
Sur l'exemple ci-dessous, nous voyons se profiler trois pics (correspondant au trois classes) selon la taille du carré de moyennage. Ce n'est évidemment pas un filtrage optimal. Il est toutefois évident que sans connaissance préalable du bruit, on ne saura pas précisemment choisir le filtre passe-bas : or, un filtrage trop abrupt risque d'écraser des détails déterminants.

Une autre manière plus fine de réintroduire la notion de localité tout en utilisant l'idée d'un seuillage "global" est introduite par O-P-R : nous aurons donc l'occasion de repréciser cela ultérieurement.

Filtrage homomorphique pour homogénéiser l'illumination

On peut modéliser une image (matrice de luminances) comme le produit de deux caractéristiques :
- l'illumination : quantité de lumière incidente sur la scène regardée
- la réflectance : quantité de lumière réfléchie par les objets de la scène.
Pour une image I, on écrira donc : I ( k, l ) = i (k, l) . r (k, l)

Les intervalles théoriques pour chacune de ces composantes sont :
Le n.d.g [0,255] correspond donc à

Il n'est pas pratiquement possible de distinguer i et r partant de I ; cependant, nous allons nous servir de ces deux composantes pour expliciter le filtrage homomorphique.

Soit z(k,l) = ln I(k,l) = ln i(k,l) + ln r(k,l)
alors TF(z) = TF(ln i) + TF(ln r)
On écrira : Z(u,v) = Î(u,v) + R(u,v)

Le filtrage de Z par H donne Zf(u,v) = H(u,v).Z(u,v)
Par TF inverse : zf (k,l) = ITF ( H(u,v).Î(u,v) ) + ITF ( H(u,v).R(u,v) ) = if (k,l) + rf (k,l)

L'image traitée obtenue est donc :
It (k,l) = exp ( zf (k,l) ) = it(k,l) . rt(k,l)

H(u,v) est appelé le filtre homomorphique : il est construit pour traiter la composante i et la composante r séparément. En effet, l'illumination est caractérisée par des variations spatiales relativement lentes, alors que la réflectance tend à varier de façon abrupte, en particulier au niveau des contours des objets.
On associera donc les basses fréquences de la transformée de Fourier du logarithme de l'image avec l'illumination.

H(u,v) est construit à l'aide d'un FIR : on fabrique la fenêtre de Hamming optimale pour laquelle les basses fréquences inférieures au cinquième de la fréquence de Nyquist sont très aténuées ; H est obtenu par symétrie cylindrique.
On applique ensuite le traitement décrit par le shéma bloc du filtrage homomorphique : l'histogramme du résultat devient seuillable. On notera toutefois que les hautes fréquences étant favorisées, le bruit HF l'est aussi. On aura donc tendance à filtrer passe-bas avant et après le filtrage homomorphique. Enfin, du "ringing" apparait au niveau des contours, et cela risque d'induire des artefacts dans notre processus de segmentation.

Ce prétraitement de l'illumination se justifie en particulier par des considérations de perception : l'oeil est sensible en premier lieu aux transitions marquées de contraste (qui correspondent en général aux bords des objets, par cause du phénomène d'occlusion). Il se comporte de ce point de vue comme un filtre passe-haut. Cependant, il s'agit aussi de noter que nous observons des scènes en focalisant rapidement notre attention sur certaines de leurs parties, démarquées des autres : l'échelle de considération d'une scène renverrait alors à une adaptation du seuil du filtre en fonction de la localisation contrairement à l'équilibrage global que nous opérons. Il serait plus adéquat d'appliquer un filtrage homomorphique dans les sous-parties majeures. Il faut ajouter à cela que ce traitement global présente deux défauts :
- amplification du bruit HF (création de textures indésirables)
- déformation des transitions de contraste ("ringing").

Seuillage optimal

Nous nous plaçons dans le cas (... idéal ? facile ? gentil ? ) où l'histogramme étudié permet de retrouver les classes des régions de l'image.
On cherche ici à décrire un traitement de l'histogramme permettant de le partitionner de façon pertinente (déterminer les seuils).

Exemple de l'histogramme bimodal

Soit une image qui ne contient de deux régions principales de brillance. L'hitogramme d'une telle image est l'estimée de la fonction densité de probablilité de la brillance : p(z). Cette densité est la superposition de deux densités unimodales correspondant aux deux régions : p(z) = P1 p1(z) + P2 p2(z). On assimilera p1 et p2 à deux densités de probabilité gaussiennes, centrées resp. en z1 et z2 (avec z1<z2), et d'écart type resp. sigma1 et sigma2. (on a evidemment P1 + P2 = 1).

Un seuil T peut être choisi de manière à séparer les deux modes. L'erreur de classification faite sera alors : (E1 étant la probalilité de se tromper en classant 2 dans 1, et vice versa)

La minimisation de cette erreur est atteinte lorsque : P1 p1(T) = P2 p2(T)
Le résultat de cette équation passe par la résolution d'un polynôme du second degré.

Le résultat classique pour une même variance sigma est :

Généralisation

En fait, l'interpolation d'une distribution avec son équivalent gaussien est encore un problème statistique ouvert (on se reportera par exemple à la thèse de Guillaume Saint Pierre, Université Paul Sabatier, Toulouse, 2002).
L'idée première (non optimale) est d'approcher par minimisation quadratique notre histogramme réel par une superposition de n densités gaussiennes p(z) : on adoucie l'allure de l'histogramme h(z), on compte le nombre de maxima ce qui détermine le nombre n de modes recherchés ; enfin on minimise .

Dans notre cas, la résolution de ce problème complexe n'apporte pas grand chose. On place en général le seuil au milieu des pics voisins (cas où la variance est la même). On se souviendra qu'il s'agit d'une approximation très large.

La méthode d'Ohlander, Price et Reddy : division récursive de régions

Description des idées introduites

Exploiter les informations chromatiques

Une image couleur (codée en tri-bande) contient énormement plus d'informations que son équivalent monochromatique (le cube !). L'idée de O-P-R est donc d'exploiter ces informations en les examinant dans un nombre important de bases possibles (c'est-à-dire avec divers points de vue).

Prenons l'exemple de deux nuages de points (clusters) dans l'espace des RGB : l'exemple ci-dessous est construit pour illustrer le fait qu'observés du point de vue des intensités de rouge (c'est-à-dire sans même avoir construit leur statistique), les deux clusters ne sont plus différentiables. Ils le sont parfaitement observés du point de vue des intensités de vert.

A l'époque, comme l'expliquent O-P-R, l'analyse des clusters multi-dimensionnels est encore trop coûteuse d'un point de vue calculatoire. Et même s'ils lui reconnaissent des qualités, O-P-R affirment : " l'analyse d'histogrammes unidimensionnels semble être plus efficace dans le cas général que les variations multi-dimensionnelles, et est adaptée pour beaucoup d'images réelles. Cette méthode est aussi très utile pour la segmentation guidée par l'interprétation où des connaissances extérieures sont disponibles pour sélectionner les régions désirées. Il y a cependant des cas où cette analyse ne fonctionne pas aussi bien que voulue, et il est possible qu'une de ses variations soit mieux adaptée".

O-P-R définissent donc un ensemble de caractéristiques pertinentes, qui sont autant de points de vue différents sur nos données. Ce sont l'analyse des composantes primaires (RGB, YIQ) et leur représentation dans le modèle perceptif (HSV). Neuf histogrammes sont donc construits pour chaque zone traitée (voir les explications sur la notion de "zone traîtée" plus loin). Les histogrammes sont éventuellement légèrement adoucis pour retirer les petits pics.

Les neufs panoramas obtenus sont donc très différents.

L'étape cruciale de la méthode O-P-R est le choix de la composante essentielle (correspondant à la classe dominante) sur l'ensemble des histogrammes de manière à appliquer un seuillage qui va permettre d'extraire les régions correspondant à la classe déterminée. "Usuellement, le meilleur pic est un pic bien séparé d'avec les autres (l'écart entre le sommet et ses vallées est bien marqué)". En fait, O-P-R définissent un ensemble de critères hierarchisés complexes permettant de choisir cette composante essentielle : c'est le résultat de la thèse d'Olhander[6].

Nous avons essayé de décrypter la signification exacte du tableau de description des priorités des caractéristiques discriminantes pour la segmentation. En premier lieu en s'appuyant sur l'article, mais celui-ci renvoie à la thèse (or, nous ne disposions pas d'une copie). En deuxième lieu, en s'appuyant sur la bribe de programme fournie : il est en "SAIL", un vieux langage utilisé en IA à Stanford qui a des fonctions non standards... Leur manière de programmer est confuse, mais il est clair qu'il ne permet pas d'expliciter les priorités. Difficile dès lors de discuter de la pertinence de leur méthode. D'autant plus qu'il apparait que leur quantification est purement empirique. Ceci justifie le fait que nous nous en sommes tenus à dégager la particularité de leur méthode, et à en reconstituer l'esprit avec les outils nouveaux disponibles étant donnée l'évolution des ordinateurs en matière de rapidité et de mémoire.

Déterminer les seuils dominants plutôt que tous les seuils

L'idée avouée de O-P-R était qu'un système de segmentation devrait être capable d'extraire les régions dominantes en premier lieu, et d'utiliser la représentation obtenue pour l'affiner selon les besoins du problème. C'est avec cet objectif que les auteurs ont donc construit une méthode récursive. Cherchant à obtenir une précision réglable, ils ont aussi permis d'aborder la question de l'optimalité de la différentiation statistique des classes de manière tout à fait neuve.

Nous avons vu que dans la plupart des cas, l'étude complète des modes de l'hitogramme ne nous permettait pas de nous débrouiller pour déterminer les diverses classes. Il s'agit alors de réintroduire une notion de localisation dans l'étude même des luminances. Pour cela, O-P-R introduisent une classification récursive :
1- les pixels déjà attachés à une classe donnée (niveau dominant de l'histogramme) sont soustraits de l'étude et définissent des sous-régions dont on étudie la connexité. Les pixels restants sont de nouveau traités : leurs caractéristiques ne sont alors "plus" confondues avec celles de la classe dominante maintenant masquées par sa soustraction.
2- chacune des sous-régions constitue une nouvelle image qui est étudiée de la même manière.
3- à chaque fois, un seuil de cohérence est testé, à partir duquel on arrête la récursivité : le réglage de ce seuil est le point critique de cette méthode.
4- lorsqu'il n'existe plus de zone à segmenter, on étiquette les régions selon le résultat des masquages successifs.

Le schéma général de l'algorithme de segmentation proposé est donc :

Accélération de l'algorithme

O-P-R devaient, à la fin des années 70, faire face à une plaie qui n'est plus (?) d'actualité : la capacité de calcul des ordinateurs. En ce sens, un des soucis majeurs de l'époque était d'obtenir un résultat rapidement, quand le traitement d'image est souvent très "gourmand". Disons qu'aujourd'hui, nous pouvons remettre à plus tard cette question, voire laisser à un réel spécialiste le soin d'optimiser notre algorithme.

Un des points importants sur lequel insistent O-P-R est l'augmentation de la rapidité de leur algorithme. Ils appelent cela une "planification". Il s'agit de ne considérer que l'image réduite de taille (échantillonnée) de manière à obtenir sans le détail l'aspect général de la segmentation : de sorte que bien moins de pixels sont à traiter. Ils exploitent en effet le bénéfice de la récursivité de la division de régions, qui autorise à préciser le schéma initial de la segmentation.
Pour être plus précis, ce n'est pas le mascage binaire qui est élargi car cela n'est pas stable si on échantillonne trop l'image, mais c'est le seuil qui est conservé et appliqué à l'image de "taille réelle". Quelques opérations postérieures sont éventuellement ajoutées.

[6] OHLANDER, Thesis : Analysis of natural scenes, CMU, Pittsburgh (PA,USA).

Généralisation de la méthode d'Ohlander, Price et Reddy

Histogramme 3D et clustering

Ne pouvant se débrouiller de la méthode empirique de détermination du "meilleur pic" dans l'ensemble des histogrammes, nous allons utiliser une variante de la méthode de O-P-R. Plutôt que de considérer des histogrammes mono-dimensionnels, nous allons étudier la proximité des points dans l'histogramme 3D.

L'histogramme 3D n'est pas une statistique : il existe une bijection entre tout point de l'image et tout point de l'histogramme. Cependant, la position du pixel dans l'image n'apparait plus du tout. Comme la plupart des images sont codées en RGB, l'histogramme 3D est ici l'occupation de l'espace RGB par l'ensemble des points. L'occupation de l'espace 3D est à considérer de la même manière qu'un pic dans l'histogramme 1D. De sorte que ce que nous recherchons est la plus grande densité de points dans un voisinage de l'espace donné. Cette approche "physique" par densité, ou par concentration, n'est pas évidente à mettre en oeuvre. On cherchera donc à optimiser une mesure de l'écart entre les points d'un même nuage (un cluster) vis-à-vis de leur barycentre : il s'agit de l'analyse des clusters, aussi appelée l'analyse de segmentation ou analyse de taxonomie.

La méthode traditionnelle pour traiter ce problème est le calcul des "K-means".

Classification par K-means

L'algorithme K-MEANS est une méthode de partition des données en K clusters, ou classes. Contrairement à d'autres méthodes dites hiérarchiques (voir "arbre de clusters" ci-dessous), l'algorithme des K-MEANS ne crée pas de structure d'arbre pour décrire les groupements, mais crée plutôt un seul niveau de clusters.
K-MEANS renvoie une partition des données dans laquelle les objets à l'intérieur de chaque cluster sont aussi proches que possible les uns des autres, et aussi loins que possible des objets des autres clusters. Selon le type de donnée, certaines distances sont plus ou moins adaptées.
Chaque cluster de la partition est défini par ses objets et son centre (ou centroïde). Le centre d'un cluster est le point qui minimise la somme des distances aux objets du cluster.
K-MEANS est un algorithme itératif qui minimise la somme des distances de chaque objet au centre de son cluster, pour chaque cluster. K-MEANS change les objets de cluster jusqu'à ce que la somme ne puisse plus diminuer. Le résultat est un ensemble de clusters compacts et clairement séparés, sous réserve qu'on ait choisi la bonne valeur K du nombre de clusters que l'on cherche.

Le programme Matlab (pour charger les images, taper : image = imread('nom_image'); puis imshow(km(image,Nombre_de_classes)) )

  • exemple1 et sa segmentation en trois classes.
 
  • exemple2 et sa segmentation en quatre classes.
 

Les resultats sont satisfaisants dans le cas ou les zones sont uniformes : cela marche comme nous le souhaitons sur l'exemple 2, mais les vaches de l'exemple 1 ne sont pas uniformes sur l'image, et la segmentation n'est pas proche à notre avis de celle que donnerait un humain. Un autre inconvenient de la méthode est qu'il faut spécifier àl'avance le nombre de classes...

NB : Une étude plus détaillée des paramètres de cette méthode est consultable sur : http://www.tsi.enst.fr/tsi/enseignement/ressources/mti/kmeans/index.htm

A noter encore que rien ne guarantit la convergence vers le minimum global, et qu'il n'est pas non plus guaranti que l'algorithme produise k clusters, à moins que l'on ne modifie la phase d'allocation pour assurer que chacun des clusters a un nombre de points non nul.

Remarque : à explorer davantage, le Fuzzy C-means ...

Réintroduction de la notion de localité : arbre de clusters

Il se trouve que chercher à déterminer exactement le nombre K de classes pertinentes dans notre histogramme 3D revient à résoudre le problème du seuillage optimal présenté plus haut. Nous avons vu que cela n'est pas nécessairement une bonne idée pour les cas où du bruit vient perturber notre signal.

En appliquant l'idée de O-P-R, nous allons donc construire une méthode itérative en ne sélectionnant à chaque fois que les points inclus dans un "meilleur cluster" (à la place de "meilleur pic").

Nous utilisons pour cela l'outil fourni dans MATLAB (statistics toolbox) : Hierarchical Clustering
(cf http://www.mathworks.com/access/helpdesk/help/toolbox/stats/multiv15.shtml pour une description complète)

Hierarchical clustering is a way to investigate grouping in your data, simultaneously over a variety of scales, by creating a cluster tree. The tree is not a single set of clusters, but rather a multi-level hierarchy, where clusters at one level are joined as clusters at the next higher level. This allows you to decide what level or scale of clustering is most appropriate in your application.
To perform hierarchical cluster analysis on a data set using the Statistics Toolbox functions, follow this procedure:

  1. Find the similarity or dissimilarity between every pair of objects in the data set. In this step, you calculate the distance between objects using the pdist function. The pdist function supports many different ways to compute this measurement (default : Euclidean distance).
    -> comme pour les K-means, l'idée est donc de représenter l'ensemble de nos points comme un "vecteur" de trois composantes (r,g,b), et de calculer leur distance (par exemple euclidienne même si cela n'est pas naturel pour un maillage discret ; on poura prendre 'cityblock' qui est la distance qui "suit" la quantification) : distance entre 1-2, puis 1-3, ..., puis 2-3, 2-4, etc...
  2. Group the objects into a binary, hierarchical cluster tree. In this step, you link together pairs of objects that are in close proximity using the linkage function. The linkage function uses the distance information generated in step 1 to determine the proximity of objects to each other. As objects are paired into binary clusters, the newly formed clusters are grouped into larger clusters until a hierarchical tree is formed.
    -> l'idée est de classer par ordre croissant de proximité nos couples de points, sachant qu'un couple classé constitue une nouvelle entité : la plus proche distance à l'un des points du couple sera attribuée comme la distance à cette entité. L'idée est de propager la recherche du point suivant le plus proche : de là vient l'idée de "hiérarchie".
    L'illustration fournie dans l'aide de Matlab est explicite :

    Il est possible d'afficher cette hiérarchisation sous forme d'arbre de clusters avec la commande dendrogram. Cette représentation graphique des distances relatives entre chaque entité hiérarchique ne sert absolument à rien du point de vue calculatoire : elle permet seulement de se convaincre qu'il est possible d'établir avec cette approche une manière rigoureuse de distinguer les clusters ; en effet, s'il apparait une longue branche relativement à l'espacement des ramifications inférieures, c'est qu'il devient raisonnable de considérer que le cluster obtenu par l'ensemble des points hiérarchiquement inférieurs est distingable à peu près des autres points. Cette relation entre les longeurs de branches est traduite au travers d'un coefficient de consistence relatif à chaque noeud de l'arbre de clusters. (The inconsistent function compares each link in the cluster hierarchy with adjacent links two levels below it in the cluster hierarchy).
    Exemple :
  3. Determine where to divide the hierarchical tree into clusters. In this step, you divide the objects in the hierarchical tree into clusters using the cluster function. The cluster function can create clusters by detecting natural groupings in the hierarchical tree or by cutting off the hierarchical tree at an arbitrary point.
    -> cela permet d'étiqueter directement nos points pour une classe donnée, qui sera soit choisie en fonction de la profondeur souhaitée dans l'arbre de clusters, soit en fonction d'un seuil de sélection de la consistence. Nous utiliserons la première option pour sélectionner seulement le départ de la branche la plus "porteuse" (équivalent du "meilleur pic"). Cependant, la notion de consistance nous sera très utile pour régler la "profondeur de segmentation", c'est à dire le niveau à partir duquel on considérera qu'une région est optimalement segmentée.

Traitement des nuages de points pour une définition de régions connexes

Réduire-étirer

Lorsque l'on seuille l'espace des luminances, rien ne guarantit la connexité des points sélectionnés : on obtient la plupart du temps des nuages de points dont il s'agit d'étudier la densité spatiale de manière à supprimer les éléments les plus petits. Si l'on se contente de compter la nombre de points connexes (surface), on risque de détruire la majeure partie des régions. La solution, adoptée par O-P-R, est l'astuce classique qui consiste à réduire-étirer : pour un masque binaire, on sous-échantillonne au plus proche (moyenne seuillée à la moitié), puis on reforme l'image en l'agrandissant à la taille originale.
Sur l'exemple ci dessous, l'image binaire en nuages de points est traitée avec un facteur 2 puis 4, puis 8.

On relève aisément les principaux défauts de cette méthode :
- si on obtient bien une reconnexion des proches voisins, on n'arrive pas à isoler une zone à peu près compacte (quasi-convexe)
- les contours des zones sont rapidement très déformés : pour se convaincre de l'instabilité du précédé, on remarquera la différence entre les deux "grosses tâches", pourtant symétriques originalement.

Filtrage morphologique

Le terme de morphologie renvoie plus couramment à une branche de la biologie qui traite des formes et des structures des animaux et des plantes. Dans le contexte de la morphologie mathématique, il s'agit d'extraire des images des composantes utiles pour la représentation et la description de la forme d'une de ses régions, telles que ses limites, son squelette ou sa coque convexe. Cet outil est basé sur la théorie des ensembles : dans le contexte du traitement des images, un ensemble conrrespond à une région. D'abord développé en binaire (ensemble de points appartenant à un intervalle de Z²), cet outil a été étendu pour les ensembles en niveaux de gris ( dans un intervalle de Z²x[0,255] ), plus rarement pour les espaces plus grands (couleurs, temps).

Nous rappelons juste ici que les opérateurs fondamentaux sont la dilatation et l'érosion. On utilise fréquemment leur combinaison (l'ouverture étant une érosion suivie d'une dilatation ; la fermeture une dilatation suivie d'une érosion). On peut ainsi fabriquer un filtre morphologique qui a tendance à éliminer les petites régions, et effacer les petits défauts : pour cela, on enchaînera une ouverture puis une fermeture (voir schéma ci-dessous).


Cette simple opération donne déjà de bien meilleur résultat que le réduire-étirer (l'exemple suivant est obtenu avec pour élément structurant un cercle de rayon 1, puis 3, puis 5) : on notera encore que la symétrie est conservée.
La taille de l'élément structurant correspond à la densité de points acceptable pour sélectionner un ensemble pertinent : le lien n'est cependant pas directement évident.

On pourra comparer le résultat d'une dilatation itérative conditionelle (remplissage de région), et l'extraction de la coque convexe ; cela risque de ne pas donner des résultats satisfaisants étant donné la répartition aléatoire des nuages de points.

Les meilleurs résulats seront cependant obtenus à l'aide d'une méthode que nous n'avons pas ici pris le temps de mettre en oeuvre : il s'agit de la méthode dite de "ligne de partage des eaux" (LPE) avec marqueurs. En effet, cette méthode permet de sélectionner les régions disposant chacune d'un minimum distinct. Les marqueurs permettent de ne pas considérer les minima qui ne nous intéressent pas. On peut prendre, par exemple, le résultat d'un réduire-étirer que l'on érode pour qu'il ne déborde pas, et l'appliquer comme marqueur à notre algorithme LPE.

NB : Une étude plus détaillée des LPE est consultable sur : http://www.tsi.enst.fr/tsi/enseignement/ressources/mti/filtrage_lpe/mti1.htm
Pour un exemple d'utilisation, voir : http://www.tsi.enst.fr/tsi/enseignement/ressources/mti/bulles/i3m.html

Résultats de la méthode O-P-R adaptée : démo

Nous résumons ici les principales étapes de l'algo proposé dans la démo
NB : vous retrouverez les explications à l'intérieur même du code en commentaire.

Son schéma séquentiel est évidemment celui proposé par O-P-R

Etape 1 : on sélectionne l'image à traiter. Nous vous déconseillons de choisir une image de plus de 50 pixels de côté (voir pourquoi au niveau du clustering).

Etape 2 :
La consistance est le paramètre qui sert à sélectionner la tolérance dans l'écart des luminances pour le choix des clusters.
Le nombre de pixels maximaux correspond à la surface maximale des détails qui nous intéressent.

Etape 3 : le programme affiche le résultat de la segmentation à chaque fois qu'une sous-région ne sera plus traitée (sub-divisée).
Cette partie est la boucle à proprement parler du schéma O-P-R.

Revenons sur ses principaux enjeux :

Le clustering

L'idée première pour analyser l'histogramme 3D en terme de densité est de le corréler avec une boule dont le rayon serait relatif à la tolérance choisie. Cependant, il faut parcourir les 256*256*256 couleurs à chaque fois ! C'est irréaliste.

Nous utilisons donc le "hierarchical clustering". Nous mettons sous forme de vecteur notre image pour en faire une série de points dans l'histogramme 3D. Cette étape n'est déjà pas vectorisable (cela veut dire, en langage Matlab, optimiser son programme pour qu'il tourne plus rapidement en exploitant les "méthodes" de Matlab : typiquement une programmation de type C sous forme de boucle ira 100 fois plus vite sous forme vectorisée). Mais la principale limitation en terme de calcul arrive à l'étape d'après, pour le calcul de l'arbre des clusters :
Y = pdist(X);
Cette étape peut être très longue à calculer. En effet, pour une image m par n, le vecteur de points traité est de taille m fois n, et la table Y des distances réciproques est de taille (m.n)x(m.n-1) : on a donc un calcul en N puissance 4 !! Sur notre machine, la mémoire n'était pas suffisante pour traiter une image telle que N>50.
Z = linkage(Y,'centroid');
L'arbre de clusters est le rapprochement deux à deux des entités les plus proches (les entités initiales étant les points, un rapprochement étant à son tour une entité).
Ici la question du "plus proche" n'est plus une évidence. Avec Matlab, nous avons différentes manière de choisir ce "plus proche" : distance minimale ou maximale, distance au centre, distance moyenne (celle que nous avons choisi parce que cela nous parlait davantage, mais c'est à examiner de plus près).

Premier test de sélection : la consistance sera ici la distance entre les deux principaux clusters démarqués. Si elle est faible, c'est que la zone est relativement homogène. Si ce test n'est pas validé, on doit examiner les éléments du cluster démarqué en détail.

Ici se pose un problème essentiel qui est la représentativité du plus petit cluster sélectionné. En effet, un cluster tout petit peut par exemple se démarquer très nettement dans l'espace des luminances : il sera donc sélectionné ; or le filtre va le rejeter (du fait de sa petitesse), donc l'analyse de toute la région sera considérée comme terminée. Nous touchons ici du doigt une des limitations principales de l'approche par arbre de clusters : nous avons accès à la structure de nos points en terme de distance, et non pas en terme de densité locale.

Illustration pour mieux nous faire comprendre : imaginons une image test où on a deux plans constants séparés par une ligne de luminance très différente. Il peut être bon de sélectionner cette bande (par exemple, si on segmente une image aérienne de champs, la mince séparation qui les distingue nous intéresse), ou au contraire, il peut être préférable de l'ignorer comme du bruit (cas des lignes blanches dans les éblouissements des CCD où le drain a saturé). Nous arrivons donc ici à une limitation de notre algorithme : il faut avoir un a priori sur l'image à traiter. Si nous considérons que la ligne nous intéresse (on la garde en tant que sous-région), cela exclue les images où le bruit ne suit pas une distribution gaussienne autour de la valeur "normale" (cas pour lequel les spots de "bruit" seraient conservés). Cependant, nous pourrions utiliser une astuce pour dépasser cette limitation : celle-ci consisterait à masquer les petits clusters bien séparés (en les soustrayant du masque), sans les valider en tant que sous-région, et à recommencer le traitement puisque le filtrage va combler les "trous" occasionnés (sauf si la répétition de ce masquage vient à élargir dramatiquement le trou : voir l'exemple du cône de luminance dans l'étude du filtrage-> l'astuce sera alors de créer un masque de masque : nous nous épargnerons ce niveau supplémentaire, mais nous nous souviendrons que cela peut être la cause d'erreurs).

Filtrage

Le filtrage morphologique (décrit plus haut) que nous utilisons sert à réintroduire la notion de densité. La démonstration en est faite avec l'image bitmap suivante, que nous filtrons avec un élément structurant circulaire de taille 2 (cela va très vite sous Matlab).

Le choix de l'élément est crucial : c'est lui qui définit la forme et l'orientation de l'alignement de densité observé. Si nous cherchons à sélectionner les limites d'un champ dans une vue aérienne, un cercle va les écraser, alors qu'une croix permettra aux alignements verticaux et horizontaux de survivre (c'est une solution, ce n'est sûrement pas la meilleure).

La correlation taille de l'élément structurant / densité n'est pas si simple toutefois. Pousser la taille de l'élément structurant permet de retirer correctement les petites régions, mais le filtre ne prend plus en compte la densité initiale. En fait, l'enjeu du filtrage est de supprimer les problèmes liés aux forts gradients : dès qu'on a une forte variation dans l'espace des luminances, on n'a plus de proximité dans notre histogramme 3D. Si on cherche à retirer le bruit, il faut évidemment écraser les effets de contour, mais les éléments pertinents de faible épaisseur sont perdus... On retombe sur une problématique du filtre de Canny (en rapport avec la largeur de la gaussienne), récurrent à l'époque : adoucir les forts gradients ou conserver le bruit...

Pour cela, il faut favoriser l'élément le plus petit, et examiner à la fois sa consistance et sa taille, de manière à détecter les pièges qui consistent à sélectionner une seule forme, à la faire disparaitre par filtrage, et à renvoyer donc la meme sous-région à traiter (boucle infinie).

Illustration : prenons l'image d'un cône de luminance.
La pointe va être correctement sélectionnée. Pour les cercles juste inférieurs, le filtrage morphologique va retirer le vide intérieur : on va aussi les sélectionner correctement. Pour les cercles suivants, facilement détectés dans l'espace des luminances, si la pente du cône est trop forte, "on a perdu" car le filtre les fait disparaitre...

Etiquetage

Pour résumer, l'algorithme est le suivant :

numéro := 0;
pour tous les pixels P de gauche à droite et de haut en bas :
si P est différent du fond
alors si seulement un des deux voisins sup et gauche a une étiquette e
alors marquer P avec e ;
sinon si ces deux voisins ont la même étiquette e
alors marquer P avec e ;
sinon si ces deux voisins ont deux étiquettes différentes e1 et e2
alors marquer P avec min(e1, e2) ;
mettre (e1, e2) dans une table d'équivalence ;
sinon numéro := numéro+1;
marquer P avec numéro;
fin si
fin si
fin pour
prendre le plus petit élément comme représentant de chaque classe;

Donnons l'exemple suivant :

Le premier balayage donne un résultat de la forme (ici deux images pour faire ressortir les premières et les dernières étiquettes) :

Il s'agit donc réordonner selon la table d'équivalence : la première donne la deuxième (sur fond artificiellement dégradé pour la visualisation).

 

Sur la base de cette décomposition, nous testons la taille de la sous-région obtnue ; passé un certain seuil, un nouveau masque est défini qui est renvoyé dans la pile des sous-régions à traiter.

La première version de notre algorithme (sous forme C) prenait plus de 120 secondes pour traiter 120000 pixels. Sa version vectorisée (forme Matlab) en prend moins d'une ! Le facteur limitant de ce programme est bel et bien la construction de l'arbre de cluters !

Résultats

Compte-tenu de la limitation de notre programme, il nous apparait inutile de multiplier les exemples.

Nous présenterons le suivant :

Les étapes successives de la segmentation donne (consistance=0.2 ; surface_min=16) :

Le résultat final donne très correctement :

Il s'agit donc de rechercher une méthode plus pragmatique de clustering que celle proposée : son mécanisme est désuet, nous recherchons en effet davantage un outil qui produise des régions utiles pour une application non supervisée (choix automatique de la consistance ?). Ici, le choix du seuil de "consistance" (qui correspond à l'homogénéité) se fait par l'observation empirique des résultats obtenus pour diverses valeurs. Rien ne guarantit qu'un seuil valable pour une image soit correct pour une autre : c'est à explorer.
Nous remettons ce travail à vos bons soins.

Une autre amélioration notoire sera d'utiliser l'astuce de "PLANNING" (O-P-R) : nous vous proposons son corrolaire sous Matlab, qui consiste à utiliser un traitement prélimianire par k-means (plus rapide, en N puissance 2), de manière à obtenir des sous-masques de taille suffisament réduite pour être calculables dans les limitations de mémoire de votre machine.

Vers une définition des modes d'un histogramme exploitant les résultats de la théorie de la Gestalt.

Nous signalons ici qu'une définition optimale du point de vue perceptif de ce qu'est un cluster est donnée par Jean-Michel Morel, Agnès Desolneux et Lionel Moisan dans leur "Théorie de la perception et géométrie stochastique". Cette formulation mathématique rigoureuse ne nous a pas donné de solution d'implémentation simple du clustering.

On notera enfin que la segmentation des images en couleur s'avère être bien plus pertinente que le modèle de base en N&B dans la mesure où un grand nombre d'informations sont apportées par la chromaticité. Le pas suivant à franchir est l'utilisation d'une série temporelle d'images (un film) permettant de détecter les changements dans une scène donnée. Si vous voyez cette image pour la première fois ...

...vous mettrez sans doute un certain temps avant d'arriver à distinguer le dalmatien. La même image animée nous vous aurez posé aucun problème. Les applications les plus courantes sont la soustraction d'arrière-plan, et la détection automatique des limites d'une séquence.
Plus poussées encore, certaines méthodes exploitent les textures.

 

Bibliographie

Daniel CREVIER, A la recherche de l'IA, Champs-Flammarion

Rafael GONZALEZ, Richard WOODS, Digital Image Processing, Addison-Wesley Publishing Company

Radu HORAUD, Olivier MONGA, Vision par ordinateur : outils fondamentaux, Hermès

Ron OHLANDER, Keith PRICE, Raj REDDY, Picture segmentation using a recursive region splitting method, Computer Graphics and Image Pocessing 8, 313-333 (1978)

Henri MAITRE, Le traitement des images, Lavoisier-Hermès

 


NB : tous les exemples et les codes MATLAB sont disponibles en format WINZIP en cliquant sur l'icône


L'image intégrale et originale de cet exposé est disponible en format WINZIP en cliquant sur l'icône :
l'utilisation en est libre à condition de siter la source. Merci.


 

Les auteurs :

Samuel Drulhe
Martial Hue

Projet réalisé dans le cadre du DEA MVA 2003/2004

http://www.cmla.ens-cachan.fr/Cmla/DeaMVA/
http://www.tsi.enst.fr/tsi/enseignement/ressources/mti/