点云分割涉及将点云数据分组成不同的部分,这些部分具有相似的特征如空间、几何和纹理属性。点云语义分割进一步为每个点分配语义标签,使得同一分类的点云具有相同或相似属性。有效的点云分割是许多应用的前提,例如工业测量和逆向工程。经典点云分割方法包括随机采样一致方法(RANSAC)、欧式聚类分割、条件欧式聚类分割、基于区域生长的分割等。
简单来说,点云分割只是单纯地把一些部分分为一类,但是没有实际分类的意义,而点云语义分割则是给每个点云指定了标签。
点云分割:根据空间,几何和纹理等特征点进行划分,是同一划分内的点云拥有相似的特征。 点云分割的目的是分块,从而便于单独处理。
点云语义分割:为每个点分配一个语义标记。点云的分类是将点云分类到不同的点云集,同一个点云集具有相似或相同的属性,例如地面,树木,人等。也叫做点云语义分割。
点云的有效分割是许多应用的前提,例如在工业测量/逆向工程领域,对零件表面提前进行分割,再进行后续重建、计算特征等操作。
采用迭代的方式从一组包含离群的被观测数据中估算出数学模型的参数。RANSAC算法假设数据中包含正确数据和异常数据(或称为噪声)。
该算法核心思想就是随机性和假设性,随机性是根据正确数据出现概率去随机选取抽样数据,根据大数定律,随机性模拟可以近似得到正确结果。假设性是假设选取出的抽样数据都是正确数据,然后用这些正确数据通过问题满足的模型,去计算其他点 ,然后对这次结果进行一个评分。
算法的流程如下:
最小二乘法尽量去适应包括局外点在内的所有点。相反,RANSAC能得出一个仅仅用局内点计算出模型,并且概率还足够高。
但是,RANSAC并不能保证结果一定正确,为了保证算法有足够高的合理概率,必须小心的选择算法的参数(参数配置)。
经实验验证,对于包含80%误差的数据集,RANSAC的效果远优于直接的最小二乘法。
PCL中的 Sample_consensus库实现了随机采样一致性及其泛化估计算法,以及例如平面、柱面等各种常见几何模型,用不同的估计算法和不同的几何模型自由结合估算点云中隐含的具体几何模型的系数,实现点云中所处的几何模型的分割。
优点:避免噪声点对拟合结果的干扰。
缺点:由于计算结果的不确定性,迭代次数可能过高,对于密集点云来讲,计算时间过长,需要进行预处理后再进行拟合过程,但同样会损失时间。
PCL中支持的几何模型(来源于网络,没仔细推敲《机器视觉PCL学习笔记》):
变量名 | 几何模型 | 备注 |
---|---|---|
SACMODEL_LINE | 平面模型 | 4个参数:[normal_x normal_y normal_z d] |
SACMODEL_PLANE | 直线模型 | 6个参数:[point_on_line.x point_on_line.y point_on_line.z line_direction.x line_direction.y line_direction.z] |
SACMODEL_CIRCLE2D | 二维圆的圆周模型 | 3个参数:[center.x center.y radius] |
SACMODEL_CIRCLE3D | 三维圆的圆周模型 | 7个参数:[center.x center.y center.z radius normal.x normal.y normal.z] |
SACMODEL_SPHERE | 三维球体模型 | 4个参数:[center.x center.y center.z radius] |
SACMODEL_CYLINDER | 圆柱体模型 | 7个参数:[point_on_axis.x point_on_axis.y point_on_axis.z axis_direction.x axis_direction.y axis_direction.z radius] |
SACMODEL_CONE | 圆锥模型 | 7个参数:[apex.x apex.y apex.z axis_direction.x axis_direction.y axis_direction.z opening_angle] |
SACMODEL_TORUS | 圆环面模型 | 尚未实现 |
SACMODEL_PARALLEL_LINE | 有条件限制的直线模型 | 在规定的最大角度偏差限制下,直线模型与给定轴线平行,参数参见SACMODEL_LINE |
SACMODEL_PARALLEL_LINES | 有条件限制的直线s模型 | 尚未实现 |
SACMODEL_PERPENDICULAR_PLANE | 有条件限制的平面模型 | 在规定的最大角度偏差限制下,平面模型与给定轴线垂直,参数参见SACMODEL_PLANE |
SACMODEL_NORMAL_PLANE | 有条件限制的平面模型 | 在规定的最大角度偏差限制下,每一个局内点的法线必须与估计的平面模型的法线平行,参数参见SACMODEL_PLANE |
SACMODEL_PARALLEL_PLANE | 有条件限制的平面模型 | 在规定的最大角度偏差限制下,平面模型与给定的轴线平行,参数参见SACMODEL_PLANE |
SACMODEL_NORMAL_PARALLEL_PLANE | 有条件限制的平面模型 | 在法线约束下,三维平面模型必须与用户设定的轴线平行,参数参见SACMODEL_PLANE |
主要用于分割离群点。
欧式聚类的原理非常简单,就是以一个点开始,设置一个距离,小于这个距离的,则认为是同一个类型,大于这个距离的则不是同一个目标,找到附近的点之后再重复上述步骤,直到找不到最近的点为止,这样就得到了一个簇,依次类推,迭代点云中其它的点,最后点云就会分割成一个个的簇。
欧式聚类需要注意2点。
参考资料:点云聚类算法一(欧式聚类)
与其他分割方法不同的是该方法的聚类约束条件(欧式距离、平滑度、RGB颜色等)可以由用户自己定义,即当搜索到一个近邻点时,用户可以自定义该邻域点是否合并到当前聚类的条件。
区域生长算法是一种常用于点云数据处理中的分割算法,它的基本原理是从一组种子点出发,逐步将邻近的点加入到相应的区域中去,直到满足某种停止条件。这个过程中通常需要考虑点云的几何特性,比如点之间的距离、表面法向量的一致性等。
区域生长算法的关键步骤如下:
区域生长算法在处理大规模点云数据时特别有效,因为它能够在考虑局部结构的同时逐步构建出全局的区域分割。这种方法在处理噪声数据时也比较鲁棒,但需要合理选择增长条件和停止条件,以及处理好种子点的选择策略。
基于颜色的区域生长分割原理上和基于曲率,法线的分割方法是一致的,只不过比较目标换成了颜色。可以认为,同一个颜色且挨得近,是一类的可能性很大,比较适合用于室内场景分割。尤其是复杂室内场景,颜色分割可以轻松的将连续的场景点云变成不同的物体。哪怕是高低不平的地面,设法用采样一致分割器抽掉平面,颜色分割算法对不同的颜色的物体实现分割。
RGB的距离:
$$ CD(P_1,P_2)=\sqrt{(R_1-R_2)^2+(G_1-G_2)^2+(B_1-B_2)^2} $$
最小图割(Min-Cut)算法是一种用于点云分割的图论方法。它将点云分割问题转化为图割问题,即将一个图(在这里可以理解为点云的一个数学模型)划分为两个子图的问题,目的是使得划分的代价(割的大小)最小。这里的“代价”通常是指边的权重,而在点云分割中,这些权重可以代表点之间的相似度。
最小图割算法的基本步骤如下:
最小图割算法在处理有明显区分特征的点云数据时表现良好,例如在具有不同颜色或明显不同密度的区域之间进行分割。
它的优点是能够考虑全局信息,从而得到较为准确的分割结果。
然而,这种方法的计算复杂度可能比较高,特别是在处理大规模点云数据时。
主要依赖于点云中点的表面法线信息。表面法线是指垂直于物体表面的单位向量,能够反映出物体表面的方向和形状。在点云数据中,每个点的法线可以通过其邻近点的几何分布计算得出。这种算法的基本原理是检测点云中法线变化较大的区域,因为这些区域通常对应于不同物体表面或物体的边缘。
算法的基本步骤如下:
基于法线微分的分割算法在处理具有复杂几何形状或不规则表面的点云时特别有效。它能够识别出因为几何形状变化导致的边界,如物体的棱角或曲面。
"超体素"(supervoxel)是指在点云数据中形成的,较为均匀的、体积小于整个数据集但比单个数据点(如体素或点云中的点)大的聚类。这些超体素通常通过聚类方法生成,它们能够保留物体表面的细节,同时减少数据的规模,这样在后续的分割或识别任务中可以提高效率和精度。
$$ D=\sqrt{w_cD_c^2+\frac{w_sD_s^2}{3R_{seed}^2}+w_nD_n^2} $$
公式描述了一个基于超体素的分割算法的距离度量D,它是由色彩距离$D_c$、空间距离$D_s$和法线距离$D_n$的加权和构成的。这里的权重$w_c$、$w_s$和$w_n$分别对应色彩、空间和法线的重要性。算法通过这个度量来决定是否应该将相邻的体素合并为一个超体素。这个距离度量考虑了颜色、空间接近度和表面法线这三个重要特征,以更好地进行点云数据的聚类。
下图中,底部有一系列的体素,分别被标记为a到p。上面的数字1到9代表搜索和合并的顺序。例如,种子体素(Seed Voxels)首先搜索周围的体素,并根据上面的距离度量D决定是否与其合并。在此图示中,你可以看到超体素的生成过程:首先处理中心的种子体素,然后根据距离度量决定合并周围体素的顺序,这样逐步构建出超体素。图中绿色箭头表示了合并超体素的方向,这显示了超体素是如何通过结合周围相似体素来成长的。