陈国军,孔李燕,张清伟,杨 静
(中国石油大学(华东) 计算机与通信工程学院,山东 青岛 266580)
近年来,点模型的发展优势越发明显,以点云为研究对象的计算机图形学、计算机视觉成为研究热点,利用扫描技术得到的点云数据具有快速简单、信息量大、容易存储等优点。当前对得到的点云进行修改、分析、重用已成为重要的研究课题,点云分割也由此提出。点云分割是将复杂的三维点云模型分割成为数目有限的、各自连通的、相对简单的、方便其他程序处理应用的子部分。点云分割是一项具有挑战性的研究课题。2011年引入Point Cloud Library(PCL),这个库包含先进的3D感知算法。硬件和PCL的发展使得点云处理受到了越来越多的关注。
文中利用Kinect相机得到点云数据,经过点云配准得到点云模型,利用背景分割并结合图像分割对点云模型进行点云模型分割得到目标点云。
点云分割是通过一定的方法将点云数据中属性相同或相近且空间位置相邻的点划分为一类,点云分割可以对单帧点云进行分割,也可以对点云模型进行分割。随着研究的深入,点云分割的算法得到不断的补充和完善。常用的点云模型分割算法主要包括基于边缘的分割算法、基于区域的分割算法、基于聚类的分割算法以及混合分割算法等。
点云分割是对大规模的点云数据进行分割,简化点云数据以便后期对点云数据的加工处理。文献[1]介绍了点云分割的定义、分类和应用情况,分析比较了几类典型的点云分割算法,给出了各方法的理论、特点和应用范围。
基于边缘的分割算法,认为法向量或曲率的突变是一个区域的边界,被封闭的边界包围的这个区域是最终的分割结果,基于边缘的分割算法最重要的是找到区域边界。文献[2]构建符号距离函数估算点云的平均曲率,利用3D活动轮廓模型实现点云模型分割。由于噪声影响,点云模型的边缘定位精度差,使得基于边缘的分割算法存在不足。
基于区域的分割算法包含两种思路,一种是区域增长算法[3-4],选定种子点按照增长策略向邻域扩散直至不存在连续点集。一种是层次分解算法,假设所有点集属于同一目标,采用八叉树[5]、KD树[6]等进行层次分解,得到不同细节的分割结果。
基于聚类的分割方法,将点云分割看成具有一定特征参数的数据点的分类过程。文献[7-9]分别采用MeanShift聚类、谱聚类以及模糊聚类实现点云模型的分割。王天召等[10]将K-mean用于配准算法。杜廷伟等[11]提出基于高斯混合模型聚类的深度数据分割方法,利用高斯混合模型对三维点云的法向量进行聚类,然后利用随机抽样一致性算法对各个聚类进行平面拟合,实现对场景数据的平面提取。基于聚类的分割方法,不同的聚类能得到不同的结果。
混合分割一般包括多个步骤,基于边缘和基于区域等方法混合使用可以弥补对应不足。其他方法如随机抽样一致性算法,是将点集分成局内点和局外点,通过参数形成模型。李娜等[12]将点云的r半径密度引入RANSAC点云分割算法中,结合角度和距离对分割算法进行改进。胡伟等[13]将种子点的选取和点到距离的标准差引入RANSAC算法中,对随机抽样一致性算法进行了改善。赵成伟等[14]针对点云粘连现象,结合三维点云的空间分布和颜色信息,引入过分割方法将点云集划分为超体素,利用归一化方法完成粘连区域的目标分割,这一方法对树木具有良好的分割效果。文献[15]提出一种平面曲面生长算法非常适合用来分割平面。
三维模型分割的综述文章可以参考文献[16-18],这些工作大多基于三角网格模型,与网格模型相比,点云模型分割方法较少。
文中提出一种基于RGB-D的背景点云目标分割方法。利用背景帧结合图像分割进行点云分割,从而得到独立目标物体。
Kinect相机既可以得到物体的颜色信息,也可以得到物体的深度信息,但由于二者的分辨率不同,不能直接将颜色信息和深度信息一一对应。文中通过相机标定的方法,求得图像坐标系和空间坐标系的变换矩阵,从而得到颜色信息深度信息一一对应的点云数据。
采用Kinect相机,首先拍摄一帧背景点云A0,然后摆放前景物体拍摄得到A1,随后对物体进行旋转拍摄得到物体的多角度三维点云数据A(2,3,…)。旋转完成后,将相机固定到与第一组背景点云相对的位置,拍摄得到一帧数据B1,后将前景物体移开,再进行拍摄得到背景点云B0,由此可得到两组背景数据A0和B0。通过Kinect获得的三维场景的点云信息,既包含深度信息,也包含颜色信息,且深度信息和颜色信息一一对应,如图1所示。
图1 采集得到的颜色图像和深度图像
由于环境、振动、测量、设备本身的测量误差,得到的点云存在噪声和空洞,所以需要对点云进行去噪。采用直通滤波,对点云设置深度阈值范围d0 利用统计滤波,设置好统计时查询邻近点的点数和是否为离群点的阈值后,去除离群点。 利用下采样对获得的噪点进行去除。体素网格滤波器可以达到向下采样同时不破坏点云本身几何结构的功能,减少点云数量。 根据上述步骤完成对点云的预处理。效果如图2所示。 图2 数据预处理 Kinect相机一次只能获取一个角度的点云信息,要得到完整的三维物体信息,需要拍摄得到不同角度的点云数据。点云配准就是求两个点云数据的旋转平移矩阵,将源点云变换到目标点云的坐标系下。可以表示为以下方程:pt=R·ps+T,其中pt、ps是源点云与目标点云的一组对应点。配准分为粗配准与精配准两部分。 粗配准的目的是找到近似的配准变换,使得配准后的点云尽可能接近,缩小两个点云之间的差异,为点云的精确配准提供更好的初始位置。 文中利用快速点特征直方图(FPFH)[19]对点云进行粗配,得到点云的粗配变换矩阵。在计算FPFH特征时,首先对样本点pq计算与它的k邻域内每个点之间的三个特征值,统计输出成一个简化的点特征直方图。然后分别对其k邻域中的每个点,计算得到自己的FPFH,通过式1计算得到最终的FPFH。 (1) 其中,权重ωi表示一个给定的度量空间中样本点pq与邻近点pk之间的距离。 精配准是在已知一个旋转平移矩阵的前提下,进一步计算得到更加精确的旋转平移矩阵,从而达到改善配准的效果。ICP[20]及其各种改进算法是比较经典的点云配准算法。它搜寻两组点云数据寻找对应的最近点对,计算最优刚体变换,不断迭代直到满足收敛条件,从而得到最佳旋转平移矩阵。文中利用经典ICP算法将各角度的点云数据配准到背景点云帧A0(B0)得到完整的点云模型M,并保存各角度点云数据到背景帧的变换矩阵集合T。因为矩阵变换存在误差,所以要尽可能少的迭代变换,提高配准精度。 文中参考背景减法,利用背景点云帧对相同参考系下的配准点云根据深度信息进行背景分割得到前景。 遍历配准点云模型M和背景帧A0(B0),比较M中点pi(i=1,2,…,m)和A0(B0)中点qj(j=1,2,…,n)的XYZ值,其中m、n为点集M和点集A0(B0)中点的个数。将配准模型M中与背景点集A0中的XY相近Z值大于背景点云的点集删除,以达到分割背景和前景的目的。具体方程式如下: |p[i].x-q[j].x|<0.01 (2) |p[i].y-q[j].y|<0.01 (3) |p[i].z-q[j].z|<0.01 (4) 满足上述三个方程的配准点集M中的点pi(0 由于背景帧只是相机拍摄的一个角度,深度值大于背景的点集不能确定是前景还是背景。因而背景分割只能分割深度值小于背景的前景。需要注意的是背景帧和配准点云必须在同一个参考系下。 图3中,左为背景点云,即A0和B0,中间为对应参考系下的配准点云,右为背景分割后得到的前景部分。 图3 背景分割实验效果 若场景中背景前只有一个物体,通过背景分割即可直接完成点云的目标分割。 文中结合点云分割和图像分割,利用Grab Cut得到图像文件中目标的颜色信息,采用比较RGB值和法向量的方法,得到目标点云数据。 Crab Cut算法[21-23]是Graph Cut的改进版,对Graph Cut不断进行迭代。该算法利用图像中的纹理(颜色)信息和边界(反差)信息,只要少量的用户交互操作即可得到良好的分割效果。采用RGB三通道混合高斯模型来对目标和背景进行建模,不断交互迭代分割估计和模型参数学习。 Graph Cut将分割问题描述为像素zi(1 α=argminE(α,θ) (5) 其中,α为像素的标号;E为能量函数;θ为前景/背景GMM概率密度模型。 具体步骤如下: (1)利用Graph Cut对背景帧图像进行图像分割,得到目标物体result.jpg的RGB值,保存为txt文件,如图4所示。保存矩形对角两点p1(x1,y1)和p2(x2,y2)。 图4 Grab Cut分割效果 (2)读取配准后的点云文件,在x1 R=|p.r-q.r|/256 (6) G=|p.g-q.g|/256 (7) B=|p.b-q.b|/256 (8) diff=sqrt(R*R+G*G+B*B) (9) 其中,p为图像分割得到的RGB的一点;q为点云数据中的一点;sqrt表示开平方;diff表示两点的相似度。 (3)以步骤2得到的点集中任一点p开始,在x1 (10) (11) 其中,k为三角面的个数;ni为第i个三角面的法向量。点p的法向量由邻近点形成的三角面的法向量共同决定。 (12) 将法向量相同的点进行标记保存,最后得到的点集即为目标物体的点云数据。 为了检验文中算法的实验效果,使用Kinect 2.0深度相机;使用的开发工具有VS2013,PCL开发库,OpenCV开发库;使用的数据为自己拍摄的点云数据。利用文中算法、RANSAC算法和区域生长算法对点云模型进行了点云分割。 利用背景分割对配准得到的点云模型进行分割,可以有效分割出深度值小于背景的前景物体。对前景物体的目标分割,在给定范围内按照点的邻近信息和法向量、颜色属性,也得到了单独的目标物体。效果如图5所示。 对于RANSAC随机采样一致性方法[12-13],PCL几乎支持所有的几何形状,作为点云分割的基础算法,RANSAC强大且必收敛,但是只可以分割较规则的平面、圆柱体或是球体。利用该方法可以简单地分割出规则问题,却不能分割出目标物体杯子。 图5 文中算法分割效果 区域生成算法[24],由于原始数据所有物体通过立方体承接,即所有物体相连,如图6左所示,使得区域生成算法分割无效。基于颜色的区域生成算法,由于光照、阴影等原因,不能精确分割出目标物体,只能将颜色分割作为辅助方法,效果如图6右所示。 图6 区域生成算法分割效果 对于点云分割得到目标,有两种思路,先配准完成后对点云模型进行分割得到目标,也可以对单帧点云先分割得到不同目标的不同侧面,然后进行点云配准。但是先分割后配准,由于点云数据量少,特征匹配少,会影响配准精度,先分割后配准适用于大规模的点云数据。文中对配准完成后的点云数据进行点云分割。 对三维场景进行点云分割得到目标点云。提出了背景减法和将图像分割和点云分割相结合的方法,通过实验验证了算法的有效性。该算法结合图像分割,有效避免了点云数据的过分割和欠分割现象。算法的不足在于点云配准的精度会影响目标点云精度,由于物体的相互遮挡,点云数据不完整,使得最后分割出来的目标也不完整,后期可以根据目标物体的属性对目标点云进行修复。文中利用Grab Cut对图像进行分割,利用图像RGB对点云进行比较得到目标点云,后期可以利用Grab Cut直接对点云数据进行选择分割,不需要借助图像。2.2 点云配准
3 点云分割
3.1 背景分割
3.2 目标分割
4 实验与结果分析
5 结束语