杨 飞 ,王俊元,段能全
(中北大学机械工程学院,山西 太原 030051)
深度图像大多由深度传感器获取,深度图像中的像素值为距离值,即场景中的客观对象到传感器所在平面的距离。近年来,深度图像被广泛应用于诸多领域,如人机交互[1]、三维点云[2]、机器人控制[3]、自动驾驶等,因此获得高精度的实时深度图像是非常必要的。微软公司推出的Kinect V2深度相机可实时获取深度图像,而且成本低廉。然而,由于技术原理限制以及外界环境影响,Kinect V2所获取的原始深度图像在目标物体被遮挡或者目标物体表面高反光区域存在深度信息丢失问题,深度信息丢失在深度图像中表现为像素值为零,即没有捕获到对应的距离值。通常称深度信息丢失区域为孔洞区域,对应的像素称为孔洞像素。若未经处理,在后续的应用过程中,会引起严重的后果,如在自动驾驶中,造成主机对周围交通状况的误判,导致交通事故;在机器人控制中,导致对障碍物的误判致使避障和控制失败;在三维重建中,使重建点云数据特征信息丢失,导致重建误差增加。因此,深度图像的修复是其成功应用的必要前提,也是至关重要的一个环节。
针对深度图像的修复,传统的滤波算法,如高斯滤波[4]等能够实现基本的孔洞去除,但在深度图像边缘处易发生信息丢失,存在边缘模糊问题。Tomasi等[5]结合空间相似性和灰度相似性,提出了双边滤波(BF)算法,该算法具有保边去噪的效果,但基于深度图像自身的双边滤波方法对于深度图像的修复效果并不好。Petschnigg[6]等利用RGB图像作为引导图来指导深度图像的修复,提出了联合双边滤波(JBF)算法,该方法修复效果较好,边缘保持也比较理想,但是修复精确度欠佳。Hu等[7]提出一种基于彩色图像引导的局部正则化表示方法(CGLRR),通过从彩色图像对应配块综合确定可用深度像素的最优权值来重建缺失的深度像素,该算法在局部区域中能够有较好的效果,缺点是正则化参数无法自适应选定,计算复杂度高。Song等[8]利用Kinect V2获取的RGB图像的边缘位置信息指导深度图像边界处数据的修复,该算法能够实现深度图像中边缘信息丢失后的图像修复,但在边缘信息复杂的情况下,实现难度较大。Wang等[9]提出一种基于红外深度图一致性和联合自适应回归核的深度图像修复,该算法利用Kinect V2所获取的红外图像来指导深度图像的修复,能够较好地解决因遮挡带来的深度误差问题。但由于采用了红外图像,红外图像中的噪声同样会带来错误引导的问题。Wang等[10]提出一种基于超像素的颜色深度恢复方法,首先应用联合颜色深度超像素分割来处理输入数据,然后利用迭代概率LPR估计超像素块的缺失深度像素,该方法的计算复杂度较高。
本文提出一种基于超像素分割RGB图像来指导深度图像修复的方法,首先对RGB图像进行超像素分割,然后将分割后的RGB图与深度图像进行配准,利用分割区域内的颜色、空间特征来指导深度图像的修复。
图1所示为本文方法的流程图。
图1 流程图
Kinect V2可以获取同一场景的RGB图像和深度图像,RGB图像与深度图像存在一一对应关系,如图2所示,因此可以利用RGB图像中包含的色彩纹理信息来指导深度图像的修复。
图2 同场景RGB图像和深度图像
超像素分割是利用像素间的相似性,如灰度、颜色、纹理等将图像分割为多个图像子区域,每个子区域中所包含的像素具有很大的相似性(灰度、颜色等)。在实际中,RGB图像中色彩纹理相似的区域其所对应的深度图像区域的相关性很强,且RGB图像纹理区域划分得越细致,其对应的深度图像区域相关性越强,分割后的每一个子区域所对应的深度变化幅度越小。SLIC(simple linear iterative cluster)算法在运行速度、生成超像素的紧凑度、轮廓保持方面都比较理想,因此本文采用SLIC算法来分割RGB图像。分割后的RGB图像如图3所示。
图3 RGB图像分割结果
从分割结果图中可以看出,SLIC算法能够比较好地分割出RGB图像的颜色纹理边界。
通过超像素分割后得到的分割图像,其分辨率与原始的RGB图像相同,均为1 920像素×1 080像素,由于与深度图像分辨率(512像素×424像素)不一致,且Kinect V2的深度相机和RGB相机不在同一个位置,因此需要进行相机标定,将分割后的RGB图像映射到深度图像上,建立RGB图像和深度图像的对应关系。
本文采用张正友标定方法完成对Kinect V2 RGB相机和深度相机的标定,获取RGB相机和深度相机的内、外参数,通过计算得到两个相机之间的转换矩阵。转换矩阵的计算式如下。
(1)
(2)
式中:R,T分别为深度空间和RGB空间之间的旋转变换矩阵、平移变换矩阵;Rrgb,Trgb分别为RGB相机的外参数旋转矩阵、平移矩阵;Rir,Tir分别为深度相机的外参数旋转矩阵、平移矩阵。
最终得到的配准后的图像如图4所示。
图4 配准结果
提取配准图像中超像素区域的边界像素坐标,遍历原始深度图像中的孔洞像素,提取对应的孔洞像素坐标。依据孔洞像素所在的位置,将孔洞像素分为两种,第一种是在超像素区域内部的孔洞像素,第二种是在超像素边界上的孔洞像素。
1.3.1超像素区域内部的孔洞修复
逐个统计各超像素子区域内的有效深度值,计算有效深度值的标准差(公式(3)),结合Kinect V2官方给定的最高分辨率,将深度图像中的孔洞像素分为两种,一是位于深度连续区域(深度值≤2 mm)的孔洞,二是位于深度不连续区域(深度值>2 mm)的孔洞。深度连续区域内深度值变化幅度较小,深度不连续区域内深度值变化幅度较大。
(3)
1)联合双边滤波算法。
在深度连续区域的孔洞,采用联合双边滤波器进行填孔。利用RGB信息来计算值域权重,指导孔洞填补。具体计算公式为:
(4)
2)基于方向的联合双边滤波算法。
在深度不连续区域的孔洞,采用基于方向的联合双边滤波器(DJBF)进行填孔,能够更好地保留深度图中的边缘信息,计算公式如下:
(5)
(6)
式中:σ为高斯函数的标准差。
(7)
xθ=(qx-px)cosθ-(qy-py)sinθ
(8)
yθ=(qx-px)sinθ+(qy-py)cosθ
(9)
式中:θ为边缘方向;σx,σy分别为高斯函数中沿x方向和y方向标准差。θ计算公式如下:
(10)
式中:gx,gy分别为沿x,y方向的梯度。
基于方向的联合双边滤波器不但引入边缘方向,而且同时衡量中心像素和邻域像素的空间相似性和颜色相似性。在深度不连续区域应用该算法,是在充分考虑了孔洞像素边缘信息的基础上来完成孔洞修复。
1.3.2超像素区域边界上的孔洞修复
位于超像素边界上的孔洞像素,处在多个超像素区域的交界处。基于SLIC算法的超像素分割是依据空间相似性和颜色相似性来进行的,边界上的孔洞像素处在相邻的多个不同颜色的聚类空间,检索配准图像上的对应像素点,计算该像素点梯度,公式如下:
Gh(x,y)=dx(i,j)+dy(i,j)
(11)
式中:Gh(x,y)为孔洞像素点的梯度值;dx(i,j)为x方向的偏导;dy(i,j)为y方向的偏导。
将该像素点梯度值与待修复的孔洞像素点3×3邻域内所有有效深度像素坐标对应的像素点梯度值进行比较,将差值最小的像素点坐标与其对应的深度平均值作为孔洞像素深度值,计算公式如下:
Gnh(x,y)=dx(i,j)+dy(i,j)
(12)
式中:Gnh为3×3邻域内非孔洞像素点的梯度。
Gmin=|Gh(x,y)-Gnh(x,y)|
(13)
式中:Gmin为孔洞像素点与其邻域内非孔洞像素点间的最小梯度差。
取与邻域像素梯度值差值最小时所对应的有效像素点的像素值作为待修复点的像素值,完成孔洞像素的填补。
本文采用的实验平台为VS2015+OpenCV,处理器为Intel i5-7200U 2.5 GHz,运行系统为Windows 10操作系统的PC。图像采集设备为微软Kinect V2深度相机,驱动程序为Kinect SDK for Window2.0。为了验证本文方法的有效性,对实验采集的深度图像和Middlebury数据库中的图像进行深度图像修复测试,比较本文方法与双边滤波(BF)算法、联合双边滤波(JBF)算法的修复结果。
实验1,利用Kinect V2采集相同场景下的RGB图像和深度图像,分别用本文方法、BF算法、JBF算法完成深度图像的修复,并计算深度图像孔洞修复率Ratio。实验结果如图5所示,修复率比较见表1。
(14)
图5 实验1
表1 不同方法的修复率
从图5可知,BF算法对深度图像孔洞修复效果很差,JBF算法和本文方法都能够比较好地实现深度图像的孔洞修复,且本文方法可使图像边缘更加清晰。从表1可知,3种方法深度图像的修复率为BF算法 实验2,选取公开的Middlebury数据库中的Wood、Plastic的深度图像和RGB图像,在原始深度图像中添加孔洞像素,分别用本文方法、BF算法、JBF算法完成深度图像的修复,修复结果如图6、图7所示。3种方法的均方根误差(RMSE)和峰值信噪比(PSNR),分别见表2和表3。 图6 实验2-Wood 图7 实验2-Plastic 由图6,7可以看出,BF算法的修复效果较差;JBF算法可以修复大部分孔洞,但遗漏了一些孤立的孔洞;本文方法修复效果较好,修复后的图像比较清晰,存在的孤立孔洞很少。由表2和表3可知,3种方法的PSNR值为BF算法 表2 3种修复方法的RMSE值和PSNR值(Wood) 表3 3种修复方法的RMSE值和PSNR值(Plastic) 针对Kinect V2深度图像存在深度信息丢失问题,提出了基于超像素分割和深度图像配准的修复方法,并利用实验采集的深度图像和Middlebury数据库中的图像完成了本文方法与其他方法的修复效果对比。实验结果表明,本文提出的深度图像修复方法,能够有效地修复深度图像中存在的孔洞,对深度图像边缘的保持性能较好,修复后图像更加清晰。总体来讲,本文方法比较好地解决了Kinect V2深度图像信息丢失的问题,但该方法对于大面积孔洞修复仍存在不足,下一步将针对这一不足进行研究。2.2 Middlebury数据库实验结果
3 结束语