理论恒叨立体匹配系列经典AD-Census: 多步骤视差优化
Posted 李迎松~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理论恒叨立体匹配系列经典AD-Census: 多步骤视差优化相关的知识,希望对你有一定的参考价值。
下载AD-Census完整源码,点击进入: https://github.com/ethan-li-coding/AD-Census
欢迎同学们在Github项目里讨论,如果觉得博主代码质量不错,右上角star一下!感谢!
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: (4)多步骤视差优化
视差优化是基本上是立体匹配必备步骤,各家的立体匹配算法都会带上这一步,主要目的是剔除错误视差、提高视差精度,以及填充视差图。AD-Census当然也不例外,我们来看看它都做了哪些操作。
(1)Outlier Detection离群点检测
Outlier离群点实际上就是误差较大的点,它们的视差值是错的。AD-Census使用一致性检查来做Outlier Detection,一致性检查不必多说,基本没见过哪个立体匹配算法不做它的,可以说是必备良药了。AD-Census的一致性检查和SGM是类似的,参考博文:
【理论恒叨】【立体匹配系列】经典SGM:(4)视差计算、视差优化
【码上实战】【立体匹配系列】经典SGM:(5)视差优化
一致性检查的同时,也会把无效像素分为遮挡区(occlusion)和误匹配区(mismatch),划分的方法和SGM原文一直,参考博文:
(2)Iterative Region Voting迭代局部投票
从名字我们可以读到三个信息:(1)迭代表示此步骤要重复执行多次(2)局部表示考虑的是局部范围内的像素(3)投票表示在既定规则内进行统计,数量最多的对象具有优势。
我们看原文中的描述:
对无效像素 p p p 的十字交叉域支持区内的所有可靠像素,统计[0, d m a x d_max dmax]范围视差分布的直方图 H p H_p Hp (直方图的值相当于视差的得票数)。占有最多像素(也就是得票最多)的视差值记为 d p ∗ d_p^* dp∗ 。可靠像素数量记为 S p S_p Sp 。如果可靠像素的数量足够多,且得票最多的视差值得票率足够多,则把 d p ∗ d_p^* dp∗ 赋给 p p p 。这里的两个“足够多”,用阈值来控制:
式中, τ s τ_s τs和 τ H τ_H τH为两个预设阈值。
以上操作会重复迭代执行5次,每次迭代成功赋值的像素 p p p 都会被标记为可靠像素,以为下一次迭代提供有效值。
(3)Proper Interpolation(找不到合适的词翻译,你们理解就好)
此步骤其实就是视差填充。在一致性检查中无效视差被区分为遮挡区和误匹配区。首先对无效像素 p p p ,沿其周围16个方向搜索可靠像素视差值(貌似太夸张了些),对于遮挡区像素,则选择所有可靠像素视差值中的最小值,因为遮挡区大概率来自于背景,背景视差往往是较小值;对于误匹配区像素,则选择和 p p p 颜色最近的像素的视差,因为颜色相近的像素往往具有相近的视差值(这里应该是要限制下搜索步长的,太远了假设大概率都失效了)。
作者以实验说明,经过第(2)步和第(3)步,离群点(Outlier)得到很好的剔除,算法的视差错误率得到明显改善。如图所示:
(4)Depth Discontinuity Adjustment视差非连续区调整
这是个新鲜词,在其他论文中比较少见。此步的目的是进一步优化视差非连续区域的视差值。
首先,会对视差图做一个边缘检测,对于边缘上的像素 p p p ,记其视差值为 D ( p ) D(p) D(p) ,记录其左右两边像素 p 1 p_1 p1、 p 2 p_2 p2的视差值 D L ( p 1 ) D_L(p_1) DL(p1)、 D L ( p 2 ) D_L(p_2) DL(p2)。如果 D L ( p 1 ) D_L(p_1) DL(p1)、 D L ( p 2 ) D_L(p_2) DL(p2)中存在一个视差值赋给像素 p p p 后的匹配代价比 p p p 原先的匹配代价 C 2 ( p , D ( p ) ) C_2(p,D(p)) C2(p,D(p)) 更小,则把 D ( p ) D(p) D(p)替换成该视差值。
其实就是对边缘上的像素值进行微调,选择左右两边使其代价更小的那个视差值。
作者通过实验表明,该步骤可以明显减少视差非连续区域的视差错误。如图所示:
(5)Sub-pixel Enhancement子像素优化
子像素优化很常规,和SGM一样,来一个一元二次拟合。公式如下:
式中 d = D L ( p ) d=D_L(p) d=DL(p), d + = d + 1 d_+=d+1 d+=d+1, d − = d − 1 d_-=d-1 d−=d−1。对此步有疑问可以参考博文:
至此,AD-Census的理论部分就此完结,贴出一些论文中的实验结果,有不明白的欢迎大家给我留言。后续我会着手编码实现该方法并在我的Github主页中开源,感谢大家的观看,再见!
博主简介:
Ethan Li 李迎松(知乎:李迎松)
武汉大学 摄影测量与遥感专业博士
主方向立体匹配、三维重建
2019年获测绘科技进步一等奖(省部级)
爱三维,爱分享,爱开源
GitHub: https://github.com/ethan-li-coding
邮箱:ethan.li.whu@gmail.com
个人微信:
欢迎交流!
关注博主不迷路,感谢!
博客主页:https://ethanli.blog.csdn.net
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. ↩︎
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. ↩︎
以上是关于理论恒叨立体匹配系列经典AD-Census: 多步骤视差优化的主要内容,如果未能解决你的问题,请参考以下文章
理论恒叨立体匹配系列经典AD-Census: 扫描线优化(Scanline Optimization)
理论恒叨立体匹配系列经典AD-Census: 十字交叉域代价聚合(Cross-based Cost Aggregation)
理论恒叨立体匹配系列经典SGM:匹配代价计算之Census变换