Amincissement homotopique
Amincissement homotopique : algorithme pour amincir un objet discret sans changer sa topologie ⇒ on ne peut que supprimer les points simples.
On l'utilisera pour calculer les squelettes
Remarque : on ne peut pas supprimer tous les points simples en même temps (en parallèle)
Il faut supprimer les pixels itérativement
Amincissement homotopique séquentiel
-
Parcourir les pixels dans le scan order et supprimer les points simples
-
Répéter jusqu'à la stabilité
Propriétés :
-
Le squelette a la même topologie
-
Squelette non centré
-
Détails géométriques perdus. Le squelette ne représente que la topologie de l'objet
On pourrait parcourir les pixels dans un ordre aléatoire
Propriétés :
- Topologie conservée
- Légèrement plus centré
Il faut guider l'amincissement afin d'obtenir un squelette centré
Amincissement homotopique par contours
-
Sélectionner les pixels du contour de l'objet (4-adjacents du complémentaire)
-
Supprimer itérativement tous les pixels dans ce sous-ensemble. Faire plusieurs passes jusqu'à la stabilité
-
Passer au contours suivant
Propriétés :
-
Squelette centré
-
Plusieurs passes avant stabilité
Pourquoi ne pas utiliser la transformée en distance ?
Amincissement homotopique par transformée en distance
-
Mettre dans une file de priorité les pixels de l'objet avec leur transformée en distance
-
Prendre le premier pixel. S'il est simple, le supprimer et ajouter ses 8-voisins dans la file (s'ils ne sont pas déjà là)
-
Répéter jusqu'à vider la file
Propriétés :
-
Squelette centré
-
Une seule passe avant stabilité
Peut-on faire pareil avec du calcul parallèle ?
Amincissement homotopique par sous-grille
-
Partition en 4 sous-grilles :
- \( (0,0) + (2 \mathbb{Z})^2 \)
- \( (1,0) + (2 \mathbb{Z})^2 \)
- \( (0,1) + (2 \mathbb{Z})^2 \)
- \( (1,1) + (2 \mathbb{Z})^2 \)
-
Supprimer (en parallèle) les points simples dans la première sous-grille
-
Passer à la sous-grille suivante
Propriétés :
-
On peut supprimer les pixels en parallèle car ils sont assez éloignés entre eux
-
Squelette centré
-
Plusieurs passes avant stabilité
Amincissement homotopique par cliques critiques
-
k-clique ensemble de pixels maximal dont l'intersection est un k-cube
-
Une k-clique est critique si sa suppression change la topologie de l'objet
-
Théorème : si \( Y \) contient au moins un pixel de chaque k-clique critique de \( X \) alors ils ont la même topologie
Algorithme d'amincissement homotopique :
-
Marquer les pixels des 2-cliques critiques (en parallèle)
-
Marquer un pixel pour chaque 1-clique critique qui n'est pas couverte (en parallèle)
-
Marquer un pixel pour chaque 0-clique critique qui n'est pas couverte (en parallèle)
-
Supprimer les pixels non marqués
Bref
- Amincissement homotopique : supprimer les points simples
- Squelette topologique, géométrie ignorée
- Plusieurs méthodes pour diriger la suppression
Il faudrait maintenant conserver la géométrie de l'objet
Il ne faut pas supprimer les branches du squelette (même si elles sont des points simples).
Première idée : on ne supprime pas les pixels dans l'axe médian
Propriétés :
-
L'amincissement homotopique fait conserver la topologie
-
En fixant les pixels de l'axe médian, on conserve la géométrie
-
Mais on a les mêmes défauts : squelette pas fin, pas robuste
Il existe d'autres solutions : filtrer l'axe médian, méthodes topologiques
Filtrer l'axe médian
Sur chaque pixel de l'axe médian on définit :
-
\( DT(x) \) : distance vers le complémentaire
-
\( \Pi(x) \) : points de contact de la boule maximale avec le contour
-
\( \theta(x) \) : plus grand angle entre les points de contact
-
\( \delta(x) \) : plus grande distance entre les points de contact
On peut filtrer l'axe médian suivant ces fonctions
Filtrage par rayon
-
Calculer la transformée en distance sur l'axe médian
-
Supprimer les pixels avec \( DT(x) \) en dessous d'un seuil
Filtrage par angle
-
Calculer \( \Pi(x) \) = plus proches points du complémentaire : extension du calcul de la transformée en distance
-
\( \Pi^e(x) = \cup \Pi(y) \) pour tout \( y \) 4-voisin de \( x \) tel que \( DT(y) \leq DT(x) \)
-
Calculer \( \theta(x) \) : essayer toutes les paires de points dans \( \Pi^e(x) \)
-
Supprimer les pixels avec \( \theta(x) \) en dessous d'un seuil
Exercice
Calculer \( \theta \) pour la distance \( d_4 \)
Filtrage par distance
-
Calculer \( \Pi^e(x) \)
-
Calculer \( \delta(x) \) : essayer toutes les paires de points dans \( \Pi^e(x) \)
-
Supprimer les pixels avec \( \delta(x) \) en dessous d'un seuil
Conserver les extrémités
-
Oublions l'axe médian. On supprime les points simples sauf s'ils sont une extrémité
-
On utilise les mêmes masques que l'algorithme d'élagage
-
On fixe les extrémités avant chaque passe d'amincissement homotopique
Conserver les isthmes
-
Isthme pixel dont son voisinage a plusieurs composantes connexes ⇒ pixel à l'intérieur du squelette
-
Caractérisation : \( x \in A \) est un isthme ssi \( x \) n'est pas simple et \( x \notin A \odot B \)
Comme pour l'axe médian, ces méthodes se comportent mal quand l'objet est bruité
Filtrage des isthmes par persistance
Algorithme pour calculer des isthmes avec une fonction \( \pi \) pour le seuillage
- Initialisation : \( b(x) \gets \infty \) pour chaque pixel \( x \) ; \( g \gets 0 \)
- Pour chaque isthme, \( b(x) = \min(b(x), g) \)
- Faire une passe d'amincissement homotopique. Pour chaque pixel supprimé, \( \pi(x) = g - b(x) \)
- Passer à la génération suivante : \( g \gets g+1\)
\( \pi(x) \) = persistance d'un isthme : grand pour les pixels qui sont des isthmes longtemps avant d'être supprimés
Bref
-
Axe médian : mauvaise topologie, bruité
-
Axe médian + amincissement homotopique : topologie corrigée, toujours bruité
-
Il faut des méthodes pour simplifier l'axe médian