• Aucun résultat trouvé

Extraction d’une carte topologique à partir d’une image

(a) (b)

FIG. 2.17: Exemple de représentation d’une vue en coupe d’une partition d’une image : (a) par une image étiquetée ; (b) par une superposition des cellules de l’intervoxel (dessiné en trait blanc).

2.2

Extraction d’une carte topologique à partir d’une image

L’opération permettant de construire la carte topologique représentant une partition d’une image s’appelle l’extraction. Afin d’obtenir une carte topologique à partir d’une image, l’approche naïve consiste à utiliser la définition en niveaux de la carte topologique. Ainsi la première étape construit la carte de niveau 0 et par simplifications successives nous obtenons la carte de niveau 3 qui repré- sente la partition. Cependant, cette approche nécessite la construction du premier niveau qui contient de très nombreux brins (24 par voxels) et cette approche n’est pas réalisable sur un ordinateur de bureau lorsque nous travaillons avec des images de taille importante.

Guillaume Damiand, après avoir proposé la définition des cartes topologiques, définit un algorithme incrémental d’extraction d’une carte topologique permettant d’obtenir la carte topologique d’une image étiquetée en régions [Dam01, Dam08b].

Dans la suite, nous présentons les opérations nécessaires pour réaliser l’extraction d’une carte topo- logique à partir d’une partition d’une image. Nous discutons notamment de l’opération de construction de l’arbre d’imbrication à l’aide d’une carte combinatoire et d’une liste de régions. Nous proposons ensuite une version de l’algorithme d’extraction qui permet d’extraire la carte topologique d’une parti- tion d’une image quelconque. La partition de l’image est définie par un critère représenté sous forme d’un oracleOracle : Id×Id → {vrai, faux} qui détermine si, oui ou non, deux voxels se trouvent dans une même région. Il s’agit d’une généralisation de l’algorithme original proposé par Guillaume Damiand. Le résultat de l’algorithme original peut être obtenu en utilisant comme oracle une fonction qui répond vrai lorsque les deux voxels ont la même étiquette et faux sinon.

2.2.1 Construction de l’arbre d’imbrication

Dans la définition en niveaux de la carte combinatoire minimale, nous observons que le passage d’une carte de niveau 0 à une carte de niveau 1 entraîne des déconnexions de surfaces. Ces surfaces

44 CHAPITRE 2 - CARTE TOPOLOGIQUE 3D

sont reliées entre elles par un arbre des régions permettant de retrouver les relations d’imbrication entre les régions.

L’Algorithme 6 présente l’opération de construction d’un arbre d’imbrication des régions. Il prend en paramètre une carte combinatoire minimaleM dont les brins sont étiquetés par régions et la liste des régionsR triée par ordre croissant. L’algorithme construit alors l’arbre d’imbrication des régions prenant la région infinier0comme racine.

Algorithme 6 : Construction de l’arbre d’imbrication des régions Données : Une carte combinatoire minimaleM ;

La liste triée des régionsR.

Résultat : Construction de l’arbre d’imbrication des régions. Initialiser les régions deR;

pere(r0) ← r0;

pour chaque régionr ∈ R tel que pere(r) = nil faire b ← rep(r);

pere(r) ← region(β3(b));

pour chaque brinb0 ∈ hβ1, β2, β3i(rep(r)) faire r0← region(b0);

si pere(r0) = nil alors pere(r0) ← pere(r);

Ajouter la régionr0 comme imbriquée dans pere(r0) dans la même composante connexe quer;

L’initialisation consiste à définir chaque région r ∈ R comme étant isolée : nous ne précisons aucune région englobante (pere(r) = nil) ni régions imbriquées (fils(r) = ∅).

Nous utilisons alors un parcours simultané de la carte topologique et de la liste des régions afin de construire l’arbre d’imbrication des régions. Le principe de l’algorithme est que la première région non traitée,r ∈ R, est la première région d’une composante connexe imbriquée dans une région englo- bante. Cette région englobante est obtenue par l’opération pere(r) ← region(β3(rep(r))). Les régions de la composante connexe appartiennent à l’ensembleCC = {region(b), ∀d ∈ hβ1, β2, β3i(rep(r))} \ pere(r). Il s’agit de toutes les régions dont un brin fait partie de la composante connexe du brin re- présentant de r. Comme une surface interne de la région englobante apparaît dans cette composante connexe, nous retirons la région englobante de la composante connexe imbriquée. Nous mettons à jour les relations d’imbrications entre les régions en définissant pere(r0) ← pere(r), ∀r0 CC et en ajou- tant toutes les régions deCC dans une composante connexe imbriquée dans pere(r). La définition du brin représentant et la définition de l’ordre des régions assure que pere(r) 6= nil. Nous construisons donc bien un arbre en ajoutant des feuilles à l’arbre d’imbrication de raciner0.

La première régionr1 de la listeR est la première région de l’image. Sa région englobante est la région infinier0. Ainsi toutes les régions de la même composante connexe sont imbriquées dansr0. La prochaine région non traitée est identifiée par le fait que pere(r) = nil. Ainsi lorsque toutes les régions sont traitées, toutes les relations d’imbrications sont représentées dans l’arbre d’imbrication.

Nous ne parcourons qu’une seule fois chaque composante connexe de brins. D’autre part, le nombre de brins dépend du nombre de régions, il y a au moins un brin par région dans la carte topologique. Le traitement sur les régions est donc majoré par le traitement des brins de la carte. D’après ces consta- tations, la complexité de l’algorithme de construction d’un arbre d’imbrication est enO(|brins(M)|). Une preuve de l’algorithme de construction de l’arbre d’imbrication ainsi qu’une étude plus détaillée de la complexité sont disponibles dans [Dam08b].

2.2. Extraction d’une carte topologique à partir d’une image 45

2.2.2 Algorithme incrémental d’extraction d’une image 3D

L’algorithme incrémental d’extraction, donné par l’Algorithme 7, consiste à construire la carte to- pologique en traitant successivement chaque voxel au modèle lors d’un unique balayage de l’image. Il prend en paramètre une image 3D et une fonctionOracle : Id×Id → {vrai, faux} et retourne la carte topologique représentant la partition de l’image définie par l’oracle.

Algorithme 7 : Extraction incrémentale d’une carte topologique Données : Une image 3DI = (Id, Iv) ;

Une fonctionOracle : Id×Id→ {vrai, faux}.

Résultat : La carte topologique de la partition deI définie par l’Oracle. M ← carte topologique vide;

R ← liste de régions vide; pourk ∈ [0, n3[ faire

pourj ∈ [0, n2[ faire pouri ∈ [0, n1[ faire

v ← voxel de coordonnées (i, j, k); v1 ← voxel de coordonnées(i − 1, j, k); v2 ← voxel de coordonnées(i, j − 1, k); v3 ← voxel de coordonnées(i, j, k − 1); ajouter dansM le cube représentant v;

allumer le plongement des différentes cellules du cube dans la matrice intervoxel; r ← ajouter dans R une nouvelle région pour le cube;

coudre le cube parβ3avec les faces des voxelsv1,v2etv3; siOracle(v, v1(resp.v2,v3)) alors

éteindre le surfel qui est le plongement de la face; supprimer la face entrev et v1(resp.v2,v3); fusionnerr avec la région de v1(resp.v2,v3); si l’arête incidente àv, v1etv2est de degré 1alors

éteindre le lignel qui est le plongement de l’arête;

si la suppression de l’arête entraîne une déconnexion alors rendre l’arête fictive;

sinon

supprimer l’arête;

idem pour l’arête incidente àv, v1etv3; idem pour l’arête incidente àv, v2etv3; décaler les arêtes fictives si besoin;

si le sommet incident àv, v1,v2etv3est de degré deux et si les deux arêtes ne sont pas des bouclesalors

éteindre le pointel qui est le plongement du sommet; supprimer le sommet;

Construire l’arbre d’imbrication des régions à partir de la carteM et de la liste R; retournerM;

L’invariant de l’algorithme certifie que tous les voxels plus petits sont déjà traités dans la carte topologique. Dans une imageI de taille n1×n2×n3, lorsque nous traitons le voxelv = (i, j, k), les voxelsv1 = (i − 1, j, k), v2 = (i, j − 1, k) et v3 = (i, j, k − 1) sont déjà traités. Nous ajoutons à la carte topologique un cube représentant le voxel. Nous ajoutons également une régionr qui est associée

46 CHAPITRE 2 - CARTE TOPOLOGIQUE 3D

aux brins du cube et qui contient les informations de la région initialisée par le voxel v. Nous relions le cube à la carte topologique déjà existante en cousant parβ3 les faces qui séparentv des trois voxels existants.

Ensuite nous interrogeons l’oracle pour savoir si le voxel fait partie de la même région qu’un de ses trois voisins. Si c’est le cas, la face qui sépare les deux voxels est intérieure : nous la supprimons. Nous fusionnons alors la nouvelle région avec la région existante pour propager les informations de la région. Lorsque nous avons supprimé toutes les faces possibles, nous simplifions localement la carte en supprimant les arêtes qui ne sont pas minimales et en rendant fictives les arêtes entraînant des suppres- sions ou des déconnexions de faces parmi les arêtes incidentes au voxelv. Nous supprimons le sommet incident aux trois voxels plus petit du6-voisinage de v s’il n’est pas minimal.

Une fois que tous les voxels ont été traités, la carte combinatoire est minimale et représente la partition de l’image fournie par l’oracle. Le plongement est également à jour. De plus la liste des régions R a été construite et R est triée par ordre croissant d’apparition dans l’image. Nous utilisons alors l’opération de construction de l’arbre d’imbrication (Algorithme 6, page 44) afin d’obtenir la carte topologique complète représentant la partition de l’imageI décrite par le critère défini par l’oracle.

La complexité de l’Algorithme 7 est linéaire en fonction du nombre de voxels de l’image puisque nous ne traitons chaque voxel qu’une seule et unique fois. Le nombre de brins est linéaire par rap- port au nombre de voxels, tout comme le nombre de régions. L’algorithme de construction de l’arbre d’imbrication étant linéaire par rapport au nombre de brins, la complexité de l’algorithme d’extrac- tion incrémental est en O(|voxels(I)|). De plus amples détails ainsi qu’une preuve de correction de l’algorithme d’extraction se trouvent dans [Dam08b].

Nous disposons donc d’un modèle topologique de représentation d’images complet qui représente toutes les cellules d’une partition. La géométrie de ces cellules et les relations entre elles sont conservées dans le modèle. Avec cette structure nous représentons toute la topologie de la partition de l’image. L’opération d’extraction permet de construire une carte initiale représentant une partition de l’image définie par un oracle.