Vision and Mobile Robotics Laboratory | Software
|
|
Home | Members | Projects | Publications | Software | Videos | Internal |
ICP is an implementation of the Iterative Closest Point algorithm for registering two 3-D point clouds when the clouds are roughly aligned. It is based on algorithms of Besl and McKay (PAMI, February 1992) and Zhang (IJCV 1994). This implementation uses the faces in the surface mesh to get a accurate alignments and it uses kdtrees to speed up the registration process. SpinRecognize can be followed by ICP to get very accurate registration of surfaces with no knowledge of the transformation between views. During object modeling, a coarse registration of two views is obtained with SpinRecognize. This transformation is then refined with using fine resolution representations of the views.
main.c contains the main controlling function for ICP. It reads in command line options and writes out the resulting registration.
icp.c contains the functions for finding closest face points and then iteratively adjusting the registration between two surface meshes.
3dtree.c contains the functions for creation and use of a 3-D closest point search tree.
3dtree.h contains the class definition for a 3-dimensional kDtree.
Usage: ICP (see ICP.html for complete usage)
%S scene mesh filename [required]
%S model mesh filename [required]
%S output mesh filename [required]
-translate %F %F %F initial translation [0 0 0]
-rotate %F %F %F initial rotation [0 0 0]
-nPer %d number of perturbations about minimum [0]
-maxDist %F maximum distance between points [1e8]
-maxIter %d maximum number of iterations [20]
-errT %F threshold on error [0.05]
-transT %F stopping criterion for translations [0.05]
-angleT %F stopping criterion for rotations in degrees [0.1]
-readTrans %S read initial transformation form file [off]
-writeTrans %S write final transformation form file [off]
%S scene faceset filename [required]
The filename of the scene mesh description. This file must be a VRML indexed faceset with a "Coordinate3" node describing the mesh vertices and an "IndexedFaceSet" node describing the faces.
%S model faceset filename [required]
The filename of the model mesh description. This file must be a VRML indexed faceset with a "Coordinate3" node describing the mesh vertices and an "IndexedFaceSet" node describing the faces.
%S output faceset filename [required]
The filename of the output VRML file. This file will contain the model indexed faceset after transformation by the best transformation calculated by the ICP algorithm.
-translate %F %F %F initial translation [0 0 0]
An initial translation to be applied to the model mesh can be supplied with this option.
-rotate %F %F %F initial rotation [0 0 0]
An initial rotation (as euler angles ) to be applied to the model mesh can be supplied with this option.
-nPer %d number of perturbations about minimum [0]
Number of times the ICP algorithm is repeated starting from randomly generated poses once the local minimum has been approached with an intial run of the algorithm. By adding perturbations, the likelyhood of finding the global minimum is increased.
-maxDist %F maximum distance between points [1e8]
The initial setting of the maximum allowable distance between points to be included in the calculation of the transformation. This threshold is used to make the ICP algorithm robust when the model mesh is not a proper subsets of the scene. The true maximum distance threshold is set this number times the resolution of the model mesh.
-maxIter %d maximum number of iterations [20]
The maximum number of iterations that are allowed before the iterations are stopped.
-errT %F threshold on error [0.05]
The threshold below which registration error must fall before the iterations can end.
-transT %F stopping criterion for translations [0.05]
The threshold below which change in translation (RMS) must fall before the iterations can end.
-angleT %F stopping criterion for rotations in degrees [0.1]
The threshold below which change in rotation (RMS on Euler angles) must fall before the iterations can end.
-readTrans %S read initial transformation from file [off]
Read starting transformation from file of six floats.
-writeTrans %S write final transformation to file [off]
Write final transformation to file of six floats.
An example of usage where no options are set thus providing a quick execution is:
ICP scene.wrl mdoel.wrl model.move.wrl
An example which sets the algorithm to run for a longer time, but probably provide a better answer is:
ICP .scene.wrl mdoel.wrl model.move.wrl -nPer 20 -transT .001 -rotT .01 -maxIter 100