Skip to content

catree/ICP

 
 

Repository files navigation

ICP

ICP is an implementation of the Photogeometric Iterative Closest Point (ICP) algorithm in OpenCL. ICP performs real-time frame-to-frame 3-D registration, utilizing both the geometry and the texture of a scene. This way, the geometric features can guide the registration process in situations where there are faintly textured regions, and the color can be used in those places with non-salient surface topology. The implemented framework is based on the paper Real-time RGB-D mapping and 3-D modeling on the GPU using the random ball cover data structure by Neumann et al.

cover

Currently, there are two options for the rotation estimation step. One that uses rotation matrices and estimates the rotation by performing Singular Value Decomposition on the CPU. The other uses unit quaternions and estimates the rotation based on the Power Method. The rest of the computational load is executed exclusively on the GPU. Both resulting pipelines are able to perform one ICP iteration in about 1.1 millisecond, for input sets of |F|=|M|=16384 landmarks and |R|=256 representative points.

Note

The project was developed and tested on Ubuntu 14.04.2, on a system with an AMD R9 270X GPU.

The complete documentation is available here.

For more details on the implemented algorithms, take a look at the project's wiki.

Dependencies

The project has dependencies on the CLUtils, GuidedFilter, RandomBallCover, and Eigen libraries.

All these dependencies are automatically downloaded by cmake, if they are not available on your system. Please note that you'll have to configure Mercurial before Eigen is downloaded.

Examples

There are three applications. kinect_frame_grabber that is able to capture point clouds from Kinect (you'll have to install libfreenect to build it). icp_step_by_step visualizes the process of frame-to-frame registration, step by step. icp_registration presents how to set up the ICP pipeline.

Compilation

git clone https://github.com/pAIgn10/ICP.git
cd ICP

mkdir build
cd build

cmake -DBUILD_EXAMPLES=ON ..
# or to build the tests too
cmake -DBUILD_EXAMPLES=ON -DBUILD_TESTS=ON ..

make

# optionally, capture a pair of point clouds
./bin/kinect_frame_grabber -f -s left
./bin/kinect_frame_grabber -f -s right
# to run the examples (from the build directory!)
./bin/icp_step_by_step
# or if you recorded your own pair of point clouds
./bin/icp_step_by_step kg_pc8d_left kg_pc8d_right

# to run the tests (e.g.)
./bin/icp_tests_icp
# or with profiling information
./bin/icp_tests_icp --profiling

# to install the libraries
sudo make install
# you'll need to copy manually the kernel 
# files into your own projects

# to build the docs
make doxygen
firefox docs/html/index.html

About

An implementation of the Photogeometric ICP algorithm in OpenCL.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 82.4%
  • C 12.5%
  • CMake 5.1%