Iterative closest point
This article includes a list of references, but its sources remain unclear because it has insufficient inline citations. (February 2017) (Learn how and when to remove this template message)
Iterative Closest Point (ICP)  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.
In the Iterative Closest Point or, in some sources, the Iterative Corresponding Point, one point cloud (vertex cloud), the reference, or target, is kept fixed, while the other one, the source, is transformed to best match the reference. The algorithm iteratively revises the transformation (combination of translation and rotation) needed to minimize an error metric, usually a distance from the source to the reference point cloud, such as the sum of squared differences between the coordinates of the matched pairs. ICP is one of the widely used algorithms in aligning three dimensional models given an initial guess of the rigid body transformation required. The ICP algorithm was first introduced by Chen and Medioni, and Besl and McKay.
Inputs: reference and source point clouds, initial estimation of the transformation to align the source to the reference (optional), criteria for stopping the iterations.
Output: refined transformation.
Essentially, the algorithm steps are:
- For each point (from the whole set of vertices usually referred to as dense or a selection of pairs of vertices from each model) in the source point cloud, Match the closest point in the reference point cloud (or a selected set).
- Estimate the combination of rotation and translation using a root mean square point to point distance metric minimization technique which will best align each source point to its match found in the previous step after weighting and rejecting outlier points.
- Transform the source points using the obtained transformation.
- Iterate (re-associate the points, and so on).
Zhang  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.
- Sparse ICP Robust implementation of the ICP algorithm using sparse norms (both point to plane and point to point). Header only C++ (Mozilla Public License v. 2.0)
- 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.
- ICP implements many variants of ICP in Matlab. It is released under the BSD 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.
- PointCloud tools for Matlab contains an implementation of the ICP algorithm, which can be used for the simultaneous alignment of an arbitrary number of point clouds. Released under the MIT license.
- cilantro is a small open-source C++ library of point cloud utilities with ICP implementations.
- 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.
- 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.
- 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.
- Rusinkiewicz, Szymon; Marc Levoy (2001). Efficient Variants of the ICP Algorithm. Proceedings Third International Conference on 3-D Digital Imaging and Modeling. Quebec City, Quebec, Canada. pp. 145–152. doi:10.1109/IM.2001.924423.
- Pomerleau, François; Colas, Francis; Siegwart, Roland (2015). "A Review of Point Cloud Registration Algorithms for Mobile Robotics". Foundations and Trends in Robotics. 4 (1): 1–104. doi:10.1561/2300000035.
- Kok-Lim Low (February 2004). "Linear Least-Squares Optimization for Point-to-Plane ICP Surface Registration" (PDF). Comp.nys.edu.sg. Technical Report TR04-004, Department of Computer Science, University of North Carolina at Chapel Hill. Retrieved 2017-02-27.
- 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.
- Holz, Dirk; Ichim, Alexandru E.; Tombari, Federico; Rusu, Radu B.; Behnke, Sven (2015). "Registration with the Point Cloud Library: A Modular Framework for Aligning in 3-D". IEEE Robotics Automation Magazine. 22 (4): 110–124. doi:10.1109/MRA.2015.2432331.
- Iterative cage-based registration for dynamic shape capture (2012) (Yann Savoye)
- Iterative Point Matching for Registration of Free-Form Curves and Surfaces (1992) (Zhengyou Zhang)
- Derivation of ICP Equations
- Efficient Variants of the ICP Algorithm
- Finite Iterative Closest Point Method Matlab
- Iterative Closest Point Method in Matlab
- Iterative Closest Point Method in C++
- Iterative Closest Point algorithm in VTK
- Iterative Closest Point implementation in C++
- A modular Iterative Closest Point implementation in C++
- Evaluation data sets for 3D registration algorithms
- Complex 3D shape recovery using hybrid geometric shape features