目录
摘要
1.点云分割算法的属性
2.点云分割的挑战
3.点云分割算法介绍
01 基于边缘的方法
02 基于区域分割方法
03 基于属性的方法
04 基于模型的方法
05 基于图优化的方法
4.总结
5.PCL点云中的分割模块
参考
摘要
三维点云分割是将同属性的点云物体分割出来,以便于单独对该点云物体处理,但是由于点云数据是一种高冗余度,且不均匀的数据结构,所以点云分割具有一定挑战性。
在图像分割中常常用到前景与背景的分割处理,而在点云处理中,对于给定点云数据,分割的目标是将具有相似特征的点聚类成均匀区域,根据分割结果应用于各个方面的场景分析,一般的方法是根据输入点云的网格构建图形,使用边界线的法线、平滑度或者凹凸性等信息进行聚类分割,包括(论文[1]):
- 凹凸性分割
- 分水岭分析
- 层次聚类
- 区域增长
- 频谱聚类
这些方法也广泛应用于数字图像处理的2D图像分割中,2D图像的分割是一个很经典的问题,并且已经有着十几年的研究历史,其中一些传统方法的思想同样适应于3D点云的分割。
1.点云分割算法的属性
(1)鲁棒性,比如树木是具有与汽车相区别的特征的,当点云数据的特征数量增加时,分割算法应该具有一定的鲁棒性,能够学习如何自动的区分它们。
(2)其次分割应该能够根据其相邻的信息推断出稀疏点云中这些点的属性或者判定出属于哪个标签。
(3)分割算法应该能适用于不同的扫描器,即便是相同的场景在不同的扫描仪生成出的点云也是具有不同的属性的,并且产生点云的质量以及稀疏性的也是不一样的。
2.点云分割的挑战
点云数据虽然可以确定3D对象的形状,大小和一些其他属性,但是3D点云通常由于传感器的限制,数据是嘈杂稀疏且无序的,比如激光雷达线性和角速率的变化,点的采集密度也是不均匀的,此外点云数据的表面形状可以是任意的,是没有数据统计分布呈现出来的,所以这就给点云的分割带来一系列的问题。
3.点云分割算法介绍
接下里将介绍五种传统的分割算法:基于边缘的方法、基于区域的方法、基于属性的方法、基于模型的方法和基于图优化的方法。
01 基于边缘的方法
边缘是描述点云物体形状的基本特征,这种方法检测点云一些区域的边界来获取分割区域,这些方法的原理是定位出边缘点的强度变化,比如可以通过计算梯度,检测表面上单位法向量方向的变化来拟合线段(论文[2]),或者基于扫描线的分组进行快速分割(论文[3])。基于边缘的方法虽然分割速度比较快但是准确度不能保证,因为边缘对于噪声和不均匀的或稀疏的点云非常敏感。
02 基于区域分割方法
基于区域的方法使用邻域信息来将具有相似属性的附近点归类,以获得到分割区域,并区分出不同区域之间的差异性。 基于区域的方法比基于边缘的方法更准确。 但是他们在分割过度或不足以及在如何准确确定区域边界方面存在问题。 研究者们将基于区域的方法分为两类:种子区域(自下而上)方法和非种子区域(自上而下)方法。
种子区域方法: 基于种子的区域分割通过选择多个种子点来开始做分割,从这些种子点为起始点,通过添加种子的邻域点的方式逐渐形成点云区域,算法主要包含了两个步骤(论文[4]):
(1)基于每个点的曲率识别种子点,
(2)根据预定标准,该标准可以是点的相似度和点云的表面的相似度来生长种子点。
这种方法对噪声点也非常敏感,并且耗时。但后续有很多基于这种方法的改进,比如对于激光雷达数据的区域增长的方法,提出了基于种子点的法向量和与生长平面的距离来生长种子点。种子区域方法高度依赖于选定的种子点。不准确选择种子点会影响分割过程,并可能导致分割不足或过度。选择种子点以及控制生长过程是耗时的。分割结果可能对所选的兼容性阈值敏感。另一个困难是决定是否在给定区域中添加点,因为这种方法对点云的噪声也很敏感。
非种子区域方法: 这种方法时基于自上而下的方法。首先,所有点都分为一个区域。然后细分过程开始将其划分为更小的区域。使用这种方法(论文[5])指导聚类平面区域的过程,以重建建筑物的完整几何形状。该工作引入了基于局部区域的置信率为平面的分割方法。这种方法的局限性在于它也会可能过度分割,并且在分割其他对象(例如树)时它不能很好地执行。非种子区域方法的主要困难是决定细分的位置和方式。这些方法的另一个限制是它们需要大量的先验知识(例如,对象模型,区域数量等),然后这些未知的先验知识在复杂场景中通常是未知的。
03 基于属性的方法
该方法是基于点云数据的属性的一种鲁棒性较好的分割方法,这种方法一般包括了两个单独的步骤:
第一步,基于属性的计算。
第二步,将根据计算点的属性进行聚类,这种聚类方法一般能适应空间关系和点云的各种属性,最终将不同的属性的点云分割出来,但是这种方法局限性在于他们高度依赖派生属性的质量所以要求第一步能够精确的计算点云数据的属性,这样才会在第二步中根据属性的类别分割出最佳的效果。
论文[6]则是这种方法实现的,提出了一种基于特征空间聚类分析方法,在该方法中,使用一种自适应斜率的邻域系统导出法向量,使用点云数据的属性,例如距离,点密度,点在水平或者垂直方向的分布,来定义测量点之间的领域,然后将每个方向上的法向量的斜率和点邻域的数据之差作为聚类的属性,这种方法可以消除异常值和噪声的影响,基于属性的方法是将点云分割相同属性区域的高效方法,并且分割的结果灵活而准确。 然而,这些方法依赖于点之间邻域的定义和点云数据的点密度。 当处理大量输入点的多维属性时,这种方法的另一个限制是比较耗时。
04 基于模型的方法
该方法时基于几何的形状比如球形,圆锥,平面和圆柱形来对点云进行分组,那么根据这些几个形状,具有相同的数学表示的点将会被分割为同一组点,论文[7]中引入了一种众所周知的算法RANSAC(RANdom SAmple Consensus),RANSAC是强大的模型,用于检测直线,圆等数学特征,这种应用极为广泛且可以认为是模型拟合的最先进技术,在3D点云的分割中需要改进的方法都是继承了这种方法。基于模型的方法具有纯粹的数学原理,快速且强大,具有异值性,这种方法的主要局限性在于处理不同点云是的不准确性。这种方法在点云库中已经实现了基于线,平面,圆等各种模型。
05 基于图优化的方法
图优化的方法在机器人的应用中十分流行,众所周知的方法是FH算法[7],该方法简单且高效,并且像Kruskal算法一样用于在图中查找最小生成树。许多基于图的方法的工作被投入到概率推理模型中,例如条件随机场(CRF),使用CRF标记具有不同几何表面基元的点的方法。基于图优化的方法在复杂的城市环境中成功地分割点云,具有接近实时的性能。为了与其他方法进行比较,基于图形的方法可以对点云数据中的复杂场景进但是,这些方法通常无法实时运行。其中一些可能需要离线训练等步骤。
4.总结
以上将分割方法分为五类。但是,一般来说,有两种基本方法。
第一种方法使用纯数学模型和几何推理技术,如区域增长或模型拟合,将线性和非线性模型拟合到点云数据。这种方法允许快速运行时间能实现良好的结果。这种方法的局限性在于在拟合物体时难以选择模型的大小,对噪声敏感并且在复杂场景中不能很好地工作。
第二种方法使用特征描述子的方法从点云数据中提取3D特征,并使用机器学习技术来学习不同类别的对象类型,然后使用结果模型对所获取的数据进行分类。在复杂场景中,机器学习技术将优于纯粹基于几何推理的技术。原因是由于噪声,密度不均匀,点云数据中的遮挡,很难找到并将复杂的几何图元拟合到物体上。虽然机器学习技术可以提供更好的结果,但它们通常很慢并且依赖于特征提取过程的结果。
以上的这些算法在PCL的都已经实现且都有现成的demo可以查看效果。
5.PCL点云中的分割模块
该模块是在以上基本模块的基础上进行的研究,比如如何将点云数据构造成kdtree或者Octree结构使用FLANN(最近邻搜索)的方式寻找点与周围见之间的关系。
在PCL常用的聚类分割的类有以下几种:
class pcl::ConditionalEuclideanClustering< PointT >
该类实现了用于设定的条件的欧式聚类的分类算法。
class pcl::CPCSegmentation< PointT >
对超体素图进行分割的分割算法。 它使用局部凹度引起的平面切割进行递归分割。使用局部约束的有向RANSAC进行分割。
CPC分割与LCCP分割是继承的关系 ,具体论文[9]。
class pcl::EuclideanClusterExtraction< PointT >
欧几里得聚类提取是欧几里得意义上的聚类获取分割的点云类。
class pcl::LabeledEuclideanClusterExtraction< PointT >
labeledeuclidenclusterextraction表示一个分段类,用于欧几里得意义上的带有标签信息的聚类提取,
class pcl::ExtractPolygonalPrismData< PointT >
ExtractPolygonalPrismData使用一组表示平面模型的点索引,并与给定的高度一起生成三维多边形棱柱。然后使用多边形棱柱分割位于其内部的所有点。
class pcl::GrabCut< PointT >
实现了GrabCut分割。
class pcl::segmentation::detail::RandomWalker< Graph, EdgeWeightMap, VertexColorMap >
实现随机行走的优化的分割方法,论文[10]。
class pcl::LCCPSegmentation< PointT >
一种简单的分割算法,将一个超体素图分割成由凹边界分隔的局部凸连接超体素组,论文[11]。
class pcl::SACSegmentationFromNormals< PointT, PointNT >
结合点云的数据表面的法向量使用RANSAC方法的分割。
class pcl::SupervoxelClustering< PointT >
实现基于体素结构、法线和RGB值的超体素算法。论文[12]。