使用层次聚类在结构点云中快速提取平面

主流的几类平面提取的方法有:

(1)RANSAC-based methods:long computation time;

(2)Region-grow-based methods(pixel、voxel、line);

(3) turn into normal space, compute the distance between the point cloud and the original;

(4)normal estimation;

(5)Graph-based segmentation;

首先解释一下什么是结构点云:

英文为organized point cloud。如果点云是可以以2D对3D点云进行索引的话,这就算是organized point cloud,表现在定义点云大小的时候直接定义点云的height和width,如height = 480,width =640。

如果是unorganized point cloud,一般point cloud 的height定义为1,width就是整个点云数目,如 height = 1, width = 307200,这是没办法通过2D进行索引的,相当于把整个点云拉成一条,在数据利用上缺失了点与点之间的空间信息,不利于有些点云的特征的处理。

下面介绍具体算法:

1.初始化图模型

将图像中的点云均匀的分成H×W为一个节点,例如图像为10×10,H=W=5,那么就分成(10/5)×(10/5)=4,总共分成四块,也就是有四个节点。但是为了更好的使用AHC(层次聚类),需要移除下面几类节点和它们对应的边:

1)节点对应很高的MSE

2)节点缺少数据信息(传感器的限制)

3)节点包含的深度不连续

4)节点在两个平面的边界上

值得一提的是针对这种非重叠的节点,默认是在一个平面上的,所以也就不需要对每个节点中的点进行法线估计,这会很大的提高整个算法的速度。

2.层次聚类(AHC)

1)首先建立一个最小堆的数据结构,使得能够更有效的找到有最小均方误进行融合;

2)再次计算融合后的平面拟合均方误差,找到获得均方误差最小的对应两个节点;

3)如果均方误差超过一个预先设定的阈值(非固定),一个平面的分割节点就算是找到了,把它从图中提取出来,否则,就把这两个节点融合好,重新加到构建的图中,对建立的最小堆进行更新;

4)重复上述2)、3)操作。

因为最小堆建立,可以被看成是一个近似的完全二叉树,所以在建立最小堆的复杂度是线性时间复杂度,而在排序的时候就是一个O(nlgn)O(nlgn)的时间复杂度。

3.分割优化

在步骤2层次聚类后只能算是比较粗糙的分割,而且在第一个步骤中舍弃了很多节点,所以在最后的优化时,是基于像素点的优化,主要是有下面三种类型:

1)在边缘处会产生锯齿状的分割:会使得少量异常点包含在估计中,通过腐蚀边界区域优化这种现象;

2)未使用的数据点:就近分类未使用的点周围平面;

3)过度分割:在特别小的图中(通常是小于30个节点)再次进行AHC。

参考论文:Fast Plane Extraction in Organized Point Clouds Using Agglomerative Hierarchical Clustering

你可能感兴趣的:(其他)