Here is an early 3D scan from our latest prototype scanner. EARLY is a key word here, because our scanner has only been operational for a couple of weeks. During the last year my team has completely upgraded the scanner hardware including cameras, lenses, chassis, and calibration tools. We have also ported our software from from Windows to Linux and from CUDA to OpenCL. We have weeks of fine-tuning and calibration that still needs to be done, but we feel that the early results are worth posting. The new system is called Proto-5A, and below lists the most significant improvements over its predecessor Proto-4F:
Produces higher resolution 3D scans
Scans 10x to 20x faster
Uses less power
Scans with nearly 100% reliability
Below is a first test example of Proto-5A's output. I'll upload better versions as they are produced.
This was a risky upgrade of both hardware & software. While it was our 13th hardware iteration, it was our first major change in nearly 5 years. Our plan was sound, and we managed to avoid the Second System Effect that can kill a project that is too aggressive. Instead of adding unnecessary bells & whistles, we refined proven features and eliminated compromises and inefficiencies that had worked their way into this 12-year project. The result of our efforts is clean, fast and efficient scanner.
We have proven the Proto-5A approach is viable, and we are motivated to begin making plans for Proto-5B: a smaller and lighter version. Proto-5B will be low risk because it will use 90% of Proto-5A's software. Most of the effort will go into designing a new circuit board that will integrate all of our current off-the-shelf boards. This new board will improve performance and reduce system size, weight and cost. We have the necessary skills to design and build the board, but collaborating with a more established team would also be attractive.
Now that the bulk of the 3D-360 R&D has been completed, we have begun the search for a partner who is interested in adapting the system for a specific market (or markets). Potential 3D applications include photorealistic architecture scanning, insurance or forensic scanning, content creations for training or video games, content creation for head mounted VR such as Oculus, and robotic visions & navigation. VR & robotics are exciting options, but we will pursue whatever market makes sense.
Below are our objectives for the rest of 2015:
Find a partner interested in moving the Proto-5x concept forward. The ideal partner could support our development plan, or we could jointly develop a new plan. The 3D-360 IP is valuable, and we need a partner willing to help defend our international 3D-360 patents.
Expand the capabilities of our 3D Scanning process. Our scanner can be configured to produce high resolution photorealistic scans in about 5 minutes, or it can produce high-speed low-resolution scans at 10 to 60 Hz (we haven't benchmarked high-speed yet). We will spend the summer developing routines to enable & refine these features.
Collect feedback from potential users/customers by participating in online 3D communities. We will solicit market feedback by posting downloadable 3D models. The market feedback will help shape our future development.
We spent the summer of 2012 enhancing our 3D scanner. The 3D scan below with 3.5 million points shows that the system can now produce high-resolution 3D models. Some improvement was the result of integrating code from the open source projects Point Cloud Library & OpenCV, but the largest improvement came from camera recalibration.
Why did we need to recalibrate?
Over the last year it seems that 4 of the 8 image sensor boards in our prototype had vertically shifted up to 5 pixels since the last calibration. Because stereo cameras need to be calibrated to within at least 1/2 pixel, a 5 pixel error is completely unacceptable. The 5-pixel shift represents a very small mechanical change. The pixels on our image sensor are 2.2 microns per side, so a 5-pixel error is a shift of only 11 microns: less than the diameter of one human hair!
The quality of our 3D models improved significantly once we corrected the problem by shifting our images up or down the appropriate number of pixels.
Why wasn't this shift discovered sooner?
Our stereoscopic camera system had been producing good results, so we incorrectly assumed that the cameras were still calibrated. Because we trusted the calibration, we spent the summer carefully reviewing everything else in the system. During our search we optimized the code to improve 3D reconstruction speed and quality, but certain problems remained. It wasn't until this September that we identified and fixed the calibration problem.
This experience has demonstrated the robustness of our 3D scanning approach which uses both passive pixel matching and pattern projection. Before we fixed the calibration errors, the passive pixel-matching part of our scanning process was effectively disabled. Our robust pattern projection is the only reason that we were able to produce usable 3D models from such a poor calibration. Now that we have both good calibration and solid pattern projection, our results are the best ever. Next Steps
There are still some loose ends from this summer's work that we want to tie up by the end of the year. These last few tweaks will improve 3D accuracy and reduce or eliminate the distortion in surfaces that should be flat.
Finally, we have also gained a valuable insight for the next design. The new system will be designed to maintain camera rigidity/stability to within about 1/10 micron. This is about 100x better than the current prototype. We plan to finalize the new system design and begin construction in 2013.
Photorealistic 3D scanning has unique requirements when compared to regular photography. Because a 3D model will be viewed from multiple perspectives, the 3D scanner must be able to capture multiple perspectives. Not only must you move left and right when scanning, you must also move up and down. This scissor jack was built to allow us to easily move the 3D-360 up and down. Tomorrow we begin scanning with this new capability.
The cameras are finally calibrated, and the communications and power systems are installed and working. Now I can finally begin producing scans to test and fine tune the software.
Today I scanned part of the lab, and the animated GIF illustrates the 3D nature of the scan. When producing a 3D model, multiple perspectives must be captured to fill in occlusions (blind spots). For this model, three scans from different locations were merged to produce a point cloud. The GIF consists of 7 different screen-shots of the point-cloud. While there are still occlusions, many have been filled. For example, notice that you can see both above and below the table.
The original 32-bit software that we use to turn pictures into 3D models is almost 5 years old, and it runs on 32-bit Windows XP. The old software often crashes when processing high resolution images because the 2GB memory limit isn't enough to process the gigabytes of data that our scanner can quickly produce. Today's scan was made on a computer running 64-bit Windows 7, and we are currently replacing the old 32-bits software with more advanced 64-bit code. The new software runs much faster in 64-bit mode because it can keep temporary files in RAM instead of writing them to and reading them from a slow disk. Even using a Solid State Drive (SSD) wastes minutes of unnecessary processing.
COMING UP: Much better scans processed by SketchUp & posted into Google Earth.
The Prototype-4.x family of 3D-360s is based on a camera that we have been developing for over a year. While several areas of enhancement are still left to be implemented, the new camera is ready to be compared against the Canon 5D. Prototype-3 used eight Canon 5Ds, and the new camera in Prototype-4 needs to meet or exceed the 5D's performance.
One significant difference between our camera and the Canon 5D is that the 5D (and all other color cameras) uses tiny color filters arranged in a Bayer pattern on top of the individual pixels inside of the camera. While the 5D has 12 million pixels, only 3 million are RED, 6 million are GREEN, and 3 million are BLUE. Our camera is arguably a 15 million pixel sensor because it cycles through three large filters with the 5 million pixel monochrome sensor to produce 5 million RED pixels, 5 million GREEN pixels, and 5 million BLUE pixels. Our camera is immune to color artifacts caused by the Bayer patterns, but taking a picture takes three times longer because the filters must be rotated into place between shots. Fortunately our system automatically changes between filters in less than one second. In the future we may want to add filters for other parts of the spectrum including infrared (IR) and ultra violet.
The purpose of this test is to compare the color reproduction, noise, and Bayer pattern artifacts between the two cameras. The 5D has a 14mm Canon lens, and the FOV is similar to our custom lens. Here is the test procedure:
1) Take a picture with each camera in RAW mode
2) Use minimal automatic processing on each image. For the 3D-360 Photoshop was used for color balance and sharpening. For the Canon 5D the image was processed with DxO
3) Compare the cropped images at actual size and zoomed to 600%
Here are the results:
Above is the shot from the Prototype-4 camera,
And below is the shot from the Canon 5D.
The two shots show that our camera compares well to the Canon 5D. A slight BLUE halo is visible to the left of some objects, but this may be caused by a dirty or warped Wratten filter.
Below is a zoomed comparison of the areas the GREEN circles.
Close inspection shows that the 3D-360 camera has less noise and fewer Bayer pattern artifacts, but the 5D seems a little sharper. The difference in sharpness could be related to the dynamic range of the two images. The raw 3D-360 image covers a linear range of 24 bits, but the 5D covers a smaller range of only 12 bits. We use a combination of linear and logarithmic curves to squeeze the 24 bits per pixel per color channel down to 16 bits per pixel per channel. To improve contrast we may reduce our range from 24 bits to 22 bits.
I am pleased with this early test, and we are currently implementing upgrades that should make the difference even more dramatic.