A lean C++ library for working with point cloud data
Switch branches/tags
Nothing to show
Clone or download
Latest commit 76184ec Dec 12, 2018

README.md

cilantro

Build Status Documentation Status Documentation

cilantro is a lean and fast C++ library for working with point cloud data, with emphasis given to the 3D case. It includes efficient implementations for a variety of common operations, providing a clean API and attempting to minimize the amount of boilerplate code. The library is extensively templated, enabling operations on data of arbitrary numerical type and dimensionality (where applicable) and featuring a modular/extensible design of the more complex procedures. At the same time, convenience aliases/wrappers for the most common cases are provided. A high-level description of cilantro can be found in our technical report.

Supported functionality

Basic operations:

  • General dimension kd-trees (using bundled nanoflann)
  • Surface normal and curvature estimation from raw point clouds
  • General dimension grid-based point cloud resampling
  • Principal Component Analysis
  • Basic I/O utilities for 3D point clouds (in PLY format, using bundled tinyply) and Eigen matrices
  • RGBD image pair to/from point cloud conversion utilities

Convex hulls:

  • A general dimension convex polytope representation that is computed (using bundled Qhull) from either vertex or half-space intersection input and allows for easy switching between the respective representations
  • A representation of generic (general dimension) space regions as unions of convex polytopes that implements set operations

Clustering:

  • General dimension k-means clustering that supports all distance metrics supported by nanoflann
  • Spectral clustering based on various graph Laplacian types (using bundled Spectra)
  • Mean-shift clustering with custom kernel support
  • Connected component based point cloud segmentation that supports arbitrary point-wise similarity functions

Geometric registration:

  • Multiple generic Iterative Closest Point implementations that support arbitrary correspondence search methods in arbitrary point feature spaces for:
    • Rigid alignment under the point-to-point metric (general dimension), point-to-plane metric (3D), or any combination thereof
    • Non-rigid alignment of 3D point sets, by means of a robustly regularized, locally rigid warp field, under any combination of the point-to-point and point-to-plane metrics; implementations for both densely and sparsely (similarly to DynamicFusion) supported warp fields are provided

Robust model estimation:

  • A RANSAC estimator template and instantiations thereof for general dimension:
    • Robust hyperplane estimation
    • Rigid point cloud registration given noisy correspondences

Visualization:

  • Classical Multidimensional Scaling (using bundled Spectra for eigendecompositions)
  • A powerful, extensible, and easy to use 3D visualizer

Dependencies

Building

cilantro is developed and tested on Ubuntu 14.04, 16.04, and 18.04 variants using CMake. Please note that you may have to manually set up a recent version of Eigen on Ubuntu 14.04, as the one provided in the official repos is outdated. To clone and build the library (with bundled examples), execute the following in a terminal:

git clone https://github.com/kzampog/cilantro.git
cd cilantro
mkdir build
cd build
cmake ..
make -j

Documentation

Documentation (readthedocs.io, Doxygen API documentation) is a work in progress. The short provided examples (built by default) cover a significant part of the library's functionality. Most of them expect a single command-line argument (path to a point cloud file in PLY format). One such input is bundled in examples/test_clouds for quick testing.

License

The library is released under the MIT license. If you use cilantro in your research, please cite our technical report:

@inproceedings{zampogiannis2018cilantro,
    author = {Zampogiannis, Konstantinos and Fermuller, Cornelia and Aloimonos, Yiannis},
    title = {cilantro: A Lean, Versatile, and Efficient Library for Point Cloud Data Processing},
    booktitle = {Proceedings of the 26th ACM International Conference on Multimedia},
    series = {MM '18},
    year = {2018},
    isbn = {978-1-4503-5665-7},
    location = {Seoul, Republic of Korea},
    pages = {1364--1367},
    doi = {10.1145/3240508.3243655},
    publisher = {ACM},
    address = {New York, NY, USA}
}