激光点云的物体聚类
作者:互联网
1.什么是聚类算法
聚类就是按照某种特定的标准把一个数据集分割成不同的簇,使得同一个簇内的数据尽可能的相似,不在同一个簇内的数据差异尽可能大。
常用聚类算法包括以下几种:
k-means是典型的基于划分的聚类算法,针对散落的点集,选定聚类个数然后随机初始化中心点,通过迭代计算拉近类内点的距离,增大类间点的距离。
基于网格的聚类是将数据空间划分成栅格形式,将数据映射到网络中,然后计算每个栅格中点集密度,根据预设的阈值对网络单元的类别做出分类,并与邻近的栅格组形成类。
GMM是一种基于模型的聚类方法,为每簇假定了一个模型,依概率的方式寻找数据对给定模型的最佳拟合。
2.聚类的评判标准
聚类是一种无监督算法,一个好的聚类算法具有高的类内距离,同时具有低的类间距离。
通常可以通过内在方法和外在方法进行评估。
内部评价:是一种无监督的方式,采用类内聚集程度和类间离散程度衡量,比如轮廓系数,DB指数等。
外部评价:是一种有监督的方式,用一定的度量评价结果与基准数据的相似程度。比如归一化信息,兰德指数等。
3.三维点云的聚类
三维点云通常利用其特征属性进行聚类,对每个点空间或者局部空间进行特征的提取或者转换,得到多种属性,如:法向量,密度,距离,高程,强度等,将不同属性的点云分割出来。
在点云处理中常见的有欧式聚类,密度聚类,超体聚类,针对不同的场景各有优缺点,从算法的耗时角度出发超体聚类最慢,欧式聚类最快;从算法的效果角度出发欧氏距离最暴力直接,超体聚类对特殊形态的物体表征最好。下图是一张经过点云预处理后的障碍物聚类图:
4.点云的欧式聚类
欧式聚类依据欧氏距离作为判定准则,对于空间内的一点P,通过KD-Tree在领域搜索k个距离P点最近的点,其中距离小于设定阈值的便放入集合Q中,如果Q中元素不在增加,则聚类过程结束;否则在集合Q中选取P以外的点重复以上步骤。
欧式聚类算法在调参过程中有一个比较关键,就是点与点之间的距离阈值的设定。激光雷达在采样过程中具有近密远疏的特点,所以近处的点集之间距离较小,远处的点集之间距离较大。
经常遇到的一个问题就是,设定了距离阈值后,近处的目标聚类效果较好,但远处的目标出现欠分割或者截断的问题。如下图所示,顶部车辆中间区域距离较远导致被聚类成两个目标。
为了解决欧氏距离在不同距离段,点的间距不同的问题。工程上有人采用分段聚类,在不同距离段设置不同的阈值,多线程并行运算每一段的聚类算法,最后在分段间隔处对聚类目标进行融合。
欧式聚类算法实现相对简单,采用kd-tree搜索空间点,运算效率相对较高。但是对离群点和噪声点敏感,在道路场景对障碍物聚类时,会对灌木,树枝等点云分布不规则静态障碍物,在连续帧中聚类出不同的效果,导致外接框拟合抖动。并且欧式聚类的距离阈值对近处和远处的目标点集难以有通用性。
5.点云的密度聚类
密度聚类是将簇定义为密度相连的点的最大集合,能够把具有足够高的密度的区域划分为簇,并可以在噪声的空间数据库中发现任意形状的聚类。
DBSCAN是一种典型的密度聚类算法,它使用两个参数来描述样本的紧密程度,其一是邻域半径,用来描述当前的邻域距离阈值;其二是点的个数,用来描述在邻域范围内数据点的最小个数。
从原理出发还需要了解相关的基本概念:
1)核心对象:对于空间任一点P如果其邻域至少包含k个样本点,则p是核心对象;
2)密度直达:如果点Q位于点P的邻域内,且P是核心对象,则Q由P密度直达;
3)密度可达:如果在样本序列P1,P2,P3,P2是由P1密度直达,P3是由P2密度直达,则P3由P1密度可达;
4)密度直连:对于空间点P和Q,如果存在核心对象T使得P和Q均由T密度可达,则称P和Q密度直连;
算法流程如下:
1.设置参数Distance作为距离阈值;
2.选取空间一点P,搜索最近的k个点;
3.将k个点中小于阈值Distance的点归入集合Q;
4.在集合Q中选取P以外的点重复2操作;
5.Q中的点不在增加则完成聚类
密度聚类对噪声点不敏感,选择合适的阈值可以将目标点和离群点分离。但是在大规模的点云数据中,每个三维点都必须与其他对象点进行比较,算法耗时严重。而且对于线束较少的激光雷达点云,由于线束之间采样点间隔较大,邻域内的点云稀疏,采用密度聚类很容易造成目标点被当成噪声丢失掉,如下图所示:
左图是聚类前的点云,右图是密度聚类后的点云,红色圆圈处的点集由于核心对象邻域内点数稀疏,聚类后被当做噪声点丢失。
点云采用聚类算法进行障碍物分割经常出现欠分割和过分割的问题。一般聚类算法需要设置一个搜索半径,如果搜索半径过小,会将一个对象分割成多个聚类目标;如果搜索半径太大,会将多个对象分割为一个聚类目标。如下图所示:
左边的卡车被聚类成两块,右边的卡车被聚类成三块。
6.点云中的超体聚类
超体聚类类似于基于网格的聚类方式,欧式聚类和密度聚类均采用kdtree的方式进行点的搜索,而超体聚类采用八叉树进行点云的编码。对三维空间进行3D栅格化,在栅格之间做区域生长的操作。
实际应用中会对根据使用的激光雷达数据对典型算法进行改进,比如为了降低密度聚类逐点比较的时间成本,可以将三维点云数据按照维度划分为体素栅格为单元进行聚类,减少在空间中以点为单位的邻域搜索时间。
标签:阈值,激光,距离,算法,密度,聚类,点云 来源: https://www.cnblogs.com/fulumimusta/p/16396228.html