传统多视图立体算法:PatchMatchStereo详解

作者丨视觉企鹅
编辑丨3D视觉开发者社区

1.引言

多视图立体技术是一种从已知相机内外参数的多个视角的彩色影像中,利用立体匹配算法恢复立体结构的三维视觉技术。本篇文章将带来MVS的传统方法PatchMatch Stereo和源码实践。
作为立体视觉的经典之作,PatchMatchStereo [ 1 ] { [1] } [1](以下简介为“PMS”)重述了DSI以及视差平面等概念。本文作为这一系列的引论,先抛砖引玉,主要介绍PMS的基本思路和创新点,再带来李迎松大佬的代码进行代码供大家参考,快速上手。
PatchMatchStereo主要提出了更早以前的视差估计方法中的两种做法:
1)以前的视差平面采样都假设各个视差平面前向平行(图1),并且垂直与深度维度,即以光心为原点,以光轴为法线方向垂直均匀采样。
图片

图1.视差平面示意图

2)视差采样是整数值采样。前向垂直的采样方式(图2-a)不能很好地贴合物体平面,图2-b)则是倾斜视窗地采样策略,会极大地提升采样精度。
图片

图2.视差平面示意图

2)视差采样策略,a) 原始整数值采样以及垂直视窗策略 b) 子像素级采样以及倾斜视窗策略,
以上两种做法虽然可以得到正确的视差估计结果,但会导致一下视差估计结果出现阶梯现象(图3-b),视差结果断续不接,仿佛是上台阶一样。
这是因为,首先前向平行窗口模型下视差采样是整型采样,无法达到子像素级的精度,其次,该模型之前需要对立体像对进行核线纠正,使得左右立体像对中同名特征点位于平行核线上,这一步一般在摄影测量中会作为图像预处理进行,而计算机视觉中并不会做这一步,因此,对于大部分自然影像,前向平行窗口模型(fronto-parallel window model)无法得到令人满意的结果。
图片

图3 .早期视差估计方法
居中 # 2.PatchMatchStereo原理 针对上述问题,PMS算法提出一种新的窗口模型——倾斜支持窗口(图2-b),该模型不仅可以估计子像素级的视差(Q点),更重要的是,该模型可以更好地模拟物体倾斜、光滑弧面(R、S点)。 ## 2.1视差平面建模 ![图片](https://img-blog.csdnimg.cn/fb16da858a024833927e790f24b45961.png)

图片

2.2基于随机算法的优化搜索算法

如果直接暴力搜索最佳平面以求解式3),那么是NP问题无法求解。为了保证求解效率以及考虑后期GPU加速的可能性,PMS利用PatchMatch算法进行同名窗口快速匹配,以求得视差值。

PatchMatch [ 2 ] { [2] } [2]算法是通过初始化、代价传播、随机搜索等迭代步骤快速找到匹配像素块。例如,我们需要找到蓝色块在另一张图上的匹配块(图4-a),我们就先在另一张图随机采样,完成初始化。然后我们会检查蓝色块的左边、上边的红色块和绿色块与蓝色块的匹配代价,如果匹配代价小于蓝色块本身的代价,说明匹配块靠近代价小的像素块(图4-b)。这样经过代价传播,我们大概就知道了一个蓝色匹配块的搜索区域(图4-c),在这个区域中随机搜索会很快得到最优匹配,而且速度很快。
图片

图4.PatchMatch算法原理

PMS算法利用该思路进行视差的空间传播、视角传播以及序列传播等操作,序列传播主要应用于视频序列的视差估计,所以本文省去而主要介绍空间传播和视角传播。

PMS视差传播的假设是,在自然立体像对中,一个大邻域的像素集可以被近似在同一个平面。这么假设是合理的,比如一个半径为5-10的像素块,在像素为千万级图像中,往往从属于同一物体,而那些有灰度剧烈变化的地方,在匹配代价计算过程中,也往往能很快的提取出来。在这样的假设下,PMS对每个图像的每个像素都会随机化一个视差平面,并且假设随机化的结果有少量是正确的,这是合理的随机算法的理论假设,因为虽然搜索范围很大,但随机的初始平面也很多。只要有一个正确的假设,PatchMatch就能很快迭代到最优结果。具体做法如下:
1)随机初始化
图片

这里大家现有一个这样的概念,具体推到我们以后将结合DSI细讲。
2)空间传播
在这里插入图片描述

图片

扫描二维码关注公众号,回复: 14536865 查看本文章
图5 视差平面传播示意图

3)视角传播
视角传播是一个对左右视差值的强连续性检查,这里的假设是一个立体像对中的同名像点在此像对中拥有一样的视差值,这是合理的,因为本来左右视差图就是相对的,所以在立
在这里插入图片描述
以上就是PatchMatch中核心的创新点,论文后面的后处理我们不再展开,对后处理有兴趣的同学可以详细阅读此篇文章。

3.源代码实践

接下来引用的是武汉大学博士李迎松的源码进行代码实践,他开源了Windows版本的代码,可以在VS studio中直接使用。而照顾到部分读者和笔者自身常使用Linux系统,故将其改成了Linux版本的,还添加了CMakeLists.txt文件,仅供大家参考,如何使用已经在网页中详细说明。这里OpenCV并没有具体的要求,建议安装3.1以上3.5以下版本。

代码实践效果是:
图片

图6 视差估计结果(以左图为参考)

4.总结

本篇文章主要讲解了PatchMatchStereo的基本流程,希望大家针对此篇讲解对PatchMatchStereo做一个简单的认识,之后就传播算法进行展开,最后是源码实践。下篇文章将会就DSI这一重要概念进行讲解,再次感谢李迎松博士开源的代码!

参考文献

[1] Bleyer M , Rhemann C , Rother C . PatchMatch Stereo - Stereo Matching with Slanted Support Windows[C]// British Machine Vision Conference 2011. 2011.
[2] Barnes, C,Finkelstein, A,Shechtman, E, et al.PatchMatch: A Randomized Correspondence Algorithm for Structural Image Editing[J].ACM Transactions on Graphics,2009,28(3):24:1-24:11.

版权声明:本文为作者授权转载,由3D视觉开发者社区编辑整理发布,仅做学术分享,未经授权请勿二次传播,版权归原作者所有,若涉及侵权内容请联系删文。

3D视觉开发者社区是由奥比中光给所有开发者打造的分享与交流平台,旨在将3D视觉技术开放给开发者。平台为开发者提供3D视觉领域免费课程、奥比中光独家资源与专业技术支持。

点击加入3D视觉开发者社区,和开发者们一起讨论分享吧~

也可移步微信关注官方公众号 3D视觉开发者社区 ,获取更多干货知识哦!

猜你喜欢

转载自blog.csdn.net/limingmin2020/article/details/127229683
今日推荐