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 |
![]() |