【理论恒叨】【立体匹配系列】经典AD-Census: (4)多步骤视差优化

AD-Census算法来自于中国学者Xing Mei等在ICCV2011发表的论文《On Building an Accurate Stereo Matching System on Graphics Hardware》1。算法效率高、效果出色,Intel RealSense D400就是基于该算法实现的立体匹配 2

本系列将带大家深入了解AD-Census的理论,希望能够对同学们的立体匹配算法研究有所帮助。

AD-Census是一个将局部算法和半全局算法相结合的算法,它包含四个步骤:1 初始代价计算、2 代价聚合、3 扫描线优化、4 视差优化。本篇的内容是最后一个步骤:多步骤视差优化。

Step 1. AD-Census Cost Initialization
Step 2. Cross-based Cost Aggregation
Step 3. Scanline Optimization
Step 4. Multi-step Disparity Refinement


视差优化是基本上是立体匹配必备步骤,各家的立体匹配算法都会带上这一步,主要目的是剔除错误视差、提高视差精度,以及填充视差图。AD-Census当然也不例外,我们来看看它都做了哪些操作。

(1)Outlier Detection离群点检测

Outlier离群点实际上就是误差较大的点,它们的视差值是错的。AD-Census使用一致性检查来做Outlier Detection,一致性检查不必多说,基本没见过哪个立体匹配算法不做它的,可以说是必备良药了。AD-Census的一致性检查和SGM是类似的,参考博文:

【理论恒叨】【立体匹配系列】经典SGM:(4)视差计算、视差优化
【码上实战】【立体匹配系列】经典SGM:(5)视差优化

一致性检查的同时,也会把无效像素分为遮挡区(occlusion)误匹配区(mismatch),划分的方法和SGM原文一直,参考博文:

【码上实战】【立体匹配系列】经典SGM:(6)视差填充

(2)Iterative Region Voting迭代局部投票

从名字我们可以读到三个信息:(1)迭代表示此步骤要重复执行多次(2)局部表示考虑的是局部范围内的像素(3)投票表示在既定规则内进行统计,数量最多的对象具有优势。

我们看原文中的描述:

对无效像素 p p 的十字交叉域支持区内的所有可靠像素,统计[0, d m a x d_{max} ]范围视差分布的直方图 H p H_p (直方图的值相当于视差的得票数)。占有最多像素(也就是得票最多)的视差值记为 d p d_p^* 。可靠像素数量记为 S p S_p 。如果可靠像素的数量足够多,且得票最多的视差值得票率足够多,则把 d p d_p^* 赋给 p p 。这里的两个“足够多”,用阈值来控制:

式中, τ s τ_s τ H τ_H 为两个预设阈值。

以上操作会重复迭代执行5次,每次迭代成功赋值的像素 p p 都会被标记为可靠像素,以为下一次迭代提供有效值。

(3)Proper Interpolation(找不到合适的词翻译,你们理解就好)

此步骤其实就是视差填充。在一致性检查中无效视差被区分为遮挡区和误匹配区。首先对无效像素 p p ,沿其周围16个方向搜索可靠像素视差值(貌似太夸张了些),对于遮挡区像素,则选择所有可靠像素视差值中的最小值,因为遮挡区大概率来自于背景,背景视差往往是较小值;对于误匹配区像素,则选择和 p p 颜色最近的像素的视差,因为颜色相近的像素往往具有相近的视差值(这里应该是要限制下搜索步长的,太远了假设大概率都失效了)。

作者以实验说明,经过第(2)步和第(3)步,离群点(Outlier)得到很好的剔除,算法的视差错误率得到明显改善。如图所示:

(4)Depth Discontinuity Adjustment视差非连续区调整

这是个新鲜词,在其他论文中比较少见。此步的目的是进一步优化视差非连续区域的视差值。

首先,会对视差图做一个边缘检测,对于边缘上的像素 p p ,记其视差值为 D ( p ) D(p) ,记录其左右两边像素 p 1 p_1 p 2 p_2 的视差值 D L ( p 1 ) D_L(p_1) D L ( p 2 ) D_L(p_2) 。如果 D L ( p 1 ) D_L(p_1) D L ( p 2 ) D_L(p_2) 中存在一个视差值赋给像素 p p 后的匹配代价比 p p 原先的匹配代价 C 2 ( p , D ( p ) ) C_2(p,D(p)) 更小,则把 D ( p ) D(p) 替换成该视差值。

其实就是对边缘上的像素值进行微调,选择左右两边使其代价更小的那个视差值。

作者通过实验表明,该步骤可以明显减少视差非连续区域的视差错误。如图所示:

(5)Sub-pixel Enhancement子像素优化

子像素优化很常规,和SGM一样,来一个一元二次拟合。公式如下:

式中 d = D L ( p ) d=D_L(p) d + = d + 1 d_+=d+1 d = d 1 d_-=d-1 。对此步有疑问可以参考博文:

【码上实战】【立体匹配系列】经典SGM:(5)视差优化


至此,AD-Census的理论部分就此完结,贴出一些论文中的实验结果,有不明白的欢迎大家给我留言。后续我会着手编码实现该方法并在我的Github主页中开源,感谢大家的观看,再见!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


  1. Zhang K , Lu J , Lafruit G . Cross-Based Local Stereo Matching Using Orthogonal Integral Images[J]. IEEE Transactions on Circuits and Systems for Video Technology, 2009, 19(7):1073-1079. ↩︎

  2. Keselman L , Woodfill J I , Grunnet-Jepsen A , et al. Intel® RealSense™ Stereoscopic Depth Cameras[C]// 2017 IEEE Conference on Computer Vision and Pattern Recognition Workshops (CVPRW). IEEE, 2017. ↩︎

猜你喜欢

转载自blog.csdn.net/rs_lys/article/details/107922958
今日推荐