【算法】PatchMatch立体匹配算法_原理解析

news2024/9/24 9:20:34

目录

前言

原理解析

1.倾斜支持窗口(Slanted Support Windows)

什么是视差平面?

为什么视差和像素坐标点之间的关系可以解释为平面方程?

视差平面的通用参数方程和点加法向量方程

什么是倾斜支持窗口?

2.基于倾斜窗口的代价计算

3.视差平面的随机初始化

4.基于PatchMatch的迭代传播方法

4.1.空间传播

4.2.视图传播

4.3.时间传播

4.4.平面细化

5.后处理

5.1.一致性检查

5.2.视差填充

PatchMatch相关开源代码

总结


前言

PatchMatchStereo是Michael Bleyer等在2011年发表于British Machine Vision Conference(BMVC)上的一篇双目立体匹配算法文章,非常经典,倾斜支持窗的思路打破传统固定窗口式局部匹配的思维桎梏,在Middlebury数据集上获得非常好的匹配效果,一段时间内高居排行榜第一名。更难能可贵的是,它和SGM一样数据泛化能力出色,对大部分数据都能取得不错的结果,所以也被很多商业软件所实现,是真正能够产品化的算法。

Bleyer M, Rhemann C, Rother C. Patchmatch stereo-stereo matching with slanted support windows[C]//Bmvc. 2011, 11: 1-11.

区别于SGM(半全局算法),PatchMatchStereo本身是一种局部算法,可以估计出每个像素上的视差及其所在的3D视差平面,更适用于倾斜表面的视差估计。倾斜窗口的代价可以作为全局方法(比如,Graph Cut)构建代价空间的数据项,从而可以更加鲁棒地恢复出遮挡和大面积无纹理区域的视差。

局部:SAD、SSD、NCC\ZNCC、Census-Transform、Mutual Information、PatchMatch 全局:Graph Cut、Belief Propagation、Dynamic Programming 半全局:SGM、SGBM 参考博文:视觉立体匹配江湖记_扫地机 双目立体匹配_李迎松~的博客-CSDN博客

下图是SGM和PatchMatch的效果对比。基于连续空间的视差平面方法,在精度和效果上有明显的优势。尤其是在边界和细小结构的恢复上,离散空间带来的不精确性以及SGM的代价聚合模型对边界的处理并不清晰(或者说并不精确),使得SGM和PatchMatch差距明显

原理解析

 

1.倾斜支持窗口(Slanted Support Windows)

想要了解倾斜支持窗口,先得知道什么是视差平面。

什么是视差平面?

 

为什么视差和像素坐标点之间的关系可以解释为平面方程?

我们构建针孔相机、成像平面和真实物体表面三者的几何关系如下图所示:

 

 

 

 

视差平面的通用参数方程和点加法向量方程

 

什么是倾斜支持窗口?

 

 

2.基于倾斜窗口的代价计算

 

 

综上,PatchMatch在计算局部窗口的代价的时候,对于窗口内每个像素点会按照独立的视差去计算代价,并且加入自适应支持权重,提高了位于同一平面的匹配点的代价贡献度。  

下面就是PatchMatch的优化方法,其方法最开始是来源于PatchMatch图像融合方法。

最底层的想法是,图像中存在很多区域,在每个区域内,像素之间的视差平面是非常接近的。那么,如果通过随机初始化之后,每个区域至少会有一个像素点具有接近正确视差平面的初始值的话,哪怕只有一个“good”,我们就可以通过迭代传播的方式将这个平面传递到该区域的其他像素上。

3.视差平面的随机初始化

4.基于PatchMatch的迭代传播方法

 

4.1.空间传播

 

  

4.2.视图传播

 

 

4.3.时间传播

4.4.平面细化

这个想法是允许在第一次迭代中进行较大的更改(如果当前视差平面完全错误,那么就非常有意义,相当于遗传算法里面的基因突变)。

在之后的迭代中,我们进行更加精细的采样,这就能允许捕捉到视差细节(比如,圆形表面)。

 

5.后处理

5.1.一致性检查

 

5.2.视差填充

 

 

PatchMatch相关开源代码

[1] GitHub - ethan-li-coding/PatchMatchStereo: PatchMatchStereo,倾斜窗口经典,效果极佳,OpenMVS&Colmap稠密匹配算法。完整实现,代码规范,注释清晰,博客教学,欢迎star!

[2] GitHub - nebula-beta/PatchMatch: PathMatch is the state-of-the-art stereo match algorithm framework.

[3] GitHub - nebula-beta/PatchMatchCuda: The PatchMatch stereo match algorithm implemented by CUDA.

[4] GitHub - cdcseacave/openMVS: open Multi-View Stereo reconstruction library

[1]代码的作者是李迎松,结合他写的博文,可很快地学习和掌握到整个PatchMatch计算过程以及具体实现方法。

[2]和[3]代码的作者是ZhengMao Gong,实现了CPU版本和GPU版本,GPU版本是基于CUDA开发的。

[4]是常用的OpenMVS,可以估计出极线校正前视图的深度,而不需要做极线校正,同样的也有CPU版本和GPU版本。

总结

SGM和PatchMatch本质上都是在求解能够使得代价最小化的视差最优解,最主要的区别是代价计算、优化方法和视差平滑

  • 代价计算:SGM所构建的代价空间中的每一个代价是来源于一个基于整像素视差的Fronto-parallel窗口(默认该窗口内所有像素都具有恒定视差),而PatchMatch的代价是来源于基于子像素视差的Slanted support窗口(即,窗口内每个像素点的视差是不一样的),再加上自适应支持权重,使得从局部窗口的代价本身就能反映出不同倾斜表面的细微差别,保证计算的代价具有足够的几何精度。而SGM因为采用的是Fronto-parallel窗口计算代价,不可避免会有视差精度损失的问题。

  • 优化方法:SGM采用的是半全局的动态规划方法来近似解决全局代价最小化问题,而PatchMatch是多种方式组合的随机传播方法(空间传播、视图传播、平面细化、时间传播)来近似解决全局代价最小化问题,有点类似遗传算法或者粒子群算法。

  • 视差平滑:SGM采用的是添加代价聚合的平滑项和亚像素插值的方式,而PatchMatch是通过空间传播视差平面的方式。

在上述区别中,代价计算的区别使得PatchMatch可以比SGM在精度和效果上有明显的优势,尤其是在边界和细小结构的恢复上。但是优化方法的区别使得PatchMatch的迭代优化次数比SGM高出至少一个数量级,所以在实际运用中多采用棋盘格传播替换原始的串行传播方式,并采用GPU多线程加速计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/382841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宏基因组鉴定病毒流程中需要的生物信息工具

谷禾健康 许多流行病的爆发都是病毒引起的,面对新的传染性基因组出现的最佳策略是及时识别,以便于在感染开始时立即实施相应措施。 目前可用的诊断测试仅限于检测新的病理因子。适用于同时检测存在的任何病原体的高通量方法可能比使用基于当前方法的大量…

Mel Spectrogram

参考链接: Short-time Fourier transform - MATLAB stft- MathWorks 中国 https://medium.com/analytics-vidhya/understanding-the-mel-spectrogram-fca2afa2ce53 a spectrogram as a bunch of FFTs stacked on top of each other. 给出hop length后&#xff0…

TMP耗时较高的优化问题

1)TMP耗时较高的优化问题 ​2)Unity重载Object后,如何判定物体是否为空 3)SRP Batch在添加unity_SpecCube后的问题 4)堆内存会持续上升,如何用UWA报告来分析 这是第326篇UWA技术知识分享的推送,…

大话数据结构-栈

1 概述 栈(Stack)是限定仅在表尾进行插入和删除操作的线性表。 允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈,栈又称为后进…

界面控件DevExpress WinForm——轻松构建类Visual Studio UI(三)

DevExpress WinForm拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任…

MyBatisPlus Study Notes

文章目录1 MyBatisPlus概述1.1 MyBatis介绍1.2 MyBatisPlus特性2 标准数据层开发2.1 MyBatisPlus的CRUD操作API2.2 分页功能接口实现2.2.1 config(配置层)拦截器实现2.2.2 Dao(Mapper)数据访问层(CRUD)操作2.2.3 Junit单元测试进行…

新版本GPU加速的tensorflow库的配置方法

本文介绍在Anaconda环境中,配置可以用GPU运行的Python新版tensorflow库的方法。 在上一篇文章Anaconda配置Python新版本tensorflow库(CPU、GPU通用)的方法(https://blog.csdn.net/zhebushibiaoshifu/article/details/129285815&am…

【分布式】10张图带你彻底搞懂限流、熔断、服务降级

文章目录1 限流1.1 限流指标1.1.1 TPS1.1.2 HPS1.1.3 QPS1.2 限流方法1.2.1 流量计数器1.2.2 滑动时间窗口1.2.3 漏桶算法1.2.4 令牌桶算法1.2.5 分布式限流1.2.6 hystrix限流1.2.6.1 信号量限流1.2.6.2 线程池限流2 熔断2.1 断路器的状态2.2 需要考虑的问题2.3 使用场景3 服务…

游戏开发是个“坑”,而且是个“天坑”

本文首发于CSDN公众号 作者 | 开发游戏的老王 责编 | 梦依丹 出品 | CSDN(ID:CSDNnews) 各位游戏开发者大家好,我是开发游戏的老王,一名游戏开发者同时也是一名高校游戏方向的主讲教师,从事游戏开发及相关教…

HTTP缓存从入门到踹门

1 与缓存相关的字段Expires:缓存的绝对过期时间Cache-Control:缓存的相对过期时间Last-Modified:缓存上一次修改的时间(服务端保存)If-Modified-Since:缓存上一次修改的时间(客户端保存&#xf…

第十一届蓝桥杯省赛——2解密

题目:【问题描述】小明设计了一种文章加密的方法:对于每个字母 c,将它变成某个另外的字符 Tc。下表给出了字符变换的规则:字母cTc字母cTc字母cTc字母cTcaynlAYNLbxogBXOGcmpoCMPOddquDDQUearfEARFfcssFCSSgitzGITZhkupHKUPinvwINV…

【ArcGIS Pro二次开发】(11):面要素的一键拓扑

在工作中,经常需要对要素进行拓扑检查。 在ArcGIS Pro中正常的工作流程是在数据库中【新建要素数据集——新建拓扑——将要素加入拓扑——添加规则——验证】,工作流程不算短,操作起来比较繁琐。 下面以一个例子演示如何在ArcGIS Pro SDK二次…

数组一次性删除多条数据

需求描述 最后提交时删除表格中的空行 实现方法 单行删除 - 并不是一次性删除 表格每行的最后设置删除按钮&#xff0c;点击时将当前行的索引传递给方法&#xff0c;splice 删除当前行。 <el-table :data"tableData" class"myTable" border>..…

爬虫实战进阶版【1】——某眼专业版实时票房接口破解

某眼专业版-实时票房接口破解 某眼票房接口:https://piaofang.maoyan.com/dashboard-ajax 前言 当我们想根据某眼的接口获取票房信息的时候,发现它的接口处的参数是加密的,如下图: 红色框框的参数都是动态变化的,且signKey明显是加密的一个参数。对于这种加密的参数,我们需要…

第14届蓝桥杯STEMA测评真题剖析-2023年2月12日Scratch编程初中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第103讲。 蓝桥杯选拔赛现已更名为STEMA&#xff0c;即STEM 能力测试&#xff0c;是蓝桥杯大赛组委会与美国普林斯顿多…

域权限维持之创建DSRM后门

DSRM&#xff08;目录服务还原模式&#xff09;&#xff0c;在初期安装域控的时候会让我们设置DSRM的管理员密码&#xff0c;这个密码是为了在后期域控发生问题时修复、还原或重建活动目录。DSRM账户实际上是administrator账户&#xff0c;并且该账户的密码在创建之后很少使用。…

Azure OpenAI 官方指南 01|GPT-3 的原理揭秘与微调技巧

Azure OpenAI 服务在微软全球 Azure 平台正式发布后&#xff0c;迅速成为众多用户最关心的服务之一。 Azure OpenAI 服务允许用户通过 REST API 访问 OpenAI 的强大语言模型&#xff0c;包括 GPT-3、Codex 和 Embeddings 模型系列。本期&#xff0c;我们将为您揭秘 Azure Open…

乌班图安装kvm并配置网络

乌班图22安装KVM 1.安装KVM sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager virtinstsudo adduser id -un libvirt sudo adduser id -un kvm sudo apt install virtinst qemu-efi sudo systemctl enable --now libvirtd sudo s…

Tcl_Init error: Can‘t find a usable init.tcl in the following directories

目录 问题 解决 小结 问题 最近在研究开源波形显示软件gtkwave时,Ubuntu18.04下编译打包完成,移植到另一个电脑上运行时,出现以下错误,如图: 擦掉的部分是一些路径信息,这个错误提示意味着您的系统中缺少所需的 Tcl 初始化文件,路径下确实没有init.tcl文…

嵌入式 LVGL移植到STM32F4

目录 LVGL简介 1、特点 2、LVGL的硬件要求 3、相关网站 4、LVGL源码下载 5、LVGL移植要求 5.1 移植过程-添加源码 2、更改接口文件 3、显示实现 4、添加外部中文字体的方法 5、编译下载后有几种情况 6、调用显示 6、GUI-Guider使用 6.1 安装软件 6.2 使用…