Home Made 3D Laser Scanner.

Introduction.

Several people have reported success at building cheap devices to scan a real-world 3D object into the computer. However, all seem to be a bit light on the precise details of how to do it.

We'll try to correct that.

Parts List.

You may find other ways to obtain these parts - but here is what we used:

Laser Pointer

You can find cheap red laser pointer everywhere - the kind we used seems to be vvery common. It comes with a bunch of interchangeable lenses that produce arrows, circles, dollar signs, etc. Remove the lens it comes with - you don't need it.

I paid $3.20 for mine in Fry's.

'Line Generator' Lens.

This is by far the hardest part to obtain. You need to take the point of light that the laser pointer generates and spread it out into a 'fan' of laser light which subtends at least 45 degrees. In theory, a cylindrical or semi-cylindrical lens will do the job - but we found it very hard to find one that produced a nice even line at a wide enough angle.

An initial suggestion was to use the stem of a wine glass. After testing half a dozen different kinds of glass from our kitchen, the best we found produced a very fat and uneven line.

Another possibility is to dispense with the laser pointer and use one of those 'Laser Levels' you find in DIY stores - decent ones are pricey ($100) - cheap ones ($20) produce very uneven lines. Both kinds generate very short lines - which means that you either have to limit yourself to scanning very small objects - or you have to put the laser a LONG way from the object you are scanning (which results in an even more blurry line).

We also tried using a semi-cylindrical lens found in many bookstores to allow people to read a whole line of text under magnification. This produced a very uneven and blurry line.

In the end, a professional fresnel lens was purchased from eBay - it produces an exceptionally sharp line with about a 70 degree angle. Perfect!

Here are some of the failures: (Top left: Wine glass stem mounted in a Lego mount, Top right: Cheap laser level, Bottom: Reading magnifier.)

Video Camera.

We used a SONY MegaPixel Handycam. It writes video to a small DVD which I could read directly on my computer without having to dismount the camera and carry it over to the PC to read out the data. It generates 700x480 resolution video. One handy feature is a small infrared remote contoller that allows you to start and stop recording without touching the camera (and perhaps jogging it out of alignment).

Turntable.

Since we have a small mountain of Lego Mindstorms, this was a natural solution:

Penguin is optional!

Lots of reduction gears to make things S-L-O-W.

A Lego train controller allows easily variable speed control. (Note also the remote control for the camera)

Laser Mount.

Mounting the laser and its lens into a Lego mount was a snap. I was also able to rig it up with a Lego part pressing down on it's On-switch to keep it on throughout the scan.

The laser needs to be aimed at the center of the turntable - so I built a geared adjustment rig. You could skip that step.

Camera Mount.

The camera also needs to be held firmly in place and aimed so that the center of the viewfinder lines up with the center of the turntable.

A Dark Place to Play.

We've been scanning at night with all the lights off. Rigging a simple light-proof tent of black velvet would be better.

Software.

This turns out to be fairly easy - but it could use some automation and streamlining:
  1. I used the OpenSourced 'mplayer' and 'mencoder' software under Linux to rip the DVD into a bazillion individual frames.

  2. Next, I bring up the 'xview' program and tell it to generate thumbnails for all of the images. Scrolling through the list of thumnails lets you find the a set of frames that represents one exact 360 degree rotation of the turntable. (There really needs to be an automated way to do that - but life is short)

  3. Finally, a program that I wrote examines each frame in turn to find the center of the brightest group of pixels on each scanline. This is a good approximation to the center of the laser line.

  4. You can then calculate the fraction of a screen-width by which our 3D object deflected the laser beam. Since we know the field of view angle of the camera lens - so we know the angle between the point where the laser struck the 3D object and the center of the screen (which is pointing at the center of the turntable).

  5. Since you also know the angle between the laser and the camera and the distance of the camera from the center of the turntable, you know two angles and one side of a triangle. From there, it's easy to use high school geometry to find the 2D coordinate of the point.
  6. A similar approach in the vertical dimension gives you the third dimension for the point.

  7. Since you have 480 scanlines in each of maybe a thousand frames, you now have half a million 3D points that are (hopefully) lying on the surface of the 3D object.

  8. I averaged multiple points together to reduce the inevitable noise from the approximations in the system - and after filtering, reduced it down to a few thousand 3D points.

  9. Skinning these with triangles produces the final image which can be written out in the 3D model file format of your choice.

Putting it all Together.

As you set the system up, you'll need to make a few measurements.

Grabbing textures.

It's possible to record a second video of the object rotating in front of the camera - this time with the laser turned off and the room lights on. By running this second set of data through software that extracts the colour of the pixel at every place where the laser appeared in the original sequence, we can extract a texture that can be applied to the surface of the model.

Making the texture line up exactly with the 3D image may be a little tricky if your turntable doesn't run at a pretty consistant speed.

Results.

Coming soon!