# Globally-Optimal Gaussian Mixture Alignment (GOGMA)
# An algorithm for globally-optimal alignment of 3D Gaussian Mixture Models (GMMs).
# API may be used to convert two input 3D point-sets to Support Vector-parametrised
# Gaussian Mixtures (SVGMs), which are passed directly to the GOGMA algorithm.
# The API may be modified to allow other GMM types to be used.
# 
# Campbell, D., and Petersson, L., "GOGMA: Globally-Optimal Gaussian
# Mixture Alignment", IEEE Conference on Computer Visision and
# Pattern Recognition (CVPR), Las Vegas, USA, IEEE, Jun. 2016
# 
# For the full license, see license.txt in the root directory
# 
# Author: Dylan Campbell
# Date: 20160212
# Revision: 1.1

Dependencies:
* VXL: instructions for downloading and installing can be found at <http://vxl.sourceforge.net/>.
* LIBSVM: the relevant files (svm.cpp and svm.h) are included in the src folder. Note the LIBSVM_COPYRIGHT file.
* CUDA: instructions for downloading and installing the NVIDIA CUDA Toolkit can be found at <https://developer.nvidia.com/cuda-toolkit/>.
* GPU: the code will compile on a machine without a GPU, but requires a GPU to run.

Linux:
1. In the build folder, open a terminal
2. Run: cmake -D CMAKE_BUILD_TYPE=Release ../src
3. Run: make
4. Run: ./gogma
   Or: ./gogma x.txt y.txt config.txt output.txt

Output:
* The output file is of the form [tx ty tz r11 r12 r13 r21 r22 r23 r31 r32 r33] where t is the translation vector and r is the rotation matrix required to transform point-set y to align with point-set x.

Dataset Acknowledgements:
The authors would like to thank the following researchers for the point-set used in this demo:
* dragon: Brian Curless and Marc Levoy, Stanford University, point-set available from graphics.stanford.edu/data/3Dscanrep/
