# Questions regarding 3D scanning and camera choice [closed]

A few days ago, I just shared my concerns about the price of computer vision hardware on this same exact forum (see What main factors/features explain the high price of most industrial computer vision hardware?) and I think a new but related post is needed. So here we go.

Here are some details to consider regarding the overall scanner I want to build:

• Restricted space: my overall scanner can't be larger than 3 feet cube.

• Small objects: the objects I will be scanning shouldn't be larger than 1 foot cube.

• Close range: the camera would be positioned approximately 1 foot from the object.

• Indoor: I could have a dedicated light source attached to the camera (which might be fixed in a dark box)

Here are the stereo cameras/sensors I was looking at (ordered by price):

• Two Logitech webcams (no model in particular)

• Cheap

• Harder to setup and calibrate

• Need to create your own API

• Built for: what you want to achieve

• Intel RealSense: http://click.intel.com/intel-realsense-developer-kit.html

• $100 • High resolution: 1080p (maybe not for depth sensing) • Workable minimum range: 0.2 m • Unspecified FOV • Built for: hands and fingers tracking •$150

• Low resolution (for depth sensing): 512 x 424

• Unworkable minimum range: 0.5 m

• Excellent FOV: 70° horizontal, 60° vertical

• Built for: body tracking

• Structure Sensor http://structure.io/developers

• $380 • Normal resolution with high FPS capability: 640 x 480 @ 60 FPS • Unspecified minimum range • Good FOV: 58° horizontal, 45° vertical • Built for: 3D scanning (tablets and mobile devices) • ZED Camera: https://www.stereolabs.com/zed/specs/ •$450

• Extreme resolution with high FPS capability: 2.2K @ 15 FPS (even for depth sensing) and 720p @ 60 fps

• Unviable minimum range: 1.5 m

• Outstanding FOV: 110°

• Built for: human vision simulation

• DUO Mini LX: https://duo3d.com/product/duo-minilx-lv1

• Too much expensive (not even worth mentioning)

Note: All prices are in date of April 18th 2015 and might change overtime.

As you can see, some have really goods pros, but none seems to be perfect for the task. In fact, the ZED seems to have the best specifications overall, but lacks of minimum range (since it is a large baselined camera designed for long range applications). Also, the DUO Mini LX seems to be the best for my situation, but unlike the ZED which generates really accurate depth maps, this one seems to lack of precision (lower resolution). It might be good for proximity detection, but not for 3D scanning (in my opinion). I could also try to build my own experimental stereo camera with two simple webcams, but I don't know where to start and I don't think I will have enough time to deal with all the problems I would face doing so. I am now stuck in a great dilemma.

Here are my questions:

1. What good resources on the internet give you a good introduction on 3D scanning concepts (theoretically and programmatically)? I will be using C++ and OpenCV (I already worked with both a lot) and/or the API provided with the chosen camera (if applies).

2. Should you have a static camera capturing a moving object or a moving camera capturing a static object?

3. Should I use something in conjunction with stereo camera (like lasers)?

4. Is it profitable to use more than two cameras/sensors?

5. Are resolution, FPS and global shuttering really important in 3D scanning?

6. What camera should I get (it can also be something I didn't mention, in the range of \$500 maximum if possible)? My main criteria is a camera that would be able to generate an accurate depth map from close range points.

1. My favorite is the Learning OpenCV book. It has a fantastic stereo / 3D section that introduces concepts from the ground up. If you're at a university, you might be able to find the digital version available from the library website.

2. Depends, especially on how you are going to combine scans into a full 3D pointclound (if you need 360 degree views.) Overall, moving the camera is usually harder than moving the object in my opinion.

3. Lasers can help a ton. Take a look at the MakerScanner from a few years ago (disclaimer, I designed it).

4. Extra cameras can reduce ambiguities in stereo (from, say, horizontal symmetry). In such a controlled environment, I doubt it's worth it.

5. Resolution, yes, depending on your scan technique. With something like the MakerScanner, you can use sub-pixel interpolation on the laser line to get surprisingly good accuracy, reducing the need for high resolution images. If you're in a controlled environment, FPS probably isn't much of a concern (ie just scan slower.)

6. You might consider pairing gPhoto2 with a point and shoot camera like one of the Cannons on this page, which can give you incredibly nice images for very little money. Not much in the way of realtime, but it's unclear to me that you need that.

• For your application, I also think that a laser line projector and a single camera is the best option. You don't need high FPS or global shutter since you can just scan slower if needed. Apr 22, 2015 at 22:12
• Would it be better to use a laser line projector and a stereo camera instead of a single camera? It would be the best of both worlds no? Apr 25, 2015 at 16:21
• You could do better, yes, but the benefit will be small vs. the cost of setting it up + coding it. I'd perfect the camera + laser and then see if you still need even better results. Apr 26, 2015 at 15:29
1. PCL library has all the functionality you need for 3D scanning, as well as it have the complete GPU pipeline, take a look at kinfu. Here is some tutorial regarding 3D scanning. Take a look at MeshLab too see how to do it manually.

2. Any approach will work. With object rotating on the platform you potentially has more information of object position, thus making registration step more robust (see tutorial). But anyway all the scanning algorithm steps will be the same.

3. I don't recommend you to use stereo cameras or single moving camera (structure from motion approach) for 3D scanning. Structured light sensors and time-of-flight sensors will give you much better results.

4. It is possible. Results will probably be marginally better. More data => better results.

5. Resolution and FPS - yes. But you need beefier computer to process all the data. Depending on used scanning algorithm global shuttering as well as controlled illumination and exposure are important if you want to achieve submillimeter accuracy or reconstruct texture. But I would not bother about that in the beginning.

6. Here are some structure light or ToF depth imaging sensors you might consider, including the ones you mentioned. Choose one according to your min/max range requirements, budget, processing power, SDK availability. Currently the easiest to start working with are Primesense/ASUS cameras. ROS/OpenCV/PCL - all of the support these two cameras and Kinect with a little bit of hacking:

• Thanks for your thorough answer. Regarding the PCL library, it might be interesting for testing, but I had in mind to design my own point cloud generator/object viewer with OpenCV and a custom DirectX engine (I have the knowledge to do so). Also, can you please elaborate on why stereo sensors are not as suitable as SL or ToF devices for 3D scanning? By the way, the PMD Pico camera is really interesting. Apr 29, 2015 at 19:53
• Even the best disparity algorithms so far make a lot of mistakes. We've tried ZED camera and our own stereo module, it produces lots of false positives (i.e. filling the holes) and false negatives (not seeing a depth where not enough texture features are present) areas. And you can't reliably get rid of them. Stereo cameras are better suited for outdoor long range applications, ToF and SL won't to work in direct sunlight, but stereo will frequently fail indoor, because sometimes not enough texture will be present, sometimes regular patters will degenerate the algorithm. Apr 29, 2015 at 20:15