Contribution de la reconstruction 3D à la compression de maillages surfaciques triangulaires Rapport de stage – Master M2 Recherche Informatique Spécialité IGI (Informatique Graphique et Images) Céline ROUDET [email protected] Encadrée par Raphaëlle CHAINE – Maître de conférence au LIRIS [email protected] Laboratoire d'InfoRmatique en Images et Systèmes d'information Université Claude Bernard Lyon 1 Bâtiment Nautibus Campus de la Doua 8, Bd Niels Bohr 69622 Villeurbanne Cedex 1 Résumé Depuis quelques temps, les objets tridimensionnels commencent à concurrencer le multimédia traditionnel (images, sons, vidéos). Ces objets sont le plus souvent représentés par des maillages et sont utilisés dans différents domaines comme la médecine, la Conception Assistée par Ordinateur (CAO), la simulation, les jeux vidéos, le cinéma, les visites virtuelles, ... Depuis une dizaine d'années, un grand nombre de méthodes de compression de maillages se sont développées. On distingue les méthodes de compression sans perte qui proposent une réorganisation optimale du codage de l'information, des méthodes de compression avec pertes qui filtrent l'information dans un espace transformé. Dans le cadre de ce stage, nous nous sommes intéressés à la compression sans perte de maillages surfaciques triangulaires. Dans la plupart des méthodes de compression, le parcours de la connectivité du maillage est codé explicitement et guide le codage de l'information géométrique (position des points). Notre méthode considère l'approche inverse et propose d'étudier la contribution des algorithmes de reconstruction 3D pour coder la topologie d'un maillage surfacique triangulaire compte tenu de sa géométrie. Les méthodes de reconstruction à partir de nuages de points ne permettent pas une reconstruction exacte de la surface de tous les objets 3D. Elles sont toutefois exploitables pour rendre implicite une grande partie de l'information topologique lors de la compression. Nous avons ainsi choisi d'utiliser une méthode de reconstruction existante afin d'obtenir d'une part, un codeur topologique construit à partir de la totalité de l'information géométrique et d'autre part une variante de ce codeur avec transmission graduelle et simultanée d'une partie de l'information géométrique. Abstract For some time, the three-dimensional objects have begun to compete with traditional multimedia (images, sounds, videos). These objects are mostly represented by meshes and are used in various domains like medicine, Computer-aided design (CAD), simulation, video games, cinema, virtual visits, ... Since around ten years, lots of compression methods have been developed for meshes. Lossless methods which propose an optimal reorganization of the information coding have to be distinguished from lossy ones which filter the information in a transformed space. Within the framework of this training, we were interested in the lossless compression of triangular meshes. In most of the compression methods, the way the mesh connectivity is traversed is explicitly coded and drives the coding of the geometrical information (position of points). Our method considers the inverse approach and proposes to study the contribution of the 3D reconstruction algorithms to code the topology of a triangular mesh considering its geometry. The reconstruction methods from point sets do not allow an exact reconstruction of the surface of all the 3D objects. They are however exploitable to represent implicitly a great part of the topological information during the compression. Thus we chose to use an existing reconstruction method to obtain on one hand a topological coder built from the totality of the geometrical information and on the other hand a variant of this coder with gradual and simultaneous transmission of a part of geometry. 2 Table des matières 1 Introduction 4 2 Présentation des travaux existants en compression de maillages 5 2.1 2.2 2.3 Représentation non compressée des maillages . . . . . . . . . . . . . . . . . . . . . .5 Principes généraux des méthodes de compression . . . . . . . . . . . . . . . . . . . .5 La compression de maillages sans perte . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3.1 La compression monorésolution . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3.1.1 Algorithme de Deering . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.1.2 Algorithme de Touma et Gotsman . . . . . . . . . . . . . . . . . . . .7 2.3.1.3 Edgebreaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.2 La compression progressive . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.2 La compression géométrique . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3.2.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 2.3.2.2 Codeur géométrique . . . . . . . . . . . . . . . . . . . . . . . . . . .11 2.4 La compression de maillages avec pertes . . . . . . . . . . . . . . . . . . . . . . . . . 12 3 Les algorithmes de reconstruction 3D 13 3.1 La reconstruction par approximation . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2 La reconstruction par interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2.1 L'algorithme de « convection géométrique » . . . . . . . . . . . . . . . . . . .14 4 Notre contribution 17 4.1 Principe général de notre algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . .17 4.2 Description de l'algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2.1 Première approche : codage de la topologie par rapport à la géométrie . . . . . 17 4.2.1.1 Principes du codeur et du décodeur . . . . . . . . . . . . . . . . . . . 17 4.2.1.2 Codage des informations . . . . . . . . . . . . . . . . . . . . . . . . 20 4.2.2 Variante : codage graduel de la géométrie . . . . . . . . . . . . . . . . . . . . 21 4.2.2.1 Principes du codeur et du décodeur . . . . . . . . . . . . . . . . . . . 21 4.2.2.2 Principes de la prédiction utilisée . . . . . . . . . . . . . . . . . . . . 23 5 Implémentation 25 5.1 Présentation de la librairie CGAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.1.1 Représentation des objets géométriques dans CGAL . . . . . . . . . . . . . . 25 5.2 Nos choix d'implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.2.1 Noyau et structures de données utilisés . . . . . . . . . . . . . . . . . . . . . .26 5.2.2 Ordre de traitement des facettes de la triangulation . . . . . . . . . . . . . . . 27 6 Résultats 28 7 Conclusion et perspectives 30 Bibliographie 31 Annexe 1 : modèles utilisés 33 3 1 Introduction Depuis quelques années, les modèles géométriques tridimensionnels sont de plus en plus omniprésents. Ils sont apparus avec le développement de l’infographie et de la vision tridimensionnelle, qui ont permis une modélisation 3D d’objets ou de scènes complexes. Ces modèles peuvent être créés par des systèmes de modélisation (logiciels de Conception Assistée par Ordinateur (CAO), ...) ou obtenus grâce à des procédés de numérisation tridimensionnelle d’objets physiques (range scanners). Ils sont généralement représentés sous forme de maillages surfaciques (surface linéaire par morceaux composée de polygones) ou volumiques (représentation de l’objet par un ensemble de polyèdres). Ces modèles peuvent aussi être décrits par des nuages de points, des formes à pôles (courbes de Bézier, NURBS, ...) ou des surfaces implicites. Ce type de données géométriques est utilisé par une grande diversité d’applications regroupées ici par domaines : • La conception d’objets industriels (CAO) ou familiers (CAM : Computer Aided Manufacturing) • La médecine (aide au diagnostic, chirurgie assistée par ordinateur ou à distance, …) • Les systèmes d’information géographiques (cartographie, géologie, astronomie, ...) • La simulation de phénomènes physiques (expériences virtuelles) • La réalité augmentée (mélange de scènes réelles et d’objets virtuels) • Les applications ludiques (jeux vidéo, cinéma, visites virtuelles, ...) • ... Les modèles géométriques peuvent nécessiter une numérisation de plus en plus fine et détaillée, afin de satisfaire aux attentes de réalisme. Par exemple, la numérisation du David (statue de Michel Ange) a été réalisée à l'aide de 2 milliards de points [25]. La représentation non compressée d'un tel modèle nécessite alors plusieurs Giga octets. Actuellement les machines et les réseaux sont de plus en plus performants et permettent de stocker ou d'échanger un nombre de données de plus en plus important. Malgré ceci, toute amélioration des méthodes de compression existantes est souhaitable, car on assiste également à une vulgarisation de la numérisation des données et à une explosion prévisible de la production et de l'échange de ce type de données. • • Deux approches sont envisageables pour la compression de données : La compression sans perte qui propose une reconstruction exacte de l'information, et qui se révèle indispensable pour certaines applications sensibles ne tolèrant pas de pertes (calculs par éléments finis, applications médicales, ...). La compression avec perte où on s'autorise des pertes contrôlées. Les taux de compression obtenus sont alors beaucoup plus importants et on choisit généralement le débit désiré. Il existe plusieurs méthodes de compression de données textuelles, qui se révèlent également utiles pour la compression d'images, de sons ou de vidéos en utilisant le plus souvent une approche basée sur les principes du traitement du signal. Certaines de ces approches ont été étendues pour le codage de surfaces, mais depuis une dizaine d'années, on observe l'apparition de méthodes spécialement dédiées aux maillages. Un autre domaine qui manipule les objets géométriques est la géométrie algorithmique. Cette discipline s'intéresse à l'étude symbolique abstraite de ces objets et permet de résoudre un grand nombre de problèmes à l'aide d'algorithmes efficaces et de structures de données appropriées. Un des grands thèmes abordé par la géométrie algorithmique est la reconstruction 3D. L'utilisation des algorithmes de reconstruction 3D pour la compression de la connectivité des maillages n'a été que très faiblement exploitée, mais s'avère très intéressante. Ainsi, nous avons choisi d'étudier l'apport de la reconstruction 3D pour le codage de la topologie de maillages surfaciques triangulaires. Nous avons, dans ce but, mis au point une méthode de compression sans perte exploitant un algorithme de reconstruction basé sur la déformation de surface. Les chapitres 2 et 3 de ce mémoire, abordent respectivement les principes de la compression de maillages et de la reconstruction 3D à travers la présentation de plusieurs travaux existants. Les travaux correspondant le plus à notre méthode sont expliqués en détail. Le chapitre 4 est consacré à la description de notre algorithme et le chapitre suivant détaille nos choix d'implémentation. Pour finir, nous présentons les résultats obtenus ainsi que les perspectives envisageables. 4 2 Présentation des travaux existants en compression de maillages Un maillage est une surface linéaire par morceaux qui approxime la surface continue du modèle original. Une telle approximation est caractérisée par une information géométrique qui définit la position des sommets dans l’espace euclidien et une information topologique qui décrit la relation d’adjacence entre les sommets traduisant la manière dont ils sont connectés entre eux. Les maillages surfaciques triangulaires sont les plus utilisés pour la représentation d’objets dans l'espace tridimensionnels. Ils sont en passe de devenir la représentation standard pour la modélisation d’objets géométriques grâce à leur simplicité et leur efficacité. Ils sont composés de k-simplexes qui peuvent être des sommets (0simplexe), des arêtes (segment reliant deux sommets : 1-simplexe) ou des triangles (2-simplexe). On parle alors de surface simpliciale [8]. N’importe quelle forme géométrique peut être représentée par un maillage. Pour certains modèles, d’autres informations (ou attributs) peuvent être associées aux points (normale, courbure, couleur, information de texture, …) facilitant la modélisation, le rendu et la visualisation des objets. Contrairement aux images non vectorielles, aux sons et aux vidéos, les maillages se caractérisent généralement par un échantillonnage irrégulier. En effet, les points ne sont pas répartis sur une grille régulière et ils n’ont pas forcément le même nombre de voisins (ce nombre est appelé valence ou degré d’un sommet). Les techniques de compression de maillages doivent donc être adaptées à ces structures particulières. 2.1 Représentation non compressée des maillages La représentation naïve d'un maillage triangulaire consiste à coder les informations géométriques et topologiques respectivement par : • Une liste de points représentés par leurs coordonnées cartésiennes dans l’espace euclidien 3D. On code généralement les coordonnées par des nombres flottants sur 32 bits. • Une liste de triangles, chacun représenté par les indices de ses sommets dans la liste précédente. Les indices sont généralement codés sur 32 bits. Il existe plusieurs formats ASCII utilisant cette représentation. Les plus connus sont le langage VRML (Virtual Reality Modeling Language) et le format OFF. Ce type de codage s'avère très redondant, vu que la valence d'un sommet est en moyenne égale à 6 dans un maillage triangulaire (chaque sommet est en moyenne incident à 6 triangles distincts). Ainsi pour ces maillages, l'indice d'un sommet apparaît en moyenne 6 fois dans la liste des polytopes. Plusieurs méthodes de compression, dont certaines sont présentées par la suite, permettent de réduire cette redondance. 2.2 Principes généraux des méthodes de compression Le principe général de toute approche de compression peut être représenté par le schéma ci-dessous [4] : FIG. 1 - Schéma général de la compression. Toute approche de compression utilise les deux étapes indiquées dans ce schéma afin d'obtenir la séquence binaire la plus compacte possible Les méthodes de compression exploitent le contexte des données à représenter pour réorganiser l'information de manière pertinente et optimale, afin de réduire le nombre de bits nécessaires à sa représentation. Une fois l'information réorganisée en une séquence de symboles, un codage entropique est utilisé afin d'obtenir la séquence de bits la plus compacte possible. Un tel codeur doit satisfaire à priori les conditions 5 suivantes : • Condition d'unicité : deux messages différents ne doivent pas être codés de la même façon. • Condition de déchiffrabilité : deux mots de codes successifs doivent être distingués sans ambiguïté. Le but du codage entropique est de tendre vers l'entropie du signal échantillonné. Le terme d'entropie est utilisé en théorie de l'information et désigne la limite minimale théorique du nombre de bits nécessaires au codage de l'information portée par un signal [4]. Ainsi, pour s'approcher de cette limite, chaque symbole est représenté par un code de longueur variable, inversement proportionnel à sa probabilité d’apparition. Les informations les plus probables sont alors codées sur un petit nombre de bits. Il existe plusieurs codeurs entropiques, dont les plus connus sont le codeur d'Huffman [20] et le codeur arithmétique [29, 40] qui sont des méthodes statistiques. Le codage d’Huffman code les symboles un par un à partir d'une analyse statistique préalable des données. Il est utilisé dans les normes de compression d’images (JPEG) ou de vidéos (MPEG). Chaque symbole est codé par un nombre entier de bits, ce qui empêche la plupart du temps de s’approcher très près de l’entropie du signal. Le codage arithmétique permet de se rapprocher plus de l'entropie du signal, car il code une séquence de symboles par un seul nombre. Chaque symbole est ainsi représenté dans la séquence par un nombre de bits non nécessairement entier. Ce codage est toujours basé sur une analyse statistique préalable des données et est utilisé dans la norme JPEG 2000. Il existe également des méthodes de codage par substitution [41, 42]. Celles-ci gèrent un dictionnaire adaptatif qui contient les derniers symboles codés et s’enrichit au fur et à mesure. Ce dictionnaire est très utile pour réduire l'entropie du signal lorsque des séquences de motifs réapparaissent. 2.3 La compression de maillages sans perte Il est d’usage de séparer le coût de la géométrie du coût de la topologie pour présenter les résultats d’un algorithme de compression de maillages, même si ces deux coûts sont intimement liés. Cette séparation permet de mettre en évidence la dépendance entre le codage de la géométrie et la quantification utilisée. Les travaux réalisés en compression de maillages sans perte se divisent en deux grandes catégories : les méthodes dites mono-résolution (ou non progressives) et les méthodes progressives. La différence repose essentiellement sur la façon de coder l'information topologique. 2.3.1 La compression monorésolution Les méthodes mono-résolution sont les premières a avoir été proposées pour la compression de maillages surfaciques. Elles utilisent toutes le même principe de parcours linéaire des triangles, qui consiste à commencer par un triangle germe puis à découvrir à chaque étape un nouveau sommet jusqu'à ce que le maillage soit entièrement parcouru. La bande de triangles formée peut ne pas couvrir l'ensemble du maillage (si elle se referme sur ellemême), dans ce cas, on relance le processus en partant d'un nouveau triangle germe non codé. La découverte d'un nouveau triangle va généralement de pair avec la découverte d'un nouveau sommet et un code doit alors être transmis afin de déterminer la façon de rattacher le nouveau sommet au triangle précédemment découvert. Ces méthodes de compression diffèrent les unes des autres par le parcours et le codage de la connectivité qui peut se faire de plusieurs manières. Les méthodes se distinguent également dans leur façon de coder l'information géométrique à partir de l'information topologique, qui exploite le codage prédictif de la position des points par rapport à leur voisinage local. Le principe du codage prédictif est d'exprimer la position d'un sommet par rapport aux sommets précédemment découverts lors du parcours topologique. Ceci permet d'exploiter la corrélation entre ce sommet et son voisinage, réduisant ainsi l'information transmise. Cette dernière correspond au vecteur différence entre la position prédite par le voisinage et la position réelle du point. Cette technique est parfois référencée sous le nom de « delta-encoding » et le vecteur différence est appelé résidu ou vecteur correctif. On l'exploite également pour le codage des attributs additionnels (couleur, normale, texture, ...), qui sont souvent fortement corrélés dans un voisinage local. Les trois types de prédiction de position les plus utilisés sont illustrés par les figures ci-dessous tirées de [14], mais il existe également des techniques de prédiction non linéaire. 6 FIG. 2 - Les 3 types de prédiction les plus utilisés. Le codage différentiel code la différence d entre le sommet précédent (i-1) et le sommet courant i. Pour les 2 autres schémas, la position du point i est codée par la différence r entre la position prédite par le voisinage et la position réelle de i. Venons-en maintenant aux principaux algorithmes de compression de maillages mono-résolution 2.3.1.1 Algorithme de Deering En 1995, Deering est le premier à introduire le terme de « compression géométrique » [12]. Il propose une représentation compacte des maillages surfaciques par une structure de données linéaire : les bandes de triangles généralisées. Dans cette structure, le sommet courant engendre un nouveau triangle connecté par la droite ou par la gauche au dernier triangle construit. Les bandes de triangles généralisées permettent une plus grande flexibilité comparé aux bandes de triangles standard où le sommet est alternativement connecté par la droite et par la gauche, comme nous pouvons le voir sur les figures ci-dessous. FIG. 3 - Codage d'un maillage par bandes de triangles. (a) Bande de triangles standard. (b) Bande de triangles généralisée (les lettres G et D associées aux sommets indiquent qu'ils sont connectés au triangle précédent respectivement par la gauche ou par la droite). Grace à cette représentation (utilisée dans OpenGL et Java3D), un sommet est en moyenne codé deux fois, ce qui représente déjà une réduction de la redondance initiale. Cette technique conduit à un codage de la connectivité sur 7,5 + log2 (n/8) bits par sommet. La compression de la position et des attributs des sommets est réalisée par prédiction linéaire directe suivie d'un codage d'Huffman. 2.3.1.2 Algorithme de Touma et Gotsman Une autre manière de parcourir les maillages surfaciques de façon linéaire a été exploitée par Touma et Gotsman en 1998 [39]. Ils proposent de faire évoluer une liste de sommets formant un polygone et contenant l'ensemble des triangles déjà codés. Ce polygone évolue par conquête des arêtes non encore codées autour d'un 7 sommet pivot. La séquence codante est alors constituée de la valence de chaque nouveau sommet découvert à laquelle s'ajoute des codes additionnels traduisant les changements topologiques du polygone lors de sa croissance, qui sont généralement rares. Cette approche s'avère très intéressante puisque chaque sommet n'est codé qu'une seule fois. Le coût de la topologie est de l'ordre de 2 bits par sommet pour les maillages usuels et tend vers zéro pour les maillages très réguliers (de valence 6). Sur ce dernier type de modèles, cet algorithme est actuellement le plus compétitif. Le codage de la géométrie est réalisé en utilisant la prédiction par règle du parallélogramme. Cette dernière produit une prédiction située dans le plan défini par le triangle précédent, qui peut être améliorée par l'estimation de l'angle formé entre ce dernier et le triangle courant (« crease angle »). Les auteurs calculent cette estimation à partir du voisinage local. Cette approche permet de réduire le codage de la géométrie de 69% par rapport aux méthodes utilisant la prédiction linéaire classique. 2.3.1.3 Edgebreaker L'algorithme Edgebreaker utilise le même principe que celui de Touma et Gotsman, mais le parcours et l'information topologique sont codés différemment [26, 30-33, 36]. La connectivité est ainsi codée par une chaîne de cinq symboles, chacun représentant une configuration possible. Ces symboles sont présentés dans la figure cidessous, extraite de [26]. FIG. 4 - Les 5 symboles CLERS de l'algorithme Edgebreaker. Les triangles jaunes contenant les lettres C, L, E, R et S représentent les triangles courants, le triangle Y désigne le triangle précédent. Les triangles blancs et gris sont respectivement des triangles non découverts et déjà codés. Dans la configuration C, le sommet V n'a pas été découvert auparavant (son état est symbolisé par le rond blanc). Cette « machine à états finis » permet de coder les triangles du maillage en formant une spirale où chaque sommet n'est codé qu'une seule fois. Cette méthode garantit un coût topologique d'au plus 1,8 bits par triangle qui se révèle inférieur pour les maillages réguliers. De nombreuses extensions de cet algorithme ont été proposées notamment pour la compression de maillages tétraèdriques [34, 35]. Notre algorithme, en tant que méthode de compression mono-résolution se rapproche des deux dernières méthodes citées par leur aspect combinatoire. En effet, nous verrons par la suite que notre méthode procède également par conquête de sommets en se basant sur les triangles courants. 2.3.2 La compression progressive Avec l'évolution d'Internet et des applications multimédia, les modèles géométriques peuvent être véhiculés sur des réseaux dont la bande passante constitue un goulet d'étranglement pour le transfert d'informations. Ils peuvent également être visualisés par des terminaux de nature très différente (ordinateur, PDA, téléphone portable dans le futur, ...). Il est ainsi nécessaire de produire des méthodes de compression adaptées au matériel ainsi qu'aux besoins de l'utilisateur, c'est le but de la compression progressive. Les méthodes de compression progressive codent les maillages de façon hiérarchique. Elles produisent une version simplifiée (grossière) du maillage ainsi qu'une séquence d'opérations de raffinement permettant de reconstituer le maillage original. La transmission et la visualisation des maillages s'effectuent de façon progressive, l'utilisateur pouvant même décider, s'il le souhaite, de stopper le raffinement à tout moment (compression avec 8 pertes). L'enjeu de ces méthodes et d'optimiser le compromis débit / distorsion pour obtenir à tout moment la meilleure représentation possible quel que soit le niveau de reconstruction. Ces méthodes produisent ainsi des approximations intermédiaires du modèle original correspondant à différents niveaux de résolution. Il existe deux catégories de méthodes qui diffèrent par les niveaux de résolutions proposés. La première catégorie propose un raffinement continu du maillage où chaque opération de raffinement est codée séparément. Cette méthode s'avère très flexible puisqu'on dispose alors d'un très grand nombre de niveaux de détails. La seconde catégorie fait évoluer le maillage en regroupant les opérations de raffinement en ensembles indépendants, produisant moins de niveaux de détails (une dizaine environ). Cette dernière méthode est beaucoup plus rapide et le code produit plus compact, c'est pourquoi la plupart des travaux l'exploitent. Le taux de compression proposé par ces méthodes est généralement plus élevé comparé aux méthodes mono-résolution. Le premier algorithme de compression progressive a été proposé par Hoppe en 1996 [18] et se classe dans la première catégorie (raffinement continu). La méthode de simplification utilisée (permettant d'obtenir une version grossière du maillage) est la contraction d'arête illustrée par le schéma ci-dessous. FIG. 5 – Les opérateurs de contraction et d'expansion d'arête. L'opérateur d'expansion d'arête est utilisé pour raffiner le maillage. Les positions des sommets vs et vt sont alors prédites à partir du sommet vs' . Afin de préserver au mieux la forme et l'apparence du maillage durant cette opération, une stratégie de sélection optimale des arêtes à traiter est utilisée. La procédure de raffinement utilise l'opération inverse (appelée expansion d'arête) et permet de transmettre une séquence de détails utilisée lors du raffinement progressif. La position des sommets vs et vt peut alors être prédite à partir du sommet vs' de la résolution inférieure. Un codage d'Huffman est utilisé pour coder ces informations. Cette méthode propose un coût topologique comparable à celui des bandes de triangles. Parajola et Rossignac ont par la suite proposé une extension de cette approche en considérant un regroupement de ces opérations en ensembles indépendants [27]. Ainsi, à chaque étape de la simplification, environ 30% des sommets sont réduits par contraction, ce qui diminue le coût de la topologie. Des extensions des méthodes mono-résolution ont également été proposées. Elles utilisent généralement elles aussi l'opération de contraction d'arête [1, 38]. Un autre type d'opération a été exploité par Cohen-Or et al. [10]. Ils proposent pour la simplification, de supprimer un ensemble de sommets indépendants (représentés par des points rouges dans le schéma (a) ci-dessous) et de retrianguler les trous (ou patchs) formés. Une méthode permet ensuite d'identifier les patchs où les nouveaux sommets seront insérés en coloriant tous leurs triangles d'une même couleur. Quatre couleurs suffisent pour que les patchs adjacents ne soient pas représentés de la même couleur, comme nous pouvons le voir sur le schéma (b). Une variante à deux couleurs, illustrée par le schéma (c) propose une retriangulation par bandes triangulaires formant un Z. La géométrie est prédite à partir des sommets du patch polygonal. 9 FIG. 6 – La technique de suppression de sommets indépendants. (a) Maillage initial, les sommets à supprimer sont représentés par des points rouges. (b) Technique de 4-coloration des triangles appartenant aux trous polygonaux formés par la suppression des sommets. (c) Technique de 2-coloration : les triangles formés par la retriangulation des trous forment un Z, permettant de n'utiliser que 2 couleurs pour leur identification. L'opération de fusion de sommet est une opération plus générale qui permet de représenter de façon hiérarchique des modèles non nécessairement manifold (soupes de triangles). Cet opérateur permet de fusionner des sommets non adjacents, comme le montre le schéma (a) de la figure ci-dessous. Pour de tels modèles, il est tout de même intéressant de privilégier la contraction d'arête pour les parties localement manifold, qui s'avère beaucoup moins coûteuse. Cet opérateur a été utilisé dans le codeur topologique de Gandoin et Devillers [15]. FIG. 7 – Les opérations de simplification utilisées par l'algorithme de Gandoin et Devillers. (a) L'opérateur de fusion de sommet, permettant de simplifier des surfaces non manifold. (b) L'opérateur de contraction d'arête, plus économique. 2.3.3 La compression géométrique 2.3.3.1 Motivation En partant de l'observation que l'information géométrique représente la partie la plus coûteuse d'un maillage, Gandoin et Devillers ont réalisé un codeur efficace pûrement géométrique [15]. Ce choix part aussi de l'observation que de plus en plus d'applications utilisent des ensembles de points sans information topologique (représentation « basée point ») et que cette dernière peut parfois être retrouvée de manière automatique. Ceci est en particulier vrai pour les nuages de points correspondant à des modèles de terrains. En effet, la triangulation de Delaunay 2D des points du modèle projetés sur un plan permet une reconstruction automatique de sa topologie. A la suite de la triangulation planaire, le modèle de terrain est reconstitué en « remontant » chaque point dans l'espace 3D. Une connectivité est alors implicitement définie par l'algorithme de triangulation qui produit une triangulation unique, sauf dans le cas de configurations dégénérées (où 4 points, définissant 2 triangles, sont cocycliques) pour lesquelles deux configurations sont alors possibles. Dans ce cas et pour d'autres configurations où l'on impose à la topologie de respecter certains contours du modèle (suivre une rivière, une route, ...), une partie de la topologie doit être codée explicitement. En effet, certaines arêtes imposées peuvent ne pas être localement de Delaunay (cela représente moins de 5% des arêtes). Dans ce dernier cas, la triangulation utilisée pour la 10 reconstruction est la triangulation de Delaunay contrainte. Etant donnés un ensemble de points P et d'arêtes A dans le plan, la triangulation de Delaunay contrainte est l'unique triangulation de P contenant A et telle que tout sommet s de P ne respectant pas le critère de Delaunay est « caché » par une contrainte pour au moins une des extrémités du triangle (l'extrémité u dans le schéma ci-dessous). FIG. 8 – Triangle non localement de Delaunay. Le point s appartient au cercle circonscrit au triangle uvw, mais il est « caché » du point u par l'arête vw. Pour les maillages surfaciques qui ne sont pas des modèles de terrains, les auteurs retournent à une méthode plus classique et proposent un codage explicite de la topologie (utilisant les opérateurs décrits dans la partie précédente), puisqu'il n'y a alors pas de manière simple de retrouver la topologie du maillage de départ. 2.3.3.2 Codeur géométrique Le codage de la géométrie repose sur un schéma dont le principe est de construire une boîte englobante autour du nuage de points et de la subdiviser de façon récursive (formation d'un kd-tree). Cette approche, que nous allons expliquer à l'aide du schéma 2D de la figure 9 (extrait de [15]), permet le codage de la géométrie d'un nuage de points en dimension quelconque. FIG. 9 – Technique de codage de l'information géométrique. Les chiffres représentent le nombre de points présents dans la cellule où ils figurent. Le nombre de points total (7 ici) est ensuite codé sur 32 bits. Lors de la première subdivision, on ne code que le nombre de points de la cellule de gauche qui peut ici être compris entre 0 et 7 (8 possibilités). Ce chiffre sera donc codé sur log2(8) bits. Le principe est de commencer par coder le nombre total de points. Ensuite, à chaque subdivision, le nombre de points présents dans la cellule de gauche est codé par codage arithmétique, l'information présente dans la cellule de droite étant implicite. Au fur et à mesure de la subdivision, la localisation des points devient de plus en plus précise jusqu'à ce que chaque cellule ne contienne plus qu'un point. Les subdivisions ne sont alors stoppées que lorsque la précision maximale sur les points est atteinte, c'est-à-dire, jusqu'à ce que les cellules contenant un point atteignent la taille unitaire. Cette technique de codage est très intéressante puisqu'elle permet de faire l'économie de l'information d'ordre sur les points. Elle présente de plus un aspect progressif. En effet il est possible de génèrer, à chaque étape, un unique représentant de l'ensemble des points au centre de chaque cellule non vide, afin de disposer d'une représentation progressive de l'information géométrique. Les performances de l'algorithme se positionnent avantageusement par rapport aux méthodes progressives les plus efficaces, si on ajoute le codage de la topologie. Le surcoût engendré par rapport à l'algorithme de Touma et Gotsman est inférieur à 5%. 11 2.4 La compression de maillages avec pertes Les méthodes de compression avec pertes utilisent généralement un espace transformé afin de projeter le signal dans un domaine fréquentiel dans lequel certaines fréquences peuvent être quantifiées voire éliminées sans que cela soit perceptible par l’oeil. La projection de l’information géométrique dans un espace transformé permet d’exploiter la corrélation spatiale et fréquentielle. Ainsi l’information géométrique se trouve beaucoup plus concentrée que dans le cas d'une simplification séquentielle car cette approche permet de réduire, sans codage, l’entropie du signal. Plusieurs méthodes utilisent des transformées pour la compression de maillages. Certaines proposent une extension de l’analyse de Fourrier classique des signaux 2D (Transformée en Cosinus, Karhunen-Loeve, …) pour traiter les maillages surfaciques [21]. Elles proposent pour cela une généralisation de la transformée sur grille régulière aux maillages surfaciques irréguliers. Une alternative à la décomposition spectrale est l'analyse multirésolution, qui permet de coder les maillages de manière progressive. Le principe est de décomposer par filtrage un signal à l’aide de deux fonctions d'ondelettes de base. Le filtrage passe-bas produit alors un maillage grossier basse résolution, alors que le filtrage passe-haut fournit un ensemble de détails haute fréquence permettant d'affiner progressivement le maillage grossier. Les codeurs d’ondelettes exploitent en général plusieurs niveaux de décomposition. En effet, si on réitère le processus de décomposition sur le signal basse fréquence, on obtient une décomposition hiérarchique par paquet d’ondelettes, correspondant à une représentation multirésolution [28]. Les transformées en ondelettes sont très utilisées dans les domaines de l'imagerie, la vidéo et le son car elles sont bien adaptées aux signaux réguliers. Les maillages étant la plupart du temps irréguliers, des techniques de remaillage sont nécessaires pour produire des maillages semi-réguliers, sur lesquels les méthodes d'analyse multirésolution sont applicables. Les maillages semi-réguliers multirésolution permettent d'obtenir le maillage original à différentes résolutions. Chaque résolution est construite de façon bien particulière où un sommet est généralement ajouté au milieu de chaque arête de la résolution inférieure (subdivision quaternaire). Chaque triangle du maillage grossier est ainsi subdivisé en 4 sous-triangles plusieurs fois de suite jusqu'à l'obtension d'un maillage très fin et proche du maillage original. Des techniques de subdivision ternaire ou adaptative sont plus rarement utilisées, le but de cette étape étant de rendre implicite le maximum d'information topologique. Le maillage le plus grossier est obtenu à partir du maillage initial, par une technique de simplification séquentielle, qui, associée à une méthode de raffinement, tente de réduire au maximum l'information nécessaire au codage du maillage semi-régulier multirésolution. C'est ce que proposent le remailleur MAPS (Multiresolution Adaptative Parameterization of Surfaces) [24] et le remailleur normal [17]. A partir de ces maillages semi-réguliers, les méthodes d'analyse multirésolution repositionnent les sommets, afin de se rapprocher au maximum du maillage original et ceci pour chaque résolution. Ces repositionnements correspondent aux coefficients d'ondelette correspondant à la seule information transmise pour le raffinement du maillage grossier (sous réserve de connaître la technique de subdivision utilisée). La quantification permet de réduire nettement le nombre de bits utilisé pour leur codage, surtout pour les coefficients haute fréquence. Un codage entropique est ensuite appliqué ainsi que pour le codage du maillage grossier. Nous n'avons donné que le principe de l'analyse multirésolution, étant donné que ce type de méthode s'éloigne de l'approche considérée par notre algorithme, mais un grand nombre d'algorithmes de compression utilisent une transformée en ondelette associée à une technique de remaillage [22, 23, 28]. 12 3 Les algorithmes de reconstruction 3D La reconstruction de la surface d’objets à partir d'un nuage de points est un domaine de recherche actif pour lequel plusieurs approches ont été considérées. Cette technique consiste généralement à retrouver une approximation linéaire par morceaux de la surface inconnue. 3.1 La reconstruction par approximation Certaines méthodes réalisent cette reconstruction par approximation de la fonction de distance signée séparant tout point de l'espace de la surface cherchée [11, 19]. Cette fonction de distance permet une définition implicite de la surface qui peut être polygonalisée en utilisant un algorithme de type marching-cube. Curless et Levoy [11] convertissent pour cela des « range images » (obtenues par un range scanner) en fonctions de distance et les combinent en une unique fonction de distance globale. Leur algorithme s'avère très efficace en temps et en mémoire et permet de reconstruire des modèles très détaillés contenant plus de 2,6 millions de triangles. Il a notamment été utilisé dans le projet de numérisation des oeuvres de Michel Ange [25]. 3.2 La reconstruction par interpolation La géométrie algorithmique a également apporté des contributions importantes au problème de la reconstruction 3D. Les méthodes proposées réalisent généralement une interpolation des échantillons. Il existe plusieurs méthodes de reconstruction de maillages basées sur la triangulation de Delaunay 3D et le diagramme de Voronoi [8]. Pour une description de ces méthodes, le lecteur pourra se rapporter à l'article de synthèse proposé par Cazals et Giesen [7]. Etant donné un ensemble E de points de l'espace, une triangulation de E est un ensemble de k-simplexes dont les sommets sont les points de E et qui vérifie les propriétés suivantes : • l'intersection de 2 k-simplexes est soit vide, soit une face commune aux 2 k-simplexes • les k-simplexes pavent l'enveloppe convexe de E La triangulation de Delaunay 3D est la triangulation composée de tétraèdres dont la sphère circonscrite est vide de tout point. La figure ci-dessous présente en 2D une triangulation quelconque (a) et la triangulation de Delaunay (b) d'un même ensemble de points. FIG. 10 – Différentes triangulations d'un même ensemble de points. (a) Triangulation quelconque. (b) Triangulation de Delaunay ; on remarque que pour cette dernière, tous les cercles circonscrits aux triangles sont vides de tous points. On appelle diagramme de Voronoï de E, le partitionnement de l'espace en cellules regroupant les points ayant le même plus proche voisin dans E. La figure ci-dessous présente un exemple de diagramme de Voronoï (en bleu). 13 FIG. 11 – Diagramme de Voronoï d'un ensemble de points. Ce diagramme (en bleu) est la représentation duale de la triangulation de Delaunay (en vert). Parmi les méthodes de reconstruction basées sur la triangulation de Delaunay, on peut citer le concept d'alpha-formes [13], l'algorithme de sculpture de Boissonnat [5], le crust [2], la convection géométrique [9] ou également la reconstruction par interpolation naturelle [6] et le « power crust » [3] qui utilise une variante du diagramme de Voronoï, le « power diagram ». Certaines de ces méthodes de reconstruction donnent une condition nécessaire et suffisante sur l'échantillonnage de l'objet pour garantir une reconstruction valide. En pratique, ces critères ne sont pas toujours satisfaits (présence d'arêtes vives, de parties minces, ...). Lorsque l'on s'éloigne des conditions optimales d'échantillonnage, les algorithmes de reconstruction peuvent se comporter différemment. Il n'est ainsi plus possible de compter sur eux pour retrouver la topologie de n'importe quelle surface. Les méthodes décrites précédemment peuvent toutefois constituer une aide précieuse pour la compression de maillages. En effet, en plus du nuage de points, il est possible d'ajouter des informations à l'algorithme afin de le guider vers le maillage à compresser. Ainsi l'information topologique se réduit à ces informations, vu que le reste de la connectivité peut être reconstruit automatiquement par l'algorithme choisi. La contribution de notre travail consiste à étudier l'apport de la reconstruction 3D pour le codage de la topologie de maillages surfaciques, la géométrie étant codée par un codeur géométrique du type de celui de Gandoin et Devillers [15]. Pour cela, il faut envisager de coder explicitement une petite partie de l'information topologique. Nous avons choisi de considérer cette approche en partant d'une méthode de reconstruction 3D appelée « convection géométrique » [9]. Une telle approche pourrait également être mise en oeuvre avec un autre algorithme de reconstruction 3D. 3.2.1 L'algorithme de « convection géométrique » L'algorithme de « convection géométrique » s'inspire de la méthode de reconstruction de surface de Zhao et al [43] dont la mise en oeuvre repose sur les level-set. Le principe de leur méthode est de soumettre une surface à des forces pour la faire évoluer, par déformation, vers le modèle original. Pour cela, les auteurs calculent une fonction de distance (ou d'énergie) entre le nuage de points d'entrée et une surface donnée (qui englobe le nuage). L'objectif est de minimiser la fonction de distance pour faire évoluer la surface jusqu'à stabilisation, représentant une bonne approximation du modèle original. Les auteurs commencent par réaliser la convection de la surface dans le gradient de la fonction distance. Pour cela, un schéma numérique basé sur une grille régulière (construite à partir d'une boîte englobant le nuage de points) est utilisé. L'algorithme de « convection géométrique » propose de reprendre le modèle de convection décrit précédemment sans l'utilisation de grille régulière. Pour cela, l'auteur prouve qu'en partant d'une surface englobant le nuage de points, le processus de convection converge vers une « pseudo-surface » fermée, composée de demifacettes orientées comprises dans la triangulation de Delaunay 3D des points et offrant une propriété particulière. 14 Cette dernière est appelée propriété de Gabriel. Etant donnés 3 points P1, P2 et P3, la demi-facette orientée représente le triangle composé des points P1, P2 et P3 orienté selon la direction de . Une facette peut être vue comme le regroupement de deux demi-facettes. Etant donnée une facette f, la sphère diamétrale de f (plus petite sphère comprenant f) est l'union de deux demi-sphères associées à chacune des demi-facettes composant f. La propriété de Gabriel est alors respectée pour une demi-facette, si sa demi-sphère associée est vide de tout autre point. La figure ci-dessous représente une « pseudo-surface » en 2D. FIG. 12 – Exemple d'une pseudo-surface orientée fermée en 2D. Chaque demi-facette est orientée du côté du trait rouge qui lui est associé. La demi-facette en pointillés ne fait pas partie de la pseudo-surface finale, car elle ne respecte pas la propriété de Gabriel. Le terme « pseudo-surface » désigne une surface orientée et fermée dont certaines parties peuvent localement partager une position géométrique commune. Les « pseudo-surfaces » permettent de représenter de façon combinatoire et manifold les surfaces fermées mais aussi les surfaces à bords et/ou non manifold, comme nous le montre le schéma ci-dessous (en 2D). Un maillages est dit manifold (ou variété) si tout sommet est le centre d'un disque topologique, autrement dit possède un voisinage homéomorphe à un disque. FIG. 13 – Exemple de pseudo-surface s'appuyant sur une surface 2D non manifold. On remarque que les cinq sommets du milieu s'appuient sur le même point géométrique. L'auteur propose une exploitation de ces résultats théoriques à travers la proposition d'un nouvel algorithme géométrique de reconstruction 3D basé sur la triangulation de Delaunay 3D des points. La pseudosurface utilisée au début du processus de convection est alors l'enveloppe convexe des points (comprise dans la triangulation de Delaunay 3D). L'évolution de cette surface se fait ensuite à travers les tétraèdres intérieurs de la triangulation. A chaque étape de l'évolution, on maintient une pseudo-surface toujours comprise dans la triangulation de Delaunay, jusqu'à ce que toutes les demi-facettes satisfassent le critère de Gabriel. 15 La pseudo-surface orientée vers l'intérieur évolue en subissant des opérations géométriques et topologiques. Si la propriété de Gabriel n'est pas respectée par une demi-facette, on obtient : • Soit « l'ouverture » de celle-ci afin d'en découvrir trois nouvelles qui se rapprocheront plus du modèle original (ce principe est illustré par la figure 12 en 2D où l'arête en pointillés s'ouvre vers deux nouvelles). • Soit l'effondrement de deux demi-facettes si la demi-facette couplée à la facette à « ouvrir » (partageant la même géométrie mais orientée différemment) fait partie de la pseudo-surface courante. Dans ce cas, ces deux demifacettes doivent être retirées de la pseudo-surface, qui « s'évanouit » au niveau de leur auto-intersection. Cette opération provoque un effondrement local des deux demi-facettes couplées et peut entraîner une modification topologique de la pseudo-surface. Huit cas particuliers sont considérés en fonction de la configuration des facettes du voisinage. Le fait de considérer une pseudo-surface orientée dans l'algorithme permet la reconstruction de surfaces à bords (non fermées) ou contenant des parties minces (correspondant à des demi-facettes couplées). Lors de la reconstruction, il arrive qu'on obtienne des parties minces indésirables (création d'ailerons accrochés au maillage). Pour les surfaces fermées (volumes), il n'est pas difficile de les retirer alors que pour les surfaces à bords, il faut les distinguer de celles qui font partie de la surface originale. Pour cela, on poursuit l'algorithme de convection en 2D sur les parties minces considérées. L'algorithme de « convection géométrique » a été étendu pour éviter que le processus de convection ne soit stoppé par la présence de cavités importantes (poches). Cette extension ne s'applique qu'aux surfaces suffisamment bien échantillonnées autour de la poche. Le principe consiste à comparer la taille de la demi-facette bloquante avec la densité des points au voisinage de la facette. Ainsi le processus de convection sera poursuivi à l'intérieur de la poche si la taille de la demi-facette est grande devant la densité locale des sommets composant son voisinage. FIG. 14 – Blocage du processus de convection par une poche. Ces poches peuvent être détectées si l'objet est suffisamment bien échantillonné. La triangulation 3D de points échantillonnés sur une surface peut faire apparaître des slivers (tétraèdres dont les 4 sommets voisins sur la surface sont quasiment coplanaires). Lors de la convection, si ce sliver est atteint de part et d'autre d'une surface contenant des parties minces, il est possible de faire apparaître un trou (poignée). On parle alors de bruit topologique. FIG. 15 – Exemple de surface mal reconstruite par l'algorithme de convection. Pour une telle surface, l'algorithme créé un trou, car le triangle central (faisant partie du sliver) est atteint par le haut et par le bas de la surface lors de la convection. 16 4 Notre contribution 4.1 Principe général de notre algorithme Nous avons choisi d'utiliser l'algorithme de reconstruction 3D expliqué ci-dessus et de l'exploiter afin d'obtenir d'une part un codeur de la topologie d'un maillage construit à partir de la géométrie et d'autre part une variante de ce codeur utilisant une transmission graduelle et simultannée de la géométrie. Nous venons de voir que l'algorithme de « convection géométrique » a été étendu pour traiter certaines particularités de surfaces (poches) et que d'autres spécificités ne permettent pas une reconstruction exacte (mauvais échantillonnage, slivers, ...). Dans le cadre de la compression de maillages, il est possible de guider l'algorithme pour tenir compte de ces particularités, puisqu'on dispose du maillage original lors du codage de l'information. Il suffit alors de ne transmettre que des codes permettant au décodeur d'identifier ces spécificités afin de produire une reconstruction fidèle du maillage original. L'entropie correspond alors à l'ensemble de ces informations additionnelles liées au nombre de poches, de cas entraînant du bruit topologique (assez rare) et à l'écart entre la distribution des sommets et une distribution assurant la validité de l'algorithme de reconstruction. Deux codeurs peuvent être construits sur ce principe, le premier déléguant entièrement le codage de la géométrie à un algorithme du type de celui de Gandoin et Devillers [15], le second s'occupant également du codage de l'information géométrique de certains points en exploitant le principe de prédiction géométrique présenté dans la partie 2.3.1. Dans les deux cas, le codeur et le décodeur construisent tous les deux une triangulation de Delaunay 3D sur laquelle l'algorithme de convection est appliqué. Pour qu'ils aboutissent au même maillage (le maillage initial), il faut qu'ils disposent d'informations équivalentes, même si elles sont de nature différente. Dans le premier codeur, l'information topologique est déduite de la géométrie mais est codée indépendamment de cette dernière. Le codeur et le décodeur ont en effet besoin de la position géométrique de l'ensemble des points pour construire la triangulation de Delaunay 3D sur laquelle l'algorithme de convection s'applique. Pendant le processus de convection, le codeur, qui dispose du maillage initial M, doit transmettre des codes spécifiques si l'algorithme de convection n'est pas capable de converger vers M. Le décodeur, qui ne dispose pas de M, utilise alors ces codes transmis par le codeur pour détourner l'algorithme de convection et aboutir à M. Dans la seconde version, seuls les échantillons situés sur l'enveloppe convexe du nuage de points sont codés indépendamment de l'information topologique, les autres points étant codés au fur et à mesure de l'évolution du processus de convection. Le décodeur commence alors par construire la triangulation de Delaunay des points de l'enveloppe convexe et l'enrichit en suivant l'évolution du processus de convection. La position des points intérieurs peut ainsi être prédite à partir de l'évolution locale de la convection (afin de réduire l'information géométrique). Des codes additionnels sont toujours utilisés pour diriger l'algorithme et le faire converger vers le maillage initial. Cette version se rapproche des méthodes mono-résolution qui représentent les maillages de façon linéaire, mais au lieu de découvrir à chaque étape un nouveau sommet sur la surface, le nouveau sommet découvert est situé dans la triangulation de Delaunay 3D. 4.2 Description de l'algorithme Les maillages considérés par notre algorithme sont des maillages surfaciques triangulaires non nécessairement manifold ni fermés et représentés de façon naïve, par exemple par des fichiers OFF. Ces maillages peuvent contenir des informations additionnelles (couleurs, texture, normale, ... ). Dans le cadre de ce travail, nous avons considéré des maillages dont les facettes sont comprises dans la triangulation de Delaunay 3D des échantillons. 4.2.1 Première approche : codage de la topologie par rapport à la géométrie 4.2.1.1 Principes du codeur et du décodeur La première opération consiste à construire la triangulation de Delaunay 3D s'articulant sur l'ensemble des points du maillage d'entrée. Ensuite, si le maillage est compris dans la triangulation de Delaunay 3D, les demi- 17 facettes de la triangulation qui correspondent à des facettes du maillage sont marquées. Ce marquage servira ensuite de repère à l'algorithme qui fera évoluer la pseudo-surface jusqu'à ce qu'elle vienne s'appuyer entièrement sur les demi-facettes marquées correspondant au maillage à coder. L'algorithme de convection peut alors être lancé depuis l'ensemble des demi-facettes de l'enveloppe convexe. Pendant l'algorithme, la pseudo-surface évolue et possède à chaque instant un état courant. Au moment où on tente de poursuivre la convection sur une demi-facette f, plusieurs cas peuvent se présenter. 1 La demi-facette couplée à f n'appartient pas à la pseudo-surface courante et : 1.1 la demi-sphère associée à f contient un échantillon. Dans ce cas, l'algorithme classique de convection voudrait ouvrir cette facette pour découvrir ce nouveau point, mais pour notre cas particulier, nous avons deux possibilités : 1.1.1 f n'est pas marquée comme faisant partie du maillage original. On laisse alors l'agorithme classer f dans les facettes destinées à être ouvertes, c'est-à-dire celles sur lesquelles va se poursuivre la convection. 1.1.2 f est marquée comme faisant partie du maillage original et même si l'algorithme classique veut l'ouvrir, il faut la « retenir » malgré le non respect du critère géométrique de Gabriel. Par le terme « retenir », nous entendons que f figurera dans la pseudo-surface finale et que la convection sera localement bloquée au niveau de cette facette. Un code devra donc être transmis par le codeur, qui sera lu par le décodeur et lui permettra à son tour de retenir la facette locale malgré la géométrie. Ce cas de figure sera référencé par la suite par le sigle RMG (signifiant que f est Retenue Malgré la Géométrie). 1.2 la demi-sphère associée à f ne contient pas d'échantillon. Dans ce cas, l'algorithme classique considère que cette facette fera probablement partie du résultat final sauf s'il détecte la présence d'une poche derrière f ou si la facette couplée à f engendre à un moment donné une auto-intersection. 1.2.1 f est marquée comme faisant partie du maillage original. La décision prise par la convection, consistant à retenir la facette est alors cohérente. 1.2.2 f n'est pas marquée comme faisant partie du maillage original et même si l'algorithme classique veut la retenir, il faut l'ouvrir malgré le respect du critère géométrique de Gabriel pour que la convection puisse continuer dans cette direction. Ce cas de figure, qui sera utilisé en présence de poches, sera référencé par la suite par le sigle OMG (signifiant que f est Ouverte Malgré la Géométrie). 2 La demi-facette f' couplée à f appartient à la pseudo-surface courante et : 2.1 f' est destinée à être ouverte. Dans ce cas, on laisse faire la convection classique qui provoque un effondrement local des deux demi-facettes couplées avec changement possible de la topologie. La figure 16 montre une des 8 configurations 3D correspondant à ce cas. Dans cet exemple, les sommets des demifacettes coupleés sont associés aux mêmes points géométriques, ainsi, l'effondrement des deux demi-facettes provoque la création d'un trou et d'un changement de la topologie de la surface. 2.2 f' a été retenue auparavant par l'algorithme. Il faut alors retenir également f, ce qui provoque la création d'une partie mince. Comme nous l'avons signalé précédemment, dans l'algorithme de convection classique les parties minces doivent à leur tour être traitées par une convection 2D qui retirera celles considérées indésirables. Dans notre algorithme, il n'est pas nécessaire de conserver ce traitement puisqu'on remarque que si f' a été retenue, c'est forcément parce qu'elle s'appuie sur une facette du maillage initial. FIG 16 – Effondrement de deux demi-facettes couplées en 3D. Une des 8 configurations possibles où l'algorithme classique provoque l'effondrement de deux demi-facettes couplées. Pour cette configuration, on remarque la création d'un trou. 18 La figure suivante, illustre le même processus en 2D. FIG 17 – Effondrement de deux demi-facettes couplées en 2D. L'évolution du processus de convection permettant d'aboutir à cette configuration est illustré par des flèches. Les tirets associés à chaque demi-arête correspondent toujours à leur orientation. Le tableau suivant présente les proportions de facettes Retenues ou Ouvertes Malgré la géométrie (appelées RMG et OMG). Dans tous les autres cas, la propriété géométrique utilisée par l'algorithme de convection permet de réaliser le traitement adéquat. Ces derniers sont désignées par le sigle GD (signifiant que pour les facettes, la Géométrie Domine) et se produisent dans 85% des cas en moyenne. Ainsi, pour seulement 15% des facettes en moyenne, un code additionnel doit être transmis. On remarque que les modèles utilisés ne font pas apparaître de bruit topologique (absence de facettes RMG). Modèle / Statistiques Nefertiti Cube Bunny non volumique Bunny volumique Max Planck Moyenne % de facettes RMG (cas 1.1.2) 0% 0% 0% 0% 0% 0% % de facettes OMG (cas 1.2.2) 13,5% 17,8% 14,7% 14,1% 14,1% 14,84% % de facettes GD (autres cas) 86,5% 82,2% 85,3% 85,9% 85,9% 85,16% TAB. 1 – Statistiques sur les types de facettes traitées. Les deux premières lignes présentent les pourcentages des facettes pour lesquelles un traitement particulier doit être appliqué (le traitement correspondant est expliqué à la page 18). La dernière ligne recense toutes les autres facettes pour lesquelles l'algorithme de convection permet de choisir le traitement approprié. Un aperçu des modèles utilisés est disponible en annexe 1. Le processus de codage des demi-facettes, décrit précédemment, se poursuit tant qu'il reste des demifacettes de la pseudo-surface courante destinées à être ouvertes, c'est-à-dire ne s'appuyant pas sur une facette du maillage. Durant le processus, chaque demi-facette g destinée à être ouverte cède sa place à 3 autres demi-facettes qui la remplaceront dans la pseudo-surface courante. Les 3 demi-facettes en question sont celles qui s'appuient sur g. Elles seront par la suite appelées facettes « cachées », puisqu'elles sont en quelque sorte cachées par g avant son ouverture. Le schéma ci-dessous présente ce processus en 2D. 19 FIG 17 – Processus d'évolution d'une pseudo-surface. Les arêtes du maillages 2D sont représentées en pointillés bleus et la pseudo-surface courante par la ligne noire continue. Les traits épais rouge montrent l'évolution de la pseudo-surface là où des arêtes sont destinées à être ouvertes. Bien sûr, les maillages idéaux sont ceux que l'algorithme de convection géométrique (sans extension) reconstruit fidèlement, il n'est alors nécessaire de transmettre que l'information géométrique, l'algorithme se chargeant de « construire » l'information topologique. Mais pour la plupart des maillages (contenant des poches et/ou mal échantillonnés), quelques codes additionnels doivent être transmis. Pour guider l'algorithme vers le maillage original, lorsque les critères géométriques ne sont pas suffisants, les facettes ayant besoin d'un traitement particulier (OMG, RMG) peuvent être identifiées par un numéro corrrespondant à l'ordre dans lequel elles sont rencontrées, accompagné du type de traitement à effectuer. Ainsi le décodeur est en mesure de les identifier et de les traiter correctement. Une solution plus efficace consiste à maintenir deux compteurs définis de la façon suivante : • • Un compteur des facettes que l'algorithme de convection voudrait retenir (car elles respectent la propriété géométrique). On ne transmet alors au décodeur que les numéros (ou indices) des facettes Ouvertes Malgré la Géométrie (OMG). Un compteur des facettes que l'algorithme de convection voudrait ouvrir (car elles ne respectent pas la propriété géométrique). On ne transmet alors au décodeur que les numéros des facettes Retenues Malgré la Géométrie (RMG). Cette méthode permet d'obtenir des nombres moins importants et ne nécessite pas de coder le type de traitement à effectuer, puisqu'on dispose d'un compteur par traitement. 4.2.1.2 Codage des informations On se concentre ici sur le codage des informations additionnelles, puisque l'information géométrique (coordonnées absolues de tous les points) peut être codée par un algorithme du type de celui de Gandoin et Devillers [15]. En effet, il n'est pas nécessaire de conserver l'information d'ordre sur les points puisque la triangulation de Delaunay est unique quel que soit l'ordre d'insertion des points. On remarque que les indices des facettes pour lesquelles un traitement particulier doit être considéré sont transmis de façon croissante. Il est alors plus économique de transmettre l'écart entre chaque indice et l'indice qui le précède (en considérant que celui qui précède le premier indice est 0). De plus, une proportion non négligeable d'indices sont consécutifs (cf. tableau 2). Pour les plages d'indices consécutifs de taille supérieure à 2, plutôt que de coder plusieurs écarts valant 1, il est généralement plus économique de coder l'écart entre le premier et le dernier indice de la plage (l'étude dans le cas le pire le confirme pour la majorité des modèles testés). Ces deux possibilités sont illustrées par les schémas 18 et 19. 20 Modèle / Statistiques Nefertiti Cube Bunny non volumique Bunny volumique Max Planck Moyenne Nombre de plages 112 8 076 14 732 11 642 7 723 8 457 Nombre de plages de 2 indices consécutifs 40 2 977 6 781 6 522 3 931 4 050,2 69,0% 68,4% 67,8% 38,4% 70,3% 62,78% Pourcentage consécutifs d'indices TAB. 2 – Statistiques sur les plages d'indices consécutifs obtenues par l'approche n°1, pour différents modèles. Un aperçu des modèles utilisés est disponible en annexe 1. FIG 18 – Codage d'une séquence d'indices en utilisant l'écarts avec l'indice précédent. Le premier indice est codé par rapport à 0. FIG 19 – Codage d'une séquence d'indices par deux chaînes différentes. Les deux séquences doivent être codées indépendamment. On remarque alors, pour la majorité des modèles que ce codage est plus économique que celui illustré par la figure 18. Pour s'y retrouver, il faut alors différencier les écarts entre les indices simples et les écarts entre les plages d'indices. Ces écarts peuvent ensuite être codés par codage d'Huffman ou arithmétique, car cette fois-ci l'ordre dans lequel ils sont transmis est important. 4.2.2 Variante : codage graduel de la géométrie Cette variante propose une vision différente de la première. En effet, plutôt que de transmettre tous les points de façon absolue, il est possible de ne transmettre d'abord que les points appartenant à l'enveloppe convexe et de découvrir les autres points au fur et à mesure du processus de convection. Cela permet de les coder par prédiction de position, à partir de l'état courant de la convection. Le codeur construit alors, comme dans l'approche précédente, la triangulation de l'ensemble des points. De son côté, le décodeur construit d'abord la triangulation s'appuyant uniquement sur les points de l'enveloppe convexe. La triangulation va ensuite évoluer dynamiquement au fur et à mesure que le décodeur découvre de nouveaux points. L'algorithme de convection classique est toujours utilisé et nous allons voir par la suite que les codes additionnels à transmettre au décodeur seront différents. 4.2.2.1 Principes du codeur et du décodeur Il est capital de ne pas oublier que le décodeur ne dispose, au départ, que des points de l'enveloppe convexe. Il est ainsi nécessaire que le codeur considère de façon différente les points « connus » du décodeur à l'instant t, des autres points (non encore découverts), c'est pourquoi ces deux types de points sont marqués différemment. Ceci permet alors de transmettre au décodeur un code additionnel adapté à la situation. En effet, cette technique nécessite d'enrichir l'éventail des codes possibles pour prendre en compte un plus grand nombre de cas, 21 mais elle permet en contrepartie d'obtenir un gain non négligeable sur le codage de la géométrie (par prédiction différentielle). Nous avons considéré deux façons différentes de guider l'algorithme de convection, pour les cas où la géométrie ne permet pas de déterminer la bonne action à réaliser. 1 Codage des facettes : utilisation d'un code identifiant l'action à réaliser pour chaque facette f traitée. Les différents cas possibles sont : 1.1 la géométrie des points déjà transmis permet de réaliser une action cohérente compte tenu du maillage initial. L'algorithme de convection classique permet alors de faire avancer le processus correctement, ainsi, il n'est pas nécessaire de transmettre d'information additionnelle. Ce traitement est réalisé dans les cas numérotés 1.1.1, 1.2.1, 2.1 et 2.2 dans l'approche n°1 (page 18). Pour les autres cas, on considère donc que la demi-facette couplée à f n'appartient pas à la pseudo-surface courante, puisque les cas où la demi-facette couplée à f appartient à la pseudo-surface courante sont traités par le cas précédent. D'autres différences apparaissent malgré tout, car soit : 1.2 la demi-sphère associée à f contient un échantillon e dans la triangulation construite par le codeur et : 1.2.1 dans celle construite par le décodeur. De plus, f est marquée comme faisant partie du maillage original. Ainsi, même si l'algorithme classique veut ouvrir f, il faut la « retenir » malgré le non respect du critère géométrique de Gabriel. Ceci est équivalent au cas RMG de l'approche n°1. 1.2.2 la demi-sphère associée à f ne contient pas d'échantillon dans la triangulation construite par le décodeur. Ce cas de figure se produit lorsque e n'a pas encore été découvert par le décodeur. Ainsi l'algorithme de convection classique lancé sur le codeur voudrait ouvrir cette facette, mais le même algorithme lancé sur le décodeur voudrait la retenir, ce qui est incohérent. Il faut donc que le codeur transmette un code spécial pour que le décodeur identifie ce cas, référencé par le sigle OPD (signifiant que f est Ouverte vers un Point non Découvert). Le point e est également transmis au décodeur en utilisant une technique de prédiction de position (expliquée en détail à la partie 4.2.2.2). 1.3 la demi-sphère associée à f ne contient pas d'échantillon dans les triangulations construites par le codeur et le décodeur et f n'est pas marquée comme faisant partie du maillage original. Ainsi, même si l'algorithme classique veut la retenir, il faut l'ouvrir malgré le respect du critère géométrique de Gabriel. Ce cas de figure correspond au cas OMG de l'approche n°1. Pour cette nouvelle approche, il y a deux cas possibles à identifier : 1.3.1 le codeur impose d'ouvrir f vers un point que le décodeur aura découvert lorsqu'il en sera à la même étape, ce point sera alors connu du décodeur. 1.3.2 le codeur impose d'ouvrir f vers un point que le décodeur n'aura pas encore découvert lorsqu'il en sera à la même étape. Ce point est alors également transmis par prédiction de position. Le tableau suivant présente les proportions de ces différents types de codes associés aux facettes traitées. Celles pour lesquelles la géométrie permet de réaliser la bonne action (cas 1.1 ci-dessus) sont désignées par le sigle GD (signifiant que pour ces facettes, la Géométrie Domine). Modèle / Statistiques Nefertiti Cube Bunny non volumique Bunny volumique Max Planck Moyenne 82,8% 78,1% 80,8% 77,4% 82,0% 80,21% % de facettes RMG 0% 0% 0% 0% 0% 0% % de facettes OPD 3,70% 4,06 % 4,51% 8,51% 3,85% 4,94% % de facettes OMG vers 1 point connu (cas 1.3.1) 13,2% 16,7% 14,2% 13,3% 13,8% 14,22% % de facettes OMG vers 1 nouveau point (cas 1.3.2) 0,30% 1,14% 0,49% 0,79% 0,35% 0,63% % de facettes GD (cas 1.1) TAB. 3 – Proportion des différents codes associés aux facettes traitées. Un aperçu des modèles utilisés est disponible en annexe 1. 22 On remarque que la propriété géométrique permet, pour cette variante, de réaliser une action cohérente dans 80% des cas en moyenne, ce qui est légèrement inférieur aux résultats obtenus pour l'approche n°1. Ceci permet tout de même qu'une majorité de la topologie soit reconstruite automatiquement. En contrepartie, l'approche n°1 n'utilise pas de prédiction pour le codage de la position des points. 2 Codage d'indices : les indices des facettes devant subir un traitement particulier (OMG, RMG et OPD) sont transmis de la même façon que dans l'approche n°1, mais en considérant les cas énoncés à la page précédente. La même solution, consistant à maintenir les deux compteurs suivants est adoptée : 2.1 Un compteur des facettes que l'algorithme de convection voudrait ouvrir (car elles ne respectent pas la propriété géométrique). On transmet alors au décodeur : 2.1.1 les numéros (ou indices) des facettes Retenues Malgré la Géométrie (RMG). 2.1.2 les numéros des facettes Ouvertes vers un Point non Découvert (OPD). Pour que le codeur puisse les identifier, il est nécessaire qu'il construise deux triangulations différentes : une s'appuyant sur tous les points et l'autre évoluant en fonction du nombre de points découverts par le décodeur (initialisée avec l'enveloppe convexe). Les deux pseudo-surfaces s'appuyant sur ces triangulations évoluent en même temps (les mêmes facettes sont traitées au même moment). Ce traitement implique un temps d'exécution plus important. 2.2 Un compteur des facettes que l'algorithme de convection voudrait retenir (car elles respectent la propriété géométrique). On ne transmet alors au décodeur que les numéros des facettes Ouvertes Malgré la Géométrie (OMG). Un code additionnel permet alors au décodeur de savoir si ces facettes s'ouvrent vers un point qu'il a déjà découvert ou non. Pour cette méthode utilisant un codage d'indices, nous avons remarqué, comme pour l'approche n°1 qu'il est plus économique de coder les écarts entre les indices. De plus, un plus grand nombre d'indices sont consécutifs, comparé à l'approche n°1 (cf. tableau 4). L'utilisation du même type de codage est donc justifiée. Modèle / Statistiques Nefertiti Cube Bunny non volumique Bunny volumique Max Planck Moyenne Nombre de plages 143 10 245 18 251 14 978 9 833 10 690 Nombre de plages de 2 indices consécutifs 69 4 934 10 779 10 371 6 107 6 452 Pourcentage d'indices consécutifs 74,3% 76,1% 75,9% 41,3% 77,7% 69,6% TAB. 4 – Statistiques sur les plages d'indices consécutifs obtenues par la variante, pour différents modèles. Un aperçu des modèles utilisés est disponible en annexe 1. 4.2.2.2 Principes de la prédiction utilisée Il est difficile d'exploiter les techniques de prédictions utilisées habituellement par les algorithmes de compression de maillages surfaciques (prédiction linéaire directe, parallélogramme ou non linéaire), puisque notre algorithme se base sur une triangulation tridimensionnelle. Les méthodes de compression de maillages tétraèdriques sont rares et ne procèdent pas toujours à une compression de la géométrie [34, 35]. Un des algorithmes réalisant une telle compression est celui de Gumhold et al. [16]. Il procède par conquête sur les tétraèdres en faisant croître une région constituée de tétraèdres déjà codés. La frontière de cette région est une surface triangulée dont les faces sont stockées dans une file d'attente. A chaque étape, une face est retirée de la file et devient le « portail » à partir duquel un nouveau tétraèdre est découvert. Cet algorithme utilise un codage différentiel pour la compression de la géométrie (vecteur différence entre le centre du triangle portail et le nouveau sommet). La prédiction différentielle nous paraît donc la méthode la plus adéquate. Nous avons remarqué que lorsqu'une facette f s'ouvre géométriquement vers un point, ce dernier se trouve généralement proche d'un des sommets de la facette. Il est possible d'exploiter cette observation afin de transmettre le moins d'information possible. En effet, au lieu de transmettre au décodeur les coordonnées absolues des points découverts durant le processus de convection, il est possible de coder le vecteur différence entre le point p vers lequel doit s'ouvrir la facette et le point de la facette le plus proche de p. Vu leur proximité, on peut espérer que les coordonnées de ce vecteur soient beaucoup plus petites et regroupées que les coordonnées absolues. 23 Le codage des coordonnées de ce vecteur est généralement insuffisant pour que le décodeur puisse retrouver le point p. En effet, il est également nécessaire de lui transmettre un code additionnel afin qu'il sache à quel sommet de la facette ce vecteur se rattache. Comme il y a trois sommets candidats, un codage naïf impose d'utiliser log2(3) bits pour coder cette information. Or, dans certains cas, lorsque le point à coder est situé dans la demi-sphère associée à la facette f, il est possible de retrouver ce sommet d'attache sans même l'aide d'un code. Le schéma (a) de la figure 20, nous montre qu'aucun code additionnel n'est nécessaire en 2D. En effet, pour tout point C inclus dans le demi-disque circonscrit à une arête AB, le vecteur différence AC reporté à partir du point B n'est jamais situé dans le demi-disque. Ceci permet alors de déterminer implicitement à quel point rattacher le vecteur différence. La généralisation en 3D ne fonctionne pas toujours, même si le schéma (b) illustre un cas favorable où aucun code additionnel n'est nécessaire. Les cas défavorables correspondent à des triangles moins réguliers où les points sont plus proches les uns des autres. Il y a plusieurs cas où il est possible de rattacher le vecteur à deux des trois sommets, dans ce cas, illustré par le schéma (c), on utilise 1 bit additionnel. Les cas totalement défavorables, illustrés par le schéma (d), sont codés sur log2(3) bits. FIG 20 – Différentes configurations rencontrées lors de la prédiction différentielle. (a) en 2D, une seule configuration est possible si le point à coder est inclus dans le demi-disque associé à AB. (b, c, d) En 3D, le report du vecteur différence AD à partir des sommets B et C peut être inclus ou non dans la demi-sphère associée au triangle ABC, impliquant différentes configurations possibles. Ces considérations ne sont utilisées que pour des ouvertures géométriques. En effet, pour une facette f Ouverte Malgré la Géométrie (OMG), le point vers lequel f s'ouvre n'est alors pas inclus dans la demi-sphère associée à f. Le pourcentage des facettes OMG n'étant néanmoins que de 0,63% en moyenne, il n'est pas très pénalisant d'utiliser un code additionnel sur log2(3) bits. Le tableau suivant présente les proportions de prédictions où on utilise un code additionnel sur log2(3), 1 ou 0 bits. Ces statistiques s'appliquent sur l'ensemble des points prédits et révèlent que cette considération est intéressante, car environ 58% des codes additionnels sont stockés au plus sur 1 bit. Modèle / Statistiques Nefertiti Cube Bunny non volumique Bunny volumique Max Planck Moyenne % de codes sur log2(3) bits 33,5 56,5 41,7 40,4 35,6 41,54 % de codes sur 1 bit 39,4 29,1 37,5 38,4 41,4 37,16 % de codes sur 0 bit 27,1 14,4 20,8 21,2 23,0 21,3 TAB. 5 – Statistiques sur la taille des codes additionnels utilisés lors de la prédiction de position. La première colonne inclut les points prédits par des facettes Ouvertes Malgré la Géométrie (OMG). 24 5 Implémentation Notre algorithme a été écrit en C++ et se base sur la librairie CGAL (Computational Geometry Algorithms Library). 5.1 Présentation de la librairie CGAL CGAL est une librairie spécialisée dans les algorithmes de calcul géométrique (projet OpenSource) [44]. Elle propose une implémentation des objets et des algorithmes utilisés couramment en géométrie algorithmique. C'est un outil robuste, flexible (utilisation de techniques de programmation génériques) et efficace (programmation orientée objet : C++). Cette librairie se décompose en 3 grandes catégories : • Le noyau contenant les primitives géométriques : points, vecteurs, segments, cercles, prédicats (tests d'orientation, de position, ...), opérations (calculs d'intersection, de distance, ...). Il fournit plusieurs types d'arithmétiques pour la représentation des objets géométriques (points, vecteurs, ...) • La librairie de base fournissant un ensemble de structures de données et d'algorithmes standard (calcul d'enveloppe convexe en 2D ou 3D, triangulation de Delaunay, diagramme de Voronoï, construction de polyèdres, de kd-trees, ...) • Un outil de support non géométrique offrant des interfaces vers d'autres packages comme par exemple : • les systèmes de visualisation d'objets : GeomView, OpenGL, ... • les types de nombres exacts : LEDA, GMP (arithmétique exacte sur les nombres réels), ... CGAL utilise le paradigme de la bibliothèque STL (Standard Template Library) incluse dans le langage C++, pour le développement des algorithmes géométriques. La STL défini les concepts de conteneurs, d'itérateurs, d'objets fonction et propose un ensemble d'algorithmes s'appliquant sur ces concepts. CGAL fournit également des extensions de la STL appliquées aux structures de données géométriques. Les algorithmes de la STL utilisant des primitives algorithmiques se servent de ces primitives en tant qu'objet fonction (ou foncteur), plutôt que de transmettre un pointeur sur une fonction, car l'opération s'en trouve accélérée. Par exemple, les algorithmes de tri utilisent les opérateurs de comparaison en tant qu'objets fonction. Les algorithmes de CGAL exploitent également cet aspect générique. 5.1.1 Représentation des objets géométriques dans CGAL Le concept de noyau dans CGAL représente un espace euclidien à d dimensions (d=2 ou 3) utilisant des coordonnées cartésiennes (un point est représenté par un d-tuple) ou homogènes (un point est représenté par un (d+1)-tuple). De plus, les coordonnées peuvent être représentées par différents types de données (double, int, ...). On peut ainsi définir plusieurs types de noyaux qui regroupent l'ensemble des primitives géométriques associées à l'espace et au type de données considérés. Une des structures de données géométrique les plus utilisées en géométrie algorithmique est la triangulation d'un ensemble de points en 2 ou 3 dimensions. Elle repose sur les concepts de sommet et de cellule (ou facette en 2D) et se décompose en 3 couches de classes : • les classes de base, qui définissent les sommets et cellules sur lesquels la triangulation est basée ainsi que les relations d'incidence et d'adjacence qui les lient. • la classe « structure de données de la triangulation » s'appuyant sur les classes de base. Elle fournit l'aspect combinatoire de la triangulation tout en maintenant les relations d'incidence et d'adjacence lors d'une opération d'insertion de sommets par exemple. • la classe « triangulation » qui implémente les aspects géométriques de la triangulation. Cette classe s'appuie sur une classe « geometric traits » déterminant les types d'objets géométriques utilisés par la triangulation ainsi que les prédicats et opérations de base sur ces objets. Les classes génériques « geometric traits » servent en fait d'interface entre les algorithmes et les noyaux géométrique proposés par CGAL. Elles permettent la personnalisation du comportement d'un algorithme A pour un noyau donné, sans avoir à changer l'implémentation de A. 25 Pour notre algorithme, nous utilisons la triangulation 3D d'un ensemble de points P, correspondant à une partition de l'enveloppe convexe de P en tétraèdres (cellules) dont les sommets sont les points de P. Il est intéressant de n'avoir à traiter que des tétraèdres, afin de bénéficier d'une représentation homogène. Pour cela l'ajout d'un point infini est nécessaire. Ce point est en quelque sorte fictif et ne sert qu'à relier les facettes de l'enveloppe convexe pour former des cellules infinies. Chaque facette est alors incidente à exactement deux cellules. Dans cette configuration, chaque sommet pointe vers une de ces cellules incidentes et une cellule peut accéder à ses 4 sommets et ces 4 cellules incidentes. De cette façon, il est possible de parcourir l'ensemble de la triangulation de façon déterministe grace à un système de numérotation des sommets, facettes, et cellules. En effet, les 4 sommets d'une cellule c sont numérotés de 0 à 3 dans le sens indiqué par la figure ci-dessous. FIG. 21 – Numérotation des sommets d'une cellule. Chaque cellule d'une triangulation 3D d'un ensemble de points utilise cette numérotation lui permettant de faire référence à ses sommets. De même, la cellule voisine de c d'indice i est opposée au sommet d'indice i de c. Enfin, une facette f de c est représentée par la cellule c et un indice i (correspondant à l'indice du sommet opposé à la facette), comme indiqué dans le schéma ci-dessous : FIG. 22 – Numérotation d'une facette de c et d'une de ses cellules voisines. La facette grise et la cellule en pointillé étant situées en face du sommet 0 de c, elles seront référencées 0 par c. 5.2 Nos choix d'implémentation 5.2.1 Noyau et structures de données utilisés Généralement la position des sommets est codée par des nombres flottants sur 32 bits, mais la majorité des méthodes de compression géométrique ne manipule pas les coordonnées sous cette forme. Ces méthodes lui préfèrent généralement une représentation quantifiée. Cela consiste à représenter chaque valeur par un multiple entier d’une quantité q, appelée pas de quantification. Les coordonnées se retrouvent ainsi codées sur une grille régulière, ce qui est beaucoup plus pratique à gérer que les nombres à virgule flottante car on peut alors bénéficier d'une arithmétique exacte. La quantification se fait généralement sur 24, 16, 12 ou 8 bits, ce qui entraîne une perte non négligeable, mais qui est généralement compensée par les erreurs numériques limitant la précision du modèle. Ces considérations sont également utilisées pour les attributs. A la différence de nombreuses méthodes, nous n'imposons pas de quantification préalable avec perte de précision sur les coordonnées des points. Notre algorithme considère ainsi les données telles qu'elles sont présentes dans les fichiers d'entrée. Pour certains modèles dont les sommets sont codés par des nombres flottants sur 32 bits, lors de la prédiction de position, il arrive que le codage du vecteur différence avec ce même type de données engendre une perte de précision sur les données qui ne peuvent alors pas être reconstruites de façon exacte par le 26 décodeur. Pour éviter ceci, CGAL propose plusieurs noyaux utilisant un type de données exact, permettant de réaliser l'ensemble des opérations géométriques de façon efficace en considérant une arithmétique exacte. La classe « structure de données de la triangulation » que nous avons utilisée, se base sur une redéfinition des classes « sommet » et « cellule » que nous avons personnalisées. Notre classe « triangulation » se base également sur une structure hiérarchique, engendrant une construction de la triangulation plus rapide et permettant de retrouver rapidement la position d'un point. Cette technique possède un comportement optimal si elle est construite sur une triangulation de Delaunay et s'avère efficace pour les grands volumes de données 5.2.2 Ordre de traitement des facettes de la triangulation Dans les deux versions de notre algorithme, les informations topologiques sont transmises au décodeur dans l'ordre où le codeur traite les facettes composant la pseudo-surface courante. Pour que le décodeur puisse interpréter correctement ces informations, il faut s'assurer qu'il traite bien les facettes dans le même ordre que le codeur, ce qui n'est pas garanti par CGAL, notamment si lors de la construction de la triangulation, les points ne sont pas insérés dans le même ordre. Pour s'assurer que les facettes seront traitées dans le même ordre par le codeur et le décodeur, nous avons choisi d'instaurer un ordre de traitement des facettes de l'enveloppe convexe (sur lesquelles débute le processus de convection) ainsi que des facettes « cachées » traitées tout au long du processus de convection. Pour les facettes de l'enveloppe convexe, la première traitée est celle possédant les plus petits sommets en considérant l'ordre lexicographique. A partir de cette facette, faisant partie d'une cellule infinie, on va découvrir petit à petit les facettes associées aux cellules infinies voisines, jusqu'à ce qu'on ait parcouru toutes les facettes de l'enveloppe convexe. Une cellule ayant 3 voisines, on commence toujours par celle située en face du plus petit sommet de la facette courante (pour l'ordre lexicographique), puis on poursuit dans le sens trigonométrique. Sur le schéma ci-dessous, on considère que le plus petit sommet de la facette courante uvw est u, ainsi la première cellule voisine traitée sera celle définie par les sommets v, w, x et y. Le traitement des facettes cachées se base sur le même principe. On commence par chercher le plus petit sommet de la facette qui doit s'ouvrir (facette uvw dans le schéma ci-dessous) et on traite en premier la facette située en face du plus petit sommet (facette vwy si on considère que u est le plus petit sommet de uvw). Le traitement des deux autres facettes se poursuit ensuite dans le sens trigonométrique. FIG 23 – Principe de l'ordre de traitement des cellules. Si l'on considère que uvwy est la cellule courante et que u est son plus petit sommet dans l'ordre lexicographique, la prochaine cellule traitée sera celle située en face de u, correspondant à vwxy. 27 6 Résultats Nous présentons premièrement les temps d'exécution des différentes versions de notre algorithme. Tous les résultats présentés dans le tableau ci-dessous ont été obtenus sur une plate-forme Linux (Intel Pentium 4 – 2,8 Ghz, 512 Mo de RAM). Comme nous l'avons déjà précisé, le codeur utilisé par la deuxième approche de la variante de notre méthode, construit deux triangulations. La première se base sur l'ensemble des points et l'évolution de la seconde traduit la découverte graduelle des points par le décodeur. L'insertion de points dans une triangulation étant une opération relativement coûteuse, cette approche est donc moins rapide que les deux autres (dont le temps moyen d'exécution est donné dans le tableau ci-dessous). Les codeurs utilisés par les deux autres approches ne construisent qu'une seule triangulation basée sur l'ensemble des points Modèle / Temps d'exécution (en secondes) Nefertiti Cube Bunny non volumique Bunny volumique Max Planck 299 50 000 35 947 35 947 23 608 Codeur construisant deux triangulations 0,15s 57,53s 26,83s 25,21s 19,98s Codeurs ne contruisant triangulation (moyenne) 0,1s 23,01s 15,7s 13,18s 12,71s 0,07s 20,04s 11,21s 10,35s 9,26s Nombre de sommets qu'une Décodeurs (moyenne) TAB. 6 – Temps d'exécution des différentes versions de notre méthode. Un aperçu des modèles utilisés est disponible en annexe 1. D'une manière générale, la comparaison des performances des différents travaux existants est rendue très difficile par la grande disparité des modèles géométriques utilisés lors des tests quantitatifs. De plus, n'ayant pas disposé de suffisamment de temps pour développer un codeur entropique adapté aux données transmises par le codeur, nous présentons d'une part les résultats de notre algorithme dans le pire des cas (cf. tableau 7) et d'autre part les résultats des méthodes de compression les plus compétitives (cf. tableau 8). Même s'il est difficile de comparer ces deux types de résultats, puisque les résultats présentés dans le tableau 8 utilisent un codage entropique, ceci permet d'effectuer un premier bilan sur les résultats prometteurs de notre algorithme, qui pourraît encore subir des améliorations. Nous avons tenu à ne présenter dans le tableau suivant que le nombre de bits par sommet pour le codage de la topologie, le codage de la géométrie dans le pire des cas n'étant pas révélateur pour être comparé avec les méthodes présentées dans le tableau 8, utilisant un codage entropique. Modèle / Codage de la topologie (en bits par sommet) Nefertiti Cube Bunny non volumique Bunny volumique Max Planck 299 50 000 35 947 35 947 23 608 Nombre de faces 1 098 99 980 133 420 71 890 93 332 Approche n°1 3,47 6,58 6,64 10,8 6,47 6,79 Approche n°2.1 13,3 8,24 15,1 16,3 15,6 13,73 Approche n°2.2 6,62 9,09 11,4 14,2 8,5 9,96 Nombre de sommets Moyenne TAB. 7 – Résultats des différentes versions de notre méthode dans le pire des cas. Pour chaque modèle et pour chaque approche testée, le nombre de bits par sommet pour le codage de la topologie est indiqué. Le nombre de bits par sommets pour le codage de la géométrie n'a pas été indiqué car, ne disposant que de résultats dans le pire des cas, ce nombre n'est pas révélateur en comparaison de celui obtenus par les méthodes existantes utilisant un codage entropique. Le tableau suivant présente premièrement les résultats de deux méthodes de compression mono-résolution, celles de Touma et Gotsman [39] et celle de Rossignac (Edgeabreaker) [26]. Les résultats des méthodes de compression progressives réalisées par Pajarola et Rossignac [27], Cohen-Or Levin et Remez [10] et Gandoin et Devillers [15] sont ensuite présentés. 28 Méthodes / Résultats (en bits par sommets) T&G 1998 Edgebreaker 1999 P&R CLR G&D Codage de la topologie 2 moins de 3,67 7.1 5.8 3.6 Codage de la géométrie 16.5 ? 16.9 17 15.7 Total des deux 18.5 ? 24 22.8 19.3 TAB. 8 – Résultats obtenus par les méthodes de compression de maillages les plus compétitives. Ces résultats sont présentés en bits par sommet et son extraits de [14]. Les résultats pour le codage de la topologie, obtenus par notre approche n°1 se révèlent meilleurs dans le pire des cas que ceux obtenus par notre deuxième approche. Ceci était prévisible vu qu'il est nécessaire de coder un plus grand nombre d'informations dans l'approche n°2. Dans la première approche, l'ordre sur l'information géométrique n'étant pas important, une méthode du type de celle de Gandoin et Devillers permettrait d'obtenir en moyenne un taux de 15,7 bits par sommet après application d'un codage entropique. On remarque dans le tableau 8 que ce taux est compétitif en comparaison des autres méthodes présentées. On peut ainsi s'attendre à ce que cette approche n°1 fournissent des taux intéressants après application d'un codage entropique. La variante de notre approche n°1 n'est tout de même pas à négliger, puisque nous n'avons présenté ici que les résultats pour le codage de la topologie, mais l'utilisation de la prédiction de position pour le codage d'une partie de l'information géométrique, permettrait certainement d'obtenir des résultats proches de ceux présentés pour la première approche. 29 7 Conclusion et perspectives Nous avons présenté une méthode de compression sans perte de maillages surfaciques triangulaires basée sur un algorithme de reconstruction de la surface d'objets 3D. Deux versions différentes de cette méthode ont été développées, la première construisant un codeur topologique basé sur la totalité de l'information géométrique. La seconde exploite en plus de ceci une technique de prédiction différentielle pour le codage de la position d'une partie des points. Le codage de ces points est alors dépendant du codage de l'information topologique. L'exploitation de l'algorithme de reconstruction s'avère très intéressante puisque celui-ci permet de rendre implicite une grande partie de l'information topologique. De plus, pour notre première approche, il permet de coder la totalité de l'information géométrique sans se soucier de l'ordre de transmission des points. Ce codage peut alors être délégué entièrement à un algorithme du type de celui de Gandoin et Devillers se plaçant avantageusement par rapport aux meilleurs algorithmes existants. Dans la seconde version, seuls les échantillons situés sur l'enveloppe convexe du nuage de points peuvent bénéficier de ce traitement particulier, l'information d'ordre sur les autres points étant capitale. Les résultats présentés dans le pire des cas s'avèrent prometteurs, mais une amélioration pourrait être envisagée afin de transmettre moins de codes. En effet, notre algorithme force les demi-facettes traitées à s'ouvrir à chaque fois que l'algorithme classique de convection veut les retenir mais qu'elles ne s'appuient pas sur une facette du maillage initial. Au lieu de cela, il est possible de les stocker dans une file d'attente et d'attendre qu'elles soient éventuellement traitées plus tard de façon cohérente par l'algorithme. Cette considération permettrait de réduire encore le codage de la topologie, permettant certainement de se positionner avantageusement par rapport aux méthodes existantes. Nous n'avons traité pour l'instant que les maillages dont les facettes sont comprises dans la triangulation de Delaunay 3D. Une extension est envisageable permettant de traiter de façon générale tous les maillages surfaciques triangulaires. Il est possible pour cela de réaliser un traitement permettant d'ajouter quelques points à certains modèles originaux, si leur échantillonnage n'est pas suffisamment dense. Une autre manière possible serait d'étendre le principe de la triangulation de Delaunay contrainte aux surfaces triangulées en 3 dimensions. Il est également possible de procéder à un ensemble de basculements d'arêtes pour certains modèles dont les facettes ne sont pas comprises dans la triangulation de Delaunay 3D. 30 Bibliographie [1] P. Alliez, and M. Desbrun. Progressive compression for lossless transmission of triangle meshes. In SIGGRAPH 2001 Conference Proc., pp. 199–202, 2001. [2] N. Amenta and M. Bern. Surface reconstruction by Voronoi filtering. Discrete and Computational Geometry 22, pp. 481–504, 1999. [3] N. Amenta, S. Choi, and R. Kolluri. The power crust. In Proceedings of the ACM Symposium on Solid Modeling and Applications, pp. 249–260, Ann Arbor, Michigan, June 2001. [4] A. Baskurt. Cours « Compression des images / Normes multimédia ». Master M2 Recherche Informatique – Lyon, année scolaire 2004-2005. [5] J.-D. Boissonnat. Geometric structures for three-dimensional shape representation. ACM Trans.Graph., 3(4): 266-286, 1984. [6] J.-D. Boissonnat and F. Cazals. Smooth Surface Reconstruction via Natural Neighbour Interpolation of Distance Functions. In Proc. 16th Annu. ACM Sympos. Comput Geom., pp. 223-232, 2000. [7] F. Cazals and J. Giesen. Delaunay Triangulation based Surface Reconstruction: Ideas and Algorithms. Technical Report 5393, INRIA, November 2004. [8] D. Coeurjolly, R. Chaine. Cours de « Géométrie Discrète / Géométrie Algorithmique ». Master M2 Recherche Informatique – Lyon, année scolaire 2004-2005. [9] R. Chaine. A geometric convection approach of 3-D reconstruction. In Proc. of Eurographics and ACM SIGGRAPH Symp. on Geometry Processing, 2003. [10] D. Cohen-Or, D. Levin and O. Remez. Progressive compression of arbitrary triangular meshes. In IEEE Visualization 99 Conference Proc., pp. 67–72, 1999. [11] B. Curless and M. Levoy. A volumetric method for building complex models from range images. Proc. SIGGRAPH ’96, pp. 303–312, 1996. [12] M. Deering. Geometry compression. In SIGGRAPH 95 Conference Proc., pp. 13–20, 1995. [13] H. Edelsbrunner and E. P. Mücke. Three-dimensional alpha shapes. In ACM Trans. Graphics 13, pp. 43–72, 1994. [14] P.-M. Gandoin. Compression progressive et sans perte de structures géométriques. Thèse de doctorat, Université de Nice-Sophia Antipolis, 2001. [15] P.-M. Gandoin et O. Devillers. Progressive lossless compression of arbitrary simplicial complexes. In ACM Transactions on Graphics, Vol. 21 No. 3, pp. 372–379, 2002. [16] S. Gumhold, S. Guthe, and W. Straßer. Tetrahedral mesh compression with the cut-border machine. In Proceedings of the Visualization '99 Conference, pp. 51-58, San Francisco, CA, October 1999. [17] I. Guskov, K. Vidimce, W. Sweldens, and P. Schröder, Normal meshes. In Siggraph 2000, Computer Graphics Proceedings, pp. 95–102, 2000. [18] H. Hoppe. Progressive Meshes. In Proceedings ACM SIGGRAPH'96, pp. 99-108, August 1996. [19] H. Hoppe, T. DeRose, T. Duchamp, J. McDonald, and W. Stuetzle. Surface Reconstruction from Unorganized Points. In Proc. SIGGRAPH ’92, pp. 71–78, 1992. [20] D. Huffman. A method for the construction of minimum-redundancy codes. In Proc. I.R.E. 40, pp. 1098-1101, 1952. [21] Z. Karni and C. Gotsman. Spectral Compression of Mesh Geometry. In Proceedings of SIGGRAPH, pp. 279286, 2000. [22] A. Khodakovsky, P. Schröder and W. Sweldens. Progressive geometry compression. In SIGGRAPH 2000 Conference Proc., pp. 271–278, 2000. [23] A. Khodakovsky and I. Guskov. Normal Mesh Compression. Geometric Modeling for Scientific Visualization, Springer-Verlag, 2002. [24] A. W. F. Lee, W. Sweldens, P. Schröder, L. Cowsar and D. Dobkin. MAPS: Multiresolution Adaptive Parameterization of Surfaces. In Proceedings of SIGGRAPH 98, pp. 95-104, July 1998. [25] M. Levoy, K. Pulli, B. Curless, S. Rusinkiewicz, D. Koller, L. Pereira, M. Ginzton, S. Anderson, J. Davis, J. Ginsberg, J. Shade and D. Fulk. The Digital Michelangelo project: 3D scanning of large statues. In SIGGRAPH 2000, pp. 131–144, 2000. [26] H. Lopes, J. Rossignac, A. Safonova, A. Szymczak and G. Tavares. Edgebreaker: A Simple Compression Algorithm for Surfaces with Handles. Computers&Graphics International Journal, Vol. 27, No. 4, pp. 553-567, 2003 [27] R. Pajarola and J. Rossignac. Compressed progressive meshes. IEEE Transactions on Visualization and Computer Graphics 6, 1 (January–March), pp. 79–93, 2000. [28] F. Payan. Optimisation du compromis débit-distorsion pour la compression géométrique de maillages surfaciques triangulaires. Thèse de doctorat, Université de Nice-Sophia Antipolis, 2004 [29] J. Rissanen and G.G. Langdon. Arithmetic coding. IBM Journal of Research and Development, 23(2), pp. 149- 31 162, 1979. [30] J. Rossignac. Edgebreaker: Connectivity compression for triangle meshes. IEEE Transactions on Visualization and Computer Graphics, pp. 47–61, 1999. [31] J. Rossignac. Edgebreaker: Compressing the incidence graph of triangle meshes. GVU Technical Report GITGVU-98-17, Georgia Institute of Technology, 1998. [32] J. Rossignac and A. Szymczak. Wrap&Zip decompression of the connectivity of triangle meshes compressed with Edgebreaker. Journal of Computational Geometry, Theory and Applications, Volume 14, Issue 1-3, pp. 119135, November 1999. [33] J. Rossignac, A. Safanova, A. Szymczak. 3D compression made simple: Edgebreaker on a Corner Table. Shape Modeling International Conference, Genoa, Italy May 2001. [34] A. Szymczak and J. Rossignac. Grow&Fold: Compression of Tetrahedral Meshes, Proc. In ACM Symposium on Solid Modeling, pp. 54-64, June 1999. GVU Tech. Report GIT-GVU-99-02 [35] Szymczak, A. and J. Rossignac. Grow & fold: compressing the connectivity of tetrahedral meshes. ComputerAided Design, Elsevier, Vol 32, pp.527-537, 2000 [36] A. Szymczak, D. King and J. Rossignac. An Edgebreaker-based efficient compression scheme for regular meshes. Computational Geometry, Theory and Applications (October, 2001), pp. 53-68, 2001. [37] G. Taubin and J. Rossignac. Geometric compression through topological surgery. In ACM Transactions on Graphics 17, 2, pp. 84–115, 1998. [38] G. Taubin, A. Gueziec, W. Horn and F. Lazarus. Progressive forest split compression. In SIGGRAPH 98 Conference Proc., pp. 123–132, 1998. [39] C. Touma and C. Gotsman. Triangle mesh compression. In Graphics Interface 98 Conference Proc., pp. 26– 34, 1998. [40] I.H.Witten, R. Neal, et J.G. Cleary. Arithmetic coding for data compression. Communications of the ACM, 30 (6), pp. 520–540, 1987. [41] J. Ziv and A. Lempel. A Universal Algorithm for Sequential Data Compression. IEEE Transactions on Information Theory, May 1977. [42] J. Ziv and A. Lempel. Compression of Individual Sequences Via Variable-Rate Coding. In IEEE Transactions on Information Theory, Vol. 24, pp. 530–536, 1978. [43] H.K.Zhao, S. Osher, and R. Fedkiw. Fast surface reconstruction using the level set method. In Proceedings of IEEE Workshop on Variational and Level Set Methods in Computer Vision (VLSM), 2001. [44] http://www.cgal.org 32 Annexe 1 : Modèles utilisés FIG 1 – Modèle “Nefertiti”, surface à bords contenant 299 points. FIG 2 – Modèle “Cube”, surface volumique contenant 50 000 points. FIG 3 – Modèle “Bunny” volumique (à gauche) et non volumique (à doite). Dans le modèle de droite, on remarque que les trous situés sour la base ont été creusés, afin de créer une créer une surface non fermée. Les deux modèles contiennent 35 947 points. 33 FIG 4 – Modèle “Max Planck”, surface à bord (non fermée) contenant 23 608 points. 34