该篇点云论文主要分为两个阶段的创新:
①点云地面点的提取(Ground Plane Fitting, GPF);
②点云扫描聚类快速提取(Scan Line Run, SLR);
一、Ground Plane Fitting, GPF
先上伪代码图
解释:
第一步:首先根据输入的点云,进行一个按照高度的排序,选出N个高度最低的点,并求取高度平均值,作为后续初始种子的评价,根据高度和预设的阈值进行划分,得到种子点云(可以理解为地面点云的初始化)
第二步:根据获得的初始化点云,求取平面的法向量n 和 d;然后针对输入的所有点云进行一个点到平面距离的计算,获得更新的地面点云和非地面点云,在迭代N次,得到收敛的地面点云和非地面点云集合。
二、Scan Line Run, SLR
LSR主要是针对分割完后的非地面点集合进行一个分类、聚类。
算法流程如下
通过第一个预设好带标签的环进行标签的繁殖扩散,对于距离低于阈值的进行标签繁殖,否则进行标签的新建,当出现冲突时,合并两个冲突的标签,并保留标签ID小的。
这里面有三个问题:
1).如何初始化第一个带标签的环;
2).如何进行扩张,寻找最近邻;
3).如果发生标签冲突,如何合并标签;
1.每个点,都有一个环内标签和点云标签,通过检测标签保证首尾跨越的问题;
2.以Kdtree的形式对点云进行存储,环内标签和点云全局标签可以进行一个转化,在寻找最近邻,通过大概的比例,求出当前点在下一环中的点环内标签;
3.(其实我没看懂,哈哈哈)大概是通过3个一维向量进行维护,待我看了参考文献再来。
代码:
ROS的发布节点源码:VincentCheungM/Run_based_segmentation: An ongoing implementation ros node on `fast segmentation of 3d point clouds: a paradigm`... : https://github.com/VincentCheungM/Run_based_segmentation