Florent Paccault, Vincent Vidal Projets image 2006 : Contours actifs (snakes) 3D |
|||||||||||||||||||||
Accueil |
La
paramétrisation Lorsqu'on cherche à détecter des contours sur une image, on travaille
localement sur une petite partie de l'image. Dans l'agorithme utilisé, il est
justement question de déterminer une région locale sur le polyhèdre (3D) à
partir du snake (contour actif) tracé par l'utilisateur. Forme de la région paramétriséeLe premier problème rencontré, c'est le choix des 4 points de la région
locale que l'on va associer aux 4 coins du carré. En effet, on imagine bien
qu'un mauvais choix à ce stade, entraînera une mauvaise paramétrisation,
c'est-à-dire une paramétrisation dans laquelle il y a beaucoup de distorsion
par rapport à la région locale 3D. Il faut prendre cela en considération, car
sinon notre minimisation énergétique ne reflètera pas la réalité, à cause du
calcul de dérivées partielles dans le processus de minimisation qui prend en
compte les positions 2D des points de la région locale. Coefficients de la paramétrisationEnsuite, pour déterminer tous les points intérieurs 2D du carré
correspondant aux points intérieurs de la région locale, on utilise la
méthode de Floater (cf sujet), qui consiste à utiliser des combinaisons
convexes des sommets voisins. Nous avons choisi simplement l'isobarycentre,
en prenant les lamba_i_j=1/nombre_de_voisins_du_sommet_i (paramétrisation
uniforme). Une fois les lamba_i_j calculés, il suffit de résoudre un système
matriciel. Nous avons choisi de le faire en utilisant la méthode LU, qui est
recommandée dans tous les articles lus.
Il y a aussi une influence du choix des 4 points de la bordure qui sont
associés aux 4 coins du carré, mais cela n'a pas trop d'importance lorsqu'une
région locale a une forme indescriptible (Pour certaines régions, il serait
même difficile de demander à un utilisateur de fixer les 4 points à la main).
Par exemple, on peut avoir des régions "serpentées" ou en zig-zag. Problèmes rencontrés, solutions imaginéesRappelons les problèmes vus ci-dessus :
Sinon, nous avons été confrontés aux problèmes suivants :
Dans cette partie, ce qui a semblé le plus important, c'est d'avoir un moyen rapide de passer de la région locale 3D à sa paramétrisation 2D. En effet si on veut voir l'évolution 3D du snake au fur et à mesure, on doit faire des interpolations des voisins 3D associés aux voisins 2D de la facette où se trouve un point du snake. Nous avons commencé par utiliser 2 meshs, la région locale et sa paramétrisation correspondante, en se basant uniquement sur un ordre identique des sommets, arètes et facettes pour passer du 2D au 3D. Mais par la suite, il est apparu moins coûteux d'utiliser un Mesh
contenant des points 3D avec un champ de type Point 3D en plus
pour représenter le point 2D de la mesh paramétrisée. Même s'il y a une
surcharge de la structure initiale, cela permet de n'avoir qu'un seul
paramètre Mesh dans notre région locale associée au snake, mais
aussi d'accéder aux voisins en temps quasi constant (cela dépend seulement du
nombre de voisins). C'est ce qu'on fera dans la prochaine version.A première vue, il peut paraître bizarre d'utiliser des points 3D pour représenter un mesh 2D, mais cela nous a en fait permis d'utiliser la structure de mesh issue de CGAL fournie au départ et donc d'avoir accès à pas mal de méthodes. Voici quelques résultats:
|
Dernière mise à jour de la page : Fri 16 Jun 2006 à03:39:39