黄际玮,陆安江*,赵麒,彭熙舜,陈伯云
(1.贵州大学大数据与信息工程学院,贵阳 550025;2.贵州民族大学机械电子工程学院,贵阳 550025)
点云分割[1]是根据点云的一些特征信息,如位置信息、法向量信息等,将具有共同特征信息的点云划分到同一类,从而方便对点云进行处理。点云分割是点云数据处理中重要的步骤之一,点云分割结果的好坏将会直接影响到之后特征提取、曲面重建等过程,因此,点云分割为实现物体识别与定位创造了条件。
目前常用的点云分割方法包括:基于聚类分割的方法[2]、基于区域分割的方法[3]、基于模型的方法以及基于边缘的方法。在基于聚类分割的方法中,欧式聚类分割的方法[4]最为常用,其分割步骤为:先选取种子点,对种子点进行邻域搜索,如果在邻域内发现了其他的点,就将它们与种子点划分为同一聚类簇,然后在聚类簇中选择新的种子点进行搜索,若聚类簇中的点不再增加,那么就完成了一次聚类,之后在剩余的点云中选取新的种子点,重复执行之前的步骤,直到遍历点云中所有的点。欧式聚类分割方法因其分割效率高、稳健性好等优点,在实际应用中常常受到青睐。徐涛等[5]通过利用欧式聚类分割加上对Z轴的约束实现了蔬菜大棚杂草识别。田青华等[6]提出先去出边缘点,再聚类分割,最后补齐边缘点的思想,相较于传统欧式聚类算法,准确性提高了64.26%,速度提高了24.5%。梁雪[7]提出了基于超体素的散乱零件点云分割方法,将零件点云分割为超体素过分割和超体素区域增长两个过程,成功实现散乱堆放零件的分割过程。在基于区域分割的方法中,刘玮等[8]提出一种改进的区域生长算法用于解决重叠分割问题,相较于传统区域生长算法,分割正确率提高了24.9%。薛婧雅等[9]提出一种基于超体素与区域生长的机载点云屋顶平面分割方法,通过超体素方法将点云分为初始平面片集合,然后通过区域生长算法对平面片进行聚类得到初始平面。史洪云等[10]提出一种基于空间约束的区域增长算法,对电力线点云2个空间约束条件进行公式化表达后,以此作为生长准则对电力线点云进行区域生长,实现单根电力线分割。
在一般场景下,欧式聚类分割方法能达到理想的效果,但是对于一些特殊场景,如工件之间靠得太近甚至紧贴在一起,仅仅利用欧式聚类分割的方法不能把这些工件有效地分割出来。因此,针对实际场景中出现的工件粘连的情况,现提出一种结合欧式聚类和自适应法向量约束的工件分割方法。首先对点云进行预处理,去除环境噪声与背景,接着采用欧式聚类分割算法将工件分割成点云簇,对于点云簇中工件粘连的情况,利用区域生长算法设置不同的法向量阈值并进行分割,最终完成工件点云的分割,以期为后续的工件点云识别奠定基础。
实验数据选用无锡微视传感科技有限公司研制的型号PCA-P/S600的3D相机获取,如图1所示,该相机采用微机电系统(micro-electro-mechanical system,MEMS)编码光栅结构光进行扫描,可以根据图像恢复算法重建出物体的真实三维点云数据,光源为近红外激光,采用单目结构光原理,工作距离为300~600 mm,可应用于生物识别、工业自动化、机器人、三维重建等场景。其规格参数如表1所示。
表1 PCA-P/S600 3D相机参数
图1 PCA-P/S600 3D相机
结合欧式聚类和自适应法向量约束的工件分割方法的流程如图2所示,主要包含点云预处理、生成点云簇和自适应法向量约束三个步骤。首先通过点云预处理去除噪声与试验台背景,保留工件点云。然后利用欧式聚类分割方法把工件划分成点云簇。最后针对点云簇中存在多个工件的情况,求出其平均法向量,将平均法向量结果代入区域生长算法进行分割,完成最终的工件分割。
图2 总体分割流程
通过3D相机得到包含试验台在内的大量点云,且受到实际环境因素的影响,不可避免地会产生噪声[11],所以在对点云进行分割之前,需要对采集到的点云进行预处理。为了提高后续对点云分割的效率,需要先利用体素滤波器对相机采集到的点云进行下采样,该方法能够在保持点云特征的前提下对点云数据进行精简,提高后续对点云的处理速度。随机采样一致性(RANSAC)算法[12]采用迭代的方式从一组包含离群的被观测数据中估算出数学模型的参数,由于采集到的点云包含了试验台背景,这会影响到后续对工件的分割效果,所以采用随机采样一致性算法滤除试验台背景。经过前两步的处理,大量的无关点云已经被滤除,但是仍然存在一些稀疏点云,原因是无法完全地去除背景且采集数据时不可避免地存在噪声,对于这些离散的点云,根据噪点的特征可以通过统计滤波器[13]对它们进行滤波处理。预处理前后得到的点云如图3所示,预处理前后的点云数量如表2所示,可以看到,大量的无关点云已经被滤除,只剩下工件点云。
图3 预处理示意图
表2 点云预处理阶段点云数量
原始点云经过预处理之后,大量的无关的点云已经基本被滤除,只留下了工件点云,此时可以使用欧式聚类分割算法将工件点云划分成点云簇。欧式聚类分割算法是一种基于欧式距离度量的聚类方法[14],在三维空间中的两点(x1,y1,z1)与(x2,y2,z2)的欧式距离定义为
(1)
欧式聚类分割算法的步骤如图4所示,主要经过以下几个步骤。
图4 欧式聚类分割算法流程
步骤1对于空间中的某一点M,通过KD-Tree近邻搜索算法找到k个离点M最近的点{m1,m2,…,mk},判断这k个点到点M的距离,将距离小于阈值r的点m1,m2,…,m10,…,存放在集合Q中。
步骤2在集合Q中寻找除M外的另一点,重复步骤1。
步骤3依次遍历集合Q中所有的点,重复上述步骤,直到Q中没有新的点加入,则完成一次聚类。
经过欧式聚类分割后的点云簇中会出现包含多个工件的情况,这是因为工件之间距离太近甚至贴合在一起,仅仅使用欧式聚类分割算法无法将它们完全分割,为了解决这个问题,引入自适应法向量约束的方法,先求出点云簇的平均法向量,然后使用区域生长算法[15]对不同的点云簇设置不同的法向量进行约束并分割,主要过程如下。
步骤1对于某一个点云簇,根据近邻关系与法向量求出其平均法向量V。
步骤2依据曲率对点云簇中的点进行排序,并设置一空的种子点序列Z与一空的聚类数组L。
步骤3将曲率最小的点加入种子点序列Z,从种子点序列Z中拿出一个种子点并搜索其邻域。
步骤4比较邻域点的法线与当前种子点之间的夹角θ,若小于法向量角度阈值,将邻域点加入聚类数组L,其中阈值设置为平均法向量V。
步骤5从聚类数组中检查是否存在小于曲率阈值的点,若存在,则加入种子点序列。
步骤6删除用过的种子点,用下一个种子点重复步骤3、步骤4,直到种子点被清空。
步骤7从曲率排序的点中,即曲率从小到大的顺序选取聚类数组中没有的点作为种子点,重复步骤2~步骤6。
其中,法向量的估计[16]流程如图5所示。
图5 法向量估计流程
对于点云中的每一个数据点pi通过K邻域算法计算出与其相邻的k个邻近点,针对这些点计算出一个最小二乘意义上的局部平面,计算公式为
(2)
式(2)中:n为局部平面P的法向量;d为局部平面P到坐标原点的距离。
通过式(2)可知,局部平面P经过k个邻域点的质心,法向量n满足‖n‖2=1,所以上述问题可以转化为求解方差矩阵的特征值,分析协方差矩阵A的最小特征值所对于的特征向量,此小特征向量即为平面P的法向量。其中,协方差矩阵A的计算公式为
(3)
拟合平面P在满足邻域点到平面距离平方和最小的条件下,依据拉格朗日定理,解算出协方差矩阵A和平面法向量n满足如下关系:
An=λn
(4)
式(4)中:λ为矩阵A的特征值;当λ取最小值时,对应的向量n就是拟合平面P的法向量,即pi点的法向量。
平均法向量的计算方法为:首先计算出对于点云簇中某点q邻域内的所有邻近点法线夹角的均值αi:
(5)
式(5)中:k为邻近点数目;vi为点q的法线;q点的邻近点对应法线分别为{vi1,vi2,…,vij}。
接着遍历点云中所有的点得到N个邻近点数目,求出整个点云簇中的平均法向量α:
(6)
实验数据包含工件与试验台背景,其中工件是尺寸为6.0 mm×8.0 mm×4.0 mm的电容,如图6所示,实验所用的计算机为64位的Windows10操作系统,配置为AMD Ryzen 54600H CPU@3.0GHz,16.00 GB内存,应用Visual Studio 2017编程环境,配合点云库(PCL)1.8.1使用。
图6 电容实物
经过欧式聚类分割后的工件点云簇中,含有多个工件的点云簇如图7所示。对以上点云簇进行法向量自适应约束,计算出每一个点云簇的平均法向量,如表3所示。
表3 不同点云簇平均的平均法向量
图7 含多个工件的点云簇
对每个点云簇使用区域生长算法进行分割,并设置不同的法向量进行约束,得到的分割结果如图8所示。分割时标注的颜色是随机产生的,每一种颜色代表一类点云,在工件的连接处存在着红色的点云,这代表着连接的工件已经被分割出来。提取出红色点云后,得到最终分割结果。每个点云簇分割前后的点云数量如表4所示,每个点云簇分割出的点云类型及每个类型的点云数量如图9所示。
图8 法向量自适应约束后的点云簇
图9 最终分割点云数量
表4 点云簇分割前点云数量
而使用传统的区域生长算法分割后得到的点云如图10所示。可以看到,对于一些贴合不太紧密的工件来说,可以使用传统的区域生长算法分割来达到理想的分割效果,但是对于接触相对紧密的工件,该方法就不能将它们完全地分割。为了定量分析本文提出的算法精确度,分别使用欧式聚类算法、区域生长算法和本文算法对两组数据进行分割对比,得到的分割精度如表5所示。
表5 不同算法分割精度对比
图10 传统区域生长算法分割结果
利用本文提出的结合欧式聚类与自适应法向量约束的分割方法能比较灵活地提取出点云的边界信息,利用这些信息对点云实现更精确地分割,弥补了使用传统算法出现的过分割和欠分割的缺陷,从而得到更好的分割效果。
以小型电容为研究对象,应用3D相机对其生成的点云进行分割研究,得出如下结论。
(1)相对于传统相机,采用基于MEMS编码光栅结构光的3D相机能够方便快速地采集工件点云数据,在提高效率的同时保证了数据的精度。
(2)根据点云的分布特征,通过体素滤波、随机采样一致性去平面、统计滤波去噪声的滤波顺序有效地提取出工件点云,为后续工件点云分割提供了条件。
(3)针对工件点云分割提出了分割精度更高的算法,有效解决了传统的欧式聚类算法及区域生长算法中出现的过分割以及欠分割的问题。
结果表明,本文提出的分割算法分割准确度得到有效提升,分割效果显著增强。在此基础上,下一步工作的重点是如何实现将重叠的工件点云进行有效地分割。