bing-jian / gmmreg

Implementations of the robust point set registration algorithm described in "Robust Point Set Registration Using Gaussian Mixture Models", Bing Jian and Baba C. Vemuri, IEEE Transactions on Pattern Analysis and Machine Intelligence, 2011, 33(8), pp. 1633-1645. For a Python implementation, please refer to http://github.com/bing-jian/gmmreg-python.
GNU General Public License v3.0
299 stars 96 forks source link

Robust Point Set Registration Using Gaussian Mixture Models

2D, Non-Rigid 3D, Rigid

Description

This website hosts implementations of the robust point set registration framework described in the paper "Robust Point Set Registration Using Gaussian Mixture Models", Bing Jian and Baba C. Vemuri, IEEE Transactions on Pattern Analysis and Machine Intelligence, 2011, 33(8), pp. 1633-1645. An earlier conference version of this work, "A Robust Algorithm for Point Set Registration Using Mixture of Gaussians, Bing Jian and Baba C. Vemuri.", appeared in the proceedings of ICCV'05. Here is the bibtex entry for citing this work.

Note

A python implementation (unoptimized and mainly for proof of concept) can be found in http://github.com/bing-jian/gmmreg-python.

Featured Applications

Recently, a group of researchers from Estonia and Spain reported an interesting work of garment retexturing in a paper titled "From 2D to 3D geodesic-based garment matching". The GMM based point set registration algorithm was chosen by them for contour matching, a critical component in their method for garment retexturing. The following comments are taken from Section 3.2 in their paper:

"Out of available algorithms, we have chosen to use non-rigid point set registration using Gaussian mixture models (GMM) [21] because of its accurate fitting under different conditions and fast execution time. Additionally, Gaussian mixtures provide robust results even if the shapes have different features, such as different neck lines, hand positions and folds."

In SIGGRAPH Asia 2016, Yan et al. proposed a method for global registration of building scans. Our GMM based point set registration algorithm was used for pairwise portal matching in their pipeline as indicated in Section 4.3 of their paper.

The GMM based point set registration algorithm was used in "3-D Vessel Tree Surface Reconstruction", a patent (United States Patent 10140733) filed by researchers at Siemens Corporate Research in Princeton, as shown in Eq(2) and Eq(16).

A Unified Framework

The basic idea of the proposed point set registration framework is to 1) represent the two point sets by continuous distributions, in particular, Gaussian mixture models; 2) and then minimize the distance between the two distributions by moving one towards another. Interestingly, several previous well-known point set registration algorithms can all be re-formulated using this unified framework, including:

Please see Fig 3. in Jian&Vemuri PAMI'11 on how those methods can be reformulated under this unified framework by choosing different statistical divergence functions.

For a growing list of recent work on point set registration/matching, please refer to this actively maintained github repo.

How to compile and test the C++ code

To build the execuatables from the source code, please use CMake. Please note that the current C++ implementation depends on vxl/vnl for doing matrix computation and numerical optimization.

The executable (named "gmmreg_demo") takes a configuration file (in INI format) and a tag string from command line. For more on usage, please check this file. For examples of config INI file, please check this folder.

Results of running GMMReg-Rigid on Stanford lounge dataset

Before Registration After
Transformation estimated by gmmreg:
[[ 0.979206  -0.0376796  0.199341  -0.174986 ]
 [ 0.0348325  0.999235   0.0177716  0.106985 ]
 [-0.199858  -0.0104585  0.979769  -0.191445 ]
 [ 0.         0.         0.         1.       ]]
Transformation from ground truth:
[[ 0.98046985 -0.0365099   0.19324962 -0.16860252]
 [ 0.03337988  0.99925376  0.01942979  0.10915275]
 [-0.19381476 -0.01259967  0.9809579  -0.19450066]
 [ 0.          0.          0.          1.        ]]
('pose difference (in degrees) before alignment:', 11.379813087519903)
('pose difference (in degrees) after alignment:', 0.37620688052421786)
Metric Avg Min Max Median
Rotation angle error (in degrees) 0.96 0.07 9.08 0.60
Run time per pair (in milliseconds) 120.14 47.09 413.48 116.62
Metric Avg Min Max Median
Rotation angle error (in degrees) 0.65 0.01 19.49 0.41
Run time per pair (in milliseconds) 76.18 18.27 508.25 60.06