Projet Image 2009

Reconstruction interactive de maillage

Besnier Arnaud, Huard Mathieu, Luna Florian, Bouvier Vincent

Sommaire

Bibliographie

[ProjetImage2008] :BELCOUR Laurent, HEITZ Eric, MASSON-SIBUT Agnès Animation d'un maillage 3D à partir d'un maillage réel

Livre Triangulation de Delaunay et maillage de Darren George

http://www.mougel.org/informatique/IUP/IUP3/VisuSc/tetra.htm

Dual Marching Cubes: Primal Contouring of Dual Grids
Scott Schaefer and Joe Warren
Rice University
6100 Main St.
Houston, TX 77005
sschaefe@rice.edu and jwarren@rice.edu

Quelques fichiers

Introduction

Le projet sur lequel nous avons travaillé cette année concerne la réparation des maillages produits par un scanner 3D. Un tel scanner procède en scannant successivement le même objet sous différents angles, après quoi ces différentes vues sont recollées automatiquement par un logiciel propriétaire(ScanStudio dans le cas du scanner que l'Inria nous a fourni). Au moment du recollement, le maillage obtenu est simplifié, et l'on obtient une entité correspondant à l'objet scanné. Outre les imperfections dûes aux algorithmes de reconstruction, l'opération est rendue complexe par la simple topologie des objets scannés, qui empêche une acquisition satisfaisante de zones critiques ou obstruées. Les différents algorithmes automatiques qui ont pu être implémentés n'ont jamais réellement résolu le problème. Ainsi, notre projet se base sur un article récent qui propose une méthode interactive, décrite un peu plus bas : Interactive Topology-Aware Surface Reconstruction, par A. Sharf, T. Lewiner, G. Shklarski, S. Toledo et D. Cohen-Or, publié à SIGGRAPH en 2007.

Prise en main du scanner

Pour des généralités sur le scanner que nous avons utilisé, on peut se référer au projet réalisé l'an dernier (cf. Bibliographie). D'un point de vue matériel, le scanner réalise des photos de bonne qualité, et de façon très automatisée. La complexité se situe plutôt au niveau logiciel, puisqu'il ne parvient que rarement à assembler les différentes vues. Il faut donc le guider en définissant des points de fusion sur plusieurs des vues, une opération qui s'avère parfois compliquée. Les différents maillages correspondant aux vues sont fusionnés automatiquement, mais il en résulte un maillage trop raffiné, et donc très lourd, bien que conforme à l'objet scanné. Enfin, mentionnons que le logiciel ScanStudio fournit un algorithme de réparation de maillage, très approximatif. Il en ressort un maillage effectivement "étanche", mais avec un niveau de détail déplorable par rapport à l'objet initial.(à suivre, image du joker).
Un exemple d'éléphant :

Algorithme de Sharf

L'algorithme à implémenter se décompose en plusieurs étapes : Nous avons appliqué quelques modifications et autres adaptations de l'algorithme décrit dans l'article, ceci notamment pour des contraintes de temps d'une part, de simplicité d'interaction avec l'interface d'autre part. C'est pourquoi l'on explicite ci-dessous les différentes étapes telles qu'elles sont implémentées dans notre code, en signalant les variantes majeures :
  1. Calcul et affichage de la surface implicite
  2. Le calcul de la surface résulte d'un problème de minimisation d'une fonction qui pénalise l'irrégularité de la fonction et l'éloignement aux points du maillage. Ce problème est résolu par la méthode des éléments finis. L'article utilise un maillage de l'espace à base d'octrees, qui permettent de raffiner la subdivision de l'espace au voisinage des contraintes. Nous n'avons pas eu le temps d'implémenter cette structure, et avons donc utilisé un maillage régulier sur tout l'espace occupé par l'objet scanné. Il s'agit d'un maillage tétraédrique, composé de cubes tous identiques, découpés identiquement en tétraèdres de la façon suivante :

    Décomposition du cube en tétraèdre
    On verra que cette décomposition a l'avantage de faciliter la reconstruction prochaine de la surface implicite.

    Une fois le problème d'éléments finis résolus, on a la valeur de la fonction implicite à tous les sommets du maillage tétraédrique. Pour reconstruire la surface implicite à partir de ces sommets, on utilise la méthode des "marching tetrahedra", qui utilise la même partition de l'espace que notre maillage. Il était question dans l'article de "dual marching cubes" qui eux se basaient sur la structure d'octree que nous n'avons pas utilisée.

    L'éléphant après reconstruction de surface implicite
  3. Détection et affichage des zones faibles
  4. L'ensemble des points du maillage sont parcourus. Pour chacun de ces points, nous créons un circulateur sur l'ensemble des points avec lequel il est lié. Pour déterminer si un point est critique, on partitionne l'ensemble des points wi adjacents au point courant v en deux ensembles de points (les positifs et les négatifs). Les points positifs sont tels que u(wi) > u(v) et les points négatifs tels que u(wi) >= u(v). Chaque ensemble de points (les wi positifs ou négatifs liés par des arêtes) est compté. Si le nombre total de de groupes connectés est de 1 ou supérieur ou égale à 3, le point est critique et définit une zone topologiquement faible. L'illustration ci-dessous extraite du papier de recherche étudié nous montre un exemple en 2D qui à l'avantage d'être assez explicite :

    Détection de zones faibles sur un maillage 2D

  5. Mise à jour de la surface implicite

L'interface de notre logiciel

Nous avons choisi de créer notre interface à partir de zéro suites aux difficultées que nous avons rencontrées pour compiler l'interface "de base" livrée en début de projet. Cette interface basée sur Qt4 intègre un viewer construit avec la librairie QGLViewer.
Interface2.png
Interface1.png
Cette interface peut effectuer diverses opérations accessibles sur la barre des tâches :

A noter que si vous voulez ouvrir un fichier, son chemin absolu ne devra dépasser les 60 caractères. Dans le cas contraire un message d'erreur apparaitra au niveau de l'interface et aucun fichier ne sera ouvert. Nous ne comprennons pas pourquoi mais si le chemin absolu a plus de 60 ou 62 caractères, le programme ajoute un charactère à la fin du nom de fichier, celui-ci n'est alors pas trouvé dans l'arborescence.

Bilan du projet, tests et résultats

Nous n'étions pas trop de quatre pour ce projet de réparation de maillages ! L'installation des multiples bibliothèques, la réalisation d'une interface graphique, l'implémentation de concepts mathématiques poussés et une méthodologie de programmation rigoureuse ont été tant de compétences nécessaires pour arriver à un résultat correct. L'algorithme de Sharf n'a été que partiellement implémenté, et ne fonctionne qu'avec de faibles résolutions, mais les surfaces implicites sont reconstruites avec succès. L'interface graphique, même si sa gestion des zones faibles n'est pas exploitée par nos travaux, est complète et fonctionnelle.
Ainsi, le bilan est plutôt mitigé : le projet, bien que passionnant sous bien des aspects, nous a paru très ambitieux, et il est regrettable que nous ayons perdu du temps sur des aspects plus "futiles" comme l'installation de bibliothèques, même si la maîtrise de ces bibliothèques s'avérera certainement utile pour nous par la suite. C'est la raison pour laquelle nous avons écrit quelques tutoriaux pour les projets des années à venir.

Problèmes à résoudre, optimisations possibles

Tutoriaux d'installation des librairies

La première étape du projet, et l'une des plus longues, fut l'installation des différentes librairies permettant la gestion et l'affichage de maillage. Devant les difficultés rencontrées et notre altruisme évident, nous offrons aux génériations futures ou passées quelques tutoriaux d'installation pour les principales librairies utilisées lors de notre projet. Explications de l'installation de l'ensemble des librairies et du programme de réparation de maillage