The following method for registration of point sets is part of many publications, so only a short summary is given here. The complete algorithm was invented in 1991 and can be found, e.g., in [4,6,22]. The method is called Iterative Closest Points (ICP) algorithm.
Given two independently acquired sets of 3D points,
(model set,
) and
(data set,
) which correspond to
a single shape, we want to find the transformation consisting of
a rotation
and a translation
which minimizes the
following cost function:
The ICP algorithm calculates iteratively the point
correspondence. In each iteration step, the algorithm selects the
closest points as correspondences and calculates the
transformation (
) for minimizing equation
(1). It is shown that the iteration terminates in a
minimum [4]. The assumption is that in the last
iteration step the point correspondences are correct.
In each iteration, the transformation is calculated by the
quaternion based method of Horn [12]. A unit
quaternion is a 4 vector
, where
. It describes a
rotation axis and an angle to rotate around that axis. A
rotation matrix
is calculated from the unit
quaternion according the the following scheme:
To determine the transformation, the mean values (centroid
vectors)
and
are subtracted from all points in
and
, respectively, resulting in the sets
and
.
The rotation expressed as quaternion that minimizes equation
(1) is the largest eigenvalue of the cross-covariance
matrix
The time complexity of the algorithm mainly depends on
determination of the closest points (brute force search O(
)
for 3D scans of
points). Several enhancements have been
proposed [4,17]. We have implemented
d-trees as proposed by Simon et al., combined with the
above-described reduced points. Table 1
summarizes the results of different experiments on a
Pentium-III-800. The starting point for optimization is given by
the robot odometry.
| points used | time | # iter. |
| all points & brute force | 3 hours 47 min | 27 |
| reduced points & brute force | 3 min 6 sec | 25 |
| all points & |
6 sec | 27 |
| reduced points & |
|
25 |
![]() |