3D Scanning using Swept-Planes
The goal of this project is to build an inexpensive, yet accurate, 3D scanner using household items and a camera. Specifically, we describe how to implement the "desktop scanner" originally proposed by Jean-Yves Bouguet and Pietro Perona, composed of five items: a camera, a point-like light source, a stick, two planar surfaces, and a checkerboard. By waving the stick in front of the light source, the user can cast planar shadows into the scene. Afterward, the depth at each pixel can then be recovered using simple geometric reasoning. Here we provide a complete MATLAB implementation, as well as several sample sequences for reconstruction. We encourage attendees to build on this code to create similar DIY scanners, including classic laser-striping designs. Please consult Chapter 4 of the course notes for additional details on the source code and test sequences.
Source code:MATLAB source code (requires Camera Calibration Toolbox): zip
Test sequences:
calibration, chiquita, frog, man, schooner, urn, yong
3D Scanning using Structured Lighting
The goal of this project is to build a 3D scanner using one or more digital cameras and a single projector. While the previous "desktop scanner" project is inexpensive, it has limited practical utility. The scanning process requires manual manipulation of the stick, and the time required to sweep the shadow plane across the scene limits the system to reconstructing static objects. Manual translation can be eliminated by using a digital projector to sequentially display patterns (e.g., a single stripe translated over time). Furthermore, various structured light illumination sequences, consisting of a series of projected images, can be used to efficiently solve for the camera pixel to projector column (or row) correspondences. Here we provide MATLAB and C/C++ source code (implemented using OpenCV) to help you build your own structured light scanner. Please consult Chapter 5 of the course notes for additional details on the source code and test sequences.
Source Code:MATLAB source code (requires Image Acquisition, Calibration, and Psychophysics Toolbox): zip
C/C++ source code (requires OpenCV version 1.1pre1): zip
Pre-compiled Windows binary (requires Windows XP/Vista): zip
Test Sequences:
Gray encoding: man, defocused man, boat, chiquita, drummer, osman, pig, urn
binary encoding: man, defocused man
Post-processing Pipeline for 3D Scanning
This project introduces basic geometry processing for polygonal meshes. In particular, we provide Java implementations of a variety of fundamental mesh operations, including: selection, deletion, and classification of vertices, edges, and faces. In addition, we provide simple tools for post-processing the point clouds produced by the various 3D scanners. Please consult Chapter 6 of the course notes for additional details on the source code and test data.