by kzampog

kzampog /cilantro

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

481 Stars 111 Forks Last release: Not found MIT License 791 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


A Lean and Efficient Library for Point Cloud Data Processing

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
can be found in our technical report.

Supported functionality

Basic operations:

  • General dimension kd-trees (using bundled nanoflann)
  • Surface normal and curvature (robust) 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 and spatial reasoning:

  • 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


  • 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 or affine alignment under the point-to-point metric (general dimension), point-to-plane metric (2D or 3D), or any combination thereof
    • Non-rigid alignment of 2D or 3D point sets, by means of a robustly regularized, locally-rigid or locally-affine deformation field, under any combination of the point-to-point and point-to-plane metrics; implementations for both densely and sparsely (by means of an Embedded Deformation Graph) 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


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


  • Eigen (version 3.3 or newer) [required]
  • Pangolin (built with Eigen enabled) [optional; needed for visualization modules and most examples]


is developed and tested on Ubuntu variants (16.04 and newer) using CMake. To clone and build the library (with bundled examples), execute the following in a terminal:
git clone
cd cilantro
mkdir build
cd build
cmake ..
make -j


Documentation (, Doxygen API reference) 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

for quick testing.


The library is released under the MIT license. If you use

in your research, please cite our technical report:
    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}

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.