Topologie des images digitales - Algorithmes Loı̈c Mazo ICube -Équipe MIV 11 février 2015 () 1 / 30 Topologies Voisins ? () 2 / 30 Topologies 4-voisinage () 3 / 30 Topologies 8-voisinage () 4 / 30 Connexité 4-chemin () 5 / 30 Connexité 8-chemin () 6 / 30 Connexité Composantes connexes objet/fond =⇒ paires d’ajacences () 7 / 30 en 3D . . . () 8 / 30 en 3D . . . () 9 / 30 Suivi de contour 4-adjacence () 8-adjacence 10 / 30 Algorithme Dans l’algorithme suivant, on suppose une 4-connectivité pour l’objet. p, p1, p2 : pixel noir courant, pixel devant p, pixel à droite de p1. Initialiser Contour avec {(p0, d0)} et droits = 0 Faire Si p1 est blanc alors tourner à gauche Sinon Si p2 est blanc alors avancer Sinon, avancer, tourner à droite, avancer Ajouter p à Contour Jusqu’à ce que p = p0 et droits ≥ 3 Renvoyer Contour Graphe des composantes connexes Graphe de la relation d’adjacence entre composantes connexes de l’objet et du fond etq ← 0, nb etq ← 1 Balayer l’image en propageant l’étiquette courante Lorsqu’un contour est trouvé : si le pixel est étiqueté, changer l’étiquette courante sinon propager (etq, nb etq) sur le contour, etq ← nb etq, inc. nb etq () 12 / 30 Graphe des composantes connexes () 13 / 30 Caractéristique d’Euler Caractéristique d’Euler (χ) d’un objet plan : χ = nb c. connexes objet − nb trous objet = (Image) nb de c. connexes objet − nb de c. connexes fond + 1 C’est un invariant topologique Pour un graphe planaire : χ=S −A+F () 14 / 30 Calcul de χ Hypothèse : les pixels du bord sont blancs. 4-adjacence : χ4 = (Q1 − Q3 + 2X )/4 8-adjacence : χ8 = (Q1 − Q3 − 2X )/4 où Q1 : nb de carrés 2 × 2 avec 1 pixel objet Q3 : nb de carrés 2 × 2 avec 3 pixels objet X : nb de carrés 2 × 2 avec 2 pixels objet opposés () 15 / 30 Algorithme Hypothèse : 4-adjacence pour l’objet. def euler(l, col): n = len(l) e = 0 # carac. d’Euler c1 = 0 # demi-carré gauche for p in range(col+1, n): c2 = l[p-col] + l[p] #demi-carré droit c = c1 + c2 if c == 1: e += 1 elif c == 3: e -= 1 elif c == 2 and l[p-col-1] == l[p]: e += 2 c1 = c2 return e/4 Calcul local v. calcul global Calcul de χ : local (calcul parallèle) Calcul du nombre de composantes connexes ? () 17 / 30 Insuffisance de la caractéristique d’Euler =⇒ retrait séquentiel de points simples (homotopie) () 18 / 30 Points simples Amincissement () 19 / 30 Points simples : nombre de Yokoı̈ 8-voisinage : Y4 = x0 (1 − x1 x2 ) + x2 (1 − x3 x4 ) + x4 (1 − x5 x6 ) + x6 (1 − x7 x8 ) Y8 : intervertir la valeur des pixels (0 ↔ 1) Un pixel est simple ssi son nombre de Yokoı̈ vaut 1. () 20 / 30 Algorithmes séquentiels v. parallèles Critère : topologie + géométrie Séquentiel : modification ≪ (Ex. : Yokoı̈ = 1 + Au moins 2 voisins) sur place ≫ =⇒ autre balayage Parallèle : modification sur une copie =⇒ traitements alternés () 21 / 30 Carte de distance Transformée de distance : distance des points de l’objet au bord de l’objet. Exemple : 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 −→ 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 2 1 1 0 0 1 2 3 2 1 0 0 0 1 2 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 (distance de Manhattan) () 22 / 30 Algorithme Initialiser la carte C avec 0 pour le fond et ∞ pour l’objet Faire un balayage : C (p) ← min(C (p), 1 + C (p − 1), 1 + C (p − ℓ)) où ℓ est la largeur de l’image. Retourner la carte et recommencer. () 23 / 30 Carte de distance : exemple () 24 / 30 Amincissements : exemples () 25 / 30 Recherche Travaux en cours Point simples dans les images n-aires Rotations discretes () 28 / 30 Merci de votre attention