Skip to content

Commit

Permalink
Add more description about CPD vs ICP filters (#2472)
Browse files Browse the repository at this point in the history
* Elaborate difference between ICP and CPD filters.

* longer underline
  • Loading branch information
sunapi386 authored and abellgithub committed Apr 29, 2019
1 parent 0b06b87 commit 6c0ff27
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 1 deletion.
18 changes: 18 additions & 0 deletions doc/stages/filters.cpd.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,23 @@ the "moving" points after the calculated transformation has been applied, one
point view per input. Any additional information about the cpd registration,
e.g. the rigid transformation matrix, will be placed in the stage's metadata.

When to use CPD vs ICP
----------------------

Summarized from the `Non-rigid point set registration: Coherent Point Drift
<http://graphics.stanford.edu/courses/cs468-07-winter/Papers/nips2006_0613.pdf>`_ paper.

- CPD outperforms the ICP in the presence of noise and outliers by the use of
a probabilistic assignment of correspondences between pointsets, which is
innately more robust than the binary assignment used in ICP.

- CPD does not work well for large in-plane rotation, such transformation can
be first compensated by other well known global registration techniques before
CPD algorithm is carried out

- CPD is most effective when estimating smooth non-rigid transformations.


.. plugin::

Examples
Expand Down Expand Up @@ -67,6 +84,7 @@ The metadata output might start something like:
.. seealso::
:ref:`filters.transformation` to apply a transform to other points.
:ref:`filters.icp` for deterministic binary point pair assignments.
Options
--------
Expand Down
25 changes: 24 additions & 1 deletion doc/stages/filters.icp.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,34 @@ filters.icp
==============

The **ICP filter** uses the `PCL's Iterative Closest Point (ICP)`_ algorithm to
calculate a rigid (rotation and translation) transformation that best aligns
calculate a **rigid** (rotation and translation) transformation that best aligns
two datasets. The first input to the ICP filter is considered the "fixed"
points, and all subsequent points are "moving" points. The output from the
change filter are the "moving" points after the calculated transformation has
been applied, one point view per input. The transformation matrix is inserted
into the stage's metadata.

.. note::

ICP requires that the initial pose of the two point sets to be adequately
close, which are not always available, especially when transformation is
non-rigid. ICP can handle limited nonrigid transformations but be aware
ICP may be unable to escape a local minimum. Consider using CPD instead.

From :cite:`Xuechen2019`:

ICP starts with an initial guess of the transformation between the two
point sets and then iterates between finding the correspondence under the
current transformation and updating the transformation with the newly
found correspondence. ICP is widely used because it is rather
straightforward and easy to implement in practice; however, its biggest
problem is that it does not guarantee finding the globally optimal
transformation. In fact, ICP converges within a very small basin in the
parameter space, and it easily becomes trapped in local minima. Therefore,
the results of ICP are very sensitive to the initialization, especially
when high levels of noise and large proportions of outliers exist.


.. plugin::

Examples
Expand Down Expand Up @@ -51,6 +72,8 @@ The metadata output might start something like:
.. seealso::
:ref:`filters.transformation` to apply a transform to other points.
:ref:`filters.cpd` for the use of a probabilistic assignment of correspondences between pointsets.
Options
--------
Expand Down
25 changes: 25 additions & 0 deletions doc/stages/references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,29 @@ @article{Yuille1998
year = {1988}
}

@article{Xuechen2019,
abstract = {The rigid registration of two 3D point sets is a fundamental problem in
computer vision. The current trend is to solve this problem globally using the
BnB optimization framework. However, the existing global methods are slow for
two main reasons: the computational complexity of BnB is exponential to the
problem dimensionality (which is six for 3D rigid registration), and the bound
evaluation used in BnB is inefficient. In this paper, we propose two
techniques to address these problems. First, we introduce the idea of
translation invariant vectors, which allows us to decompose the search of a 6D
rigid transformation into a search of 3D rotation followed by a search of 3D
translation, each of which is solved by a separate BnB algorithm. This
transformation decomposition reduces the problem dimensionality of BnB
algorithms and substantially improves its efficiency. Then, we propose a new
data structure, named 3D Integral Volume, to accelerate the bound evaluation
in both BnB algorithms. By combining these two techniques, we implement an
efficient algorithm for rigid registration of 3D point sets. Extensive
experiments on both synthetic and real data show that the proposed algorithm
is three orders of magnitude faster than the existing state-of-the-art global
methods.},
author = {Xuechen Li and Yinlong Liu and Yiru Wang and Chen Wang and Manning Wang and Zhijian Song},
title = {{Fast and Globally Optimal Rigid Registration of 3D Point Sets by Transformation Decomposition}},
year = {2019},
note = {Available at \url{https://arxiv.org/pdf/1812.11307.pdf}}
}

%======

0 comments on commit 6c0ff27

Please sign in to comment.