• Aucun résultat trouvé

Segmentation à partir du résultat de l’algorithme d’extraction

3.3 Modélisation d’une ligne de tuyauterie

3.3.2 Segmentation à partir du résultat de l’algorithme d’extraction

Lors du procédé d’extraction présenté au 3.2, l’objectif était d’obtenir un sous-nuage de points correspondant à la ligne de tuyauterie que l’on souhaite extraire. Cependant, comme on l’a vu, pour réaliser l’extraction, l’algorithme se fonde sur des modèles. Il en résulte qu’à l’issue de l’algorithme, un modèle grossier, consistant en une séquence de cylindres contraints, est également disponible. Comment tirer parti de cette information pour produire le modèle final ? Si l’on reste à l’échelle du cylindre, on peut dire que l’algorithme d’extraction produit une sur-segmentation de la ligne. Bien entendu, ceci ne veut pas dire que les jonctions entre les primitives finales se trouvent exactement aux limites des cylindres élémentaires. Toutefois, dans les cas rencontrés en pratique, il semble que l’on puisse souvent faire une segmentation satisfaisante en restant à l’échelle des cylindres. Ceci est en particulier dû au fait que la taille des cylindres a été fixée égale au rayon.

Notre approche a donc été de traiter la séquence des cylindres en procédant à des regroupements afin d’obtenir une description contenant un ensemble de segments correspondant à la «réalité vi- suelle». Le problème s’exprime donc comme une segmentation de ligne brisée en 3D. Plusieurs idées sont envisageables pour traiter ce problème. Notons que l’attention s’est plus portée sur des procédés de segmentation traitant la séquence d’un point de vue global plutôt que sur des procédés locaux, fondés par exemple sur la notion de propagation (voir remarque faite à ce sujet dans la section 3.3.1). Une voie est de considérer les techniques de partitionnement de courbes, comme par exemple les approches mettant en œuvre la corde [RW95]. Cependant, dans notre cas, la courbe est déjà une ligne brisée, en général simple, et constituée de grandes parties rectilignes. Notons de plus que les parties coudées ne sont en général représentées que par deux voire trois cylindres, ce qui rend difficile la reconnaissance de cercles dans la ligne brisée. L’idée a donc été de se limiter à dégager des segments rectilignes, en déterminant les directions présentes le long de la ligne.

Pour ce faire, les vecteurs directeurs unitaires des axes des cylindres ont été examinés sur la sphère unité. Le problème se ramène ainsi à dégager des amas (clusters) parmi des points sur la sphère unité, comme l’illustre la figure3.44. Un procédé de vote local, proche d’une transformée de Hough (mais qui évite la discrétisation de la sphère), permet de réaliser cette tâche. Notons que l’on pourrait également procéder via une discrétisation de la sphère de Gauss (telle que dans [BJ98]), et

3.3. MODÉLISATION D’UNE LIGNE DE TUYAUTERIE 89

FIG. 3.44 – Sphère unité des vecteurs directeurs

ainsi obtenir un procédé plus performant en temps de calcul. Ceci étant, le nombre d’axe étant en général inférieur ou de l’ordre d’une centaine, ceci n’est pas utile. De plus, pour une taille de cellule donnée, le procédé utilisé ici rend un résultat plus précis car la position de la cellule est fixée par les points et non par une discrétisation fixe. Ce procédé, qui s’apparente également aux méthodes d’extraction globale décrites au chapitre6 (à ceci près qu’il n’y a pas besoin ici de tirer des points aléatoirement puisque les points ne sont pas en grand nombre), est décrit dans le pseudo-code suivant :

Pseudo-code de la création des classes sur la sphère unité Pour i=1 à N faire

L(i) ← Indices j des points ujtels que kuj− uik2<δ2

ni← nombre d’éléments dans L(i)

Fin Pour

(i01, . . . , i0N) ← liste des indices 1, . . . , N triée par ordre des nidécroissants

C1← L(i01) Pour k=2 à N faire

Ck← éléments de L(i0k) sauf ceux qui sont aussi dans L(i

0

1), . . . , L(i

0

k−1)

nk← nouveau nombre d’éléments dans Ck

Fin Pour

Retourner les classes Cj dont le nombre d’éléments njest au moins égal à 1.

Entrées : N points ui sur la sphère unité.

Paramètres : rayonδde la sphère de voisinage.

Sorties : classes C1, . . . ,Cr(r : nombre de classes, inconnu au départ, r ≤ N).

On obtient ainsi r classes disjointes formant une partition de {1, . . . , N} (indices des cylindres). Notons que cet algorithme nécessite la donnée d’un paramètre,δ, rayon des voisinages (sphère) ser- vant à définir chaque classe. Ce paramètre est à relier au niveau de bruit sur les vecteurs directeurs des cylindres. Si l’on spécifie une valeur trop faible, on obtient une sur-segmentation. Si l’on spécifie une valeur trop forte, on obtient une sous-segmentation. Notons qu’une sur-segmentation est moins problématique qu’une sous-segmentation pour les traitements ultérieurs. En pratique,δa été fixé à 7 degrés. Un choix cohérent de cette valeur dépend bien entendu du niveau de bruit sur l’estimation des cylindres, qui lui dépend du bruit sur les points, de la densité, etc. Une perspective possible est de considérer non seulement les points sur la sphère unité, mais également leurs covariances respectives.

90 CHAPITRE 3. SEGMENTATION DE LIGNES DE TUYAUTERIE

FIG. 3.45 – Classes obtenues sur la sphère unité

Il est à noter qu’une classe n’est pas forcément connexe sur la ligne de tuyauterie. Chaque classe contient en effet un certain nombre de composantes connexes sur la ligne de tuyauterie (Figure3.45). Deux cas sont possibles entre deux composantes consécutives d’une classe :

– les deux composantes correspondent réellement à deux tuyaux parallèles mais distincts, – les deux composantes correspondent à la même partie cylindrique, mais des composantes brui-

tées ont séparé ces composantes (dans le cas de cylindres bruités, e. g. au voisinage de poutres, ...).

Un second traitement vise :

– à séparer les composantes d’une même classe qui représentent en fait des parties cylindriques différentes, et

– à fusionner les composantes d’une même classe qui représentent en fait la même partie cylin- drique.

Le premier cas peut se résoudre par une simple critère de distance des axes correspondant à deux composantes consécutives d’une même classe.

Le deuxième cas est actuellement traité par une lecture de toute la liste de composantes dans leur ordre d’importance (nombre de cylindres). Le principe est de fusionner les composantes d’une même classe si elles sont séparées par des composantes comportant un seul cylindre. Un deuxième paramètre intervient ici : c’est le nombre maximal de cylindres élémentaires que l’on autorise entre deux composantes à fusionner (fixé à quatre en pratique).

Enfin, on remplace la séquence de cylindres d’une composante par le cylindre formé par les ex- trémités du premier et du dernier cylindre de la composante.

On obtient ainsi une séquence de cylindres respectant les mêmes contraintes que les cylindres de départ («cylindre-rotule»).