GPU Scanalyze ( ICP ) ICP

Dear all,

This is the first release of GPU Scanalyze. Scanalyze is an application for registering meshes using ICP and has been developed at Stanford University under the supervision of Prof. Marc Levoy. The bottleneck of ICP is finding the pairs that are close with each other between the two meshes.
I am using for the time being (and I think will be using) Lawrence Cayton RBC in GPU for finding these pairs.
For the time being it only registers ply files.

Download it in your CUDA enabled Mac and use it either as a hobby or professionally for small to very large datasets. The advice is not to set the sample rate above 3-4 million of points.

Use : Unzip the attached application and double click on the Michelangelo head icon. Simple as that.

Important note : In order to run the ICP process of GPUScanalyze you should have sufficient GPU memory. For this reason I have put at the lower right end two meters of the form CPU:xxx / GPU:xxx
The first meter indicates how much memory GPUScanalyze occupies on the CPU side (Host side) and the GPU meter tells you how much remaining GPU memory you have for CUDA purposes. If the GPU meter is very low ICP might not run, ICP is not performed in this case and a pop up appears telling you so.

Here is a video of how to register meshes :

GPUScanalyze Video Demo

The above registration is just a demo, it needed more culling in order to be precise.
Also since Lawrence RBC is extremely fast even on a million point data set sampling, use the maximum in iterations (20).

GPU Scanalyze will continue to evolve to include plugins like surface reconstruction etc and when it is mature it will go into the Apple Mac Store. So far so good. I have fixed memory leaks and bad memory allocations, meaning that you will not be screaming at your screen if Scanalyze throws a memory exception in the middle of a tedious session. Lawrence RBC is memory leak proof, meaning that your GPU memory wont be dried after successive registrations.

Just to show an example I have reconstructed Stanford’s dragon.

First comes the registration step where the scans provided by Stanford are aligned using GPUScanalyze :

This session involved the registration of 50+ range views and I did not find any trouble, thus the process is error proof.
Here are the data (ply file) of the aligned data set : Dragon aligned

Next I have used Poisson surface reconstruction on the aligned data set and got this very smooth result :

Here are the data (ply file) of the reconstructed 3D object : Dragon reconstructed

Also here is a nice setting to run ScanalyzeGPU. A dual monitor. On one screen the main window and on the other the tools needed for ICP :

Alexander. (826 KB)

Also : Since ScanalyzeGPU is in the development stage probably there is a need for some plumbing to fix some memory leaks.

If you would like to participate in the development of this Software (know CUDA and C++) you can e-mail me so that some work could be divided in groups. At the end I will put in the Apple Store the application with all the names who participated in its design. The next application that I want to embed in Scanalyze is GPU-based Poisson surface reconstruction : Highly Parallel Surface Reconstruction from Microsoft Research. Mail me if you want to participate in coding this paper.


Note : Added a nice Michelangelo head and the icon appears also on the toolbar (or as they call it the dock). Unfortunately a bundle like this can be done only in Mac OS X. It is now a nice doubleclickable application. You can put the application anywhere you like.

Ok. It is now set. I will work on this project again when I find time and update this thread.


Added a warning if ICP can’t be performed due to GPU low memory. Also fixed with Lawrence some remainder memory leaks in the RBC, me pointing “hey there are some leaks in the host side”…“he searching and plumbing the remaining leaks”. Great job Lawrence! Now it is watertight. There seems to be a problem with ScanalyzeGPU working alongside with VMware Fusion in a GPU demanding environment like Virtual Windows 7.

Also there are some minor memory leaks caused by the calls to cudaMemcheck, but that’s within NVIDIA’s code.

List of things to do and already done

  1. Fixed the memory leak of host and device
  2. Fixed ScanalyzeGPU to create a home dir called ScanalyzeHome to store information
  3. Need to upgrade the code to run in TCL/TK 8.5 which supports custom cursors
  4. Need to fix the load of SD files and being able to load data sets of various industrial types
  5. On the stages of constructing a Parallel surface reconstruction suitable for a(multi) GPU with a limit on GPU memory (Using the new features of CUDA 4 on SLI)
  6. Global registration and optimization of multi view scans using state of the art techniques
  7. Contact with companies so that to create interface to directly load the scans on ScanalyzeGPU
  8. Ability to insert just point clouds from the scanner and quickly triangulating the data points using the GPU
  9. A fully GPU based surface reconstruction of noisy data points with a limit on memory usage
  10. Making the code available to the scientific community under a GNU license
  • New member added, he is a teacher in China interested in Computer Graphics and CUDA. Hope more to join and make GPUScanalyze an International software release. It surely takes more than two to make the plan a reality.

Porting the application from TCL/TK 8.4 to Cocoa based TCL/TK 8.5. ScanalyzeGPU for Mac OS X will continue to evolve investing in the fact that Apple will gain a good reputation in 3D. The only way I believe for this to be achieved is to invest on 3D game programming and an attempt to please both NVIDIA and AMD. This is what Windows have done. My plan is also to invest in OpenCL. No matter how OpenCL evolves I believe it will always be compatible with current programs.