/GH-ICP

GH-ICP: Iterative Closest Point algorithm with global optimal matching and hybrid metric

Primary LanguageC++GNU General Public License v3.0GPL-3.0

GH-ICP:Iterative Closest Point algorithm with global optimal matching and hybrid metric

GH-ICP is a robust coarse-to-fine pairwise point cloud registration method.

Two key innovative points over ICP are:

  1. Global optimal matching (Using Bipartite Graph and KM algorithm)

  2. Hybrid metrics (Using Euclidean distance and feature distance at the same time)

The earlier conference version of GH-ICP is called Iterative Global Similarity Point (IGSP).

To highlight two key innovative points of the algorithm, we renamed IGSP as GH-ICP.

Demo

ETH TLS Dataset

alt text

WHU TLS Dataset

alt text

More

alt text

Principle

alt text

If you find our work useful in your research, please consider citing:

    @INPROCEEDINGS{yue2018igsp,    
      author={Yue, Pan and Bisheng, Yang and Fuxun, Liang and Zhen, Dong},
      booktitle = {2018 International Conference on 3D Vision (3DV)},
      title={Iterative Global Similarity Points: A robust coarse-to-fine integration solution for pairwise 3D point cloud registration},
      year={2018}
    }

original version available on Windows.

Compiled with Visual Studio 12 2013 Win64 Release / Debug Passed, see former release

now available on Linux (passed on ubuntu 16.04)

How to use

  1. Install dependent 3rd libraries

PCL(>=1.7), LibLas(Optional for las data IO)

  1. Compile
mkdir build
cd build
cmake ..
make 
  1. Run
cd ..
# configure the script/run.sh file for editting the data path and key parameters
sh script/run.sh
  1. Parameter configuration
#./script/run.sh

#parameters setting example for large scale (100m+) TLS data
using_feature=B;              # Feature selection [ B: BSC, F: FPFH, R: RoPS, N: register without feature ]
corres_estimation_method=K;   # Correspondence estimation by [ K: Bipartite graph min weight match using KM, N: Nearest Neighbor, R: Reciprocal NN ]

downsample_resolution=0.1;    # Raw data downsampling voxel size, just keep one point in the voxel  
neighborhood_radius=0.5;      # Curvature estimation / feature encoding radius
curvature_non_max_radius=1.5; # Keypoint extraction based on curvature: non max suppression radius 
weight_adjustment_ratio=1.1;  # Weight would be adjusted if the IoU between expected value and calculated value is beyond this value
weight_adjustment_step=0.1;   # Weight adjustment for one iteration
registration_dof=6;           # Degree of freedom of the transformation [ 4: TLS with leveling, 6: arbitary ]
appro_overlap_ratio=0.6;      # Estimated approximate overlapping ratio of two point cloud 

launch_realtime_viewer=1;     # Launch the realtime registration viewer during registration or not (1: Launch, 0: Not launch)

  1. Data preparation

You can test on the online available point cloud data and registration dataset such as Robotic 3D Scan Repository, ETH PRS Registration Dataset, ETH ASL Registration Dataset, 3D Match, etc.

You may apply the format transform tool to get the data ready for registration.

You can also use your own data and edit the data path in the shell file. Four formats of point cloud data are available (*.pcd, *.las, *.ply, *.txt) for IO.

#./script/run.sh

#data path
target_point_cloud_path=...
source_point_cloud_path=...
output_point_cloud_path=...

  1. Analysis

Some other well-known automatic registration algorithms are also provided in this repo. and you may apply them as reference.

Other Reference

If you find the Binary Shape Context (BSC) feature used in this repo. useful in your research, please consider citing:

@article{dong2017novel,
  title={A novel binary shape context for 3D local surface description},
  author={Dong, Zhen and Yang, Bisheng and Liu, Yuan and Liang, Fuxun and Li, Bijun and Zang, Yufu},
  journal={ISPRS Journal of Photogrammetry and Remote Sensing},
  volume={130},
  pages={431--452},
  year={2017},
  publisher={Elsevier}
}