基于邻域信息约束与自适应窗口的立体匹配算法
2020-05-28贾克斌杜奕伯
贾克斌,杜奕伯
(1.北京工业大学信息学部,北京 100124; 2.先进信息网络北京实验室,北京 100124;3.北京工业大学计算智能与智能系统北京市重点实验室,北京 100124)
随着机器人行业的迅猛发展, 计算机视觉技术作为一种交叉学科, 得到了广泛的应用. 从20世纪60年代起就涌现出大量成果并应用于诸多领域中. 计算机视觉领域中的双目立体匹配技术是当下众多学者研究的热点之一. 其主要是模仿人眼视觉原理,通过使用搭建好的同一水平线上的双目摄像机[1]对场景进行拍摄,经过立体校正后可以进行场景三维信息的获取. 近几年, 有关双目立体匹配的技术发展迅速, 随着速度以及精度的不断提高,应用领域也在不断的扩大.
早在20世纪60年代, Marr等[2]首次将视觉计算理论与双目立体匹配技术进行结合, 开始了立体视觉的相关研究. 立体匹配的方法大致可以分为两大类:局部匹配与全局匹配. Wang等[3]应用的区域块的匹配算法属于局部区域匹配的方法, 主要采用合适的支持窗口计算左右视角图像局部区域之间的匹配程度, 该算法实时性能较好, 但是获取到的视差图像误匹配率较高. Roy等[4]应用了一种基于图优化理论的全局匹配算法,将图像进行分割并应用于立体匹配技术中. Yan等[5]针对图像分割得到的信息, 建立了一个基于马尔科夫随机场的立体匹配模型, 通过该模型对代价的计算进行约束. 尹传历等[6]对图像通过颜色阈值进行分割, 并对分割后的区域进行拟合, 再通过最小化能量函数来优化视差结果, 但用来分割颜色的阈值要求很严格, 容易造成过分割和欠分割的现象. Martull等[7]采用图像分割的方法来达到图像的全局匹配效果, 即首先对建立好的网络图构建一个全局能量函数,再用图像分割的方法进行能量函数最小化的求解, 从而生成较为稠密的视差图像. 上述全局类的匹配方法能够有效提高视差图的精度, 但是会耗费大量时间, 不利于视差图的实时获取.
值得指出的是Zabih等[8]首次将一种非参数变换的方法——Rank与Census应用到立体匹配当中. 该方法可以保证其较高的匹配精度及算法的稳定性, 但传统的Census变换方法过度依赖中心像素值, 并且当噪声影响到中心像素本身时, 其匹配精度会大幅降低. 针对此类问题,众多学者提出了相关的改进算法. 范海瑞等[9]在初始代价计算阶段加入了噪声容限来获取稳定的代价, 降低了对噪声的敏感性. Chang等[10]提出了一种mini-census立体匹配算法,在支持窗口中寻找6个像素点进行Census变换. Humenberger等[11]在Census变换过程中, 舍弃了对区域内所有点进行判断的操作, 只选取了分散的部分点进行编码, 从而节省了计算时间, 并通过多种优化手段提高了图像质量. 当下也有众多学者在Census方法基础上提出了不同的改进算法. Beak等[12]将Census代价值与周围像素梯度变化值相结合来计算初始代价. Guo等[13]在Census基础上采用了半全局匹配算法, 降低了时间复杂度. Chai等[14]针对传统绝对误差和(sum of absolute differences,SAD)算法容易产生误匹配的问题, 将Census算法与其相结合, 并在后处理阶段采用二次线性插值与中值滤波的优化方法提升了匹配精度. 但上述方法均未考虑噪声对图像的影响, 并且在匹配准确率上的提升有限. 而针对代价聚合阶段, 由于固定的支持窗口往往会影响匹配精度, 所以Zhang等[15]提出了基于十字交叉窗口的代价聚合方法, 通过像素之间的灰度与距离来限定窗口的大小. Mei等[16]分析了十字窗口代价聚合方法中颜色与空间阈值计算的不足,通过再次判断确定十字窗口的臂长, 提高了在视差不连续区域的匹配精度, 但是此类方法并未将噪声对算法的影响考虑进去, 且固定阈值的设定仍会对匹配精确度产生影响. 在优化阶段, 刘鹏宇等[17]提出了一种改进的自适应中值滤波算法, 该方法可以对图像中的噪声或遮挡区域进行很好的填充, 但是该方法在提高匹配准确度方面贡献不大.
因经,本文采用一种基于邻域信息约束的改进Census立体匹配算法. 在代价计算阶段, 采用窗口加权均值和的方式对中心像素进行赋值, 根据窗口邻域像素与中心像素的距离差值设定合适的阈值, 计算代价并与传统Census代价进行融合, 对结果进行二次约束. 在代价聚合的过程中, 采用依循三约束条件的自适应窗口构建方法, 对初始代价值进行聚合. 将固定颜色阈值改为根据距离而变化的可变阈值, 提升了代价聚合的准确性, 并在构建过程中引入了噪声剔除策略. 该方法可以有效降低噪声对结果的影响, 增强算法的鲁棒性与准确性. 最后,采用左右一致性检测与区域投票相结合的方法对视差图进行优化, 进一步提高了匹配精度.
1 算法描述
1.1 传统Census算法原理
传统的Census立体匹配算法是一种基于局部的区域匹配算法,其主要原理是判断支持窗口内周围像素与中心像素的大小,如果大于中心像素则标记为1,反之则标记为0. 具体公式如下:
(1)
式中:p为窗口的中心像素;p′为周围像素;W(u,v)表示的是中心像素所在的支持窗口. 将邻域像素逐一与中心像素比较后,得到一系列0、1的二进制数,并将其串联为比特串,这些比特串从一定程度上代表了该局部区域的像素信息. 通过计算2个区域下生成的比特串的汉明距离,即可判断这2个区域的相似性,并进行匹配. 传统Census变换算法的原理图如图1所示.
但是传统的Census算法本身存在局限性,在非平滑区域, 周围像素会产生较大变化, 仅将中心像素值与周围灰度值进行大小比较, 则会影响视差结果,容易产生误匹配, 导致匹配精度下降. 如图2所示, 虽然邻域像素产生了较大变化, 但是比特串却相同, 2个不同区域下的汉明距离相等, 这种情况往往存在于图像的边界处, 由像素的突变导致误匹配的产生.
1.2 本文算法
通过分析传统Census变换中存在的问题, 本文提出了一种基于邻域信息约束与自适应窗口的立体匹配算法, 其流程图如图3所示.
针对传统Census算法对中心像素依赖性高的问题, 首先建立一个十字加权模板, 对窗口内的中心像素进行加权平均求和, 其主要遵循越靠近中心像素的点, 其像素值贡献越大. 具体的十字加权模板如图4所示, 通过加权的方式可以减少边界突变对中心像素产生的影响, 将均值重新赋值给中心像素可以降低对中心像素的依赖性.
针对非平滑区域的误匹配问题, 本文提出一种基于邻域信息的二重约束算法. 在传统的Census代价计算基础上, 融合了新的代价,具体方法如下.
1) 计算支持窗口内邻域像素与中心像素的灰度差绝对值.
2) 将其与设定的合适阈值进行比较,如果大于该阈值, 则标记为0; 反之, 标记为1.
3) 通过将所有邻域像素进行编码, 可以得到代表该区域像素变化程度的二进制比特串.
4) 对搜索的2个区域计算新的代价Cg, 即从区域变化相似度上来判断是否匹配.
5) 将传统的Census代价与新的代价进行融合,具体公式如下:
(2)
式中:C(p,d)为融合后的计算代价;CCensus为传统的Census代价;Cg为基于邻域信息约束后计算的新代价值;fc(p,d)与fg(p,d)通过指数形式将计算的代价值映射到[0,1]区间内;λ为控制异常值的经验参数;∂是一个常量, 取值0~1, 其影响着2个代价的权重大小, 并根据图像的灰度连续性来变化. 在非平滑区域,参数取较大值, 则Cg对区域的匹配性能产生更大的影响;反之,CCensus则分配更高的权重.∂的大小与第2步中设定的阈值大小有关, 本文阈值采用自适应阈值的方法, 将支持窗口内距离中心像素距离远的值设定一个较大的阈值, 距离近的区域则设定较小的阈值,再判断整个窗口下大于阈值的像素个数, 如果超过了总数的1/3, 认定该区域为非平滑区域, 则设定较大的∂值. 如图5所示, 左图为图像局部区域内的像素分布情况, 右图为对应的阈值分布情况. 将邻域像素与中心像素进行比较后, 再结合其当下的阈值来进行编码. 图中阴影区域表示大于阈值的像素分布, 并且其总数超过整个模板的1/3, 故认为其为非平滑区域.
6) 通过传统的Census代价与新计算的代价Cg,重新对局部区域进行约束,并计算出初始视差值.
7) 代价聚合是立体匹配过程中关键的一步, 直接影响最终结果的精确度. 本文采用三约束自适应窗口构建法, 对窗口内部所有的代价值进行加和平均. 窗口构建的约束条件如下:
(3)
式中:Dc、Ds分别表示像素p1与中心像素p的颜色差及距离差;τ1、τ2与L1、L2分别表示不同的颜色及距离阈值. 图6为构建的聚合窗口示例图.
如图6(a)所示,从p点开始分别向4个方向进行延伸构建.Dc(p1,p)<τ1和Dc(p1,p1+(1,0))<τ1表示如果p1与p点或p2与p1点的颜色差绝对值大于设定的阈值τ1, 则停止延伸.Ds(p1,p) (4) 式中:τ3与τ4为新定义的阈值;l(p1,p)为像素p1与p点距离;β1与β2为经验参数. 调节整体颜色阈值,则式(3)改为 (5) 8) 添加噪声剔除策略, 根据步骤7), 每个像素点都对应不同的交叉十字区域. 针对每个像素, 先构建一个小型十字窗口, 如图7灰色区域, 统计该灰色区域内的像素最大值pmax、最小值pmin及中值pmid, 并判断是否满足pmin pmin 若不满足该条件, 则认为该点为噪点, 有pxy=pmid. 由于前一阶段已经构建好对应的区域, 所以当十字窗口的任一方向到达区域边界时则停止延伸. 并且在每次延伸的过程中, 最多只会增添4个像素, 因此,只需单独判断这4个像素在整个序列中的位置, 如图7中黑色区域. 针对每个像素与其对应的十字区域都进行上述操作, 能有效对噪声进行剔除. 9) 由于聚合后的视差图中仍然存在着误匹配现象, 所以需要对视差图进行精化操作. 本文在此阶段采用左右一致性检测与区域投票相结合的优化操作. 首先采用左右一致性检测来区分图像中的遮挡点与误匹配点. 针对遮挡点p, 分别向左右2个方向寻找第1个出现的非遮挡点, 记作pL、pR, 将两者的最小值赋值给p点完成填充. 针对误匹配点则采用区域投票的方式统计支持窗口区域内所有像素点的灰度分布情况, 并选取出现次数最多的视差值来替代该点的视差值. 为了验证本文所提算法的有效性,选取了Middlebury网站平台上的标准图像进行实验. 实验环境为:台式PC机, Intel(R) CoreTMi5-3470处理器, 操作系统为64位Win7系统. 使用VisualStudio2012作为调试平台, 并配置了Opencv2.4.9开源库. 所用参数值如表1所示. 表1 各参数取值 为了验证本文方法能够降低图像对高斯噪声的敏感性,针对Middlebury平台上的4幅标准图像cones、teddy、tsukuba、venus分别加入标准差为0.5、2.0、5.0、8.0的高斯噪声,并将本文方法与传统算法进行对比. 图8为加入噪声后的原始图像, 从上到下图像类型分别为cones、teddy、tsukuba、venus, 每一行从左到右加入的高斯噪声标准差为0.5、2.0、5.0、8.0. 针对上述图片, 分别采用传统Census算法与本文所提方法进行处理, 并将代价聚合后的图片进行峰值信噪比PSNR的计算, 根据PSNR的变化程度判断算法对噪声的敏感性. 如表2所示, 通过分析表中数据可知, 传统Census算法在噪声不断加强的情况下, 其PSNR值下降速度明显高于本文算法. 并在标准差为5.0、8.0时, 本文算法处理所得PSNR值基本不变, 客观反映出本文算法能够有效降低图像对高斯噪声的敏感性. 通过在上述4幅图像中加入浓度为2%、5%、10%、15%的椒盐噪声, 分别判断其在非遮挡区域的平均误匹配率, 并与Mei等[16]所用自适应窗口法进行对比来验证聚合算法的鲁棒性, 对比结果如表3所示. 其中当椒盐噪声浓度增大幅度较小时, 本文方法的平均误匹配率变化不大, 随着浓度的增大, 则会产生更多的误匹配点, 但误匹配率仍低于Mei等所提的自适应窗口聚合算法. 由此证明了本文所提聚合算法对噪声具有更好的鲁棒性. 为了验证本文算法的创新性, 先后对cones、tsukuba、teddy、venus四幅图片进行测试. 计算初始代价值, 并通过改进的自适应窗口进行聚合, 将得到的结果图与真实视差图进行比较, 获取其在非遮挡区域的误匹配图并与传统Census算法进行对比, 对比结果如图9所示. 第1列为标准左视角图像, 从上到下分别为cones、tsukuba、teddy、venus;第2列为真实视差图;第3列为Census算法经过代价聚合后的视差图像;第4列为在非遮挡区域与真实视差图进行比较后的误匹配图像, 其中红色区域表示产生误匹配的区域;第5列为本文算法经过代价聚合后的图像;最后1列表示本文算法的误差图. 由图像可以直观看出, 本文算法能够有效降低传统Census算法的误匹配率, 并具有很好的结构保持性能. 表2 不同高斯噪声处理下的PSNR值(cones、teddy、tsukuba、venus) 表3 不同椒盐噪声浓度下非遮挡区域的平均误匹配率 如图10所示,第1排图片是Census处理后的视差图,第2排是用本文算法得到的视差图. 由图可直观地观察到, cones图中的“峰尖”、 tsukuba图中的“台灯”以及teddy图中的“桌角”相比于Census算法更好地保持了物体的结构性. 为进一步验证本文算法的优越性, 将本文算法与其他改进算法在非遮挡区域误匹配率进行对比, 主要对比算法有 Census、mini-Census[10]、SG-CT[13]、mp-Census[18], 对比结果如表4所示. 其中本文算法的平均误匹配率为4.72%, Census为25.13%, mini-Census、SG-CT与mp-Census的平均误匹配率分别为7.18%、 6.92%、 6.53%. 通过对比表中数据可知, 本文算法能够大幅提高传统Census算法的匹配精准度, 并相比于其他算法降低了误匹配率. 本文继续在聚合的基础上增添了优化方法, 图11分别展示了针对4种类型图片在优化前后的对比效果. 第1列为原始左视角图像; 第2列是真实视差图像; 第3列为优化前的视差图; 第4列为优化后的视差图. 为验证本文算法的可靠性, 将本文算法与其他经典算法在非遮挡区域和全部区域分别进行对比实验,主要包括:文献[9]算法、RTCensus[11]、 Seg-CT[12]、 SAD+CT[14]、 SAD-IGMCT[19]、 MI-nonpara[20]、 SGB[21]、AdaptAggrDP[22], 误匹配率对比数据如表5所示. 表中信息从客观上反映了优化后的误匹配率得到了进一步降低. 本文算法的平均误匹配率为4.06%,整体匹配性能优于其他算法, 且比经典算法SGB、AdaptAggrDP的匹配效果更好. 为了验证本文算法的通用性, 选取Middlebury平台上其他图像中的4幅图像进行测试, 测试结果如图12所示. 表4 不同算法在非遮挡区域的误匹配率对比 第1列为左视角原图;第2列为真实视差图;第3列是本文算法所得视差图. 从上到下图像类别分别为: art(视差范围0~80)、 baby1(视差范围0~57)、 dolls(视差范围0~80)、 books(视差范围0~80). 1) 本文针对传统Census立体匹配算法存在着噪声敏感性强, 在图像非平滑区域处更易出现误匹配的问题, 提出了一种基于邻域信息约束的立体匹配算法. 2) 对中心像素进行邻域加权平均赋值, 降低对中心像素的依赖性, 再将原始代价值与新计算的代价值进行融合, 对视差值进行二次约束. 通过构建基于颜色变化的自适应约束窗口对初始代价进行聚合, 并在构建过程引入了噪声剔除策略, 提高了视差精度, 增强了算法的鲁棒性. 3) 通过左右一致性检测与区域投票相结合的视差精化方法对视差图进行后处理, 进一步降低了图像误匹配率. 实验结果表明: 本文方法能很好降低图像对噪声的敏感性,并大幅提高图像的匹配精度.2 实验结果与性能分析
3 结论