Go-ICP for globally optimal 3D pointset registration

(A demo video can be found on here.)

Introduction

This repository contains the C++ code for the Go-ICP algorithm (with trimming strategy for outlier handling). It is free software under the terms of the GNU General Public License (GPL) v3. Details of the Go-ICP algorithm can be found in our papers:

Please read this file carefully prior to using the code. Some frequently-asked questions have answers here.

Compiling

Use cmake to generate desired projects on different platforms.

A pre-built Windows exe file can be found in this zip file.

Terminology

Data points: points of the source point set to be transformed.

Model points: points of the target point set.

Notes

Running

Run the compiled binary with following parameters: \<MODEL FILENAME> \<DATA FILENAME> \<NUM DOWNSAMPLED DATA POINTS> \<CONFIGURATION FILENAME> \<OUTPUT FILENAME>, e.g. “./GoICP model data 1000 config output”, “GoICP.exe model.txt data.txt 500 config.txt output.txt”.

Some sample data and scripts can be found in the /demo folder.

Other langueage

A python wrapper by @aalavandhaann can be found at https://github.com/aalavandhaann/go-icp_cython

Acknowledgments

This implementation uses the nanoflann library, and a simple matrix library written by Andreas Geiger. The distance transform implementation is adapted from the code of Alexander Vasilevskiy.

Change log

V1.3 (26-Jan-2015)

Implemented the intro-selection algorithm

Fixed some minor issues

V1.2 (12-Jun-2014)

Refined the quick-selection algorithm

Added a deconstructor to distance transform class (Thanks to Nima Tajbakhsh)

V1.1 (21-Apr-2014)

Speeded up Trimmed-GoICP (around 2-5 times experimentally) using a quick-selection algorithm

V1.0 (13-Feb-2014)

First complete version for release