地面分割与聚类算法
主题:点云处理流水线中两个核心算法族的完整技术文档——地面分割(RANSAC 平面拟合、CSF 布料模拟、GroundSeg)与聚类(欧式聚类、DBSCAN、区域增长、MeanShift),含算法步骤、参数设置、优缺点、工业适用性与组合流程。 本版综合 GitHub 开源项目(Immortalqx/RANSAC、jianboqi/CSF)、CSDN/博客园教程与专利案例(钢卷 MeanShift 聚类)展开。 版权说明:本文为公开资料(论文/专利/厂商文档)的中文要点综述与整理,非原文转载。完整内容与图表请访问文末「信息来源」中的原始链接;引用请注明原始出处。
1. 为什么地面分割是第一步
Section titled “1. 为什么地面分割是第一步”- 地面占比高:堆场/矿区/库区点云中地面点通常占 30%~70%;
- 地面不分割的后果:
- 聚类时地面与目标粘连(料堆/车辆/钢卷无法分离);
- 体积计算的基准面无法确定(笔记 13);
- 配准/识别计算量浪费(处理大量无关点);
- 检测模型误把地面起伏当障碍物。
- 因此”先分割地面、再处理非地面点”是工业标准流程。
2. RANSAC 平面拟合地面分割
Section titled “2. RANSAC 平面拟合地面分割”2.1 算法原理(详细步骤)
Section titled “2.1 算法原理(详细步骤)”RANSAC(RANdom SAmple Consensus,随机采样一致性)是从含外点数据中估计数学模型参数的迭代算法:
输入:点云 P,容差 d,迭代次数 N,内点阈值 T输出:地面平面模型 (n, p0) 及地面点集
1. 重复 N 次: a. 随机采样 3 个点(不共线)→ 确定平面 (n, p0) b. 计算所有点到平面距离 dist(p) c. 统计 dist(p) < d 的内点数量 d. 记录内点数最多的平面2. 输出最佳平面及其内点(=地面点)- 距离公式:dist = |n·(p − p0)|(n 为单位法向量);
- 迭代次数 N 与内点比例、维度相关(理论上 N 越大越稳,工程 100~1000 次足够)。
2.2 参数设置
Section titled “2.2 参数设置”| 参数 | 含义 | 经验值 |
|---|---|---|
| 距离容差 d | 点到平面距离阈值 | 5~20 cm(按雷达噪声水平) |
| 迭代次数 N | 采样次数 | 100~1000 |
| 内点比例阈值 | 地面占比下限 | 0.3~0.5 |
2.3 优缺点
Section titled “2.3 优缺点”- 优点:实现简单、对噪声鲁棒、计算快、PCL/Open3D 内置;
- 缺点:
- 假设地面是单个平面——起伏地形/坡道/台阶失效;
- 容差参数需按场景调(过大→把低矮目标当地面,过小→地面不完整);
- 大平面误判风险(料堆顶面若平整也可能被拟合)。
2.4 改进变体
Section titled “2.4 改进变体”- 多平面 RANSAC:分割一个平面后移除,重复拟合(多级地面/台阶);
- 法线约束:地面法线应近似竖直(与重力方向平行)——加入约束减少误判;
- 直通滤波预裁剪:先按 z 范围裁剪(去除高处建筑),再 RANSAC;
- 渐进式地面拟合(PTF/GPF):按距离分段拟合(车载倾斜路面)。
2.5 工业适用性
Section titled “2.5 工业适用性”- 散货堆场(平整地面)✅ 首选;
- 矿卡矿区道路(整体平缓但有坡)⚠️ 需分段或结合 CSF;
- 钢厂库区(室内平地)✅ 效果好;
- 卸船机船舱(舱底是平面但被料堆遮挡)✅ 需配合料面分割。
3. CSF 布料模拟滤波(Cloth Simulation Filter)
Section titled “3. CSF 布料模拟滤波(Cloth Simulation Filter)”3.1 算法原理(详细步骤)
Section titled “3.1 算法原理(详细步骤)”CSF(Zhang 等,2016)模拟布料在重力下覆盖地形的过程:
输入:点云 P(翻转:z → -z),布料网格分辨率 r,刚性系数,迭代次数输出:地面点/非地面点
1. 点云翻转(Z 轴取反)——地形"倒扣"成凹面2. 初始化布料网格置于点云上方3. 迭代(布料在重力作用下落): a. 重力作用:网格节点下落 b. 碰撞检测:节点与地形点相交则停止(标记为地面接触点) c. 刚性约束:相邻节点距离保持(布料张力)4. 布料最终形态 ≈ 地面近似面5. 点云中落在布料上的点 = 地面点3.2 关键参数
Section titled “3.2 关键参数”| 参数 | 含义 | 影响 |
|---|---|---|
| 布料网格分辨率 | 网格间距 | 小=精细但慢;大=平滑但丢细节 |
| 刚性系数(rigidness) | 布料张力 | 大=布料硬(适应平地);小=软(贴地形) |
| 迭代次数 | 下落步数 | 不足=布料未落地 |
| 陡坡阈值(slope) | 区分陡坡处理 | 陡坡处采用后处理修正 |
3.3 优缺点
Section titled “3.3 优缺点”- 优点:不假设地面是平面——适应复杂地形与陡峭区域(露天矿、起伏料场);机载 LiDAR 滤波经典算法;
- 缺点:参数需按场景调;对地面以下点(负地形、深坑)敏感;比 RANSAC 慢;
- 开源:GitHub
jianboqi/CSF(C++/Python),已集成 R 语言 lidR 生态。
3.4 工业适用性
Section titled “3.4 工业适用性”- 料堆起伏、露天矿不规则地形 ✅ 首选;
- 室内平地 ⚠️ 杀鸡用牛刀(RANSAC 足够);
- 结合策略:RANSAC 粗分 + CSF 处理残留(坡道区域)。
4. GroundSeg 等自动驾驶地面分割
Section titled “4. GroundSeg 等自动驾驶地面分割”- 原理:将地面分割建模为扇形网格上的可行驶区域分类(按距离/方位划分扇区,逐扇区估计地面高度);
- 特点:处理非平面、倾斜地面;计算高效(车规实时);
- 工业启示:矿区/港区路面有坡度时,借鉴”分扇区局部平面”思路——把大平面假设拆成局部小平面。
5. 聚类算法(地面分割后)
Section titled “5. 聚类算法(地面分割后)”5.1 欧式聚类(Euclidean Cluster Extraction)
Section titled “5.1 欧式聚类(Euclidean Cluster Extraction)”算法:
输入:非地面点云 P,聚类半径 r,最小点数 min,最大点数 max输出:聚类簇列表
1. 构建 k-d 树(加速邻域搜索)2. 遍历未访问点 p: a. 队列 Q = [p],标记 p 已访问 b. 找 p 的 r 邻域点,未访问者入队 c. 重复直到 Q 空 → 形成一个簇 d. 点数在 [min, max] 内保留,否则丢弃(噪声簇)- 关键参数:聚类半径 r——按目标尺度与点密度设定(如钢卷扫描中按安装高度、扫描密度设置聚类半径和阈值,专利 CN111680542A);
- 特点:简单、快,PCL/Open3D 内置;
- 局限:半径固定——远距离目标点稀疏时易碎(可结合动态半径)。
5.2 DBSCAN
Section titled “5.2 DBSCAN”算法:
输入:点云 P,邻域半径 eps,最小点数 minPts输出:聚类簇 + 噪声点
1. 对每点:统计 eps 邻域内点数2. 核心点:邻域点数 ≥ minPts3. 密度可达:核心点邻域内的点链4. 簇 = 密度可达的点集合;孤立点 = 噪声- 特点:无需预设簇数量、任意形状(料堆、不规则堆体)、自动标记噪声;
- 参数:eps(尺度相关)、minPts(经验 5~20);
- 工业适用:堆体分割、散料识别、不规则目标聚类。
5.3 其他聚类
Section titled “5.3 其他聚类”| 方法 | 原理 | 特点 | 工业案例 |
|---|---|---|---|
| 区域增长 | 法线/曲率一致生长 | 平滑表面提取 | 平面/曲面分割 |
| MeanShift | 密度中心漂移迭代 | 自动聚类数 | 钢卷点云分割(专利 CN111680542A) |
| 超体素(Voxel Cloud) | 体素化+局部聚合 | 预分割加速 | 大场景预处理 |
5.4 选型对比
Section titled “5.4 选型对比”| 方法 | 形状假设 | 参数 | 噪声处理 | 速度 | 工业典型用途 |
|---|---|---|---|---|---|
| 欧式聚类 | 无(距离阈值) | 半径、点数 | 小簇过滤 | 快 | 钢卷/鞍座/车辆分割 |
| DBSCAN | 无(密度) | eps、minPts | 自动标噪 | 中 | 料堆、不规则目标 |
| 区域增长 | 平滑表面 | 法线/曲率 | 一般 | 中 | 平面/曲面提取 |
| MeanShift | 密度峰 | 带宽 | 一般 | 中 | 钢卷聚类(专利案例) |
6. 典型工业组合流程(组合拳)
Section titled “6. 典型工业组合流程(组合拳)”原始点云 → 直通滤波(裁剪 ROI:去除远处/高空无关区域) → 地面分割(RANSAC:室内/堆场平地;CSF:复杂地形) → 欧式聚类 / DBSCAN(分割独立目标) → 目标特征提取与分类(笔记 07)对应工程实例(钢卷识别预处理,笔记 03):直通滤波 → RANSAC 去地面 → MeanShift 聚类分割 → PointNet 分类。
7. 工程建议
Section titled “7. 工程建议”- 地面分割先行且必须:所有目标级任务(识别/检测/体积)的预处理第一步;
- 场景决定方法:平地→RANSAC(快);起伏→CSF(准);坡道→分扇区;
- 参数标定:按雷达噪声水平标定容差;按目标尺度标定聚类半径——建立”参数-场景”配置表;
- 聚类后验证:簇数量/尺寸分布是否符合场景预期(异常=参数或数据问题);
- 大数据量:先体素降采样再聚类(速度提升 10 倍级);
- 时序稳定性:固定场景(堆场)可缓存地面模型,避免每帧重算(与路侧雷达背景模型思路一致,笔记 09 §7)。
8. 信息来源
Section titled “8. 信息来源”- GitHub
Immortalqx/RANSAC(RANSAC 地面分割实现):https://github.com/Immortalqx/RANSAC - GitHub
jianboqi/CSF(布料模拟滤波,C++/Python/R):https://github.com/jianboqi/CSF - CSDN《点云地面点滤波(Cloth Simulation Filter, CSF)介绍》:https://blog.csdn.net/wxc_1998/article/details/107206075
- CSDN《基于 RANSAC 算法的激光雷达点云地面分割实战解析》:https://blog.csdn.net/weixin_42620913/article/details/160172535
- 博客园《【1】激光点云分割—RANSAC》:https://www.cnblogs.com/xuhongfei0021/p/12514170.html
- 博客园《Python 实现点云 CSF 布料滤波算法》:https://www.cnblogs.com/RSran/p/17884910.html
- GitCode《基于 RANSAC 的激光雷达地面点云分割》:https://blog.gitcode.com/5ce0e4daf9787ed1a580c9827169f51d.html
- 关联:笔记 06(流水线)、07(识别)、03(钢卷聚类案例)、13(体积测量)
版权提示:GitHub 开源项目遵循各自 License(CSF 为 GPL/MIT 混合,商用需核查);CSDN/博客园文章版权归作者,仅摘录要点。