当前位置: 首页 > news >正文

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

目录

前言

原理解析

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多线程加速计算。

相关文章:

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

目录 前言 原理解析 1.倾斜支持窗口(Slanted Support Windows) 什么是视差平面? 为什么视差和像素坐标点之间的关系可以解释为平面方程? 视差平面的通用参数方程和点加法向量方程 什么是倾斜支持窗口? 2.基于倾…...

【同步工具类:CyclicBarrier】

同步工具类:CyclicBarrier介绍源码分析CyclicBarrier 基于ReetrantLock Condition实现。构造函数await() 函数业务场景方案一:代码实现测试截图方案二代码实现测试打印总结介绍 官方介绍: 一种同步辅助工具,允许一组线程都等待对方到达共同的障碍点。CyclicBarrie…...

Android 12.0 Settings 去掉打开开发者模式和USB调试模式的广播

1.概述 在12.0的系统产品rom定制化开发中,在系统Settings的开发者模式中,打开开发者模式和usb调试模式都会发出开发者模式改变广播和usb调试模式改变广播, 项目开发功能需要要求去掉这两个广播以免影响其他功能,所以就要看哪里发出广播来屏蔽掉就可以了,这样就可以去掉开发…...

OSI七层网络模型和TCP/IP四层网络模型的异同

文章目录前言一、什么是OSI?二、什么是TCP/IP四层模型?三、OSI七层网络模型和TCP/IP四层网络模型的关系:四、 OSI七层和TCP/IP的区别:前言 本节系统总结: 一、什么是OSI?二、什么是TCP/IP四层模型&#xf…...

接口测试必备技能 - 加密和签名

1、什么是加密以及解密? 加密:在网络上传输的原始数据(明文)经过加密后形成(密文)传输,防止被窃取。 解密:将加密还原成原始数据 2、加密方式分类? 对称式加密&#xf…...

JVM虚拟机概述(1)

1.JVM概述 1.1为什么要学习JVM 通过学习JVM ( java Virtual Machine )可以帮助我们理解java程序运行的过程,了解虚拟机中各种机制的实现原理。为后期写出优质的代码做好准备,为向更高的层次提升打好基础。 1.2虚拟机 虚拟机的本质就是在windows中&…...

学习.NET MAUI Blazor(七)、实现一个真正的ChatGPT聊天应用

今天在新闻上看到一条消息,OpenAI已经开放了ChatGPT的接口,也就是GPT-3.5,对比原来的GPT-3,增加了gpt-3.5-turbo、gpt-3.5-turbo-0301两个模型。 gpt-3.5-turbo:使用最新的GPT-3.5模型,并针对聊天进行了优…...

Django框架学习

文章目录Django框架项目开发1. 创建项目2. 项目目录结构3. 视图函数(view)4. 路由配置url5. HTTP请求6. HTTP响应 - 状态吗7. GET方式传参8. POST传递参数模板Templates1. 通过 loader 获取模板,通过HttpResponse进行响应2. 使用 render() 直接加载并响应…...

JavaSE21-集合1-set

文章目录一、集合概念二、set集合1、set集合的特点2、HashSet2.1 特点2.2 创建对象2.3 常用方法2.4 遍历2.4.1 foreach遍历2.4.2 使用迭代器遍历2.4.3 转换为数组遍历一、集合概念 集合就是用于存储多个数据的容器。相对于具有相同功能的数组来说,集合的长度可变会…...

Web版和客户端哪种SQL工具更好?ChatGPT有话要说

2023年年初公司发布了一款Web版SQL工具,短期内就赢得了众多用户的喜爱和下载。不过,也有SQL用户在评论区中提出自己的观点,认为Web版工具都不可靠,甚至看见Web版工具就劝返… … 工具Web化逐渐成为一种趋势,比如&…...

从客户端的角度来看移动端IM即时通讯的消息可靠性和送达机制

如何确保IM 不丢消息是个相对复杂的话题,从客户端发送数据到服务器,再从服务器抵达目标客户端,最终在 UI 成功展示,其间涉及的环节很多,这里只取其中一环「接收端如何确保消息不丢失」来探讨,粗略聊下我接触…...

2023年java春招面试题及答案

2023年java春招面试题1、下面有关jdbc statement的说法错误的是?2、下面有关JVM内存,说法错误的是?3、下面有关servlet service描述错误的是?4、下面有关servlet和cgi的描述,说法错误的是?5、下面有关SPRIN…...

Django学习——基础篇(上)

一、Django的安装 pip install djangopython目录下出现两个文件 djando-admin.exe django django-admin.exe django 二、创建项目 1.命令行(终端) 1.打开终端 winR 输入cmd 2.进入项目目录 3.执行命令创建项目 2.Pycharm 两种方法对比 1.命令行创…...

研报精选230302

目录 【个股230302华西证券_比亚迪】系列点评五十四:迪“王”需求向上 出口“海”阔天空【个股230302华西证券_华利集团】下游去库存背景下承压,毛利率保持稳健【个股230302开源证券_恒顺醋业】公司信息更新报告:四季度业绩承压,期…...

Unity心得

- 将结果与因子颠倒的函数Mathf.InverseLerp非常实用 - at 10 meters, you want volume 1 - at 20 meters, you want volume 0 - volume InvLerp( 20, 10, distance ) - 显示HideFlags为Hide类型的物体 Resources .FindObjectsOf…...

TryHackMe-Binex

Binex 枚举计算机并获取交互式 shell。利用 SUID 位文件,使用 GNU 调试器利用缓冲区溢出并通过 PATH 操作获得根访问权限。 端口扫描 循例 nmap SMB枚举 题目给了提示:Hint 1: RID range 1000-1003 Hint 2: The longest username has the unsecure pa…...

外贸人如何写出优秀的开发信?附详细思路

如何写出优秀的开发信?最近做出口生意的客户都在抱怨,开发信的回复率越来越低,其实原因有很多,有时候并非自己的能力实在很欠缺。原因总结如图:第一:市场不景气这个就是就属于客观因素了,这也许…...

python自学之《21天学通Python》(18)——第21章 案例2 Python搞定大数据

“大数据(Big Data)”这个术语最早期的引用可追溯到apache org的开源项目Nutch。当时,大数据用来描述为更新网络搜索索引需要同时进行批量处理或分析的大量数据集。随着谷歌MapReduce和GoogleFileSystem (GFS)的发布&a…...

面试问题【数据库】

数据库数据库的三范式是什么drop、delete、truncate 分别在什么场景之下使用char 和 varchar 的区别是什么数据库的乐观锁和悲观锁是什么SQL 约束有哪几种mysql 的内连接、左连接、右连接有什么区别MyIASM和Innodb两种引擎所使用的索引的数据结构是什么mysql 有关权限的表都有哪…...

Allegro如何输出钻孔表操作指导

Allegro如何输出钻孔表操作指导 用Allegro做PCB设计的时候,需要输出钻孔表格,用于生产加工,如下图 如何输出钻孔表,具体操作如下 点击Manufacture点击NC...

消息队列 面试题 整理

消息队列 为什么要使用消息队列? 异步解耦:关注的是通知而非处理。 流量削峰:将短时间内高并发的请求持久化,然后逐步处理,削平高峰期的请求。 日志收集: 事务最终一致性 系统间的消息通信方式&#xff…...

【Java】对象比较大小

在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。Java实现对象排序的方式有两种: 自然排序:java.lang.Comparable定制排序:java.util.Comparator 规则:需要我们自定义根据对象的某个或某些属…...

发票自动OCR识别并录入模板 3分钟免费配置

要问整个公司里和数据打交道最多的职能,非财务莫属了吧。除了每天要处理大量财务数据外,还有发票录入的工作让财务陷入“易燃易爆炸”的工作状态。发票报销看似简单,但发票的类型有很多种,每种发票需要录入的信息也有差别。再加上…...

Dubbo 配置说明

dubbo:scan:base-packages: com.ut.msdasw.services.appservice //这个会扫描该包下得全部接口protocol: //这个主要是配置传输的协议和端口,只是一个协议name: dubbo port: 30032registry: //这里是服务注册中心的地址address: spring-cloud://localhost consum…...

英飞凌TCxxx实战系列01_Alarm处理

目录 1.概述2. Alarm内部处理2.1关联的寄存器2.2 Alarm设置case3. SMU外部处理3.1 关联的寄存器4. WDT Alarm的特殊处理4.1 看门狗超时测试4.2 RecoveryTimer相关的Alarm1.概述 当MCU运行出现问题,如MCU温度过高、过低,看门狗超时等会触发一个Alarm,当SMU收到Alarm信号后,…...

飞桨全量支持业内AI科学计算工具——DeepXDE!

AI技术在跨学科融合创新方面扮演着日益重要的角色,特别是在Al for Science领域,AI技术的发展为跨学科、跨领域的融合创新带来了巨大的机会。AI已成为一个关键的研究工具,改变了基础科学的研究范式。依托AI技术开发的科学计算工具,…...

【c++基础】

C基础入门统一初始化输入输出输入输出符输入字符串const与指针c和c中const的区别const与指针的关系常变量与指针同类型指针赋值的兼容规则引用引用的特点const引用作为形参替换指针其他引用形式引用和指针的区别inline函数缺省参数函数重载判断函数重载的规则名字粉碎C编译时函…...

语音识别技术对比分析

文章目录一、语音识别产品对比二、百度语音识别产品1、套餐及价格:2、官网3、调研结果三、华为语音识别产品四、阿里云语音识别产品1、套餐及价格:2、官网地址3、调研结果五、科大讯飞语音识别产品1、套餐及价格:2、官网3、调研结果六、有道语…...

Idea git 回滚远程仓库版本

目标 回滚远程仓库到特定版本。 将【添加test03】版本回滚到【行为型模式】版本。 回滚前的效果图 步骤 ①复制需要回滚到的版本的版本号 ②右键项目,选择Git-Repository-Reset Head ③Reset Type选择Hard;To Commit填入步骤①复制的版本号&#xff…...

vscode C++配置

program:调试入口文件的地址cwd:程序启动调试的目录miDebuggerPath:调试器的路径launch.json// { // // Use IntelliSense to learn about possible attributes. // // Hover to view descriptions of existing attributes. // /…...

网站建设实训意见和建议/seo关键词优化报价

## php利用phpExcel 导出数组为Excelphp/*** 导出多页的excel** param [type] $fileName 文件名* param [type] $Data 数据* param [type] $sheets 工作区数量[可选]* author Tan * return void*/function exportExcel_sheets($fileName,$Data,$sheets) {$fileName empty($fil…...

wordpress showposts/2021百度最新收录方法

计算机网络 练习(一百一十) 当使用时间到达租约期的()时,DHCP 客户端和 DHCP 服务器将更新租约。 A. 50% B. 75% C. 87.5% D. 100% ---------------------------------------- 答案: A 解析: …...

php编程/推送者seo

java Spring Controller 获取请求参数的几种方法1、直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。若"Content-Type""application/x-www-form-urlencoded",可用post提交url形式&#…...

做门户网站赚广告费/口碑seo推广公司

以前在学校自己没好好学习过C#,除了在上机课动手练习,课余时间都没有练习过。不知道方法如何写,不明白类到底是干什么用的,不清楚什么是面向对象。不明白的地方也不问老师,问题越积越多,就以为自己不适合做…...

橘子seo/沈阳网站推广优化

aidl(Android Interface Definition Language) 进程间通信需求场景:1.两个不同的应用程序之间通讯需要2.复用以前app已有的功能实现原理:1.IPC在这之前我们先简单说一下IPC,IPC是Inter-Process Communication的缩写,是进程间通信或者跨进程通…...

4线城市搞网站开发/百度商城官网

一、前言:mysql8之后想比起之前常用的版本改动还是挺大的,因为刚从安装接触,就先从基本的说起。现在的mysql8安装只能采用解压配置版,像以前老版本的傻瓜式安装将不复存在。其实mysql8了解如何安装之后也不是特别麻烦,…...