---
kind: concept
slug: iterative-closest-point
title: Iterative closest point (ICP)
summary: >-
  Iterative closest point aligns two point clouds by alternating correspondences with a closed-form rigid fit (SVD). Variants differ in correspondences, residuals and weights. Classic ICP assumes equal point counts, which partial views break. Learned matching (PRNet) and semantic weighting (SuMa++) respond; SoGraB uses ICP only to pre-align.
tags: [point-cloud, registration, lidar, slam, correspondence, deformation]
papers: ["1910.12240", "2105.11320", "2411.19408"]
related: [image-registration, local-feature-matching, simultaneous-localization-and-mapping, lidar-inertial-odometry, unsupervised-keypoint-detection, surfel-mapping, chamfer-distance, benchmark-validity]
status: draft
updated_at: 2026-10-25
---

## Overview

ICP finds the rigid motion (rotation and translation) that lines up one point
cloud with another. It repeats two steps: choose correspondences between the
clouds under the current motion, then solve for the best rigid motion for those
correspondences [arxiv:1910.12240 §3.1]. The closed-form fit is shared by most
variants: centre both sets, form the cross-covariance, take its SVD, and read
the rotation and translation off the factors [arxiv:1910.12240 §3.1].

The variants differ in how they choose correspondences, which residual they
minimise and how they weight each residual. The invariant that all of them
rely on is the closed-form fit for a fixed correspondence.

## Variants

### Classic ICP with nearest-neighbour correspondences

The baseline form alternates a nearest-neighbour mapping with the closed-form
fit [arxiv:1910.12240 §3.1]. Its stated formulation assumes both clouds have
the same number of points, M = N [arxiv:1910.12240 §3.1]. Partial views
violate this: usually N ≠ M and only subsets of the two clouds match
[arxiv:1910.12240 §3.2].

On the ModelNet40 partial-to-partial split, the PRNet authors report a rotation
MSE of 1134.552 for ICP, against 10.235 for PRNet [arxiv:1910.12240 tab. 1].
These are author-reported results on synthetic motions. The paper does not
describe the ICP baseline's settings beyond its text [arxiv:1910.12240 §4.1].
Card: [PRNet: Self-Supervised Learning for Partial-to-Partial Registration](/papers/1910.12240).

### Frame-to-model point-to-plane ICP with robust and semantic weights

SuMa++ aligns each new LiDAR scan to a surfel map rather than to the previous
scan [arxiv:2105.11320 §III-F]. Each residual is the distance along the model
surface normal at the projected point, so the solve is a Gauss-Newton step on
a point-to-plane objective [arxiv:2105.11320 §III-F]. Each residual is weighted
by a Huber weight, by a semantic compatibility term, and by an indicator for
whether the surfel is stable [arxiv:2105.11320 §III-F]. Where a point's label
disagrees with a movable-class surfel, the semantic term lowers its influence,
so moving objects count less in the pose estimate [arxiv:2105.11320 §III-E]
[arxiv:2105.11320 §III-F].

The paper's KITTI odometry result is for the full system. The average
translational error on training sequences 00–10 falls from 0.83% (SuMa) to
0.70% (SuMa++), author-reported [arxiv:2105.11320 §IV-B]. The result tables
compare whole systems and do not isolate the effect of the semantic ICP
weights [arxiv:2105.11320 §IV]. Card: [SuMa++: Efficient LiDAR-based Semantic SLAM](/papers/2105.11320).

### Learned iterative matching

PRNet keeps the iteration and the closed-form fit but replaces the
nearest-neighbour step with a learned, soft matching between keypoints
[arxiv:1910.12240 §3.2]. Each pass samples a near-one-hot matching, solves the
motion, moves the source and repeats; training runs three passes
[arxiv:1910.12240 §3.2]. The network is trained self-supervised on synthetic
motions [arxiv:1910.12240 §4.1].

On partial ModelNet40 the authors report a rotation MSE of 10.235, against
45.005 for DCP-v2 [arxiv:1910.12240 tab. 1]. On real Stanford Bunny scans the
model was fine-tuned on 100 synthetic examples per scan; the paper gives
qualitative results only [arxiv:1910.12240 §4.2]. Card: [PRNet: Self-Supervised Learning for Partial-to-Partial Registration](/papers/1910.12240).

### ICP as a pre-alignment step for a deformation score

SoGraB uses ICP for a different purpose. It does not estimate motion for
its own sake. It aligns the grasped object's point cloud to the pre-grasp
cloud, and a Density-Aware Chamfer Distance between the aligned clouds then
measures how much the object deformed [arxiv:2411.19408 §3.1]
[arxiv:2411.19408 §3.2]. The ICP starts from a pose estimate taken from the
robot's kinematics [arxiv:2411.19408 §3.2]. For symmetric objects with large
deformation, the paper aligns centres of mass and principal axes instead
[arxiv:2411.19408 §3.2].

The paper says ICP approximates the transform reliably for moderate
deformation, given a good initial estimate [arxiv:2411.19408 §3.2]. The
reported results are grasp outcomes and scores, with no measure of alignment
accuracy [arxiv:2411.19408 §5]. The paper does not name the ICP type. The
released code uses point-to-point ICP, with a distance threshold of 10000 and
fixed initial matrices chosen by gripper angle, and it has no centre-of-mass or
principal-axis step. The card lists these differences
[card: Paper vs code](/papers/2411.19408). Card: [SoGraB: A Visual Method for Soft Grasping Benchmarking and Evaluation](/papers/2411.19408).

## When to use which

| Situation | Use | Why |
|---|---|---|
| Two clouds with near-complete overlap, no labels, no training budget | Classic ICP with nearest-neighbour matching | Needs no training. The equal-size assumption is what the paper's formulation rests on [arxiv:1910.12240 §3.1]. |
| Partial views of one object class, with synthetic training data available | Learned iterative matching ([PRNet](/papers/1910.12240)) | Reports far lower error than ICP on partial views [arxiv:1910.12240 tab. 1]. Requires training, and the reported numbers are on synthetic data [arxiv:1910.12240 §4.1]. |
| Sequential LiDAR mapping where a segmenter supplies labels and moving objects corrupt the map | Point-to-plane frame-to-model ICP with semantic weights ([SuMa++](/papers/2105.11320)) | The motivation is that moving objects give wrong associations [arxiv:2105.11320 §III-E]. The gain is reported for the full system, so budget for the segmenter and the surfel map too [arxiv:2105.11320 §IV-B]. |
| Aligning a deformed object between two scans, with a rough pose from kinematics and moderate deformation | ICP pre-alignment before a deformation distance ([SoGraB](/papers/2411.19408)) | The paper uses this setup [arxiv:2411.19408 §3.2]. Its reliability is claimed only for moderate deformation with a good start [arxiv:2411.19408 §3.2]. |
| Real scans with no fine-tuning budget | Not settled by these sources | PRNet's real-scan result needs fine-tuning and has no numeric metric [arxiv:1910.12240 §4.2]. SuMa++ is evaluated on KITTI only [arxiv:2105.11320 §IV]. Test any variant on your own data. |
| Strongly deformed or symmetric objects | Not settled by these sources | SoGraB's fallback is centroid and principal-axis alignment [arxiv:2411.19408 §3.2], which the released code does not implement. Check alignment on your own data. |

## Implementation sketch

The common core is the loop below. Variants change the marked lines: the
correspondence step, the residual and the weights.

```pseudocode
# Classic ICP loop  [arxiv:1910.12240 §3.1]
# Input:  source X (N, 3), target Y (M, 3), initial R (3, 3), t (3,)
# Output: rotation R, translation t

def icp(X, Y, R, t, iters):
    for _ in range(iters):
        # Correspondence step: nearest target point per moved source point
        # (learned variants replace this with a soft matching)  [arxiv:1910.12240 §3.2]
        Z = nearest_neighbour(Y, R @ X + t)
        # Weights: 1 here; SuMa++ multiplies in Huber and semantic terms  [arxiv:2105.11320 §III-F]
        w = ones(N)
        # Closed-form fit: centre, cross-covariance, SVD  [arxiv:1910.12240 §3.1]
        dR, dt = weighted_rigid_fit(X, Z, w)
        R, t = dR @ R, dR @ t + dt
    return R, t
```

For point-to-plane variants, the fit is not closed form. It solves a
weighted normal-equation system for a small pose increment at each step
[arxiv:2105.11320 §III-F]. Stop criteria and iteration counts are not stated in
the text of the PRNet or SoGraB papers, so set them on your own data.

## Contradictions

None known between these three papers. Their numbers are not comparable: one
reports synthetic partial ModelNet40 results [arxiv:1910.12240 tab. 1], another
reports KITTI LiDAR odometry for a full mapping system
[arxiv:2105.11320 §IV-B], and the third reports grasp scores on printed objects
[arxiv:2411.19408 §5].

## Papers

- [PRNet: Self-Supervised Learning for Partial-to-Partial Registration](/papers/1910.12240): learned soft matching in an iterative registration loop for partial clouds, with classic ICP as a baseline.
- [SuMa++: Efficient LiDAR-based Semantic SLAM](/papers/2105.11320): frame-to-model point-to-plane ICP whose residuals are weighted by semantic labels and surfel stability.
- [SoGraB: A Visual Method for Soft Grasping Benchmarking and Evaluation](/papers/2411.19408): ICP pre-alignment, from a kinematic start, before a density-aware Chamfer distance scores deformation.
