• Aucun résultat trouvé

3.3 Segmentation par propagation de contour

3.3.1 L'algorithme de Fast-Marching

Cas général

L'algorithme de Fast Marching a été proposé initialement par Sethian [Sethian 1996], bien que son principe général ait été introduit dans [Tsitsiklis 1995]. Dans sa forme initiale, c'est un algorithme de propagation d'un front (ou d'un contour) sur une grille euclidienne 2D. Des méthodes équivalentes ont été développées parallèlement mais il semble que ce soit cet algorithme qui se soit imposé, en particulier grâce à sa rapidité. Il a été la source de nombreux travaux, en particulier pour l'étendre aux grilles 3D puis plus récemment au cas des maillages triangulaires, et aussi pour ce qui nous intéresse, au calcul rapide de distances géodésiques sur des surfaces implicites [Memoli et Sapiro 2001] ou des nuages de points [Memoli et Sapiro 2003] (le tout en n dimensions). En pratique, l'algorithme du Fast Marching est souvent utilisé pour des applications de segmentation 2D ou 3D mais aussi plus généralement pour toute application qui nécessite un parcours géodésique d'une surface (reconstruction de surface, ré-échantillonnage spatial, etc.).

La théorie mathématique sur laquelle repose l'algorithme et ses diérentes déclinaisons est très dense, et nous nous bornerons donc au cas le plus simple pour pouvoir nous focaliser sur la partie algorithmique qui est beaucoup plus parlante.

La méthode générale repose, comme nous l'avons déjà évoqué dans la section précé- dente, sur le principe des level sets, et consiste donc, grossièrement, à considérer le front ou le contour à propager comme une ligne de niveau d'une hyper-surface (voir gure 3.14).

contour intial t=0 t=1 t=2 y z x x y 0 1 2

Fig. 3.14  Illustration du principe des level sets en 2D.

A gauche : évolution du contour en 2D. A droite : hyper-surface dénie par la position du front aux diérents instants t.

Soit T le temps de trajet du front, et F > 0 la vitesse de propagation permise par le milieu (on peut voir aussi 1/F comme la résistance du milieu). En l'absence d'autres forces (forces propres au contour ou contraintes externes), l'évolution de la courbe peut

être décrite par l'équation Eikonal (ou équation de Hamilton-Jacobi statique) :

|∇T |F = 1 (3.7)

Sous cette forme, l'équation 3.7 traduit simplement le fait que la vitesse d'évolution du temps de trajet est inversement proportionnelle à la résistance du milieu. On peut aussi remarquer qu'il y a une relation directe entre la position du front et son temps d'arrivée si la vitesse de propagation est constante.

L'algorithme de Sethian consiste à résoudre cette équation en chaque noeud d'une grille régulière, de proche en proche (voir gure 3.15). La propagation se fait en partant d'un ou plusieurs noeuds de la grille, prédénis lors de l'initialisation comme étant des germes de la propagation (ils correspondent à l'état initial du front, à t = 0). Les germes ne sont pas forcément tous voisins (il peut y avoir plusieurs foyers de propagation diérents). On estime ensuite le temps d'arrivée du front au niveau des voisins de chaque germe qui ne sont pas eux-mêmes des germes. On rajoute celui qui a le plus petit temps d'arrivée au groupe des germes, et on rajoute ses propres voisins non germes au groupe des voisins. L'opération est répétée par itération jusqu'à ce qu'il n'y ait plus de noeud non traité dans la grille. On traite ainsi les noeuds selon l'arrivée chronologique du front et chaque noeud n'est considéré qu'une fois, d'où une quasi-linéarité de l'algorithme.

graines voisins

t=0 t=1 t=2

Fig. 3.15  Illustration du déroulement de l'algorithme de Fast Marching sur une grille 2D.

D'un point de vue mathématique, la seule diculté peut résider dans le calcul du temps d'arrivée du front (et donc la résolution de l'équation 3.7) en un noeud dont plusieurs voisins sont des germes. Si la résistance du milieu (ou la vitesse de propagation) est constante, il sura de résoudre une simple équation quadratique en considérant selon chaque dimension le noeud voisin dont le temps d'arrivée est le plus petit (on passe "simplement" l'équation 3.7 au carré). Si la résistance du milieu varie localement, alors on doit considérer les ralentissements imposés par le milieu selon chaque direction.

D'un point de vue algorithmique, la principale diculté peut résider dans la gestion du groupe des noeuds voisins. On doit en eet marquer comme nouveau "germe" toujours

3.3. Segmentation par propagation de contour 85 celui dont le temps d'arrivée est le plus petit. Il faut le retirer de la pile et y insérer ses voisins aux bonnes positions. Ceci étant fait à chaque itération, l'opération peut devenir relativement lente lorsque la pile contient beaucoup d'éléments. Yatziv, Bartesaghi et Sa- piro [Yatziv et al. 2005] ont proposé une méthode ecace pour améliorer signicativement cette étape. Leur méthode consiste globalement à discrétiser les temps d'arrivée et à ne gérer qu'une pile constituée d'un nombre limité de listes de noeuds. Ces listes contiennent des références de noeuds non triées et dont les temps d'arrivée discrétisés sont équiva- lents. Donc l'amélioration des performances de l'algorithme se fait au prix d'une légère approximation (on prend en eet le premier élément de la première liste de la pile, qui n'est pas forcément celui qui a exactement le temps d'arrivée le plus petit).

Cas des nuages de points

L'algorithme de Fast Marching est conçu initialement pour s'appliquer à des grilles 2D pleines, et par extension directe aux grilles 3D pleines (sans aucun changement réel de l'algorithme). Memoli et Sapiro ont montré qu'il était possible d'utiliser une version très légèrement modiée de l'algorithme de Fast Marching pour calculer une distance géodésique sur un nuage de points [Memoli et Sapiro 2003]. Leur idée est d'utiliser une grille 3D englobant le nuage comme support de l'algorithme standard. D'une part, ils ont démontré qu'il était alors possible de ne calculer le temps d'arrivée qu'au niveau des noeuds proches du nuage. Les autres noeuds peuvent être retirés de l'ensemble des noeuds considérés par l'algorithme, ou bien on peut leur assigner une valeur de résistance innie. D'autre part, les temps d'arrivée au niveau des points peuvent être calculés par interpolation à partir des valeurs des noeuds les plus proches. L'approximation ainsi faite est bornée et elle dépend uniquement du pas de la grille 3D. Il est donc possible d'utiliser l'algorithme de Fast-Marching sur un nuage de points au prix d'une approximation toute relative. Dans notre cas, on ne va pas s'intéresser à la valeur précise du temps d'arrivée en chaque point, mais juste à la propagation du contour, sans être à cheval sur l'ordre d'arrivée précis des points. On peut donc utiliser l'algorithme de Fast Marching adapté au cas des nuages de points, mais aussi la structure accélératrice proposée par Yatziv et al.