I was about to embark on finally fixing my homemade structured light implementation (created in a Computer Vision class), when I stumbled across this amazing site.
Recently at SIGGRAPH 2009 there was a course on 3D scanning with structured light. I wasn’t able to make SIGGRAPH this year because I was working at Walt Disney Imagineering, so I didn’t find out about this course until this week. The course will also be at SIGGRAPH Asia on Dec. 16th, so make your way over to Japan and check it out.
The course features extensive notes explaining structured light and basic Matlab and C++ implementations.
Essentially, structured light uses a projector and a camera to create a 3D scan. Normally humans perceive depth based upon triangulating the location of an object using our left and right eye. In structured light you can think of the camera as your left eye and the projector as your right eye. Through projecting a series of uniquely identifiable codes the camera sees for the projector. The hardest part of implementing this is the calibration of the projector and camera. This involves determining the parameters of the lenses and the location/orientations of the projector/camera.
I’ve spent some time modifying the above code (which was very similar to my own implementation a few months ago, only it works
). The SL code now works with the Canon EDSDK. I am using my Canon T1i DSLR as the camera and an old NEC VT540 projector(1000 lumens).
I also have modified the calibration process to use a red/blue checker board pattern. In my opinion this makes the projector calibration step easier and more robust (I have no facts to back this up). Essentially, you use a red/blue checkboard pattern which appears black/white in intensity under red light. However, the pattern is roughly gray in intensity under white light. This technique come from “A Novel Method for Structured Light System Calibration” by Zhang, S. & Huang, P.
I will be posting my modified source code soon. I would be very interested in turning this into a full fledged open source project. With a minimal amount of work we could probably support most of the common camera SDKs (aka Point Grey, Dalsa etc). It would also be nice to make a GUI and support a wider range of output options. Any takers?

Check back soon for code and goodies.