适用于智能视频监控的立体匹配算法
2018-10-24孙启湲
王 源,孙启湲+
(1.天津理工大学 天津市先进机电系统设计与智能控制重点实验室,天津 300384;2.天津理工大学 机电工程国家级实验教学示范中心,天津 300384)
0 引 言
将立体匹配技术应用于智能视频监控系统面临的挑战主要包括:①实时性要求高;②户外环境下左右相机曝光不一致引起误匹配;③遮挡引起误匹配;④噪声引起误匹配;⑤低纹理区域和重复纹理区域匹配容易引起歧义。
目前能够获得稠密视差图的立体匹配算法主要分为全局算法[1]、局部算法[2]和半全局算法[3]。局部算法以局部窗口为支撑区域进行代价聚合以加强单像素的视差可信度。局部算法适于并行计算,算法复杂度低,适合实时系统。祝世平等对Census变换进行了改进[4],加入了噪声容限阈值并且使用了自适应十字交叉区域作为变换窗口,提高了Census变换算法在不连续区域和噪声干扰区域的匹配精度。
本文针对智能视频监控系统的特点,提出了一种基于改进AD-Census算法(absolute difference-census)和引导滤波[5]的立体匹配算法。算法分为5个步骤:①预处理:采用适当的预处理降低噪声和光照影响;②代价计算:提出一种设有噪声容限并且引入了梯度信息的AD-Census算法计算匹配代价以减小噪声和光照的影响;③代价聚合:采用两级本地自适应引导滤波算法快速进行代价聚合以提高算法的实时性;④视差选择:使用WTA(winner takes all)算法快速进行视差选择;⑤视差提精:提出一种多步提精方法进行视差优化。
1 算法描述
1.1 预处理
预处理的目的是有效减少噪声和光照变化的影响。首先对匹配图像和参考图像进行高斯滤波以减少噪声影响,接着对两幅图像直方图均衡化以减少光照的影响。
1.2 匹配代价计算
本节对传统的AD-Census变换进行改进。在AD(absolute difference)算法中引入梯度信息,并对Census变换设置阈值。带有截断的强度差的绝对值用CTADC表示,带有截断的梯度值差的绝对值用CTADG表示,带有截断和设有阈值的Census变换用CTCensus表示。下面分别计算3种匹配代价以及总的匹配代价C(p,d)。
传统的AD方法直接计算左图像与右图像在对应视差像素灰度值之差的绝对值。梯度信息在代价匹配中能够对视差图的边界具有很好的保持作用[6],能够避免光照变化引起的影响。AD算法以及引入梯度信息后的AD算法计算得到的匹配代价CADC(p,d)和CADG(p,d)可表示为
(1)
(2)
(3)
(4)
Census变换依次编码中心像素强度值与邻域像素强度值相对大小,完成对像素本地结构的描述。实质是将像素点的邻域结构信息分类后以二进制码流的形式表现出来。由于Census变换仅比较像素强度相对大小,因此对噪点和光照变化具有鲁棒性。然而缺点也非常明显:①过度依赖中心像素强度值。在智能视频监控系统中,图像通常有大量噪点,这对Census变换是一种挑战;②由于采用固定窗口,在无纹理区域或纹理重复区域容易造成错误的匹配;针对上述问题,结合智能视频监控系统中立体图像对的特点,本文提出一种设有噪声容限并且易于并行的改进Census变换计算匹配代价。使用9×7大小的窗口编码像素的本地结构信息,形成一串128位的信息串。改进的Census变换可表示为
(5)
式中:TCensus(x,y)代表通过Census变换在像素点(x,y)处计算得到的128位二进制串;运算符号⊗代表Census变换是逐像素进行的;MI(x,y)表示I(x,y)在3×3邻域内的平均值。I(xN,yN)表示矩形窗口内的邻域像素灰度值;N(x,y)表示像素点(x,y)的大小为9×7像素的邻域;ξ(MI(x,y),I(xN,yN))由式(6)计算
(6)
式中:α是噪声容限值,其大小正比于中心像素灰度值
(7)
式中:β为容忍比例,在实际情况中一般取50;[ ]表示就近取整算子。由Census变换产生的匹配代价CCensus(p,d)由汉明公式计算
CCensus(p,d)=Hamming[Tref(p),Tmat(p+(d,0)T)]
(8)
最终的匹配代价由上述3种匹配代价组合而成。一些实验表明采用指数混合的方式比直接相加的混合方式有更好的性能[6],因此总的匹配代价计算公式如下
(9)
1.3 引导滤波代价聚合
代价聚合占用AD-Census立体匹配算法超过70%的运算时间,因此降低代价聚合算法的计算复杂度对实时系统来说非常重要。局部算法代价聚合基于灰度视差一致性假设。具有相同或相近灰度值的连续像素最有可能是同一个结构的表面,具有相同的视差。基于这种假设,基于局部算法的代价聚合的主要目标是选择合适的支撑区域以及对区域内像素分配合适的权重。本文采用一种两级本地自适应引导滤波[7]完成代价聚合,它是对传统引导滤波聚合的改进。两级本地自适应引导滤波器权重核函数可表示为
(10)
两级本地自适应引导滤波是传统引导滤波的更广泛的形式,它使用局部自适应矩形窗口代替默认的固定大小的方形窗口。当|ωi|=|ωj|时,即所有核窗口拥有固定大小时,两级本地自适应引导滤波就退化为了传统引导滤波。两级本地自适应引导滤波继承了引导滤波的优点,可以很好地保持视差图边缘,并且计算复杂度仅为O(N),这对实时性要求较高的系统很有帮助。此外由于采用了可变窗口,在边缘的处理上有更高的精度。P(435,251)为图1中的参考图像classroom2中像素坐标为(435,251)的一点。图2(a)显示了P点经过代价计算后得到的每个视差上的初始代价,横坐标每一点代表不同的视差值,纵坐标表示相应视差值上的匹配代价。如果直接选择代价值最小的视差作为P点最终的视差,由图中可以看出最小值并不明显,这可能导致错误的匹配结果。这是由于单像素具有不稳定性,容易受噪声干扰。图2(b)显示了聚合后P点的代价值。可以看出,经过两级本地自适应引导滤波后的匹配代价表现出了良好的正则性,最小匹配代价具有更高的可信度。
图1 本文立体匹配算法步骤
图2 classroom2中P(435,251)点原始匹配代价与聚合后匹配代价
1.4 视差选择
经过两级本地自适应引导滤波后,视差空间图像经过简单的WTA算法获得初始视差值
(11)
1.5 视差提精
经过视差选择获得的初始视差图包含很多错误的视差。本文针对智能视频监控图像噪声较多的特点,提出一种多步提精的方法,流程如图3所示。
图3 多步提精流程
1.5.1 区分误匹配点和稳定点
(12)
1.5.2 误匹配点分类
我们采用文献[8]中使用的方法区分遮挡点和非遮挡误匹配点。如图4所示,在同一极线上,Cbm(p,d)表示参考图像视差为d时对应的匹配图像视差,如果Cbm(p,d)与匹配图像真实视差没有交点,则p点标记为遮挡点,否则标记为非遮挡误匹配点。非遮挡点可通过计算误匹配点连通域大小进一步区分为非遮挡误匹配点和非遮挡误匹配区域。
图4 区分遮挡点与非遮挡点
1.5.3 置信传播
遮挡点一般是被前景遮挡的点,在参考图像中通常位于边缘左侧且视差小于右侧边缘。因此对于遮挡点的置信传播,应当沿着极线向视差较小的左侧区域进行。另外根据视差一致性假设,同一连通域颜色相似的像素具有相似的视差。对左侧极线上每个置信点计算颜色相似度
(13)
式中:I(p)和I(pp)分别代表误匹配点和置信点灰度值。当ηp>τp时停止向左寻找置信点。并且p点视差更新为
(14)
非遮挡误匹配点和非遮挡误匹配区域主要是由噪声、光照变化和无纹理区域引起的。对于非遮挡误匹配点,采用带有置信掩模的联合双边滤波更新视差值。对于非遮挡误匹配区域,首先进行区域分割并扩展至置信区域,接着对分割区域进行区域投票,获得最高票数的视差值更新为区域视差值。
最后对整个视差图进行加权中值滤波平滑视差图。经过视差提精后,遮挡区域,无纹理区域和其它误匹配区域的错误视差被周围正确视差插值估计。
2 实 验
为了验证算法的有效性,在配备了型号为Inter(R)Core(TM)i5-2450主频为2.5 GHz的CPU以及型号为NVIDIA GeForce GT 630M显卡的平台上使用OpenCV2.4.9+CUDA+VS2013编程实现了本文算法。测试图像对为Middlebury立体匹配算法标准测试平台提供的标准立体图像对[9]。算法的部分参数设置如下:λADG=10,λADC=10,λCensus=30,τADG=255,τADC=255,τCensus=64,τch=1,τp=0.03,τPKRH=0.9,τPKRL=0.8。
实验分两组进行:
第一组实验的目的是测试本文算法在光照变化和噪声干扰下匹配的效果。使用的图像对是Middlebury标准立体图像对2014数据集[9]中的classroom2和classroom2E以及它们分别加入SNR=20 dB(signal-noise ratio)椒盐噪声的图像对,其中classroom2E是一组参考图像和匹配图像曝光不一致的立体图像对。图像对大小为1/4全尺寸。视差深度范围为160。实验结果如图5所示。其中纯黑色、纯白色都表示错误的匹配。从图5可以看出AD-Census算法对光照变化非常敏感,当左右图像曝光不一致时,产生的视差图误匹配点很多,形成大片的误匹配区域;椒盐噪点的影响相对较小,误匹配点主要以点状出现,仅在上部出现大片误匹配区域。本文算法在曝光不同时表现了良好的性能,在遮挡区域和视差不连续区域均显著减少了误匹配视差;在加入椒盐噪点的图像中也获得了比AD-Census算法更少误匹配点的视差图。在未加入曝光变化和噪声的图像对中,本文算法效果接近AD-Census算法,仅在下方部位出现小片误匹配区域。通过本组实验可以看出,本文算法在加入第二组实验测试了MiddleBury立体匹配评估(版本3)所需的15对标准图像对[9]并对视差结果进行了评估。
图5 实验一获得的视差图
图像对大小为1/4全尺寸。图6给出了其中4对图像对的视差结果。从中可以看出本文算法在低纹理区域和深度不连续区域均表现出了较高的准确性。表1列出了其中4对视差图的误匹配率(误差超过1%即视为误匹配像素)。表格中nonocc、all分别表示非遮挡区域误匹配率和总体像素误匹配率。Djembe测试图视差变化大,层次丰富,各个鼓使得视差不连续区域较多,遮挡区域增加,降低了匹配精度;DjembeL测试图不仅视差相对变化较大,而且由于曝光不同造成匹配误差增大,因此匹配精度最低;AustraliaP测试图视差平坦,纹理丰富,匹配精度最高,衣架支撑区域较小以及植物部分重复纹理过多造成误匹配增加。Bicycle2测试图地面和墙面纹理较少,自行车使得深度不连续区域增加,辐条支撑区域较小,使得误匹配相对较大。表1还展示其它几种立体匹配算法(包括SGBM(semi-global matching)算法和LPS[10]算法)的评估结果,从表中数据可以看出本文算法获得的视差图中DjembeL立体图像对获得了最好的效果,精度远远高于其它两种算法。这是因为DjembeL立体图像对参考图像和匹配图像光照存在差异,本文算法在预处理中使用了直方图均衡化以及在匹配代价计算时引入梯度信息,消除了部分光照影下。总体来看,本文算法在精度方面具有一定的优势。
图6 实验二获得的部分视差图
表1 算法误匹配率
在实时性方面,在实验二中记录了全部15对立体图像对进行GPU加速后的立体匹配用时。根据每对图像的尺寸和计算时间,计算得到本文提出算法的速度大约为302 MDE/S(millions of disparities estimated/second)。以302 MDE/S的处理速度在监控图像大小为400×600像素、视差深度为60的系统中,每秒可处理的帧数为20.9帧;在图像像素大小为720P(1080×720)、视差深度范围为80的系统中,每秒可处理的帧数约为4.9帧。由于监控系统可以隔帧或者定时采样进行立体匹配,因此提出的算法基本可以满足一般监控实时性的要求。
综上所述,无论在精度还是在速度方面,本文算法都获得良好的效果。特别是在参考图像和匹配图像曝光不一致或者噪声较多的情况下,获得的视差图与其它几种算法相比在精度方面具有明显的优势。
3 结束语
立体匹配算法是实现智能视频监控系统深度感知的核心算法。本文针对智能监控视频系统中双目摄像头获取的图像对存在曝光不一致和噪声大的特点,提出一种改进的AD-Census算法。在计算匹配代价阶段,对Census变换引入噪声容限以减小噪声干扰,同时对AD算法引入梯度以减小曝光不一致带来的影响;代价聚合阶段,采用两级自适应引导滤波算法提高了算法的实时性;视差提精阶段,提出一种多步提精方法进行视差优化,有效对遮挡区域和误匹配区域进行了深度值估计;实验结果表明,本文算法与传统AD-Census算法相比在精度和速度方面都表现了一定优势,能够初步满足智能视频监控系统精度和实时性的要求。