理论恒叨系列
【理论恒叨】【立体匹配系列】经典PatchMatch: (1)Slanted support windows倾斜支持窗模型
【理论恒叨】【立体匹配系列】经典PatchMatch: (2)基于PatchMatch的视差估计
【理论恒叨】【立体匹配系列】经典PatchMatch: (3)后处理(一致性检查与视差填充)
PatchMatchStereo1是Michael Bleyer等在2011年发表于British Machine Vision Conference(BMVC)上的一篇双目立体匹配算法文章,非常经典,倾斜支持窗的思路打破传统固定窗口式局部匹配的思维桎梏,在Middlebury数据集上获得非常好的匹配效果,一段时间内高居排行榜第一名。更难能可贵的是,它和SGM一样数据泛化能力出色,对大部分数据都能取得不错的结果,所以也被很多商业软件所实现,是真正能够产品化的算法。
本系列博主将为大家介绍经典的PatchMatchStereo(PMS)算法原理,希望能够对同学们的立体匹配算法研究有所帮助。
上篇博客中,博主介绍了PMS的视差估计方法:基于PatchMatch的视差估计法。本篇则是介绍PMS的后处理部分,顺便给PMS概述专题收尾。
PMS后处理
同大多数立体匹配算法一样,PMS的后处理一是常规操作:一致性检查和视差填充。
一致性检查
一致性检查的介绍自不必细说,还不太了解的请查看博主的另外两篇博客
有一点特别的是,上篇博客提到PMS有一个视图传播,即左右视图同名点的视差平面的传播,这意味着如果执行视图传播,则右视图也需要和左视图一样执行一次随机+N次传播的步骤。我们执行右视图计算时,需要注意右视图的视差值依然等于左视图的列号减去右视图的列号,即 d = x l − x r d=x_l-x_r d=xl−xr。
所有迭代传播完成后,计算左视图像素点 p p p在右视图上的同名点 q = p − d p q=p-d_p q=p−dp,判断 ∣ d p − d q ∣ < = 1 |d_p-d_q|<=1 ∣dp−dq∣<=1是否成立,若不成立,则不满足一致性约束,将 p p p点和 q q q点的视差都赋为无效值。
视差填充
PMS的视差填充策略和SGM不一样,想了解SGM的填充策略的请查看博主前面的博客:
PMS的策略是:
(1)搜索无效像素
p
p
p左右最近的有效像素。记录它们的视差平面
f
l
f^l
fl和
f
r
f^r
fr。
(2)将像素
p
p
p的坐标代入
f
l
f^l
fl和
f
r
f^r
fr,计算出视差,选择较小的那个视差作为
p
p
p的视差值。选较小的含义是遮挡像素往往是出现在背景。(背景总是被前景遮挡,前景流氓做的大啊,挨近相机就是有优势!)
以上两个步骤可以为像素 p p p填充一个视差值,但有个问题是这样做会产生水平线条纹,这个不难理解,此方法没考虑其他方向的视差,只考虑了水平方向的视差,肯定会有条纹效应(一般来说,只考虑单方向就会出现该单方向条纹,比如只考虑水平,就出现水平条纹)。
为了缓解这个问题,作者想了个办法,既然填充只考虑了单方向,那就再做个多方向滤波!
搞一个加权中值滤波!
中值滤波做图像处理的再熟悉不过了(不认识的面壁去吧!),加权中值滤波不过就是给窗口内每个格子一个权值,权值计算公式依旧是它:
![](https://i-blog.csdnimg.cn/blog_migrate/0e82cf28bc2ec73cd7f5c1f197aaeca7.png)
什么,没见过?请看下篇:
【理论恒叨】【立体匹配系列】经典PatchMatch: (1)Slanted support windows倾斜支持窗模型
γ γ γ选择和前面一样的值,中值滤波的窗口和匹配时的窗口大小一样。(如果是时序传播,那这里的窗口就是三维的)
实验图
首先我们看论文中最大的一张实验图:(右边是实验分析)
![](https://i-blog.csdnimg.cn/blog_migrate/b25d1e46b57dc9fa630ba53f73590b30.png)
另外贴一下PMS加入时序传播的视频立体匹配实验结果:(有趣的时序传播,但好像很少见到实际应用的?)
![](https://i-blog.csdnimg.cn/blog_migrate/dcdfefcba5d35b58f86d7c129faab8fa.png)
系列完结!大家有不懂的,可以留言给我。要代码的,等段时间,博主把代码教学篇奉上!
代码篇来也↓↓↓
下载完整源码,点击进入: https://github.com/ethan-li-coding/PatchMatchStereo.git
欢迎同学们在Github项目里讨论,如果觉得博主代码质量不错,给颗小星星,Follow 我!感激不尽!
码上实战系列
【码上实战】【立体匹配系列】经典PatchMatch: (1)框架
【码上实战】【立体匹配系列】经典PatchMatch: (2)主类
【码上实战】【立体匹配系列】经典PatchMatch: (3)随机初始化
【码上实战】【立体匹配系列】经典PatchMatch: (4)代价计算
【码上实战】【立体匹配系列】经典PatchMatch: (5)迭代传播
【码上实战】【立体匹配系列】经典PatchMatch: (6)后处理
博主简介:
Ethan Li 李迎松(知乎:李迎松)
武汉大学 摄影测量与遥感专业博士
主方向立体匹配、三维重建
2019年获测绘科技进步一等奖(省部级)
爱三维,爱分享,爱开源
GitHub: https://github.com/ethan-li-coding
邮箱:ethan.li.whu@gmail.com
个人微信:
欢迎交流!
关注博主不迷路,感谢!
博客主页:https://ethanli.blog.csdn.net
Bleyer M , Rhemann C , Rother C . PatchMatch Stereo - Stereo Matching with Slanted Support Windows[C]// British Machine Vision Conference 2011. ↩︎