Need help with cilantro?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

kzampog
574 Stars 129 Forks MIT License 793 Commits 11 Opened issues

Description

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

Services available

!
?

Need anything else?

Contributors list

# 67,276
C++
convex-...
rgbd
719 commits
# 298,352
C++
convex-...
rgbd
20 commits
# 339,999
C++
convex-...
rgbd
12 commits
# 354,519
C++
Shell
C
convex-...
8 commits
# 469,914
C++
convex-...
rgbd
3 commits
# 464,563
C++
convex-...
rgbd
3 commits
# 170,364
C
Objecti...
Shell
pybulle...
2 commits
# 309,210
Shell
dolphin
assembl...
fortran
1 commit
# 166,660
rgbd
C
visual-...
Objecti...
1 commit
Logo

A Lean and Efficient Library for Point Cloud Data Processing

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 (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

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 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

Visualization:

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

Dependencies

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

Building

cilantro
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 https://github.com/kzampog/cilantro.git
cd cilantro
mkdir build
cd build
cmake ..
make -j

Documentation

Documentation (readthedocs.io, 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

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}
}

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.