cilantro
轻量级 C++ 点云处理库,提供 KD-Tree、ICP 配准、谱聚类、RANSAC 等高效算法
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
轻量级 C++ 点云处理库,提供 KD-Tree、ICP 配准、谱聚类、RANSAC 等高效算法
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:cilantro 项目标志
清晨,一台物流分拣机器人在仓库中穿梭。它的激光雷达每秒向周围发射数千束红外光,每束光反射回来后形成密密麻麻的 3D 坐标点——这就是点云(Point Cloud)。机器人需要用这些点云完成两件事:理解仓库的三维结构(建图),以及判断前方障碍物的位置(感知)。这背后,一套高效、可靠的点云处理算法至关重要。
cilantro(中文意为"香菜",一种常见香料)正是为这类场景而生的 C++ 库:由希腊学者 Konstantinos Zampogiannis 主导开发(隶属于马里兰大学计算机科学实验室),发表在 ACM MM 2018 国际会议上。它专注于点云数据的快速处理,代码精简高效,在 GitHub 已积累超过 1129 颗星,被广泛应用于机器人导航、自动驾驶、3D 重建等领域。
点云是 3D 感知最基础的数据格式,来源包括 LiDAR、深度相机(RGB-D)、Photogrammetry(多视图重建)等。相比 2D 图像,点云数据具有三个显著特点:
处理这些数据需要一套不同于传统图像处理的算法体系。常见的开源方案有 PCL (Point Cloud Library) 功能最全面但体积庞大、依赖复杂;Open3D 较为现代但以 Python 为先;cilantro 填补了"轻量 + 高效 + 纯 C++"这一空白,适合需要深度集成到嵌入式系统或实时应用中的开发者。
cilantro 实现了通用维度的 KD-Tree(使用内嵌的 nanoflann 库),可在毫秒级完成最近邻搜索。在此基础上,库支持从原始点云鲁棒估计表面法向量和曲率——这是许多下游任务(如点云配准、表面重建)的基石。
此外还内置了:

图2:凸多面体表示与空间区域布尔运算(来源:项目文档)
cilantro 提供了通用维度的凸多面体(Convex Polytope)表示,支持两种输入模式:顶点输入和半空间交集输入,并能自由切换表达方式。底层调用 Qhull 库计算,支持任意维度。
更进一步,项目实现了空间区域(Space Region)——将凸多面体的并集作为复杂空间形状的表示,并支持集合运算(交集、并集、差集)。这在机器人路径规划、碰撞检测等场景中有直接应用。
cilantro 实现了四种通用维度聚类算法:
| 算法 | 特点 | 适用场景 |
|---|---|---|
| K-Means | 支持 nanoflann 支持的所有距离度量(欧氏、马氏、曼哈顿等) | 快速粗分 |
| 谱聚类 (Spectral) | 基于多种图拉普拉斯矩阵,精度高 | 形状分割、语义聚类 |
| Mean-Shift | 无需预设类别数,支持自定义核函数 | 密度估计 |
| 连通分量 (Connected Components) | 支持任意点级相似度函数 | 表面块分割 |
谱聚类和 Mean-Shift 的特征值分解依赖内嵌的 Spectra 库——这是一个专为稀疏矩阵设计的轻量级特征值求解器,比 ARPACK 更加易用。

图3:基于连通分量的点云分割(来源:项目文档)
点云配准(Registration)是 3D 重建和 SLAM 的核心步骤,其目标是找到两个点云之间的最优变换(旋转+平移),使它们对齐。cilantro 的 ICP 实现极具灵活性:
更亮眼的是非刚性配准(Non-Rigid ICP)模块——允许点云通过局部刚性或局部仿射的形变场对齐:

图4:刚性与非刚性点云融合(来源:项目文档)

图5:嵌入变形图驱动的非刚性配准(来源:项目文档)
内置两种形变场表示:密集形变场(Dense Warp Field)和稀疏嵌入变形图(Embedded Deformation Graph),后者尤其适合大型点云的实时配准。
cilantro 提供了通用的 RANSAC(Random Sample Consensus)估计器模板,已预置两种实例化:
开发者可基于模板轻松扩展自定义模型(如球体、圆柱、平面参数模型)。
cilantro 内置基于 Pangolin 的 3D 可视化器,支持:
Pangolin 为可选依赖,未安装时核心算法库仍可正常编译使用。
cilantro 的设计哲学是**"一次编写,随处运行"**——通过 C++ 模板元编程实现类型和维度的完全参数化:
// 任意维度的 KD-Tree(2D、3D、4D……均适用)
KDTree<double, 3> tree(point_cloud_matrix);
// 任意维度的 PCA
PrincipalComponentAnalysis<double, 3> pca(points);
核心依赖:
编译优化:CMakeLists.txt 默认开启 -O3 -march=native -mtune=native,编译时自动适配本机 CPU 指令集(AVX2/AVX512 等),性能接近手工优化。
git clone https://github.com/kzampog/cilantro.git
cd cilantro && mkdir build && cd build
cmake ..
make -j$(nproc)
核心库编译约 1-2 分钟(视编译器性能而定)。如需示例程序和 3D 可视化,需提前安装 Pangolin(Ubuntu 下:apt install libpangolin-dev)。
项目自带 20+ 个示例,涵盖所有主要功能,编译后位于 build/examples/:
# 法向量估计
./examples/normal_estimation ../examples/test_clouds/sample_cloud.ply
# ICP 刚性配准
./examples/rigid_icp ../examples/test_clouds/sample_cloud.ply
# K-Means 聚类
./examples/kmeans ../examples/test_clouds/sample_cloud.ply
# 交互式 3D 可视化
./examples/visualizer ../examples/test_clouds/sample_cloud.ply
每个示例代码量在 100-300 行之间,配合 README 说明文档,上手门槛较低。
cilantro 的出现填补了一个务实的需求空白:在需要将点云处理深度集成到 C++ 项目中时,PCL 太重、Python 生态不够实时,而 cilantro 恰好落在"轻量 + 功能完整 + 性能优秀"的甜蜜点。
从 GitHub 趋势来看,3D 感知(LiDAR、深度相机、NeRF)在自动驾驶、机器人、AR/VR 领域的爆发式增长持续推动着点云处理工具的需求。cilantro 的模块化设计使其可以按需引入——只需聚类功能?只需配准功能?——避免了全量依赖 PCL 带来的体积膨胀。
如在学术研究中使用 cilantro,请引用其技术报告:
Zampogiannis, K., Fermuller, C., & Aloimonos, Y. (2018). cilantro: A Lean, Versatile, and Efficient Library for Point Cloud Data Processing. ACM MM '18. DOI: 10.1145/3240508.3243655