{"id":13438091,"url":"https://github.com/kzampog/cilantro","last_synced_at":"2025-05-16T07:05:42.257Z","repository":{"id":37716092,"uuid":"90198569","full_name":"kzampog/cilantro","owner":"kzampog","description":"A lean C++ library for working with point cloud data","archived":false,"fork":false,"pushed_at":"2023-08-15T21:31:49.000Z","size":51020,"stargazers_count":1076,"open_issues_count":21,"forks_count":207,"subscribers_count":41,"default_branch":"master","last_synced_at":"2025-04-08T16:09:24.741Z","etag":null,"topics":["3d","3d-visualization","clustering","convex","convex-hull","icp","iterative-closest-point","k-means","mds","mean-shift","model-fitting","non-rigid-registration","pca","point-cloud","ransac","reconstruction","registration","rgbd","segmentation","spectral-clustering"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kzampog.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-05-03T22:26:48.000Z","updated_at":"2025-04-03T11:04:54.000Z","dependencies_parsed_at":"2022-07-14T21:46:53.471Z","dependency_job_id":null,"html_url":"https://github.com/kzampog/cilantro","commit_stats":{"total_commits":824,"total_committers":10,"mean_commits":82.4,"dds":0.06917475728155342,"last_synced_commit":"57ad1a397b73b6f4bbf9604fd75f8fe4363206a7"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kzampog%2Fcilantro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kzampog%2Fcilantro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kzampog%2Fcilantro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kzampog%2Fcilantro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kzampog","download_url":"https://codeload.github.com/kzampog/cilantro/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254485062,"owners_count":22078767,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d","3d-visualization","clustering","convex","convex-hull","icp","iterative-closest-point","k-means","mds","mean-shift","model-fitting","non-rigid-registration","pca","point-cloud","ransac","reconstruction","registration","rgbd","segmentation","spectral-clustering"],"created_at":"2024-07-31T03:01:02.831Z","updated_at":"2025-05-16T07:05:37.242Z","avatar_url":"https://github.com/kzampog.png","language":"C++","funding_links":[],"categories":["C++","Sensor Processing","Libraries"],"sub_categories":["Lidar and Point Cloud Processing","Point Cloud Processing"],"readme":"\u003cdiv align = \"center\"\u003e\n    \u003cimg src = \"https://kzampog.github.io/images/cilantro_logo.png\" width=\"300\" alt = \"Logo\" /\u003e\n\u003c/div\u003e\n\n\u003cdiv align = \"center\"\u003e\n    \u003ca href = \"https://github.com/kzampog/cilantro/actions/workflows/build.yml/badge.svg\"\u003e\n        \u003cimg src = \"https://github.com/kzampog/cilantro/actions/workflows/build.yml/badge.svg\" alt = \"Build Status\" /\u003e\n    \u003c/a\u003e\n    \u003ca href = \"http://cilantro.readthedocs.io/en/latest/?badge=latest\"\u003e\n        \u003cimg src = \"https://readthedocs.org/projects/cilantro/badge/?version=latest\" alt = \"Documentation Status\" /\u003e\n    \u003c/a\u003e\n    \u003ca href = \"https://codedocs.xyz/kzampog/cilantro/\"\u003e\n        \u003cimg src = \"https://codedocs.xyz/kzampog/cilantro.svg\" alt = \"Documentation\" /\u003e\n    \u003c/a\u003e\n    \u003ca href = \"https://github.com/kzampog/cilantro/blob/master/LICENSE\"\u003e\n        \u003cimg src = \"https://img.shields.io/github/license/kzampog/cilantro\" alt = \"License\" /\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\n## A Lean and Efficient Library for Point Cloud Data Processing\n`cilantro` is a lean and fast C++ library for working with point cloud data, with emphasis given to the 3D case.\nIt includes efficient implementations for a variety of common operations, providing a clean API and attempting to minimize the amount of boilerplate code.\nThe 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.\nAt the same time, convenience aliases/wrappers for the most common cases are provided.\nA high-level description of `cilantro` can be found in our [technical report](https://arxiv.org/abs/1807.00399).\n\n## Supported functionality\n#### Basic operations:\n- General dimension kd-trees (using bundled [nanoflann](https://github.com/jlblancoc/nanoflann))\n- Surface normal and curvature (robust) estimation from raw point clouds\n- General dimension grid-based point cloud resampling\n- Principal Component Analysis\n- Basic I/O utilities for 3D point clouds (in PLY format, using bundled [tinyply](https://github.com/ddiakopoulos/tinyply)) and Eigen matrices\n- RGBD image pair to/from point cloud conversion utilities\n\n#### Convex hulls and spatial reasoning:\n- A general dimension convex polytope representation that is computed (using bundled [Qhull](http://www.qhull.org/)) from either vertex or half-space intersection input and allows for easy switching between the respective representations\n- A representation of generic (general dimension) space regions as unions of convex polytopes that implements set operations\n\u003cdiv align = \"center\"\u003e\n    \u003cimg src = \"https://kzampog.github.io/images/convex.png\" width=\"800\" /\u003e\n\u003c/div\u003e\n\n#### Clustering:\n- General dimension k-means clustering that supports all distance metrics supported by [nanoflann](https://github.com/jlblancoc/nanoflann)\n- Spectral clustering based on various graph Laplacian types (using bundled [Spectra](https://github.com/yixuan/spectra))\n- Mean-shift clustering with custom kernel support\n- Connected component based point cloud segmentation that supports arbitrary point-wise similarity functions\n\u003cdiv align = \"center\"\u003e\n    \u003cimg src = \"https://kzampog.github.io/images/conn_comp.png\" width=\"800\" /\u003e\n\u003c/div\u003e\n\n#### Geometric registration:\n- Multiple generic Iterative Closest Point implementations that support arbitrary correspondence search methods in arbitrary point feature spaces for:\n    - **Rigid** or **affine** alignment under the point-to-point metric (general dimension), point-to-plane metric (2D or 3D), or any combination thereof\n    - **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\n\u003cdiv align = \"center\"\u003e\n    \u003cimg src = \"https://kzampog.github.io/images/fusion.png\" width=\"800\" /\u003e\n    \u003cbr\u003e\n    \u003cimg src = \"https://kzampog.github.io/images/non_rigid.png\" width=\"800\" /\u003e\n\u003c/div\u003e\n\n#### Robust model estimation:\n- A RANSAC estimator template and instantiations thereof for general dimension:\n    - Robust hyperplane estimation\n    - Rigid point cloud registration given noisy correspondences\n\n#### Visualization:\n- Classical Multidimensional Scaling (using bundled [Spectra](https://github.com/yixuan/spectra) for eigendecompositions)\n- A powerful, extensible, and easy to use 3D visualizer\n\n## Dependencies\n- [Eigen](http://eigen.tuxfamily.org/index.php?title=Main_Page) (version 3.3 or newer) [**required**]\n- [Pangolin](https://github.com/stevenlovegrove/Pangolin) (built with Eigen enabled) [**optional**; needed for visualization modules and most examples]\n\n## Building\n`cilantro` is developed and tested on Ubuntu variants (18.04 and newer) using [CMake](https://cmake.org/).\nTo clone and build the library (with bundled examples), execute the following in a terminal:\n\n```bash\ngit clone https://github.com/kzampog/cilantro.git\ncd cilantro\nmkdir build\ncd build\ncmake ..\nmake -j\n```\n\n## Documentation\nDocumentation ([readthedocs.io](http://cilantro.readthedocs.io/en/latest/?badge=latest), [Doxygen API reference](https://codedocs.xyz/kzampog/cilantro/)) is a work in progress.\nThe short provided examples (built by default) cover a significant part of the library's functionality.\nMost of them expect a single command-line argument (path to a point cloud file in PLY format).\nOne such input is bundled in `examples/test_clouds` for quick testing.\n\n## License\nThe library is released under the [MIT license](https://github.com/kzampog/cilantro/blob/master/LICENSE).\nIf you use `cilantro` in your research, please cite our [technical report](https://arxiv.org/abs/1807.00399):\n```bib\n@inproceedings{zampogiannis2018cilantro,\n    author = {Zampogiannis, Konstantinos and Fermuller, Cornelia and Aloimonos, Yiannis},\n    title = {cilantro: A Lean, Versatile, and Efficient Library for Point Cloud Data Processing},\n    booktitle = {Proceedings of the 26th ACM International Conference on Multimedia},\n    series = {MM '18},\n    year = {2018},\n    isbn = {978-1-4503-5665-7},\n    location = {Seoul, Republic of Korea},\n    pages = {1364--1367},\n    doi = {10.1145/3240508.3243655},\n    publisher = {ACM},\n    address = {New York, NY, USA}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkzampog%2Fcilantro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkzampog%2Fcilantro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkzampog%2Fcilantro/lists"}