Skip to content
forked from kzampog/cilantro

A lean C++ library for working with point cloud data

License

Notifications You must be signed in to change notification settings

prgumd/cilantro

 
 

Repository files navigation

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 point data of arbitrary numerical type and dimensionality (where applicable) and featuring a modular/extensible design of the more complex procedures, while, at the same time, providing convenience aliases/wrappers for the most common cases. 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)
  • Flat kernel mean-shift clustering
  • Connected component based point cloud segmentation that supports arbitrary point-wise similarity functions

Model estimation and point set registration:

  • A RANSAC estimator template and instantiations thereof for robust plane estimation and rigid point cloud registration
  • Fully generic Iterative Closest Point implementations for point-to-point and point-to-plane metrics (and combinations thereof) that support arbitrary correspondence search methods in arbitrary point feature spaces

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:

@article{cilantro,
    author = {Konstantinos Zampogiannis and Cornelia Ferm{\"u}ller and Yiannis Aloimonos},
    title = {cilantro: a lean, versatile, and efficient library for point cloud data processing},
    archivePrefix = "arXiv",
    eprint = {1807.00399},
    year = {2018}
}

About

A lean C++ library for working with point cloud data

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 99.0%
  • CMake 1.0%