激光点云的物体聚类

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达4fec4fd02c0b2d9720649a1f5a8aa27d.png

文章导读

本文针对自动驾驶中三维点云的道路目标聚类进行讲解,从聚类算法的原理出发,介绍几种常用的点云障碍物聚类算法,并对比分析算法的优劣和适用场景,从工程角度给出算法的优化方式。

1什么是聚类算法

聚类就是按照某种特定的标准把一个数据集分割成不同的簇,使得同一个簇内的数据尽可能相似,不在同一个簇的数据差异尽可能大。

常用的聚类算法包括以下几种:

激光点云的物体聚类_第1张图片

k-means是典型的基于划分的聚类算法,针对散落的点集,选定聚类个数然后随机初始化中心点,通过迭代计算拉近类内点的距离,增大类间点的距离。

基于网格的聚类是将数据空间划分成栅格形式,将数据映射到网格中,然后计算每个栅格中点集密度,根据预设的阈值对网格单元的类别作出分类,并与邻近的栅格组形成类。(之前的文章中提到的栅格法道路分割用的就是这种思想)

GMM是一种基于模型的聚类方法,为每簇假定了一个模型,以概率的方式寻找数据对给定模型的最佳拟合。


2聚类的评判标准

聚类是一种无监督算法,一个好的聚类算法具有高的类内距离,同时具有低的类间距离。但是既然没有标签,那么如何判断聚类的好坏呢?

通常可以通过内在方法和外在方法进行评估。

内部评价是一种无监督的方式,采用类内聚集程度和类间离散程度衡量,比如轮廓系数、DB指数等。

外部评价是一种有监督的方式,用一定的度量评判聚类结果与基准数据的相似程度。比如归一化信息,兰德指数等。


3三维点云的聚类

三维点云通常利用其特征属性进行聚类,对每个点空间或者局部空间进行特征的提取或者转换,得到多种属性,比如:法向量,密度,距离,高程,强度等等,将不同属性的点云分割出来。

在点云处理中常见的有欧式聚类,密度聚类,超体聚类,针对不同的场景其各有优缺点,从算法耗时角度出发超体聚类最慢,欧式聚类最快;从算法效果角度出发欧式距离最暴力直接,超体聚类对特殊形态的物体表征最好。下图是一张经过点云预处理后的障碍物聚类图:

激光点云的物体聚类_第2张图片

4点云的欧式聚类

欧式聚类依据欧式距离作为判定准则,对于空间内的一点P,通过KD-Tree在领域搜索k个距离P点最近的点,其中距离小于设定阈值的便放入集合Q中,如果Q中元素不在增加,则聚类过程结束;否则在集合Q中选取P点以外的点,重复以上步骤。

欧式聚类算法在调参过程中有一个比较关键,就是点与点之间的距离阈值的设定。激光雷达在采样过程中具有近密远稀的特点,所以近处的点集之间距离较小,远处的点集之间距离较大。

经常遇到的一种现象就是,设定了距离阈值后,近处的目标聚类效果较好,但是远处的目标出现欠分割或者截断的问题。如下图所示:顶部车辆中间区域点距离较远导致被聚类成两个目标。

激光点云的物体聚类_第3张图片

为了解决欧式聚类在不同距离段,点的间距不同的问题。在工程上有人采用分段聚类,在不同距离段设置不同的阈值,多线程并行运算每一段的聚类算法,最后在分段间隔处对聚类目标进行融合。

5点云的密度聚类

密度聚类是将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。

DBSCAN是一种典型的密度聚类算法,它使用两个参数来描述样本的紧密程度,其一是邻域半径,用来描述当前点的邻域距离阈值;其二是点的个数,用来描述在邻域范围内数据点的最小个数。

从原理出发还需要了解几个基本概念:

  • 核心对象:对于空间任一点P,如果其邻域内至少包含k个样本点,则P是核心对象;

  • 密度直达:如果点Q位于点P的邻域内,且P是核心对象,则Q由P密度直达;

  • 密度可达:如果在样本序列中P1,P2,P3,P2由P1密度直达,P3由P2密度直达,则P3由P1密度可达;

  • 密度直连:对于空间点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栅格化,在栅格之间做区域生长的操作。由于运行速度较慢,所以小编没去测试过,在这就不细讲了。

7道路目标的聚类分析

欧式聚类算法实现相对简单,采用kd-tree搜索空间点,运算效率相对较高。但是对离群点和噪声点敏感,在道路场景对障碍物聚类时,会对灌木,树枝等点云分布不规则静态障碍物,在连续帧中聚类出不同的效果,导致外接框拟合抖动。并且欧式聚类的距离阈值对近处和远处的目标点集难以有通用性。

密度聚类对噪声点不敏感,选择合适的阈值可以将目标点和离群点分离。但是在大规模的点云数据中,每个三维点都必须与其他对象点进行比较,算法耗时严重。而且对于线束较少的激光雷达点云,由于线束之间采样点间隔较大,邻域内的点云稀疏,采用密度聚类很容易造成目标点被当成噪声丢失掉,如下图所示:

激光点云的物体聚类_第4张图片

左图是聚类前的点云,右图是密度聚类后的点云,红色圆圈处的点集由于核心对象邻域内点数稀疏,聚类后被当做噪声点丢失。

点云采用聚类算法进行障碍物分割经常出现欠分割和过分割的问题。一般聚类算法需要设置一个搜索半径,如果搜索半径过小,会将一个对象分割成多个聚类目标;如果搜索半径太大,会将多个对象分割为一个聚类目标。如下图所示:

激光点云的物体聚类_第5张图片

左边的卡车被聚类成两块,右边的卡车被聚类成三块。

实际工程开发中会对根据使用的激光雷达数据对典型算法进行改进,比如为了降低密度聚类逐点比较的时间成本,可以将三维点云数据按照维度划分为体素栅格为单元进行聚类,减少在空间中以点为单位的邻域搜索时间。

传统聚类算法的参数设定需要根据不同的应用场景进行调节,操作算法鲁棒性较差,针对阈值参数的设定如果可以接触学习的方法或者自适应的方式会是一直算法优化的趋势。


下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

激光点云的物体聚类_第6张图片

激光点云的物体聚类_第7张图片

你可能感兴趣的:(聚类,算法,python,机器学习,人工智能)