For several weeks (or more), I have been dreaming of the day I’ll get my hands on a Reprap (self-parts-printing 3D desktop printer, a DIY fabber). I have been lucky enough to have a good friend promise me he would give his free time for assembling such a printer for me as long as I pay for the parts. 3 days of work are required to assemble the parts which you can order via the web in case you don’t already have access to such a reprap, which is my case. I will try to wait for the next major release of Reprap, namely Mendel 2.0 (current version = Darwin 1.0) unless I can’t resist temptation long enough…
Anyway, I have mainly been dreaming of possible applications of fabbers. Their use is extremely competitive (and disruptively innovative) as soon as you want to print customized 3D shapes which can’t be bought from the mass-manufacturing market. For instance, a reprap is cool when you want to print a chocolate 3D version of your face (see the Fab@Home project) or a miniature plastic representation of your home or anything that has a shape which is very specific to your case (not to mention the future goal of printing 90% of complex systems such as robots, portable electronic devices including phones and… fabber-assembling robots…). And this is where 3D scanning is a must : with a 3D scanner, you can scan an existing object and build a 3D model from it which you can then modify and print at the scale you want.
So my dreams lead me to this question : I could get a fabber some time soon but how to also get a desktop 3D scanner ? Some people have already started hacking home 3D scanners. But I had also heard of techniques that allow users to build 3D models from existing objects using either a single picture of the object, 2 pictures, several images or even a small movie. Some techniques require that the parameters of the camera(s) are known (position, angles, distance, …). Some techniques require 2 cameras in a fixed and known setup (stereophotography). Some techniques require that the camera is fixed and the object lies on a turntable. I really know nothing about computer vision and the world of 3D techniques so I was happy to learn new words such as « close-range photogrammetry« , « videogrammetry« , « structure from motion« , « matchmoving« , « motion tracking » (which is the same as matchmoving) or « 3D reconstruction« . After some Web wandering, I identified several open source (of course) software packages that could offer some workable path from existing physical objects to 3D models of them using plain cameras or video cameras.
The idea would be the following :
- you take an existing, very personal object, for instance your head !
- with a common digital camera, you take pictures of your head from several angles
- you load these pictures into your favorite 3D reconstruction free software package
- it creates a 3D model of your head which you can then export to a 3D editor for possible adjustments (think Blender)
- you export your corrected 3D model into the reprap software stuff
- your reprap fabs your head out of plastic (or chocolate ?)
Here are the software projects I identified :
- From a single image :
- jSVR, Single View Reconstruction, a semi-automatic process for identifying and exporting three-dimensional information from a single un-calibrated image, dead project ?
- Using a turntable :
- Archimedes, Shape Reconstruction from Pictures, A Generalized Voxel Coloring Implementation, almost inactive ?
- From stereo images :
- BLIX, Blender Extensions allow 3D measurement using pairs of calibrated camera views and image-based modeling using pairs of calibrated camera view, probably abandonware :-(
- reconststereo, 3D reconstruction using Stereo Vision, System Prototype to make 3D reconstruction solution using stereo images, Rest In Peace
- Stereo: Photo-metrology, Easy to use software and versatile methods of digitizing 3D objects, Active and growing !
- EStereo/StereoPlus (see also this page), allowing a user to load images and compute their disparity image and visualize/manipulate their 3D reconstruction
- From a movie or a sequence of pictures :
- e-Foto, a free GNU/GPL educational digital photogrammetric workstation, but is it suitable for close-range photogrammetry ?
- Voodoo Camera Tracker, a tool for the integration of virtual and real scenes, estimates camera parameters and reconstructs a 3D scene from image sequences ; oops, this is not free software but freeware only
- Octave vision, Algorithms for the recovery of structure and motion, using Octave, a one-shot development, no future…
- Tracking / Structure from Motion, another piece of student homework
- libmv, a structure from motion library, which plans to one day take raw video footage or photographs, and produce full camera calibration information and dense 3D models, very promising but being rewritten at the moment (August 2008)
- GPU KLT a high-performance research implementation
- Using the shadow of a stick (!) :
- Scanning with Shadows (see also this site), wave a stick in front of a light source to cast a shadow on the object of interest, and figure out its 3D shape by observing the distortion of the shadow
- Don’t know which technique is used :
- OpenCV (see also this site), Intel’s Open Computer Vision library may some day contain some 3D reconstruction capabilities
- Voxelization, a .NET based framework, designed for helping in development of different volume reconstruction, 3D voxel visualization and color consistency algorithms in multi view dynamic scenes, dead project ?
My personal conclusion :
I haven’t tested any of these packages. At the moment, there seems to be no easy-to-use free software package that would compare to commercial stuff such as Photomodeler or ImageModeler or research works such as Microsoft Photosynth. However these techniques and algorithms seem to be mature enough to become present as open source package soon, especially given the emerging interest in 3D scanning for fabbers ! Most promising free packages for scannerless 3D scanning for fabbers are probably Stereo and libmv.
What do you think ?
Here is an instructable for building your home 3D laser scanner.
You can use this very good freeware : http://www.david-laserscanner.com/
Thanks for the link. I only regret this piece of software does not run on linux (except maybe using Wine ?) and, above all, it’s not open source. It also require a (non-expensive) laser, and a non-trivial setup.
What will be great is when we can achieve good enough results from a simple movie taken by a webcam (without lasers, calibration steps and so on). I hope libmv will hold such promises !
THANKS! this is what i am looking for!
Well i tried Stereo and it run well in Ubuntu 8.10. The only problem is i cant get the Graphic window (render window) to show the model. but It does give the x,y,z coordinate for selected points.
anaklelakilaut : nice to know that Stereo works (especially with ubuntu) ; I will have to try it some day. Thanks for your comment.
Sigh… it works for tutorial photo which is .tiff but When i convert my jpeg file to tiff, it doesnt work. Please tell me if you got it working when you try it
Stereo only read 8bit tiff image. I am so happy that imagemagick can easily conver to 8bit $convert myimage.tiff -depth 8 myimage8bit.tiff
Thanks for this conversion tip !
Has anybody seen this website about 3DScanning:
http://www.sjbaker.org/wiki/index.php?title=A_Simple_3D_Scanner ?
Its very basic but I like the aproach very much cause it wont have problems with cast shadows (as the shadow-stick method) and you wont have to merge different views as with other methods.
I never have tried it but it looks promising.
What do you think ?
Maybe I am going to code a commandline interface to the source …
quirxi,
Thanks for the link. It reminds me of this instructable which uses a wine glass as the projecting lens for the laser of this scanner.
Yes it seems to be the same setup – only the programm is written in C/C++.
Wonder how it works – wish I could get some test data ….
Hi,
based on the original code by Steve Baker (see: http://www.sjbaker.org/wiki/index.php?title=A_Simple_3D_Scanner) I have setup a new project for an open Source 3D Scanner.
Its called ‘ScanDraiD’ and is intended to provide a minimal, robust, flexible and platform independent code base written in C++ for an open source 3D scanner based on image analysis.
Right now it is a commandline tool that can be compiled under Unix and Cygwin.
If someone wants to try it out or join the team I would be more then glad :-)
nice research!
Man I LOVE this 3D tech! And I’m seeing it more and more in many different industries. The latest I saw was using it to translate the 3D plans into building a house by « printing » it with a concrete layering printer on the building site. Wild!