# ICP

## Implementation of the photogeometric ICP algorithm in OpenCL

Published on June 17, 2015

### Website:https://github.com/nlamprian/ICP

ICP is an implementation of the Photogeometric Iterative Closest Point (ICP) algorithm in OpenCL. ICP performs real-time frame-to-frame 3D 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 3D modeling on the GPU using the random ball cover data structure by Neumann et al.

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.

It’s quite easy to do 3D registration in your own applications. You configure and initialize an ICP object, write the sets of landmarks on the device buffers, possibly offer an initial estimation of the transformation, execute the kernels, and get back the estimated homogeneous transformation. Below is a dummy example to showcase the workflow. For more details, take a look at the example in the repository.

You can find the complete documentation at icp.nlamprian.me. The source code is available on GitHub.