Here is the “Shape Fusion” result of several scans of my face using the SLS-2 and David software.
This is a snapshot from Meshlab. Note that the texture map is very dark in the original .MTL file associated with the .OBJ mesh. I opened the MTL in Photoshop and maximally brightened it twice. The modified MTL still maps to the OBJ, so this is a nice way to try to improve the appearance of a mesh, at least for rendering. For 3D printing, the color map is of course not important.
In my previous post, I scanned a mannequin head. I manually rotated the chair between scans. There are several advantages involved. First, the mannequin holds still forever. His whole head is white – very reflective, so structured light scanning works well. He also has a nice, even texture all over. The result looked great, and made me think at first that real head scans would also be great. They are in fact quite a bit more difficult to capture.
I have not had much luck scanning the back of my head or that of anyone else for that matter. I think the light level is just too low. I might need to try a larger, brighter projector. I noticed that even on the David web site, the example head scan only shows the front of a person’s face.
As an aside, I was advised to not alter any hardware settings like camera aperture after calibration. I did try overexposing the camera during calibration to see if I could brighten the image. As I improve my results, I will blog about the best settings.
Here is a link to a finished product for big bucks! Seriously people, save your thousands of dollars and try to do this yourself!
SerialWriteRotatePlatform sends a scan command (letter ‘S’) to the David SLS-2 3D scanner through a
serial port. Waits for the signal (letter ‘Z’) indicating that
the scan has been saved. Turns on pin 13 to control a solid state
relay and rotate a platform.
// start serial port at 9600 bps and wait for port to open:
Serial.begin(9600);// initialize the digital pin as an output.
Serial.println(“S”); // Send scan command to David scanner
do // Wait for the scan saved indication
incomingbyte = Serial.read();
} while (incomingbyte < 90 || incomingbyte > 90);
// Rotate the platform
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(4000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(50); // wait for a second