• Aucun résultat trouvé

3.2 Extraction d’une ligne de tuyauterie

3.2.2 Détail des différentes étapes

Etape 1 : Construction du cylindre initial

Le but est ici de trouver le cylindre sur lequel se trouve le point sélectionné. Pour cela, le principe est de faire l’ajustement d’un cylindre sur un voisinage autour du point sélectionné, c’est-à- dire un ensemble de points voisins du point sélectionné.

3.2. EXTRACTION D’UNE LIGNE DE TUYAUTERIE 55

La méthode utilisée pour effectuer l’ajustement d’un cylindre sur un ensemble de points donné est décrite en détail au chapitre4. Disons simplement ici que cet ajustement est une méthode d’estima- tion par moindres carrés, non-linéaire. Comme nous le verrons au chapitre4, cet ajustement nécessite une estimation des normales à la surface en chaque point.

Le problème ici est que l’on ne dispose pas d’un ensemble de points donné à l’avance sur lequel effectuer l’ajustement. Plus précisément, on souhaite que cet ensemble de points constitue un voisi- nage du point sélectionné dans le nuage, mais on ne sait pas combien de points considérer. Autrement dit, quelle taille de voisinage choisir autour du point ? Si cette taille est trop petite, l’ajustement risque d’être mauvais, car le bruit sur les points prendra beaucoup d’importance. Si par contre cette taille est trop grande, l’ajustement sera vraisemblablement mauvais aussi, car le voisinage englobera des points qui se trouvent sur d’autres surfaces. De plus, contrairement au cas d’une image 2D ou 2,5D, on ne peut pas définir une taille de voisinage fixe sur toute la scène car la densité de points n’est pas uniforme.

D’autre part, il est important ici que cette estimation soit la plus précise possible (car les contraintes qui sont utilisées ensuite font que le résultat de la première étape a des répercussions sur tout le reste). La méthode introduite ici suit un procédé multi-résolution : on essaie toute une gamme de tailles de voisinage, et on garde la «meilleure» taille, au sens d’un certain critère. En fait, un voisinage aura une taille optimale s’il est le plus gros possible (ce qui conduit à une meilleure estimation des paramètres du cylindre) sans contenir de points aberrants (notamment les points sur d’autres surfaces). Le détail de cet algorithme est décrit section6.1.2, page161.

A ce niveau, il y a un contrôle du rayon du cylindre obtenu. On regarde en particulier si les paramètres de ce cylindre sont compatibles avec des valeurs minimales et maximales. Ces valeurs extrémales, qui dépendent de la scène (notamment de l’unité de longueur utilisée), sont spécifiées par l’utilisateur à travers une boîte de dialogue (Figure5.12, page139).

Etape 2 : Propagation

Une fois le cylindre initial construit, la propagation s’effectue successivement de chaque côté du cylindre. Pour chacune des deux directions, on suit la ligne de tuyauterie en faisant une propagation à l’aide d’ajustements de cylindres contraints. Le principe de l’algorithme est présenté sous la forme du pseudo-code suivant :

56 CHAPITRE 3. SEGMENTATION DE LIGNES DE TUYAUTERIE

Pseudo-code de l’étape 2 NuageRestant ← Tout le nuage

Pour chacun des deux sens faire Continuer ← vrai

CylPrécédent ← Cyl0 (issu de l’étape 1)

Direction de propagation ← Direction de Cyl0 dans le sens courant

e0← erreur d’ajustement de Cyl0 Tant que (Continuer = vrai) faire

V ← Points de NuageRestant dans demi-sphère de rayon R =ρr

au bout de CylPrécédent

Si (Nombre de points(V ) < nmin) faire Continuer ← faux

Sinon

Cyl ← Ajustement de cylindre-rotule sur les points de V

e ← Erreur d’ajustement de Cyl

Si (e >βe0) faire Continuer ← faux Sinon

Ajouter Cyl à la liste de cylindres

Enlever les indices des points de V de NuageRestant CylPrécédent ← Cyl

Fin Si Fin Si Fin Tant que

Retourner la séquence de cylindres et les sous-nuages associés Fin Pour

Entrées : Nuage de points, Cylindre initial Cyl0 et son erreur d’ajustement e0. Paramètres :ρ(=√2), nmin(= 10),β(= 10).

Sorties : Deux séquences de cylindres et sous-nuages associés, sous-nuage NuageRestant.

A chaque itération, on effectue les étapes suivantes :

Création du nouveau voisinage Le nouveau voisinage est déterminé comme suit : l’extrémité du cylindre précédent étant fixée, on considère les points qui se trouvent dans une demi-sphère de rayon

2r dans le sens de la propagation (Figure3.8). Pourquoi cette taille ? Comme on peut le voir sur la figure3.8,√2r est le rayon minimum pour que la demi-sphère englobe les points qui se trouveraient sur le cylindre suivant (de longueur de r).

Ajustement d’un cylindre contraint sur ces points Le type de primitive utilisée ici est le «cylindre- rotule» (pour une définition précise, se reporter au chapitre4). C’est un cylindre dont le rayon est fixé et l’axe est contraint à passer par un point fixe. Autrement dit, seule la direction de l’axe est autorisée à varier (liaison rotule).

Ici, la valeur du rayon est celle du cylindre construit lors de l’étape 1. Le point fixé est l’extrémité du cylindre précédent dans le sens de la propagation (Figure3.8).

3.2. EXTRACTION D’UNE LIGNE DE TUYAUTERIE 57

FIG. 3.8 – Création du nouveau voisinage

Le détail de l’ajustement de cette primitive est présenté au chapitre4. Notons simplement que cet ajustement nécessite une valeur initiale. Cette valeur initiale pour le vecteur directeur de l’axe est choisie ici égale au vecteur directeur du cylindre précédent. Ceci exploite la continuité et la régularité de la ligne de tuyauterie : l’angle entre des cylindres consécutifs (et courts) sur la ligne n’est en général pas très grand.

Critères d’arrêt de la propagation

Les itérations précédentes s’arrêtent dans deux cas.

1. Il n’y a pas assez de points dans la demi-sphère courante. Plus précisément le nombre de points est inférieur à un seuil nmin(nmin= 10 en pratique).

2. L’erreur d’ajustement est trop élevée. Plus précisément, le résidu quadratique moyen est supé- rieur au résidu quadratique moyen du cylindre initial multiplié par un certain facteurβ(β= 10

58 CHAPITRE 3. SEGMENTATION DE LIGNES DE TUYAUTERIE