# Iterative closest point

Iterative Closest Point (ICP) [1][2][3] is an algorithm employed to minimize the difference between two clouds of points. ICP is often used to reconstruct 2D or 3D surfaces from different scans, to localize robots and achieve optimal path planning (especially when wheel odometry is unreliable due to slippery terrain), to co-register bone models, etc.

The algorithm is conceptually simple and is commonly used in real-time. It iteratively revises the transformation (translation, rotation) needed to minimize the distance between the points of two raw scans.

Inputs: points from two raw scans, initial estimation of the transformation, criteria for stopping the iteration.

Output: refined transformation.

Essentially the algorithm steps are :

1. Associate points by the nearest neighbor criteria (for each point in one point cloud find the closest point in the second point cloud).
2. Estimate transformation parameters (rotation and translation) using a mean square cost function (the transform would align best each point to its match found in the previous step).
3. Transform the points using the estimated parameters.
4. Iterate (re-associate the points and so on).

Zhang [3] proposes a modified K-D tree algorithm for efficient closest point computation. In this work a statistical method based on the distance distribution is used to deal with outliers, occlusion, appearance, and disappearance, which enables subset-subset matching.

There exist two ICP variants, point-to-point, and point-to-plane. The latter usually performs better in practice.[4][5]

• libpointmatcher is an implementation of both point-to-point and point-to-plane ICP. It is released under a permissive BSD license.
• LIBICP: C++ Library for Iterative Closest Point Matching, released under the GNU General Public License.
• MeshLab an open source mesh processing tool that includes a GNU General Public License implementation of the ICP algorithm.
• CloudCompare an open source point and model processing tool that includes an implementation of the ICP algorithm. Released under the GNU General Public License.
• PCL (Point Cloud Library) is an open-source framework for n-dimensional point clouds and 3D geometry processing. It includes several variants of the ICP algorithm.
• Open source C++ implementations of the ICP algorithm are available in VTK and ITK libraries.

## References

1. ^ Besl, Paul J.; N.D. McKay (1992). "A Method for Registration of 3-D Shapes". IEEE Trans. on Pattern Analysis and Machine Intelligence (Los Alamitos, CA, USA: IEEE Computer Society) 14 (2): 239–256. doi:10.1109/34.121791.
2. ^ Chen, Yang; Gerard Medioni (1991). "Object modelling by registration of multiple range images". Image Vision Comput. (Newton, MA, USA: Butterworth-Heinemann): 145–155. doi:10.1016/0262-8856(92)90066-C.
3. ^ a b Zhang, Zhengyou (1994). "Iterative point matching for registration of free-form curves and surfaces". International Journal of Computer Vision (Springer) 13 (12): 119–152. doi:10.1007/BF01427149.
4. ^ http://www.comp.nus.edu.sg/~lowkl/publications/lowk_point-to-plane_icp_techrep.pdf
5. ^ François Pomerleau, Francis Colas, Roland Siegwart, and Stéphane Magnenat. Comparing ICP Variants on Real-World Data Sets. In Autonomous Robots, 34(3), pages 133–148, DOI: 10.1007/s10514-013-9327-2, April 2013.