This is an open source C++ implementation based on the technique presented in the following paper:
Zhou QY., Park J., Koltun V. Fast Global Registration. Computer Vision – ECCV 2016
Consider two point sets P and Q. Our task is to find a rigid transformation T that aligns Q to P. The algorithm optimizes a robust objective on correspondences K between P and Q. These correspondences are established by rapid feature matching (FPFH) that is performed before the objective is optimized. The correspondences are not recomputed during the optimization. The objective has the following form:
where (p,q) in K are the correspondent points in P and Q. The robust penalty function, si the scaled Geman-McClure estimator.
FastGlobalRegistration is compiled using CMake.
> mkdir build
> cd build
> cmake ..
> make
To add the debug symbols (with no code optimization) add the flag run cmake -DCMAKE_BUILD_TYPE=Debug ..
.
Tested and MacOS 10.12 and Ubuntu 16.04.
The FastGlobalRegistration program takes two point clouds, P and Q, in pcd format:
> ./FastGlobalRegistration -p pointcloud_P.pcd -q pointcloud_Q.pcd
and prints the estimated rigid transformation matrix that aligns Q to P.
To see all available options, execute the program whit the flag -h
>./FastGlobalRegistration -h
Required arguments:
-p [ --pointcloudP ] arg Point cloud filename [*.pcd].
-q [ --pointcloudQ ] arg Point cloud filename [*.pcd].
Miscellaneous:
-h [ --help ] Print help messages.
-v [ --verbose ] Verbose output.
-o [ --output ] arg Output filename, save the
transformation matrix.
-r [ --report ] arg Save an HTML report.
-j [ --json ] arg Save the report as JSON file.
Algorithm parameters:
-a [ --abs-scale ] If enabled, measure distance in
absolute scale, otherwise in scale
relative to the diameter of the model.
-c [ --closed-form ] Use closed form solution for
transformation estimation.
--div-factor arg (=1.4) Division factor used for graduated
non-convexity.
--stop-rmse arg (=0.01) Optimization stops when reach the given
RMSE.
-n [ --iterations ] arg (=64) Maximum number of iteration.
--tuple-scale arg (=0.95) Similarity measure used for tuples of
feature points.
-m [ --tuple-max-count ] arg (=100) Maximum tuple numbers.
--normals-search-radius arg (=0.03) Normals estimation search radius.
--fpfh-search-radius arg (=0.2) FPFH estimation search radius.
If the abs-scale
flag is not enabled, all the distances of the model (e.g., search radii and correspondence distance) are measured relatively to the diameter of the point cloud. This is the default behavior with synthetic data. For real-world data, where the absolute scale is known a priori, these parameters can be set accordingly.
The options stop-rmse
and iterations
determine when the optimization will stop. The first one is specifies the desired RMSE, the latter the maximum number of iterations.
The option tuple-max-count
trades off between speed and accuracy. Increasing it will make the optimization slower, but the result can be more accurate.
By enabling the flag -c
(default disabled), the transformation matrix is estimated by closed form solution. In particular, it's used the Horn’s method for the registration of 3D point clouds.
It is possible to export a JSON od HTML report of the registration process, it contains:
- Final transformation matrix
- Timing information
- RMSE vs/ iterations
- A summary of the parameters
This project is licensed under the MIT License - see the LICENSE file for details.