目录
一、点云分割
1.1 概述
1.2 PCL库中点云分割方法
1.3 算法原理
1.3.1 Plane model segmentation (平面模型分割)
1.3.2 Cylinder model segmentation(圆柱模型分割)
1.3.3 Euclidean Cluster Extraction (欧几里德聚类提取)
1.3.4 Region growing segmentation(区域蔓延分割)
1.3.5 Color-based region growing segmentation (基于彩色信息区域蔓延分割)
1.3.6 Min-cut Based Segmentation (基于最少切割的分割)
1.4 实验
1.4.1 Plane model segmentation (平面模型分割实验)
1.4.2 Cylinder model segmentation(圆柱模型分割实验)
1.4.3 Euclidean Cluster Extraction (欧几里德聚类提取实验)
1.4.4 Region growing segmentation(区域蔓延分割实验)
1.4.5 Color-based region growing segmentation (基于彩色信息区域蔓延分割实验)
1.4.6 Min-cut Based Segmentation (基于最少切割的分割实验)
二、总结
三、参考文献
前言
点云分割往往是许多应用的前提,例如,在逆向工程CAD/CAM 领域对零件的不同扫描表面进行分割,然后才能更好地进行孔洞修复 、曲面重建、特征描述和提取,进而进行基于3D内容的检索、组合重用等。 在激光遥感领域,同样需要对地物首先进行分类处理,然后才能进行后期地物的识别、重建。
一、点云分割
1.1 概述
点云分割是根据空间、几何和纹理等特征对点云进行划分,使得同一划分内的点云拥有相似的特征。
1.2 PCL库中的点云分割方法
- Plane model segmentation (平面模型分割)
- Cylinder model segmentation(圆柱模型分割)
- Euclidean Cluster Extraction (欧几里德聚类提取)
- Region growing segmentation (区域蔓延分割)
- Color-based region growing segmentation (基于彩色信息区域蔓延分割)
- Min-cut Based Segmentation (基于最少切割的分割)
- Conditional Euclidean Clustering(有条件的欧几里德群聚类生成)
- Difference of Normals Based Segmentation (基于局部法线间不同值的分割)
- Clustering of Pointclouds into Supervoxels (把点云聚类为超体元)
- Identifying ground returns using ProgressiveMorphologicalFilter segementation (渐进型形态学过滤器分割)
- Filtering a PointCloud using ModelOutlierRemoval (基于移除模型离群值的方法过滤点云)
下面我们对这些方法进行介绍。
1.3 算法原理
1.3.1 Plane model segmentation (平面模型分割)
其是基于RANSAC(随机采样一致性)的来做平面拟合的。在这个Plane Model Segmentation算法里,RANSAC为了找到点云的平面,不停的改变平面模型(ax+by+cz+d=0)的参数:a, b, c和d。经过多次调参后,找出哪一组的参数能使得这个模型一定程度上拟合最多的点。这个程度就是由distance threshold这个参数来设置。那找到这组参数后,这些能够被拟合的点就是平面的点。
其只有一个参数distance threshold,如果把这调大,离平面更远的点也被算进平面来。distance threshold 可以等同于平面厚度阈值。
RANSAC:
RANSAC的使用条件是:
1.输入是一组带污染的观测数据,其中的可信数据占了大多数;
2.有一个可以解释可信观测数据的参数化模型
RANSAC的思想:
1、从观测数据中随机选择一个子集,称之为hypothetical inliers。
2、估计出适合于这些个hypothetical inliers的模型
3、用这个模型测试其他的数据,根据损失函数,得到符合这个模型的点,称为一致性集合:consensus set。
4、 如果足够多的数据都被归类于一致性集合,那么说明这个估计的模型是正确的;如果这个集合中的数据太少,那么说明模型不合适,弃之,返回第一步。
最后,根据一致性集合中的数据(可以认为是可靠的数据了),用最小二乘的方法重新估计模型。
1.3.2 Cylinder model segmentation(圆柱模型分割)
其和Planer是相似的,都是基于RANSAC的。只是有限制的半径setRadiusLimits和距离setDistanceThreshold两个参数。
有疑问的地方就是圆柱的高不用进行限制吗?当然不用,这个模型分割只是为分割出圆柱,所以它的高可以忽略。
1.3.3 Euclidean Cluster Extraction (欧几里德聚类提取)
基于欧式距离的分割和基于区域生长的分割本质上都是用区分邻里关系远近来完成的。由于点云数据提供了更高维度的数据,故有很多信息可以提取获得。
欧几里得算法使用邻居之间距离作为判定标准,而区域生长算法则利用了法线,曲率,颜色等信息来判断点云是否应该聚成一类。
欧几里德算法
具体的实现方法大致是:
(1)找到空间中某点p10,有kdTree找到离他最近的n个点,判断这n个点到p的距离。将距离小于阈值r的点p12,p13,p14…放在类Q里
(2)在 Q去除p10的区间里找到一点p12,重复1
(3)在 Q去除p10,p12 找到一点,重复1,找到p22,p23,p24…全部放进Q里
(4)当 Q 再也不能有新点加入了,则完成搜索了
因为点云总是连成片的,很少有什么东西会浮在空中来区分。所以要结合其他算法进行聚类,比如平面切割后。其还可以查找离群点(因为其和其他点云不是相连接的)
当然,一旦桌面被剔除,桌上的物体就自然成了一个个的浮空点云团。就能够直接用欧几里德算法进行分割了,这样就可以提取出我们想要识别的东西;
在这里我们就可以使用提取平面,平面去掉,利用聚类的方法再显示剩下的所有聚类的结果。
1.3.4 Region growing segmentation (区域蔓延分割)
其算法是从曲率小的面播种,从种子的位置出发,开始往四周搜索点,然后比对点于点之间的曲率和法线方向,如果差距小于阈值就视为同一个cluster。如果一个cluster无法再蔓延,在剩下的点云里再找曲率小的面播种,然后继续重复直到遍历完毕。
适合情况:这个算法适合分割规则的物体或者说四四方方的东西,像房屋轮廓,纸箱折叠的情景。
对于物体之间的转折处法线和曲率变化小的,算法比较难分割物体。如果点云有噪音,那就是灾难级的表现。而且算法对调参要求高,鲁棒性和普适性低。
1.3.5 Color-based region growing segmentation (基于彩色信息区域蔓延分割)
此算法和区域生成算法是一样的
不同之处在于:一、该算法使用颜色测试代替了法线测试。二、利用合并算法来控制过分割或欠分割。
在分割过程中,若两个相邻聚类的平均颜色相差较少,则将两个聚类合并。然后进行第二步合并,再次步骤中,检查每一个聚类所包含的点的数量,如果这个数量小于用户定义的值,则当前聚类与最近邻聚类合并在一起。
1.3.6 Min-cut Based Segmentation (基于最少切割的分割)
算法如下:
(1)构造图
1、找到每个点最近的n个点
2 、将这n个点和父点连接
3 、找到距离最小的两个块(A块中某点与B块中某点距离最小),并连接
4、 重复3,直至只剩一个块
现在已经有了“图”,只要给图附上合适的权值,就完成了所有任务。物体分割给人一个直观印象就是属于该物体的点,应该相互之间不会太远。也就是说,可以用点与点之间的欧式距离来构造权值。所有线的权值可映射为线长的函数。
(1)连接输入点云各点之间的边,为上述的边赋予的权值称为平滑代价。
式子中dist是各点之间的距离,两个点之间的距离越大,该两点之间被切断的可能性就越大。
(2)连接输入点云中的点与源点的边,该边赋予的权值被称为前景惩罚