Chapitre VI : Les images binaires
Transcription
Chapitre VI : Les images binaires
Les images binaires Chapitre VI : Les images binaires Une image binaire est une image pour laquelle chaque pixel ne peut avoir pour valeur que 0 ou 1. La manipulation de telles images regorge d'outils spécialisés ainsi que de théories mathématiques pour plusieurs raisons : • • Les débuts du traitement des images numériques ne permettaient pas le traitement d'images complexes (problème de temps de calcul, d'espace mémoire disponible et qualité des périphériques de sortie). De plus, les premières applications (reconnaissance de caractères, analyse de traces laissées dans les chambres à bulles par des particules) vers 1950 s'adaptaient bien à ce type d'images. Les images binaires sont un contexte simple permettant une formalisation mathématique des problèmes par des outils tels que la topologie. Dans le domaine de la vision industrielle (détection de défauts, contrôle qualité, mesure, ...) on considère souvent l'image binaire comme un passage obligé, suivant en général la phase de segmentation. Deux catégories d'outils sont alors nécessaires pour d'une part le codage efficace (et éventuellement la compression) et d'autre part pour le traitement (analyse et description des formes). V.1 – Quelques notions Il existe un ensemble de notions propres aux images binaires. La plupart des notions exposées ici relèvent d'un domaine particulier de l'analyse d'image : la géométrie discrète. Soit I une image binaire et I(i,j) la valeur du pixel m de coordonnées (i,j) dans I. V.1.a : Le fond et … la forme Les deux classes forme et fond constituent une partition de l'image I telle que : • Forme = { m ∈ I tels que I(m) = 1} 1 Les images binaires • Fond = {m ∈ I tels que I(m) = 0} La forme peut représenter plusieurs objets (notion de composante connexe); certaines composantes du fond peuvent représenter des trous dans les objets. V.1.b : Segment On appelle segment de l'image I, le quadruplet : s = (g,d,l,v) vérifiant : ∀ i ∈ [g,d], I(l,i) = v avec bien sûr v = 0 ou 1 Un segment est donc une suite continue de pixels de même valeur sur une ligne donnée. Chaque élément du quadruplet porte un nom : • • • • g : gauche de s d : droite de s l : ligne de s v : valeur de s Bien sûr, cette décomposition de l'image en segments n'est pas unique car elle privilégie une analyse ligne à ligne. Une analyse colonne à colonne est tout aussi envisageable. Les éléments du quadruplet porteraient alors les noms haut, bas, colonne et valeur. Soit S(i,x) l'ensemble des segments de la ligne i ayant pour valeur x : S(i,x) = { s tels que : l(s) = i et v(s) = x} L'ensemble S des segments de l'image I est défini par : S =US(i, x) i, x V.1.c : Connexité On appelle relation de connexité et l'on note C0(s,s'), la relation définie sur S de la manière suivante: C0(s,s') ⇔ s dans S(i,x) et s' dans S(i-1,x) et g(s') < d(s)+1 ou g(s) < d(s')+1. On dit alors que s est connecté avec s' ou que s et s' sont connexes. C0(s,s') ⇔ C0(s',s) La décomposition ligne à ligne est donc indépendante du choix de la ligne de départ. On note C0* la fermeture transitive de C0. La figure 1 illustre cette relation de connexité entre les segments. 2 Les images binaires Connexité Pas de connexité Pas de connexité Figure 1 : Relation de connexité entre des segments V.1.d : Distance Tout pixel d'une image est caractérisé par un couple de coordonnées (x,y). On peut donc calculer des distances entre pixels. Les distances les plus courantes sont (pour deux pixels P(xp,yp) et Q(xq,yq)): Distance de Manathan : d1(P,Q)=|xp - xq| + |yp - yq| Distance Euclidienne : d2(P,Q)= (x p − xq )2 +( y p − yq )2 Distance de l'Echiquier : dinf(P,Q)=Max(|xp - xq| , |yp - yq|) Ces distances sont reliées par la propriété : dinf(P,Q) ≤ d2(P,Q) ≤ d1(P,Q) Il existe des distances pour tous les éléments d'une image. Pour les distances entre pixels, nous reporterons donc aux définitions précédentes. On notera par la suite d(p,q) la distance entre deux pixels. V.1.e : Voisinage d'un objet et connexité On appelle voisinage d'ordre k du pixel P et l'on note Vk(P) l'ensemble des pixels Q définit par: Vk(P) = { Q tels que : 0 < d(P,Q) ≤ k } Par extension, on définit le voisinage de tout composant A de I par l'union de tous les voisinages des pixels de A. On peut définir un objet par la relation de voisinage. On dit que deux points P et Q son connectés si il existe un chemin connexe (suite de points P=P0, P1, ... , Pn-1, Pn=Q telle que Pi est voisin de Pi-1) entre P et Q de points ayant la même valeur. Cette relation est une relation d'équivalence, dont chaque classe définit un objet de l'image. Le type de voisinage utilisé influe bien sûr sur les objets résultants. Des algorithmes très efficaces permettent d'étiqueter les différents objets d'une image. 3 Les images binaires La notion de connexité dérive de la notion de voisinage. Il existe principalement deux ordres de connexité : 4 et 8. Ce nombre correspond à la taille du plus petit voisinage non vide d'un pixel. Un pixel a 4 voisins directs si l'on choisit la distance d1, il en a 8 avec la distance dinf Connexité d'ordre 8 Connexité d'ordre 4 Figure 2 : Connexité et voisinage V.1.f : Courbe, arc Une courbe est un chemin connexe dont tous les points possèdent exactement deux voisins. Un arc est une courbe pour laquelle les deux points extrémités n'ont qu'un seul voisin. V.1.g : Prédécesseurs Il est nécessaire de définir cette notion dans le cadre du traitement des images binaires. Soit P un pixel d'une image. Dans le schéma suivant, les pixels indiqués a sont les prédécesseurs du pixel P dans un balayage avant, les pixels indiqués b sont les prédécesseurs de P dans un balayage arrière. j i a a a a P b b b b Figure 3 : Désignation des prédécesseurs d'un pixel (en fonction du sens de balayage) V.2 – Les composantes connexes V.2.a : Introduction Partant d'une image binaire, on souhaite souvent faire des mesures sur les ensembles de points connexes qui la composent. Ces éléments sont appelés les composantes connexes de l'image. L'étiquetage des composantes connexes d'une image binaire consiste à attribuer un label, étiquette ou numéro différent pour chaque composante connexe et identique pour tous les pixels d'un même composante. Il existe de nombreux algorithmes réalisant cette fonction. Ils 4 Les images binaires dépendent de la connexité considérée et se différencient aussi par leur approche séquentielle ou parallèle.. Une composante connexe peut alors être extraite par l'intermédiaire de son étiquette pour faire un traitement spécifique. L'image des étiquettes est une formulation implicite des composantes connexes; l'extraction aura pour but la transformation de cette formulation implicite en une formulation explicite (liste des composantes connexes avec des attributs par exemple). V.2.b : Etiquetage séquentiel itératif Il s'agit d'un algorithme purement séquentiel et qui ne nécessite que la structure image et un compteur d'étiquettes comme structure de données. Le contenu de la matrice image est modifié de manière itérative en alternant des parcours avant (indices des lignes et colonnes croissants) et des parcours arrières (indices des lignes et colonnes décroissants) jusqu'à stabilisation. Lors de ces parcours, le traitement suivant est appliqué en chaque point P : Si P est un point objet (i.e. I(P) = 255) Alors Si P a des prédécesseurs points objets Alors P prend pour valeur l'étiquette minimale de ses prédécesseurs Sinon P prend pour valeur une nouvelle étiquette Le nombre d'itérations dépend de la complexité des objets. Pour remédier à cela, on peut définir un algorithme qui ne nécessite que deux parcours de l'image mais qui requiert en contrepartie la gestion d'une table de correspondance. V.2.c : Etiquetage séquentiel avec correspondance entre points L'idée de l'algorithme est d'exploiter l'étiquetage effectué lors du premier parcours pour une affectation finale des étiquettes ne demandant ainsi qu'un seul parcours supplémentaire. Une table de correspondance T est créée et initialisée par T(i) = i. Le premier balayage séquentiel de l'image est défini par le traitement suivant appliqué en tout point P Si Tous les prédécesseurs de P appartiennent au fond Alors Affecter une nouvelle étiquette à P Sinon Si Tous les prédécesseurs de P qui sont objet ont une même étiquette Alors Attribuer cette étiquette à P Sinon Rechercher la plus petite étiquette e ≠ 0 de ces prédécesseurs Affecter T(e) à P Mettre à jour la table T par Pour chaque prédécesseur d'étiquette a telle que T(e) != T(a) Faire Tant que T(a) != a Faire k = T(a) T(a) = T(e) a = k Fin Faire Fin Pour Fin Si Fin Si 5 Les images binaires A la fin de ce balayage de l'image, on actualise la table T de manière à ce qu'à tout indice corresponde l'étiquette définitive de l'objet. Pour i = 1 à nombre d'étiquettes utilisées Faire j = i Tant que T(j) != j Faire j = T(j) T(i) = j Fin pour Au terme de ce traitement, les points d'un même objet peuvent avoir des valeurs différentes mais la table T permet de toutes les faire correspondre à une même étiquette. Le second balayage sert à l'attribution définitive sur l'image d'une même étiquette pour tous les points d'un même objet. Cet algorithme nécessite donc deux balayages et l'emploi d'une table de correspondance. Il induit également la génération de nombreuses étiquettes temporaires dans le cas d'un objet de forme complexe, ce qui implique la définition d'une table T de grande taille. Ceci est dû à la vue uniquement locale de l'algorithme lors de l'attribution des étiquettes. La figure 4 illustre le résultat de cette recherche. Les pixels blancs (255=forme) de l'image de gauche sont rassemblés par "paquets" (composantes) connexes et à chaque composante connexe correspond une couleur (non noire) dans l'image de droite. Figure 4 : Recherche de composantes connexes V.2.d : Etiquetage parallèle L'image à étiqueter étant codée par la matrice A de taille N x M, on construit la suite (Ai) d'images (i=0 ,...; n) avec A0 = A (image initiale) et An = image étiquetée finale. L'algorithme est le suivant: 6 Les images binaires Pour Tous les points de A Faire en parallèle Si A(i,j) = 1 Alors A(i,j) = (i-1)*N + j Fin si Fin pour k = 1 Répéter Pour Tous les points de Ak-1 Faire en parallèle Si Ak-1(i,j) != 0 Alors Ak(i,j) = minimum sur le voisinage immédiat de Ak-1(i,j) Sinon Ak(i,j) = 0 Fin si Fin pour Jusqu'à Ak-1 = Ak L'algorithme converge en au plus comptage de points modifiés. Max(N,M) itérations. Le test d'arrêt se ramène à un V.3 – La morphologie mathématique V.3.a : Introduction Un des traitements les plus importants réalisés sur une image binaire consiste à filtrer et/ou partitionner les objets dans un but de représentation ou de modélisation. Les méthodes de partitionnement, généralement contraintes par les propriétés géométriques des éléments résultants (triangles, polygones, spirales (une seule suite d'arêtes à sommets concaves), carrés, rectangles), fournissent une partition qui n'est pas nécessairement en accord avec la morphologie de la forme. C'est pourquoi on adopte plus volontiers les décompositions par recouvrement qui sont plus souples et aussi plus anthropomorphiques, c'est à dire qui coïncident davantage avec les essais humains de compréhension des formes par décomposition. La morphologie mathématique est une manière d'aborder ce problème. La théorie des ensembles est l'un des fondements de cette discipline; son espace de travail est l'espace discret. L'idée de base de la morphologie mathématique, introduite par J. Serra et G. Matheron en 1975, est de comparer les objets que l'on veut analyser à un autre objet de forme, appelé élément structurant. En quelque sorte, chaque élément structurant fait apparaître l'objet sous un jour nouveau, tout l'art consistant à choisir le ou les bons éclairages. V.3.b : Les transformations ensemblistes Fondamentalement, le morphologie mathématique a un caractère ensembliste. Les éléments structurants définissent des primitives de base dont on pourra confirmer ou infirmer la 7 Les images binaires présence dans la forme étudiée, au moyen d'opérations ensemblistes. Ceci correspond à une nouvelle démarche dont nous disposons pour analyser qualitativement une image. La morphologie mathématique utilise des opérations ensemblistes pour transformer l'image. Ces opérations peuvent être classées en deux catégories : les transformations ensemblistes classiques et les transformations en tout ou rien utilisant un élément structurant. Nous allons présenter successivement ces deux cas. V.3.b : Les transformations ensemblistes classiques Considérons deux ensembles X et Y. Les opérations classiques dont nous disposons sont : • L'union : X ∪Y • L'intersection : X ∩Y • La complémentation : (X c )z = X c∩Z Rappel : Le complémentaire est ainsi défini : un point x appartient au complémentaire de X (Xc) s'il n'appartient pas à X, c'est à dire : x∈X c ⇔ x∉X En supposant un ensemble X intersecté par un masque Z. L'opération de complémentation correspondra donc à l'intersection du complémentaire Xc par le masque de mesure Z, que l'on notera (X c )z = X c∩Z . A ces opérations, on peut ajouter : • La différence symétrique : X /Y = X ∪Y − X ∩Y La figure 5 résume ces transformations. A B A∪B A∩B A|B (Xc)Z Figure 5 : Les transformations ensemblistes classiques 8 Les images binaires V.3.c : Transformations en tout ou rien par un élément structurant Considérons un objet bi ou tridimensionnel et appelons X l'ensemble des points du plan (ou de l'espace) constituant cet objet. La structure de X est donnée par l'ensemble de toutes les relations entre ces différents points. Les transformations en tout ou rien forment un moyen systématique pour étudier ces relations. Elles ne donnent pas en fait un paramètre caractérisant la structure de X mais un nouvel ensemble. Toutefois, la mesure d'un ou plusieurs paramètres suit toujours une ou plusieurs transformations. L'information structurale est cependant donnée non par la mesure, mais par la transformation de l'image elle-même, la mesure ne constituant que la quantification de cette information structurale. Pour faire une transformation en tout ou rien, nous devons choisir un élément B, de géométrie connue, appelé élément structurant. Ensuite, cet élément structurant est déplacé de façon à ce que son origine passe par toutes les positions de l'espace. Pour chaque position, on pose une question relative à l'union, à l'intersection ou à l'inclusion de B avec X ou dans X. La réponse sera positive ou négative, d'où le nom de transformation en tout ou rien. L'image des points correspondants à des réponses positives forme un nouvel ensemble qui constitue ce que l'on appelle l'image transformée. Les transformations en tout ou rien remplissent certaines conditions caractéristiques dites euclidiennes: Invariance par translation : la transformée de la translation par un vecteur k d'un ensemble X est égale à la translation de la transformée de X : T(Trk(X)) = Trk(T(X)). Compatibilité avec les homothétie : Si λX est un ensemble homothétique de X et Tλ une transformation dépendant de λ (λ>0). La transformation Tλ est compatible avec les homothéties s'il est équivalent d'appliquer T1 à X ou bien d'agrandir (ou de réduire) X dans le rapport λ, lui appliquer la transformation Tλ puis réduire (ou augmenter) le résultat dans le rapport λ. Ceci se traduit par la relation : 1 T (λX)=T (X) 1 λ λ Principales propriétés des transformations tout ou rien Propriétés algébriques Croissance : Une transformation est dite croissante si ayant un ensemble X inclus dans un ensemble Y, le transformé T(X) est lui aussi inclus dans T(Y). Ceci se traduit par : X ⊂ Y ⇒ T(X) ⊂ T(Y) Extensivité : Une transformation est dite extensive si l'ensemble X est inclus dans son propre transformé T(X). En d'autres termes : ∀X, X ⊂T(X) 9 Les images binaires Idempotence : Une transformation est dite idempotente si ayant fait subir une transformation T à X, et ayant renouvelé cette transformation sur T(X), on obtient des ensembles T(X) et T(T(X)) égaux. Propriétés topologiques Homotopie : Une transformation est dite homotopique si elle ne modifie pas le nombre de connexité (c'est à dire le nombre de parties disjointes composant un ensemble donné) Préservation de la connexité : Si X est connexe, alors T(X) est connexe. V.3.d : Transformation par érosion La transformation par érosion est la première transformation en tout ou rien qui ait été utilisée. C'est d'ailleurs avec la dilatation celle qui est la plus importante. Pour définir l'opération d'érosion, nous allons nous situer dans un espace R2 partiellement occupé par un ensemble X. Prenons un élément structurant B représentant une figure géométrique simple, par exemple un cercle. Cet élément Bx est repéré par son centre et placé en x dans l'espace R2 (figure 6). Il est ensuite déplacé de telle sorte que son centre occupe successivement toutes les positions x de l'espace. Pour chaque position, on se pose la question suivante : est-ce que Bx est complètement inclus dans X ?, c'est à dire en notation ensembliste : Bx ⊂ X ? B x2 X B x1 B x3 Figure 6 : Principe de l'érosion d'un ensemble X par un élément structurant B de forme circulaire : Bx1 est inclus dans X alors que Bx2 et Bx3 ne le sont pas L'ensemble des positions x correspondant à une réponse positive forme un nouvel ensemble Y appelé érodé de X par B. Cet ensemble satisfait à l'équation : Y ={x / Bx ⊂ X } L'érosion Y d'un ensemble X par un élément structurant B est notée habituellement : Y=EB(X) 10 Les images binaires La figure 7 présente une érosion de l'ensemble de la figure 6 par un élément structurant B de forme circulaire. Figure 7 : Erosion de l'ensemble X de la figure 6 par un élément structurant circulaire V.3.e : Transformation par dilatation L'opération de dilatation se définit de façon analogue à l'opération d'érosion. En prenant le même élément structurant Bx, on se pose pour chaque point x de R2 de savoir si Bx touche l'ensemble X, c'est à dire si Bx et X ont une intersection non vide : Bx ∩X = ∅ ? L'ensemble des points x de R2 correspondant aux réponses positives forme un nouvel ensemble Y dont la frontière est le lieu des centres géométrique de Bx lorsque Bx touche X. L'ensemble Y satisfait à l'équation : Y ={x/ Bx ∩ X ≠∅} La dilatation d'un ensemble X par un élément structurant Y est habituellement notée Y=DB(X). On en trouve un exemple sur la figure 8 Figure 8 : Exemple d'une dilatation de l'ensemble X de la figure 6 par un élément structurant de forme circulaire 11 Les images binaires V.3.f : Quelques propriétés de la dilatation et de l'érosion Il est assez important de connaître les principales propriétés algébriques et topologiques de ces deux transformations. • Croissance : Erosion et dilatation sont des transformations croissantes, c'est à dire que si X est inclus dans X', alors le dilaté (ou l'érodé) de X par un élément structurant B est inclus dans le dilaté (ou l'érodé) de X' par le même élément structurant B. en d'autres termes : E B(X)⊂ EB(X') X ⊂ X'⇒D B(X)⊂ DB(X') • L'érosion est une transformation anti-extensive alors que la dilatation est une transformation extensive, ce qui se traduit par l'expression : X ⊂ DB(X) EB(X)⊂ X • L'érosion et la dilatation ne sont pas des transformations idempotentes. Ceci est dû au fait qu'il s'agit de transformations itératives • L'érosion et la dilatation ne sont pas des transformation homotopiques (préservation du nombre de connexité). La figure 9 illustre cette propriété. L'érosion de l'ensemble concave X par des éléments circulaires de taille croissante va d'abord augmenter le nombre de connexité de 1 à 2. Celui-ci va ensuite diminuer à nouveau de 2 à 1 puis deviendra nul. En suivant l'évolution du complémentaire XC, on voit que la dilatation fait également varier le nombre de connexité N(XC). • On remarque également sur la même figure que lorsque l'ensemble X est connexe, la dilatation préserve cette connexité si B est connexe. Par contre, de façon générale, l'érosion ne préserve pas cette connexité même si B est connexe. Enfin, si l'ensemble X est convexe, alors, l'érosion préservera sûrement la connexité et même la convexité puisque l'érosion dans ce cas ne conduira qu'à l'intersection d'ensembles convexes. V.3.g : Ouverture morphologique L'ouverture est l'application de l'opérateur érosion puis de l'opérateur dilatation avec le même élément structurant. On appelle ouverture d'un ensemble X par un élément structurant B et on note OB(X) : OB(X) = DB(EB(X)) En général, on ne retrouve pas l'ensemble de départ car une partie de la forme éliminée par l'érosion ne peut être recrée par une dilatation. L'ensemble OB(X) est plus régulier (moins de détails au niveau du contour) que l'ensemble initial X. En termes "géographiques" ou morphologiques, on dit que l'ouverture adoucit les contours, coupe les isthmes étroits, 12 Les images binaires supprime les petites îles et les caps étroits. On peut considérer que l'ouverture réalise une sorte de filtrage morphologique de la forme de l'ensemble X. La figure 9 illustre ce comportement. Figure 9 : Illustration de l'ouverture morphologique V.3.h : Fermeture morphologique La fermeture est l'opération "inverse" de l'ouverture, c'est à dire que l'on applique tout d'abord une dilatation puis une érosion (toujours en gardant le même élément structurant): FB(X) = EB(DB(X)) Un ensemble fermé est également moins riche en détail que l'ensemble initial. La transformation par fermeture bouche les canaux étroits, supprime les petits lacs et les golfes étroits (figure 10). Figure 10 : Illustration de l'ouverture et de la fermeture morphologiques sur des ensembles non connexes Les deux opérations d'ouverture et de fermeture sont idempotentes, c'est à dire que le résultat est invariant après itérations: OB(X) = OB(OB(X)) FB(X) = FB(FB(X)) 13 Les images binaires Ces transformations ne sont pas homotopiques, i.e. elles ne préservent pas la connexité car elles peuvent scinder une forme en deux (érosion) ou fusionner deux formes (dilatation). Elles ne présentent donc pas de propriétés topologiques intéressantes. Ce ne sont que des transformations d'aspect, de simplification ou de filtrage. Il était donc utile de pouvoir disposer d'une transformation permettant de conserver les propriétés topologiques des formes. C'est – entre autres – le but de la squelettisation. V.4 – La squelettisation V.4.a : Introduction Le squelette est une représentation d'une forme très utilisée car il conserve les propriétés topologiques de la forme qu'il représente. La notion de squelette est apparue pour l'étude des objets minces. En effet, pour de telles figures, il est certains que c'est l'allure d'une représentation filiforme qui est importante. La reconnaissance des caractères en constitue un exemple typique. La squelettisation est une étape essentielle de la reconnaissance de forme. Elle a pour but de décrire chaque objet par un ensemble de lignes infiniment fines (analogues à une ossature de l'objet), réduisant sensiblement le volume d'information à manipuler. Le squelette est généralement défini comme étant l'ensemble des lignes médianes, c'est-à-dire l'ensemble des points équidistants de deux points de la frontière. L'obtention du squelette des images mosaïques binaires peut conduire à des erreurs de connexité L'idée de squelettisation consiste à centrer dans la forme un squelette qui soit significatif de l'élongation et des déformations de celle-ci. Typiquement, le squelette d'un cercle va alors être son centre, celui d'une ellipse son grand axe, ... Malheureusement, le squelette, pour être fidèle à la forme initiale, est très sensible au bruit (petite déformation du contour, présence d'un trou, ...). Le calcul du squelette en morphologie mathématique est obtenu par une transformation de voisinage décrite dans la suite. V.4.b : Les transformations de voisinage Une transformation de voisinage est une généralisation de l'approche tout ou rien utilisée pour les opérateurs E (érosion) et D (dilatation). Elle est nécessaire pour définir le processus d'obtention d'un squelette. Dans le cas d'un maillage hexagonal, un pixel a 6 voisins. On définit une configuration de voisinage en attribuant à ces voisins l'une des trois valeurs suivantes: 1, 0, 1 ou 0 (noté *). Toutes les configurations identiques à une rotation près constituent une famille caractérisée par une lettre de l'alphabet de Golay. La figure 11 présente l'alphabet de Golay en mode hexagonal. 14 Les images binaires Lettre Voisinage Amincissement Epaississement Transformation tout ou rien Squelette homotopique Squelette par zone d'influence . Squelette homotopique Epaississement à partir de points isolés . Marqueur homotopique Enveloppe quasi-convexe . . Enveloppe fortement convexe hexagonale . Squelette par zone d'influence Points extrêmes du squelette . Points isolés . Points triples . Points triples . Erosion, dilatation Dilatation linéaire . _ 1 _ 1 _ L * _ 1 _ * _ 0 _ 0 _ _ 1 _ * _ M 1 _ 1 _ 0 _ 1 _ * _ _ 0 _ * _ D 0 _ 1 _ 1 _ 0 _ * _ _ 1 __ C 1 _ 0 _ 1 __ _ * _ * _ E 0 _ 1 _ 0 Ebarbulage _ 0 _ 0 _ _ 0 _ 0 _ I 0 _ 1 _ 0 . _ 0 _ 0 _ _ 1 _ 0 _ F 0 _ 1 _ 1 . _ 1 _ 0 _ _ 1 _ 1 _ F' * _ 1 _ * . _ * _ * _ _ 1 _ 1 _ H 1 _ 1 _ 1 Contour _ 1 _ 1 _ _ * _ * _ R * _ 1 _ 0 Erosion linéaire _ * _ * _ Figure 11 : Alphabet de Golay sur un maillage hexagonal Par définition, une transformation de voisinage consiste à conserver les points centraux pour lesquels le voisinage est en accord avec une configuration donnée. On note cette transformation. Plus complexe que l'érosion et la dilatation, on peut ainsi définir l'amincissement et l'épaississement. L'amincissement, noté «, consiste à enlever à un ensemble X ses points correspondant à une configuration donnée C. L'épaississement, noté », consiste à rajouter des points à X. On a les relations suivantes: 15 Les images binaires X « C = X ∪ X » C – X ∩ (X » C) = X / (X » C) X » C = X ∪ (X « C) où C est une configuration de voisinage. On obtient le squelette par amincissement itératif jusqu'à idempotence X = X « C à l'aide de la famille de voisinage L ou M. Erodés ultimes : La morphologie mathématique autorise également des procédés de décomposition, en l'occurrence par recherche des érodés ultimes. L'objet initial est aminci jusqu'à ce que plusieurs composants connexes apparaissent (érodés ultimes). La dilatation itérative avec contrôle de l'inclusion dans l'objet initial définit les entités de la décomposition. Le procédé peut ensuite être récursif sur les différentes entités, dans le cas d'un objet complexe. Ces transformations se définissent également sur le maillage carré. Elles sont alors à la base d'un algorithme effectivement utilisé pour réaliser la squelettisation. V.4.c : L'algorithme d'épluchage/nettoyage La première méthode permettant le calcul du squelette d'une image binaire est la méthode dite des lignes de crêtes. Pour chaque point, on calcule la distance à la frontière : le squelette est l'ensemble des points qui sont des maxima locaux de cette distance. Cette méthode, finalement très intuitive, n'est pas forcément très aisée à mettre en œuvre, notamment vis à vis de la caractérisation du voisinage. Nous avons donc opté pour la présentation d'un algorithme plus "visuel" : l'algorithme d'épluchage/nettoyage. 1ère phase : Epluchage On considère que le pixel du fond est 0 et le pixel du motif 1. On balaye l'image avec les 16 masques 3x3 issus de la version "maillage rectangulaire" de l'alphabet de Golay. (Figure 12). Si l'une des configurations est vérifiée, le pixel central est remplacé par 0. L'opération est réitérée jusqu'à stabilité. Les 16 masques à appliquer sont identifiés par le système de numération suivant : Les 8 cases périphériques étant affectées à des puissances de 2 distinctes, chaque masque est identifié de façon unique : 16 Les images binaires Figure 12 : Les masques de l'épluchage 2ème phase : Nettoyage Si les frontières de l'objet sont bruitées le squelette peut comporter beaucoup de barbules. Il convient alors d'appliquer alors des post-traitements, également sous forme de masques, représentant des transformations de voisinage. Ces masquages (au nombre de 8) suivent le même principe que l'épluchage. Fonctionnement Sur la forme illustré à la figure 13, 5 étapes d'épluchage ont été nécessaire avant stabilité. Après l'étape de nettoyage, on obtient le squelette désiré. La figure 14 présente une image plus complexe. 17 Les images binaires Figure 14 : Squelettisation (sans commentaire) V.4.c : La vectorisation du squelette Même ramenée à son squelette, une image binaire de 256x256 pixels occupe 8192 octets. La vectorisation consiste à approximer le squelette (ou le contour) par une suite de segments de droites (ou par des arcs de courbes). On y gagne en compacité et on se rapproche d'une description géométrique des objets. La topologie (connexité) des objets doit être conservée au cours de l'opération. Un algorithme de base se décompose en : Division 1. Considérer la liste des points du squelette (contour) comme une sous-liste unique ; 2. Pour chaque sous-liste, chercher le point le plus éloigné de chaque côté de la corde joignant les extrémités de la sous-liste ; 3. Si toutes les sous-listes présentent un écart à la corde inférieur à un seuil donné, alors fin de l'algorithme ; sinon diviser chaque sous-liste dont l'écart est supérieur au seuil au point le plus éloigné et recommencer à 2. Fusion Les sous-listes sont chaînées pour reconstituer le squelette (contour) initial. Le principe n'est pas particulièrement original : il s'agit d'un split and merge, non plus sur des approches de type région mais sur des approches de type squelette. La vectorisation peut ensuite être suivie d'un phase de modélisation dont l'objet est d'ajouter une description mathématique à l'analyse d'image. On arrive alors dans le domaine de la synthèse. 18