16
Enseirb-matmeca TER - Fermeture d’un nuage de points — Utilisation de VTK pour la reconstruction d’un maillage — elix Mouzet Luc edie Encadrant : Jean-Luc Charles 21 mai 2015 ` a Talence [email protected] [email protected] [email protected]

TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

Enseirb-matmeca

TER - Fermeture d’un nuage de points— Utilisation de VTK pour la reconstruction d’un maillage —

Felix MouzetLuc Vedie

Encadrant :Jean-Luc Charles

21 mai 2015 a Talence

[email protected] [email protected] [email protected]

Page 2: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

Fermeture d’un nuage de pointsFelix Mouzet, Luc Vedie, encadre par Jean-Luc Charles

Introduction

L’objectif de ce travail d’etude et de recherche se base sur une problematique industrielle : les entreprises

de confection de vetements sur-mesure se tournent actuellement vers les scanners 3D pour l’acquisition des

mensurations de leurs clients. Les avantages de cette technologie de numerisation utilisee sont multiples :

prise de mesures rapides et completes, confection automatisee, affichage d’un apercu avant conception...

Cependant, selon la technologie utilisee, l’avatar obtenu apres acquisition peut comporter des alterations de

maillage.

Dans le cas present, la societe NEATEK utilise actuellement un systeme de scanner a 3 colonnes-capteurs

placees tout autour du sujet. Les donnees des capteurs sont ensuite fusionnees pour obtenir un maillage

polygonal sous forme de fichier STL. Le maillage ainsi obtenu est incomplet : il presente des ’zones d’ombres’

non balayees par les capteurs, ainsi que d’autres aberrations.

Notre travail a donc consiste a rechercher des outils de traitements libres de droit permettant de corriger

l’avatar de facon suffisamment realiste pour etre exploitable. La bibliotheque graphique VTK presentee dans

les pages suivantes a ete l’outil principal utilise au cours de ce TER.

Abstract

This research work objective is based upon an industrial problem : textile companies proposing custome-

made-clothe services are nowadays looking at 3D scanners for the measurement acquiring. The technology

presents many benefits : easy, quick and complete measure, automated confection, possibility of a quickdraw

before making ... However, depending on the chosen scanner, the avatar obtained after scanning may include

structural errors.

In our situation, NEATEK society is currently using a scanning device composed of 3 captor-colons placed

all around the subject. The data from the captors are then merged to create a polygonal mesh on an STL

container filer. The resulting mesh is incomplete in most case : Viewers display ’shadow zones’ non swept

by the captors, and other topological errors.

Our work consenquently was to research 3D treatment library able to fill the holes and correct the structural

errors to obtain an avatar clean enough to be exploitable. The tools also need to be open source. The Graphical

library set VTK introduced in the following pages have been the main used tool during this TER.

2

Page 3: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

Table des matieres

I Recherche preliminaire 4

I.1 Format STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

I.2 Outils de visualisation 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

I.3 Pipeline VTK[6] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

II Experimentation 9

II.1 Visualisateur STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

II.2 Filtre vtkFeatureEdges[7] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

II.3 Filtres de traitement local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

II.4 Filtres de reconstruction globale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

II.5 Reconstruction de poisson[12] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

IIIConclusion 15

IV Bibliographie 16

3

Page 4: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

I Recherche preliminaire

Une grande partie de notre travail a porte sur de la recherche bibliographique. Il s’agissait de rechercherles solutions actuelles en terme de bibliotheques de rendu 3D capables de dessiner un avatar decrit par unnuage de points (scan 3D de sujets humains) contenus dans un fichier au format STL ou OBJ.

. . .I.1 . . . . . . . . .Format. . . . .STL

Le format STL, particulierement sollicite dans le domaine de la conception assistee par ordinateur, estutilise pour decrire une surface 3D. Il decrit la surface de l’objet par une serie de triangles, donnes par lescoordonnees de leurs sommets et leur normale sortante, indiquant ainsi une surface interieure et exterieure.Ces fichiers se presentent sous format ASCII, ou bien en binaire.

Un fichier STL ASCII commence par le header :

solid name...

ou name est une chaıne facultative (en cas de chaıne vide, il doit etre remplace par un espace). Tous lestriangles sont alors definis a la suite par leur normale sortante et sommets sous la forme :

facet normal ni nj nkouter loop

vertex v1x v1y v1zvertex v2x v2y v2zvertex v3x v3y v3z

endloopendfacet...

Ou chaque n ou v est un nombre a virgule flottante au format signe/mantisse/’e’/signe/exposant, parexemple : -2.648000e-002

Le fichier est ensuite cloture par :

...endsolid name

La structure du format laisse a penser qu’il existe d’autres possibilites, (p. ex., les facettes avec plus d’uneboucle (outer loop) ou des boucles avec plus de trois sommets). Dans la pratique, toutes les facettes sont desimples triangles dans le cas etudie, de par la technologie du scanner.

Des espaces vides (espaces, tabulations, retours a la ligne) peuvent etre utilises partout dans le fichiersauf au milieux des chaınes de chiffres ou des mots cles. Les espaces entre les codes � facet normal �, et,� outer loop � sont obligatoires.

4

Page 5: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

Un fichier STL binaire commence par un header de 80 caracteres (qui ne doit pas commencer par solidpour ne pas etre confondu avec une version ASCII par un lecteur). Il est suivit par le nombre de facettestriangulaires du fichier indique par un entier code sur 4 bits. Enfin, chaque triangle est decrit par 12 reelscodes sur 32 bits : 3 pour la normale puis 3 pour chacun des sommets. Un entier positif code sur deux bits(souvent 0) correspondant a l’attribute byte count cloture la description d’une facette.

Soit la forme suivante :

80 Caracteres ASCII [8bit] — HeaderEntier positif [32bit] — Nombre de triangles

Puis, pour chaque triangle :

3 Reels [32bit] — Normale3 Reels [32bit] — Sommet 13 Reels [32bit] — Sommet 23 Reels [32bit] — Sommet 3Entier positif — Attribute byte count

Le fichier se termine apres le dernier triangle. Meme si les versions ASCII et binaire sont equivalentes (laconversion s’effectue sans perte de donnee), la version binaire permet d’optimiser la taille du fichier par lejeu de l’encodage.

. . .I.2 . . . . . . . .Outils . . .de. . . . . . . . . . . . . .visualisation . . . .3D

La recherche d’outils appropries represente une part importante de notre travail. Elle s’est faite de maniereprogressive, en affinant peu a peu nos criteres au cours de nos tests. Un rapide descriptif des principaux can-didats est presente dans cette section. L’age des bibliotheques et le nombre de lignes de code donne unepremiere idee assez significative de l’importance du projet.

CGAL[1] - The ComputationalGeometry Algorithms Library

Developpee par plusieurs instituts de recherche et entreprises principalement europeens (INRIA, Univer-site de Tel Aviv, GeometryFactory ...), CGAL est une bibliotheque logicielle proposant un acces facile etefficace a un grand nombre d’algorithmes de traitement geometrique.

langage C++, Python

API GeometryFactory

Licence GPL-3.0+ / Commercial(GeometryFactory)

Domaines d’utilisation PAO, biologie moleculaire

robotique, imagerie medicale

Annees de developpement 1995 - ...

Nombre de lignes de code 270k

5

Page 6: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

VCG[2] - The Visualization and ComputerGraphics Library

VCG est une bibliotheque portable C++ specialise dans l’affichage et le traitement de maillage tetraedrique.Son developpement est le resultat collaboratif du Visual Computing Lab et de l’Institut du conseil nationalde recherche italien. La bibliotheque a ete utilise pour le developpement d’autres outils de recherche, commeMeshlab.

langage C++

API MeshLab, Metro, ShadeVis

Licence GPL-2.0+

Domaines d’utilisation Microbiologie, Impression 3D,

Gestion du patrimoine culturel (statues..)

Annees de developpement 2004 - ...

Nombre de lignes de code 1.54M

OpenMesh[3]

Structure de donnees generique pour la manipulation de maillage polygonaux, OpenMesh est developpepar le Computer Graphics Group, RWTH Aachen University. Il a ete fonde par le ministere de l’educationet de la recherche Allemand. Son but est de proposer la manipulation de structures complexes a travers uneinterface relativement accessible.

langage C++, Python

API OpenFlipper

Licence LGPL

Domaines d’utilisation Particuliers

Annees de developpement 2009-...

Nombre de lignes de code 56.4k

6

Page 7: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

PCL[4] - The Point Cloud Library

Il s’agit d’un projet ouvert, a grande echelle, de traitement d’image 2D/3D et nuage de points. Sonframework comprend un grand nombre de filtres et beneficie d’un developpement tres dynamique. Le projetest actuellement en developpement, rassemblant un grand nombre de scientifiques et ingenieurs finance pardes compagnies internationales.

langage C++, Python

API [En developpement]

Licence BSD

Domaines d’utilisation [En developpement]

Annees de developpement 2011-...

Nombre de lignes de code 1.74M

VTK[5] -The Visualisation ToolKit

VTK est la bibliotheque portable de reference en visualisation de donnees scientifiques, ecrite en C++.Elle permet de faire des traitements sur ces donnees en creant tres simplement une chaıne d’algorithmespour produire au final une image 2D/3D. Elle est utilisee par de nombreuses universites et entreprises.

langage C++, Tcl/Tk, Java, Python

API VisTrails, Mayavi2, ParaView

Licence BSD

Domaines d’utilisation Imagerie medicale, Mecanique des fluides, Finance

Acoustique, Mecanique, Elements finis, Geophysique

Stereolythographie, Biologie Moleculaires

Annees de developpement 1994-...

Nombre de lignes de code 6.74M

Au debut de notre projet, le standard VTK s’est impose comme base de travail pour developper leprogramme de fermeture du maillage. Sa documentation fournie, la multitude de fonctions implementees etsa predisposition au developpement (voir page suivante) etaient les principaux arguments en sa faveur. Deplus, la plupart des fonctions implementees dans cette bibliotheque possedent un binding Python, langageplus facile a apprehender que le C++ pour la creation du script.

Il convient donc de developper le fonctionnement par etape d’un programme base sur les classes VTK.

7

Page 8: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

. . .I.3 . . . . . . . . . .Pipeline. . . . . . . .VTK[6]

Cette expression rend compte de l’architecture du programme en terme de traitement de donnee

En effet, la bibliotheque propose une procedure standardise pour le traitement et l’affichage de donnee,partant des sources d’entree jusqu’a l’image a l’ecran. Chaque application a but de traitement d’image a l’aidedes classes VTK utilisera a priori ce schema de fonctionnement de maniere plus ou moins complexe. Cetteorganisation est generique quelque soit le type de source (.stl, .vtk, .mesh, fichier ou donnees en memoirevive...), les operations souhaitees (decoupage, remaillage, fusion, conversion...), et le produit attendu (fenetreinteractive, ecriture fichier maillage, sortie de statistique...). Une bonne comprehension de cette procedurerend alors le developpement d’application VTK relativement aise.

Sources :Les donnees d’entree sont lues par desclasses de type ’reader’ et converties auformat de travail .vtk.

Filtres :Tous les traitements 2D/3D s’effectuentpar filtres successifs. Les donnees en sortiesde filtres peuvent etre de nature diverses.

Mappers :Les donnees de travail .vtk produisent desobjets affichables par le biais de primitivesgraphiques

Acteurs :Ils definissent les proprietes d’affi-chage (taille, couleurs...) des objetsprecedemment crees.

Rendu - Fenetre de rendu :Regit l’exportation graphique/donnees desacteurs crees.

Interface - Controles :Implemente l’interface et les fonctionsd’interaction utilisateur d’une eventuellefenetre (ou a meme le terminal)

Figure 1 – Pipeline VTK

8

Page 9: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

II Experimentation

. . . .II.1 . . . . . . . . . . . . . . .Visualisateur. . . . .STL

Afin de tester le schema de fonctionnement VTK, nous avons commence par implementer un visualisateurpermettant d’afficher les avatars fournis au format STL. La bibliotheque beneficiant d’un portage pythonefficace, nous l’avons prefere au C++. Le resultat est le suivant :

import vtk # Importation bibliothequefilename = "kim.stl"reader = vtk.vtkSTLReader() # Lecture du fichier STLreader.SetFileName(filename) [.STL] => PolyData

mapper = vtk.vtkPolyDataMapper() # Primitive graphiquemapper.SetInputConnection(reader.GetOutputPort()) PolyData => PolyDataMapper

actor = vtk.vtkActor() # Assignation acteuractor.SetMapper(mapper) PolyDataMapper => Actor

ren = vtk.vtkRenderer() # Creation du rendurenWin = vtk.vtkRenderWindow() # Fenetre de rendurenWin.AddRenderer(ren) Renderer => RenderWindow

iren = vtk.vtkRenderWindowInteractor() # Interacteur de la fenetreiren.SetRenderWindow(renWin) Interactor => RenderWindowren.AddActor(actor) # Assigne Actor => Renderer

iren.Initialize()renWin.Render() # Active le renduiren.Start() # Active l’interacteur

Legende :Variable Attribut Valeur Classe Vtk

Appel bibliotheque

Ce premier test rend compte de l’aspect epure de la procedure : en moins de 20 lignes de code, le scriptaffiche un maillage dans une fenetre de rendu a interface minimaliste pourvu d’interactions utilisateur (zoom,deplacement, rotation) ! On percoit egalement mieux la syntaxe d’utilisation des classes vtk/python : nomsexplicites, de la forme generale ’vtk.vtkDescriptionClasse ’, constructeurs standardises, et parametres declasses definis comme sous-classes.

L’etape de traitement pour la fermeture du maillage peut alors prendre place dans le code : il seraimplemente apres lecture du fichier source, et avant le mapping des objets graphiques. Pour generer plu-sieurs fenetres de rendu, il suffit simplement de dupliquer le code correspondant a la partie du pipelinedediee a l’affichage graphique (mapper, actor, renderer, interactor). L’etape suivante est la recherche dansla documentation (Doxygen) des outils appropries.

9

Page 10: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

. . . .II.2 . . . . . . .Filtre. . . . . . . . . . . . . . . . . . . .vtkFeatureEdges[7]

vtkFeatureEdges est un filtre pour extraire certaines aretes particulieres d’un maillage polygonal. Cesaretes peuvent etre :

— Contours : utilisees par un seul polygone ou des cellules 1D— ”Manifold” : utilisees par exactement deux polygones, definissant ainsi l’appartenance a une surface— ”Non-manifold” : utilisees par trois polygones ou plus— Caracteristiques : utilisees par deux triangles dont le diedre est superieur a 30 degres (par defaut)

La figure ci-dessous represente le resultat superpose au maillage. Les bords du maillage sont traces enrouge, et les aretes caracteristiques en vert (il y en a tres peu sur cet avatar). Il n’y a pas d’aretes ”non-manifold” car l’algorithme de traitement du scanner ne maille que des surfaces. Les aretes ”manifold” nesont pas mises en evidence pour eviter de surcharger le dessin.

Figure 2 – Visualisation des contours par vtkFeatureEdges

Ce premier traitement permet de mettre en evidence les problemes to-pologiques a resoudre. En effet, le maillage est certes incomplet a causedes zones non balayees par les capteurs, mais il ne s’agit pas de simplesouvertures ponctuelles. Le second probleme majeur est le recoupement desdonnees des differents capteurs (representes ci-contre).

Les 3 capteurs produisent trois parties de maillage qui sont fusionnees al’aide d’un repere commun. Cependant, les contours des 3 sous-maillagessont conserves sur l’avatar final, produisant des superpositions redondantesvisibles au niveau du ventre. Le modele obtenu n’est donc pas d’un seultenant, mais scinde en 3 surfaces trouees.

10

Page 11: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

. . . .II.3 . . . . . . . .Filtres. . .de. . . . . . . . . . . .traitement. . . . . .local

Une fois les problemes de maillages mis en evidence, nous avons recherche dans la documentation lesfiltres susceptibles d’apporter des solutions. Les resultats sont presentes pour differents filtres qui ont retenunotre attention.

vtkFillHolesFilter[8]

Comme son nom l’indique, il s’agit d’un filtre qui identifie et rebouche les trous dans un maillage polygonalen procedant comme suit :

— Les ouvertures sont identifiees en localisant les aretes de contours— Les differents trous sont traites de facon independante en regroupant les aretes par ensembles connexes.— Les contours obtenus sont triangules un a un.A noter : l’utilisateur peut specifier une limite de la taille des trous a boucher.

Notre objectif, en utilisant ce filtre, etait de refermer les ouvertures les plus simples dans un premiertemps. Nous avons donc impose une limite de taille assez basse et applique le traitement. Malheureusement,aucun resultat n’a ete obtenu. Quelque soit le parametre de limite de taille (et meme sans limite), le filtrene rebouchait pas un seul trou sur ce maillage. Ceci peut s’expliquer par deux raisons.

La premiere est que ce filtre est pourvu d’une condition d’arret. Si les patchs produits intersectent lemaillage de depart, ils sont automatiquement annules. Cette condition d’arret permet d’eviter la creationd’aberrations du modele, et on comprend son importance dans le cas present, deja fortement defectueux.

La seconde reside dans la topologie particuliere de l’espace de depart. Meme en retirant les plus grandesouvertures (perimetre de l’ordre du metre) les contours des plus petites zones d’ombres sont tres peu reguliers.

vtkCleanPolyData[9]

Ce filtre nettoye le maillage : il fusionne les points exactement coincidents, et egalement les pointssuffisamment proche si un parametre de tolerance est observe. Il etait donc un bon candidat pour restructurerle maillage avant d’en combler les interstices. Le resultat pour trois parametres de tolerance est donne :

Tol = 0.001 (pas de changements) Tol = 0.002 Tol = 0.003

Figure 3 – Utilisation de vtkCleanPolyData

On constate que le filtre produit une degradation du maillage. En effet, les points proches sont fusionnes,mais les triangles definis sur ces points sont egalement retires du maillage par le filtre. L’application devtkFilleHolesFilter ne produit alors aucun resultat, de nouveau.

Ce comportement peut etre modifie de facon a forcer la conservation des triangles, mais il en resulte laproduction d’un maillage non conforme impossible a retraiter par vtkFillHolesFilter par la suite... vtkClean-

11

Page 12: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

PolyData est donc ecarte, car ne produisant que des anomalies supplementaires.Considerant que les problemes topologiques du maillages etaient trop consequent pour etre traite par

une simple triangulation sur chacun des trous, nous nous sommes alors tournes vers des algorithmes plusrobustes, mais egalement plus lourds.

. . . .II.4 . . . . . . . .Filtres. . .de. . . . . . . . . . . . . . . .reconstruction. . . . . . . .globale

vtkSurfaceReconstructionFilter[10]

Remarque : Cette procedure est directement basee sur la these de Hugues Hoppe[11]

Cette methode ne prend en argument d’entree que des points situes sur la surface d’un objet solide 3D.une nouvelle surface est alors recalculee et decrite sur une matrice 3D indiquant la distance a la surface surl’interieur du volume, et de valeur nulle en dehors. La surface peut alors etre extraite en considerant lesconsiderant les positions de la matrice ayant des voisines de valeur nulle.

Ce filtre n’est pas standard au sens du fonctionnement general de vtk. Son utilisation requiert donc uneetape d’extraction de contours supplementaire, realisee ici par le filtre vtkContourFilter. Le traitementest local, autour de chaque point, sur une zone de taille predefinit (neighborhood size)

N.s. = 40 N.s. = 20 N.s. = 10 N.s. = 10

Figure 4 – Extraction de apres application de vtkSurfaceReconstruction

Malgre l’aspect errone de ces representations, un point remarquable est a noter : la surface, certes in-correcte, n’a cependant plus aucun probleme de recoupement, et est bien fermee. Les erreurs adviennentlorsque le parametre impute, neighborhood size, ne correspond pas a la finesse des contours initiaux. Enl’occurrence, des problemes adviennent autour des mains et des oreilles. Ces erreurs apparaissent lorsquela surface recalculee est ’retournee’ (normale exterieure oriente vers l’interieur) dans les zones de variationsrapide d’orientation des normales. Des lors qu’une erreur de ce type advient, toute une zone dependante estalors corrompue. Si la zone en question est proche des limites du domaine du scan, alors sa progression estd’autant plus accentuee par l’absence de donnees contradictoires.

Reduire ce parametre le plus possible n’est pas la solution. En effet, il reduit rapidement la stabilite dela methode et ne produit rapidement qu’un nuage indistinct, inexploitable.

12

Page 13: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

La suite de nos experiences s’est effectuee en dehors de l’environnement python-Vtk. Les filtres VTK testes’etant reveles infructueux, nous avons effectue les experimentations suivantes a l’aide de la bibliothequeVCG a travers de l’interface Meshlab.

. . . .II.5 . . . . . . . . . . . . . . . . .Reconstruction. . . .de . . . . . . . . . .poisson[12]

Ce filtre s’est rapidement impose comme la solution ideale pour notre TER. Par la suite, nous noussommes assez peu interesses a d’autres solutions sensiblement moins efficaces.

La reconstruction de Poisson combine les avantages des filtres de reconstruction locaux et globaux :— Les fonctions de bases sont associees aux volumes entourant les points et non aux points eux-memes,

sont definies localement et ont une structure hierarchique simple qui conduit a un systeme lineairecreux et bien conditionne.

— La reconstruction est optimale dans sa creation de partitions et de melanges.La reconstruction de poisson cree donc des surfaces tres lisses qui approche tres bien des nuages de pointspeu precis.

L’algorithme prend en entree un nuage de points orientes (les centres des triangles et leur normale) quisont sur la surface a refermer. Une fonction indicatrice composee de 1 a l’interieur du volume et 0 a l’exterieur

est ainsi creee, puis un champ vectoriel→V correspondant a son gradient. La reconstruction consiste ensuite

en la resolution discrete de l’equation (1) par la methode des moindre carres :

∆→χ = ∇ ·

→V (1)

Pour simplifier le maillage, les donnees sont organisees en octree : Un octree possede une arborescencerecursive de 8 noeuds formant un cube. La fonction

→χ est recherche sous forme de constante par nœuds. Si

les 8 nœuds n’ont pas la meme valeurs, les dimensions de l’octree sont subdivisees, creant 8 nouveaux octreesa la place. Ainsi, les details du maillage sont decrits avec une plus grande precision que le vide autour del’avatar, comme on peut le voir sur la figure 5.

Figure 5 – Exemple de division en octree sur le ’lapin de Standford’

13

Page 14: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

Le parametre de raffinement porte alors sur la profondeur d’octree maximum, c’est a dire le nombre dedivisions autorisees du cube de depart. lorsqu’on augmente la profondeur de 1, on divise les dimensions del’octree par 2, soit 8 fois plus d’elements en 3D.

Quand on augmente la profondeur des octree, on ameliore la precision de la reconstruction de poisson.Comme on le voit sur la figure 7, en la faisant varier, les details apparaissent. Cependant, cette precision nepeut pas etre augmentee indefiniment acr cela rend la charge de calcul trop importante.

(a) oct. depth = 5 (b) oct. depth = 6 (c) oct. depth = 7 (d) oct. depth = 8 (e) oct. depth = 9 (f) oct. depth = 12

Figure 6 – Effet de la reconstruction de poisson

Dans la suite, nous avons donc pris comme valeur une profondeur d’octree de 12, qui correspond a lameilleur precision que nous ayons pu obtenir pour des temps de calcul raisonnables.

La reconstruction de Poisson vient facilement a bout des problemes de recoupement des maillages carelle reconstruit celui-ci entierement et le lisse par la meme occasion. Ainsi, il reste tres peu d’aretes dite”caracteristique” sur le maillage : seuls les endroits tres abımes du fichier initial (extremite des doigts et despieds, oreilles, nez...) presentent encore ce type d’arete.

De meme tous les trous de faible diametre ont ete parfaitement rebouches ainsi que certains des plusgrands, ceux places sur des zones ”plates” de l’avatar (ombre de la main sur la cuisse, exterieur des bras etdes jambes, dessus de la tete...).

Les seuls problemes ne surviennent dans les grandes zones d’ombre situees aux endroits de topologiecompliquee, tels que l’entre-jambe ou les aisselles, ou bien ceux que le scanner n’a pas pu atteindre (dessousdes pieds, interieur des main).

Cependant, meme dans ces cas, l’algorithme a reussi a degager une solution acceptable bien qu’imparfaite.Ainsi les doigts sont colles entre eux et les pieds sont deformes bien que refermes, mais cela ne pose pas deprobleme dans le cas de la confection de vetements. De plus la reconstruction de poisson est le seul algorithmeessaye a avoir reussi a refermer ces zones.

Pour ce qui est des zones a geometrie en ”selle de cheval”, l’algorithme a aussi referme le maillage, maisa rajoute une fine bande de matiere. Cela doit donc etre pris en compte lors de mesures ulterieures. En effet,dans le cas de la mesure du contour des cuisses par exemple, l’intersection de l’avatar avec un plan horizontalest d’un seul tenant au lieu de deux.

Remarque : une version independante de cet algorithme est implementee en C++ dans VTK par un particu-lier. Neanmoins, il n’est pas inclus dans la bibliotheque, et son utilisation est delicate (compilation du codesource a la main, et implementation en C++ uniquement)[13].

14

Page 15: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

Figure 7 – Solution apres fermeture par l’algorithme de Poisson (octree depth = 12)

III Conclusion

Nos differents test ainsi que le travail de recherche effectue nous font penser que l’utilisation de l’algo-rithme de poisson est aujourd’hui la strategie la plus efficace pour la fermeture d’un nuage de points nonconnexes. D’autres methodes existent, comme la reconstruction de Hoppe (evoquee en II) ou le Ball PivotingAlgorithm[14], mais les resultats obtenus sont moins performant pour le probleme considere.

De facon generale, VTK reste aujourd’hui une (la ?) reference en terme de bibliotheque de visualisation3D. Son utilisation permet de manipuler des algorithmes de traitement d’image relativement lourd en chargede calcul de facon extremement fluide, et un affichage d’une simplicite fortement appreciable. En plus decela, la quasi totalite de ses fonctions sont accessible en python et tcl, preferables au C++ pour la facilitede developpement.

Cependant, elle souffre aujourd’hui d’un certain retard en terme de developpement pour le traitementsi on la compare a ses concurrents plus recents. Ainsi, les bibliotheque VCG et CGAL, bien que moinsmaniables, implementent nativement et plus efficacement les algorithmes de reconstruction de ces derniereannees, notamment celui de poisson.

Son integration a VTK est en cours, mais n’est pas encore officielle. La version existante etant un portagedirect de l’algorithme pre-existant, on peut affirmer sans risque que les resultat obtenus avec cette versionseront tres proches des exemples generes avec la bibliotheque VCG.

Par ailleurs l’avancement du projet PCL semble extremement prometteur, et l’on peut supposer qu’aujour de son aboutissement, une nouvelle generation d’outils aura vu le jour pour faire face a des nouvellesproblematiques liees au developpement des scanners 3D.

15

Page 16: TER - Fermeture d’un nuage de pointsstorage.googleapis.com/wzukusers/user-18001541/documents... · 2016. 7. 8. · Fermeture d’un nuage de points F elix Mouzet, Luc V edie , encadr

IV Bibliographie

Bibliotheques

[1] Computational Geometry Algorithms Library :http ://www.cgal.org/people.html

[2] Visualization and Computer Graphics Library :https ://www.openhub.net/p/vcghttp ://vcg.isti.cnr.it/vcglib/http ://vcg.isti.cnr.it/http ://meshlab.sourceforge.net/

[3] OpenMesh :http ://www.openmesh.org/intro/http ://www.openflipper.org/

[4] Point Clouds Library :http ://www.pointclouds.org/about/

[5] VTK :http ://www.vtk.org/http ://www.vtk.org/doc/nightly/html/http ://www.vtk.org/Wiki/VTK

Fonctionnalites VTK

[6] Pipeline : http ://www.vtk.org/pipermail/vtkusers/2006-April/035178.html[7] vtkFeatureEdges : http ://www.vtk.org/doc/nightly/html/classvtkFeatureEdges.html[8] vtkFillHolesFilter : http ://www.vtk.org/doc/nightly/html/classvtkFillHolesFilter.html[9] vtkCleanPolyData : http ://www.vtk.org/doc/nightly/html/classvtkCleanPolyData.html[10] vtkSurfaceReconstruction : http ://www.vtk.org/doc/nightly/html/classvtkSurfaceReconstructionFilter.html

Algorithmes de reconstruction

[11] Reconstruction de Hoppes : http ://research.microsoft.com/en-us/um/people/hoppe/thesis.pdf

[12] Reconstruction de Poisson :http ://www.cs.jhu.edu/ misha/MyPapers/SGP06.pdfhttp ://www.cs.jhu.edu/ misha/MyPapers/ISVC09.pdf

[13] https ://github.com/daviddoria/PoissonReconstruction

[14] Ball Pivoting Algorithm : http ://vgc.poly.edu/ csilva/papers/tvcg99.pdf

A voir egalement :[15] http ://stackoverflow.com/questions/838761/robust-algorithm-for-surface-reconstruction-from-3d-point-cloud

16