Scan3D
à l'occasion de la fabacademy j'ai réalisé divers tests de scan 3D avec différentes techniques
Sommaire
Photogramétrie
Cette technique issue de la photographie aérienne permet de déduire une forme 3D de plusieurs vues 2D d'un objet prises sous différents angles.
elle peut être précise et est assez pratique de par le fait qu'elle utilise un simple appareil photo comme capteur. elle est aussi de ce fait adaptable à de différentes échelles d'objets. Par contre elle est difficile à mettre en oeuvre car les calculs mathématiques sont compliqués.
Une version commerciale de cette technique est disponible en ligne depuis peu avec 123Dcatch d'autodesk. Mais il existe des solution libres.
openMVG
librairies de reconstruction par homographie (plusieures prises de vues)
Cette librairie se veut simple...mais j'ai réussi à la compiler et à jouer les exemples, je n'ai pas compris comment m'en servir...
MicMac
http://logiciels.ign.fr/?Micmac
Développé à l'IGN, ce logiciel a l'air très performant (j'ai testé l'exemple bouddha) mais compliqué d'abord aussi
un article en français sur le sujet
bouddha
c'est le fichier exemple fourni sur le site de l'ign:
Ceci est une des 30 images des données de départ
le nuage de points dans meshlab
Ceci m'a permis de tester la reconstruction dans meshlab, avec le filtre "surface reconstruction poisson"
Le rendu est très satisfaisant mais, même si j'ai réussi à le mettre en oeuvre, j'ai eu du mal à comprendre les réglages à réaliser.
à creuser...
interface graphique
j'ai trouvé une interface graphique : http://www.micmac.ign.fr/svn/micmac_data/trunk/DocInterface/
VisualSFM
plus facile apparement
un tutoriel là : http://combiencaporte.blogspot.fr/2012/07/la-photogrammetrie-visualsfm-et-meshlab.html
j'ai testé mais pas trouvé concluant
meshlab
Meshlab est un logiciel de traitement et reconstruction de maillage. il est très utile pour filtrer les résultats d'un scan
ouvrir des .ply en ascii 1.0
dans ma version de meshlab (dans les paquets de ubuntu 12.04) meslab n'arrive pas à ouvrir des fichiers .ply en ascii 1.0, à cause d'un problème de localisation (language) http://sourceforge.net/p/meshlab/bugs/162/
la solution est de l'ouvrir avec l'option :
$ LC_ALL=C meshlab
ressources pour meshlab
deux ou trois liens qui expliquent les rudiments de la reconstruction de maillage
http://meshlabstuff.blogspot.fr/2009/09/meshing-point-clouds.html
expérience avec la Lumière structurée
Cette technique offre plusieurs avantages :
- dispositif de capture simple (caméra+projecteur)
- changement d'échelle possible
- simplicité du traitement
J'avais déjà découvert cette technique en visitant l'institut P Prime à poitiers, qui l'utilise pour mesurer les déformations des matériaux.
J'ai téléchargé et exploré le programme de Neil, pour voir jusqu'où je pouvais aller.
C'est donc un programme en cours de construction que j'ai exploré.
Comme j'étais chez moi sans les outils pour réaliser une capture, j'ai commencé par me focaliser sur le traitement du fichier de capture pour obtenir un fichier stl.
process de traitement
Habitué à traité les images, j'ai trouvé simple de traiter l'essentiel des données sous cette forme, avant la transformation en stl.
Les fichiers de départ sont le "diffs.png" et une image recomposée d'un scan d la zone vide.
Les traitements ont été réalisés dans gimp, mais certains pourraient être automatisés, notamment à l'aide de la librairie opencv (déjà utilisée dasn le programme de Neil).
Pour le passage du png en stl, j'ai utilisé le programme png_stl
la dernière étape (visible sur l'image) a consisté à appliquer un modifieur "smooth" sous blender.
Le résultat n'est pas si mal, mème si la régularité de la surface laisse encore à désirer.
Prise de vue
Revenu à l'atelier, j'ai installé un dispositif pour réaliser une prise de vue expérimentale.
- un videoprojecteur
- une webcam HD (logitech hd1080)
après quelques réglages, notament le réglage manuel de la caméra via guvcview, j'ai obtenu les images suivantes :
la théière :
./coord teapot/teapot.png 0 /dev/video2
le fond vide :
./coord teapot/empty.png 0 /dev/video2
j'ai mélangé ces images : soustraction puis addition de teapot en "éclaircir seulement", puis re-soustraction du fond vide :
enfin, quelques retouches manuelles :
le fichier est alors converti en stl avec la commande
./png_stl teapot/teapot.clean.png teapot/teapot.stl 5
Dans blender j'ai rajouté un modifieur "smooth" à 1.8 et 5 passes.
le résultat est encourageant. il faudrait améliorer les conditions de prise de vue :
- noir complet lors de la prise de vue
et effectivement la parallaxe est génante.
kinect
Le capteur kinect est adapté pour scanner des formes à échelle humaine.
J'ai utilisé openkinect (freenect) avec l'utilitaire fakenect record, qui produit des capture brutes sous forme d'image png.
Les scans bruts sont très bruités et avec des trous liés aux zones d'ombres de la projection infrarouge.
Pour améliorer le rendu, j'ai empilé des scans en "assombrir seulement" avec gimp.
après quelques retouches manuelles j'ai obtenu un fichier à peut près propre
après une transformation en stl avec l'utilitaire de Neil (png_stl) j'ai obtenu un fichier 3D exploitable
Dans blender, j'ai ajouté ici aussi un filtre "smooth" et "solidify", pour exporter un fichier stl imprimable.
(il est vrai que ça aurai été mieux si j'avais été chez le coiffeur)
Mon égo n'est pas assez développé pour que j'imprime mon effigie, mais j'ai validé que ce fichier est imprimable