苏 东, 张 艳, 曲承志, 张 鑫
(中山大学 航空航天学院,广东 深圳 518060)
深度图像被广泛应用于计算机视觉、图形学、虚拟现实等领域。根据获取深度信息的方式不同,可分为被动光方法和主动光方法。被动光方法[1]是利用计算机视觉技术,通过计算二维图像特征与三维空间的几何对应关系来获取深度图像,但存在高代价的时间复杂度和深度图像分辨率较低的问题。基于飞行时间(Time-of-Fly,ToF)原理的主动光方法[2]是通过测量光线发射时间和经物体表面后反射回来的时间差值计算物体的距离信息,具有可实时采集物体表面的三维几何信息、受环境和光照条件影响小的优点,是对传统三维信息获取方法的一种突破,势必会促进相关领域的发展。但由于受到传感器硬件条件的限制,它得到的深度图像分辨率低,并且含有大量的无效点,限制了ToF相机的市场推广与应用。
根据ToF相机的成像机制,对同一场景的彩色图像和深度图像进行分析,一般存在3种无法获得物体深度信息的情况[3]:特殊材料(透明玻璃、镜子、黑色的物体),导致回波的光子强度太强或者太弱,接收系统无法接收到回波光子;遮挡(目标物体的边缘),使得回波光子无法返回接收系统;超出ToF传感器的范围。
针对上述问题,已有大量的学者做了相关研究。李诗锐等人[4]选择简单的直通滤波对深度图像进行修复处理,该方法可以对特定视场内物体进行重建,避免不必要物体的干扰,但是对于在阈值范围内的像素点无法进行修复处理。Newcombe等人[5]提出的KinectFusion方法在深度图预处理阶段使用双边滤波,虽然该方法在一定程度上可以对范围较小的无效点进行修复,但没有利用高质量的彩色图像信息,且存在过度平滑的现象。王亚强等[6]提出了各向异性扩散算法,这种平滑在颜色均匀区域不受限制,只有在跨越边缘时受到抑制,从而有选择性地降低噪声,但该算法在去除无效点的过程中都只用到像素点的四邻域,可靠性较差。Le Av等人[7]提出了指向性联合双边滤波方法,由于对高分辨率的彩色图像加以利用,使得该方法与前文提到的方法相比保边和修复效果更好,但对于含有大面积无效点的深度图像无法进行有效填充。为此,Li Chen等人[8]对联合滤波方法进行了研究,并且预先对无效点进行填充,在填充时利用无效点对应的彩色图像来确定填充区域,当需要填充的无效面积大于之前确定的填充区域时,这些区域中的某些无效点就不会被填充。Wang Zhongyuan等人[9]采用位置引导矩阵完成深度图像中无效点的填充,可以更好地提高深度图像的质量,但对于一些大面积的孔,它仍然有一定的局限性。Diebel等人[10]提出了一个基于两层的马尔科夫随机场方法对低分辨率的深度图像和与之对应的高分辨率彩色图像进行建模,通过求解马尔科夫随机场最优化问题对深度图像进行上采样,进而得到修复后的高分辨率深度图像。Yang等人[11]则首先找出深度图像中的所有缺失区域,然后对每个缺失区域选择其邻近区域,绘制该邻近区域中所有的有效像素值的分布图,利用分布图中像素值最大的几个像素点的均值来代替所要修复区域中的深度值,但是该方法将整个无效区域作为一个整体,没有考虑到无效区域中不同像素点之间的差异性,故该方法具有盲目性、修复精度不高的缺点。Criminisi等人[12]先找到待修复区域,确定待修复区域的填充次序,然后从待修复区域边界上寻找最先需要被修复的像素点,在其附近搜寻最佳的匹配区域,将该区域相应位置的有效像素值填充到待修复像素点上,通过不断迭代完成无效点的填充。Xiong Xinli等人[13]在确定待修复区域的填充次序时将方差考虑进去,优化了填充顺序函数,但在计算方差时没有考虑到不同距离的有效点的权值应该有所不同。
本文考虑到深度图像与彩色图像是对同一三维场景的不同观察结果,两者具有很强的结构相关性,并且彩色图像比深度图像拥有更加清晰的纹理细节。因此,为解决无效点的填充问题,本文提出一种基于彩色图像轮廓的深度图像修复方法。该方法考虑到不同位置的像素重要程度不同,将高斯权值函数引入到方差计算过程中,对填充次序函数进行优化;为了解决边缘模糊,提高填充质量,该方法结合投影过来的高质量彩色图像轮廓进行填充点的优化,在对无效点进行填充时,目标物体内的点只在目标物体内采用最小欧式距离的方式寻找最佳填充点。
根据ToF相机的距离测量机制,传输和反射的红外光波在某些情况下可能无法测量到场景中某些点的距离信息,本文称这些未被观测到的点为无效点。由于场景的距离信息以深度图像的形式存储,所以这些无效点就会在深度图像中被表示成值为零的像素,通过遍历图像,可以对无效点进行标记和跟踪。如图1所示,本文将整个图像区域定义为I,需要填充的无效点区域定义为Ω,有效点所在区域定义为Φ(Φ=I-Ω),目标物体所在区域定义为O,待填充的无效区域边界上的无效点定义为p,表达式为
{p|I(p)=O∩p∈∂Ω}
(1)
式中,I(p)是点p处的像素值。
图1 各符号说明图Fig.1 Illustration of each symbol
接下来,如同exemplar-based[14]纹理合成,必须指定点p的邻域Ψp,本文提供的默认邻域Ψp的大小为点p的8邻域(点p周围距离其最近的8个像素),但在实际运用过程中可根据需要填充的目标区域的大小灵活确定。一旦确定了这些参数,无效点的填充就会自动进行。
通过选择最佳填充策略来实现无效点的填充,该策略完全取决于每个待填充的无效点的优先级。填充优先级将会偏向于以下无效点:(i)无效点被高置信度像素包围,即处在目标区域Ω边缘上的无效点;(ii)邻域Ψ内的像素方差较低的点。
如图1所示,给定一个待填充的点p的邻域Ψp,p∈∂Ω,点p的优先级的表达式为:
(2)
式中,C(p)是置信度函数,即点p邻域Ψ内有效点的像素个数,D(p)是点p邻域Ψp中有效点像素值的方差,可表示为:
C(p)=∑q∈Ψp∩(I-Ω)C(q),
D(p)=∑q∈Ψp(I(q)-E(p))2ω(q)
(3)
式中,I(q)是点q的像素值,E(p)是邻域Ψp内像素值的期望,ω(q)是权值函数,表达式为:
(4)
式中,|Ψp|是邻域Ψp内的非零值像素个数,σ为标准差,(p-q)2是两个点之间距离的平方。
置信度C(p)可以被认为是一种度量无效点周围有效点个数的函数,意图是首先填补那些周围有更多有效点的无效点。粗略地说,式(2)中的C(p)项近似地实现了理想的向内填充顺序,使得目标区域边界上的像素往往具有更大的置信值,因此会被优先填充;反之,无效点在目标区域的中心则会有较小的置信度,后被填充。
通过分析深度图像产生无效点的原因,可以得知无效点的出现造成了深度数据的突变,使得该区域深度值不再连续,方差变大,因此方差项D(p)可以被认为是一种度量无效点周围有效点可靠程度的函数。
本文方法在对无效点的填充过程中,需要对彩色图像的轮廓加以利用,但深度图像和彩色图像之间存在视差,所以需要事先将深度图像与彩色图像进行配准,如图2所示。首先为了能够在图2(a)中提取出目标物体的最外层轮廓,需要先利用彩色图像像素值的差异对目标物体进行前背景分离,分离后可以看到背景颜色被设置成了黑色,如图2(b)所示;然后将分离出来的目标物体的颜色设置成白色,并对图片进行二值化处理(二值化处理是将三通道彩色图像转换成单通道的二值图像),如图2(c)所示;其次采用Canny算子[15]对目标物体的最外层轮廓进行提取,得到的轮廓还包含少许噪声,这时我们选取面积最大的轮廓就得到了不含噪声的目标物体的最外层轮廓。最后采用张正友标定法[16],得到相机的内外参矩阵,再利用同一时刻的彩色相机和深度相机的外参矩阵,求得它们之间的旋转矩阵Rd2rgb和平移矩阵Td2rgb,具体计算过程如式(5)所示:
Rd2rgb=Rrgb*Rd-1
Td2rgb=Trgb-Rd2rgb*Td
(5)
式中,Rd,Td和Rrgb,Trgb分别是深度图像和彩色图像的旋转和平移矩阵。配准后的彩色图像轮廓,如图2(d)所示,与图2(e)深度图像中的目标物体的轮廓相比,可以看到彩色图像的轮廓更加清晰,且没有最外层的伪轮廓。
图2 预处理过程。(a)彩色图像;(b)彩色图像前景分离;(c)彩色图像二值化;(d)配准后的彩色图像轮廓;(e)原始深度图像。Fig.2 Pretreatment process. (a) Color images; (b) Separation of perspectives; (c) Binary images; (d) Image contour after alignment(e)Original depth image.
(6)
假设待填充区域的像素值如图3(a)所示,如利用按行或者列的方式对待填充区域进行填充,当填充到点p(3,4)时,由于其邻域Ψp的像素值都为零,则无法对该点进行填充。而本文方法通过优先级函数来确定无效点的填充顺序(为了便于说明,将有效点的填充优先级设置为*),则可以弥补按行或者列的填充方法的不足。
通过图3(b)可以看出,根据优先级函数计算结果,首先被填充的点是p(3,4),使用式(6)对其进行填充,图3(c)表示点p(3,4)填充后的像素值,图3(d)表示填充后的优先级函数计算结果,由图可见,每次填充结束后,只会改变被填充的点p及其邻域Ψp中无效点的填充优先级,因此迭代更新计算可以简化,不需要更新所有点的填充优先级,仅需更新点p及其邻域Ψp的填充优先级即可,可节省大量计算时间。
图3 填充优先级更新。(a)点p填充前的像素值;(b)点p填充前的填充优先级;(c)点p填充后的像素值;(d)点p填充后的填充优先级。Fig.3 Fill priority update. (a) Pixel value before filling point p; (b) Filling priority before point p filling; (c) Pixel value after point p filling; (d) Filling priority after point p filling.
基于彩色图像轮廓的深度图像修复方法的实现流程如图4所示,首先通过制定规则,确定无效点的填充顺序;再对彩色图像的轮廓进行提取和投影,确定填充边界;最后利用欧式距离选取最佳填充点。通过迭代上述3个步骤,直到所有无效点得到填充。
图4 方法流程图Fig.4 Chart of method flow
为了评估上述方法对于深度图像的修复性能,实验采用了两类测试图像。一类测试图像是由标准深度图像合成的模拟深度图,另一类测试图像是由kinect v2深度相机对实验场景拍摄的原始深度图像。其中,模拟深度图像是以middleburry[17-18]数据集中的标准视差图为基础,通过叠加环境光噪声合成得到,包括“art”、“books”、“dolls”、“moebius”和“Reindeer”5组数据。因为标准视差图像是人工矫正过的,故可直接将合成的模拟图像当作对应的“真实值”。另外,本文从现有的深度图像修复方法中选取中值滤波、联合双边滤波方法和基于填充优先级函数的深度图像修复方法[13]与本文提出的方法进行实验对比。
第一组实验选取的是由“art”数据集中的标准视差图生成的模拟深度图像,如图5所示。这幅测试图的特点是强调了远景和近景组合的噪声特性,其背景组成较为复杂,人物边缘的信息很丰富。图5(a)展示了原始的模拟深度图像,即测试图像对应的场景真实深度,图5(b)是对模拟深度图像施加了环境光噪声后生成的测试图像,图5(c)~图5(f)分别展示了中值滤波、联合双边滤波、基于填充优先级函数的深度图像修复方法和本文方法对测试图像进行无效点填充后的结果。为了直观比较不同算法的滤波性能,图5(g)~图5(l)分别展示了图5(a)~图5(f)中标注框对应的局部细节放大图。对比实验结果可以发现,中值滤波在人头像的下巴处出现过度平滑现象,联合双边滤波对于面积稍微大一点的无效点填充效果很不理想,填充优先级的修复方法由于没有对匹配点的区域进行限制,导致在细节图中存在很多错误的匹配点,本文方法则能在有效填充大面积无效点的同时更好地保持其边缘信息。
图5 各方法修复效果对比。(a)标准视差图像;(b)加噪声图像;(c)中值滤波;(d)联合双边滤波;(e)填充优先级的修复方法;(f)本文方法;(g)标准视差局部细节图像;(h)加噪声图像局部细节图像;(i)中值滤波局部细节图像;(j)联合双边滤波局部细节图像;(k)填充优先级的修复方法局部细节图像;(l)本文方法局部细节图像。Fig.5 Comparison of denoising effects of each method. (a) Standard parallax image; (b) Noise image (c) Median filter image; (d) Joint bilateral filtered images; (e) Filling priority repair method; (f) Image filtering method in this paper; (g) Standard parallax image local detail image; (h) Plus noise image local detail image; (i) Median filter local detail image; (j) Joint bilateral filtering of local detailed images;(k) Filling priority repair method partial detail image; (l) The method in this paper is used to filter local detail image.
图6显示的是中值滤波、联合双边滤波方法、填充优先级的修复方法和本文方法对模拟的深度图像修复后的边缘细节对比。其中,图6(a)是原始的模拟深度图像(真值),图6(b)~图6(e)分别是经中值滤波、联合双边滤波、填充优先级的修复方法和本文方法处理后的结果。为了在边缘信息上进行确切的数值分析,图6(f)展示了图6(a)~图6(e)中横线部分的数值,可以看出,中值滤波在填充过程中,会使像素变化的区域出现过度平滑,而联合双边滤波为了保持目标物体的边缘信息,则对大面积无效点无法进行修复(像素值大幅度阶跃至零值,即无效点没有得到填充),填充优先级的修复方法虽然能对大面积的无效点进行填充,但存在许多错误的匹配点。由此可见,与其他方法相比,本文方法可以兼顾两方面的需求,既能实现对大面积无效点的有效修复,也可以保持物体的边缘信息。
图6 滤波效果与标准深度图像对比。(a)标准视差图像局部细节图像;(b)中值滤波局部细节图像;(c)联合双边滤波局部细节图像;(d)填充优先级的修复方法局部细节图像;(e)本文方法滤波局部细节图像;(f)滤波结果与标准深度图像细节对比图。
除了从图像上主观感受各滤波算法的修复性能,本文还以信噪比(SNR)作为定量评价指标,对各滤波算法在模拟的深度测试图像上的修复能力进行客观比较。深度图像的SNR值的计算方法如式(7)所示,它表示深度图像中信号与噪声的方差之比。对于同一真实深度图,滤波后深度图的SNR值越大,说明算法的修复效果越好,反之说明对深度图像的修复效果越差。
(7)
式中,I(p)表示原始的标准视察图在点p处的像素值,I′(p)则表示经过滤波处理后的深度图像在点p处的像素值。另外,M和N分别是深度图像在x和y方向上的分辨率。
各种滤波算法对5组测试图像的修复结果如表1所示。模拟加噪声图像后的深度图像的SNR值是30~36dB。其中,各滤波算法的参数设置如下:中值滤波的内核设定为7~9;联合双边滤波的图像空间域的标准差σs=5~7,颜色域的标准差σr=5~7。值得注意的一点是,其他滤波方法的参数需要根据测试图像中的场景信息而定,目的是为了尽量避免滤波后的深度图像的边缘过度平滑。
表1 模拟深度测试图像中各中滤波算法的修复性能对比(dB)Tab.1 Comparison of denoising performances of various filtering algorithms in simulated depth test images (dB)
从表1的实验结果可以看出,本文所提方法在无效点填充和噪声滤上明显优于其他常用方法,针对不同目标物体在SNR指标上提高了2~14 dB。
第二组实验则利用kinect v2深度相机,开展对实际拍摄深度图像的滤波效果验证。其中,图7(a)显示的是由kinect v2相机拍摄的原始深度图像,图7(b)~图7(e)是经中值滤波、联合双边滤波、填充优先级的修复方法和本文方法处理后的结果。为了便于分析比较,图7(f)~图7(j)分别对应了图7(a)~图7(e)中方框标注区域的局部放大图。从图7(f)~图7(j)可以看出,中值滤波会出现过度平滑的现象,联合双边滤波的保边效果不错,但对于大面积的无效点填充能力有限,填充优先级的修复方法会出现一些错误的匹配点,而本文提出方法不仅实现了无效区域的有效填充,还能保持物体边缘区域的信息,如场景中人物的右耳部分。为了对算法性能进行直观比较,图8中显示了图7(f)~图7(j)中横线部分的深度数值。由图8可知,中值滤波会出现过度平滑的现象(阶跃的像素值变化经过平滑后变成了缓慢变化),联合双边滤波为了保持物体的边缘信息,导致了大面积的无效点(像素值为0)的填充效果不明显,填充优先级的修复方法出现了错误匹配的点,而本文方法在保持目标物体边缘信息的同时还可以对无效点进行有效的填充。
图7 各个算法对真实ToF深度图像的修复效果对比。(a)原始深度图像;(b)中值滤波;(c)联合双边滤波;(d)填充优先级的修复方法;(e)本文方法;(f)原始细节图像;(g)中值滤波局部细节图像;(h)联合双边滤波细节图像;(i)填充优先级的修复方法局部细节图像;(j)本文方法局部细节图像。Fig.7 Comparison of denoising effects of various algorithms on real ToF depth images. (a) Ori-ginal depth image; (b) Median filtering; (c) Joint bilateral filtering; (d) Filling priority restoration method; (e) Method of this paper; (f) Original detail image; (g) Median filteringlocal detail image; (h) Joint bilateral filtering detail image; (i) Filling priority repair method local detail image; (j) This method local detail image.
图8 滤波结果与标准深度图像细节对比图Fig.8 Comparison of filtering results with standard depth image details
实验结果表明,与中值滤波相比,本文方法可以很好地保持目标的边缘信息;与联合滤波相比,本文对于大面积无效点的填充效果更好;与填充优先级的修复方法相比,本文方法可以有效地减少错误点的匹配数量。总之,与其他修复算法相比,本文算法在保护目标物体边缘的前提下,可以将信噪比提高2~14 dB,实现对无效点的有效填充。
由于场景的遮挡、材料对红外线的吸收和物体超出成像范围的原因,使得深度图像中存在不同类型的无效点,因此本文提出了一种基于优先级函数计算的深度图像无效点填充算法。该算法不同于以往按照行或列扫描来对深度图像的无效点的填充方法,而是根据贪心算法和彩色图像设计一种评价函数来确定深度图像中无效点的填充优先级,再按照填充优先级对无效点依次填充。本文方法在填充的过程中可动态地评估待填充无效点的优先级,因此在对深度图像中大面积无效点进行有效填充的同时,还可以提高目标物体边缘信息的可靠性。