立体匹配算法

【算法】OpenCV-SGBM算法及源码的简明分析 OpenCV-SGBM的源码在/modules/calib3d/src/stereosgbm.cpp中, 博主用的opencv版本为4.5.2 BT代价就是计算两个像素之间的相似度(或者,代价cost) 阅读详情

立体匹配算法总结如下:

BM算法,重点是SGBM算法,GC算法

双目立体匹配算法SGBM

semi-global matching(SGM)是一种用于计算双目视觉中视差(disparity)的半全局匹配算法,在OpenCV中的实现为semi-global block matching(SGBM)。
核心理解:

SGM其实本质上还是一种代价聚合算法,和局部立体匹配算法中的代价聚合很像,不然也不会叫Semi-Global了。

全局算法:为了达到和全局立体匹配算法一样全局能量函数最小化的效果,就需要更多或者全图所有的像素参与到当前像素的约束当中。SGM类似代价聚合是一定范围内的邻域操作(邻域求和,加权平均等),那如何与整张图像上的像素扯上关系而不提高太多性能呢(重点是远距离像素也能扯上关系),于是作者想出了多路径约束聚合的思路,简单说就是让当前像素的代价聚合过程受多个方向(或路径)上所有像素的影响,方向越多参与影响当前像素的邻域像素就越多(原文说一般来讲8-16方向就比较不错了),这样既保证了全局像素的约束,又不用建立全局最小能量函数,避免了复杂运算符,降低了性能,所以才叫半全局算法。

算法原理

一、预处理

Step1:SGBM采用水平Sobel算子,把图像做处理,公式为:

Sobel(x,y)=2[P(x+1,y)-P(x-1,y)]+ P(x+1,y-1)-P(x-1,y-1)+ P(x+1,y+1)-P(x-1,y+1)

**Step2:**用一个函数将经过水平Sobel算子处理后的图像上每个像素点(P表示其像素值)映射成一个新的图像 P n e w P_{new} Pnew​ 表示新图像上的像素值。

img

reFilterCap 为一个常数参数,opencv缺省情况下取15,

预处理实际上是得到图像的梯度信息,将预处理的图像保存起来,将会用于计算代价。

二、代价计算

1、经过预处理得到的图像的梯度信息经过基于采样的方法得到的梯度代价。

2、原图像经过基于采样的方法得到的SAD代价。

类似卷积块求解之后,直接左右图像做差,求最小值

上述两个代价都会在SAD窗口内进行计算。

三、动态规划

动态规划算法本身存在拖尾效应,视差突变处易产生错误的匹配,利用态规划进行一维能量累积累,会将错误的视差信息传播给后面的路径上。半全局算法利用多个方向上的信息,试图消除错误信息的干扰,能明显减弱动态规划算法产生的拖尾效应。

半全局算法试图通过影像上多个方向上一维路径 的约束,来建立一个全局的马尔科夫能量方程,每个像素最终的匹配代价是所有路径信息的叠加,每个像素的视差选择都只是简单通过 WTA(Winner Takes All)决定的。多方向能量聚集如下图所示:

img

在每个方向上按照动态规划的思想进行能量累积,然后将各个方向上的匹配代价相加得到总的匹配代价,如下式所示:

img

式中L为当前路径累积的代价函数,**P1、P2为像素点与相邻点视差存在较小和较大差异情况下的平滑惩罚,**P1<P2,第三项无意义,仅仅是为了消除各个方向路径长度不同造成的影响。将所有r方向的匹配代价相加得到总的匹配代价,如下:
s ( p , d ) = Σ 1 r L r ( p , d ) s(p,d) = \Sigma_{1}^{r}L_r(p,d) s(p,d)=Σ1r​Lr​(p,d)
默认4条路径,其中动态规划很重要两个参数P1,P2是这样设定的:

P1 =8* cn* sgbm.SADWindowSize*sgbm.SADWindowSize;

P2 = 32* c* sgbm.SADWindowSizesgbm.SADWindowSize;

cn是图像的通道数, SADWindowSize是SAD窗口大小,数值为奇数。

可以看出,当图像通道和SAD窗口确定下来,SGBM的规划参数P1和P2是常数

四、后处理

**Step1:唯一性检测:**视差窗口范围内最低代价是次低代价的(1 + uniquenessRatio/100)倍时,最低代价对应的视差值才是该像素点的视差,否则该像素点的视差为0。其中uniquenessRatio是一个常数参数。

Step2:亚像素插值:

img

**Step3:左右一致性检测:**误差阈值disp12MaxDiff默认为1,可以自己设置。

OpencvSGBM计算右视差图的方式:

通过得到的左视察图计算右视差图

实验:opencv中SGBM算法的参数含义及数值选取

参考:https://blog.youkuaiyun.com/A_L_A_N/article/details/81490043

https://blog.youkuaiyun.com/yegeli/article/details/119777545?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1-119777545-blog-53302168.t0_layer_searchtargeting_sa&spm=1001.2101.3001.4242.2&utm_relevant_index=4

立体匹配算法-SAD 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代. 阅读详情

相关推荐

【立体匹配】传统/深度双目立体匹配方法总结

双目立体匹配一般分为代价计算,代价聚合,计算视差,后处理等步骤。立体校正的Bouguet算法旨在使两幅图像中每幅图像的重投影变化最小化的同时最大化双目视图的公共视野。相机拍摄的一个特定物体(世界坐标系),其相对于相机坐标系统的姿态可用 旋转 和 平移 进行描述。平移向量是以物体中心为原点的坐标系到以相机中心为原点的坐标系的偏移量,因此,相应的平移向量为。cv::InputArrat R 此矩阵是补偿相机相对于相机所处的全局坐标系的旋转。其中(2)(3)为摄像机内参数,其中k3普通镜头不使用,鱼眼镜头要使用。

ydd的博客,记录生活 6666

双目视觉(三)立体匹配算法

1.立体匹配算法 局部匹配 全局匹配 差异: 局部算法运算速度快,但在弱纹理、遮挡和视差不连续区域误匹配率高; 全局算法精度高,但计算复杂度也相应的较高,耗时长,难以达到实时性。 局部算法 局部算法一般可分为基于特征、区域和相位的方法。 step1:给定左图和右图 step2:在极线上进行搜索最匹配的点。 step3: 计算每次搜...

火柴的初心的博客 3万+

双目立体匹配算法:SGM

立体匹配旨在为校正后的左右视图提供稠密的匹配对,这种问题称为"stereo correspondence problem"。有大量的算法用于求解立体匹配问题,根据Scharstein和 Szeliski的研究,所有这些算法的计算流程基本上都可以分为四个步骤:A.匹配代价计算;B.代价聚合;C.视差计算/优化;D.视差细化。其中匹配代价用来度量像素或者像素块之间的相似性,计算匹配代价的方法有AD、SAD、BT、NCC、Census-Hamming、HMI、Daisy以及基于深度学习方法的匹配代价等等。

dulingwen的博客 4万+

立体匹配经典算法:PatchMatchStereo

点击上方“3D视觉工坊”,选择“星标”干货第一时间送达作者丨HawkWang来源丨计算摄影学一. 前言学习路线图:那么,今天咱们就进入经典视差优化算法的学习。我们先来看看,很多立体匹配算法没有解决好的一个问题,即亚像素匹配问题。我以前说过,立体匹配是一个让计算机做连连看游戏的过程——给定R图上一点,我们在T图的同一行上搜索和R图点匹配的同名点。这种搜索方式里,我们会将范围局限在一个有限的范围内,...

3D视觉工坊 2645

立体匹配算法介绍

首先介绍一篇比较好的介绍立体匹配的综述性文章:http://wenku.baidu.com/view/5b359d7d5acfa1c7aa00cc7b.html 而后有一个较好的介绍立体匹配的PPT:http://wenku.baidu.com/view/cabedc4bc850ad02de804124.html 下面的内容转载自:http://www.360doc.com/conte

MySniper11的专栏 2万+

立体匹配算法笔记

这部分是我看了奥比中兴一次技术宣讲写的笔记,主要内容就是立体匹配算法的综述,这一篇下来应该来说对立体匹配算法的方方面面都有一个初步的认识了吧. 视频链接:https://mp.weixin.qq.com/s/VGNIxCSGMFR7ZyJ-K6GBrA 文章目录立体匹配的难点立体匹配算法分类局部方法全局方法半全局方法立体匹配流程匹配代价计算代价空间 Cost Volume代价聚合Box FilteringBilateral filterSemi-Global Matching视差计算Winner-Take-

weixin_43796012的博客 1297

立体匹配算法综述

立体匹配算法综述

智能机器人产学研基地 2248

双目视觉立体匹配算法

1.双目立体匹配算法 左右视差 以后再细写。 1.1 立体匹配的流程 摄像机标定(包括内参和外参):直接用matlab标定工具箱即可 双目图像的校正(包括畸变校正和立体校正):立体校正opencv samples里给了案 立体匹配算法获取视差图,以及深度图 SAD/SGBM/BM/GC/ 利用视差图,或者深度图进行虚拟视点的合成 利用分水岭算法或者Grabcut算法进行分割 1.2 最新的...

wbzhang233的博客 3964

立体匹配十大概念综述---立体匹配算法介绍

首先介绍一个很好的简介国外PPT(入门必读以及算法介绍):在我的百度云盘上: http://pan.baidu.com/s/1nu80Pg1 一、概念         立体匹配算法主要是通过建立一个能量代价函数,通过此能量代价函数最小化来估计像素点视差值。立体匹配算法的实质就是一个最优化求解问题,通过建立合理的能量函数,增加一些约束,采用最优化理论的方法进行方程求解,这也是所有的病态

wintergeng的博客 1万+

深入浅出DNS系列(一)- DNS杂谈

黄丝玛:班达山,你好,我记性不好,你告诉我搜狐、新浪的网站IP地址好吗? 班达山:你问问DNS先生吧,他专门干这买卖的

jiangsd198的博客 4129

Verilog仿真必备:FSDB dump命令全解析与实战配置指南

本文深入解析了Verilog仿真中FSDB波形记录的核心命令与实战配置技巧。针对大规模SoC验证场景,详细介绍了如何通过$fsdbDumpvars、$fsdbDumpfile等命令实现信号精准捕获、文件体积控制和动态启停,并提供了智能化的分层dump策略,帮助工程师在保证调试信息完整性的同时,大幅提升验证效率并有效管理波形数据。

cnn8visionary的博客 347

立体匹配算法概述

立体匹配算法 一、立体匹配算法的分类 在立体匹配中,匹配问题可以看成是寻找两组数据相关程度的过程。立体匹配算法由多种分类。 ①根据算法运行时约束的作用范围:分为局部(local)匹配算法和全局(Global)匹配算法。 ②基于生成的视差图:可分为稠密(Dense)匹配和稀疏(Sparse)匹配。稠密匹配:是基于生成的视差图,对于所有像素都能生成确定视差值,称为稠密匹配。稀疏匹配:只选择关键像素点[...

干啥啥不行,但是也要干的博客 4072

UE4项目迁移指南:如何无缝导入外部.uasset文件并保持材质关联

本文详细解析了将外部.uasset文件无缝导入UE4项目的专业方法。针对手动复制文件时常见的材质关联丢失问题,提供了使用引用查看器进行诊断和修复的实用技巧,并推荐使用引擎内置的“迁移”功能确保资源依赖关系的完整性,帮助开发者高效整合项目资源。

t8u9v0的博客 1046

常见的立体匹配算法介绍

1)根据采用图像表示的基元不同,立体匹配算法分为: A、区域立体匹配算法(可获取稠密视差图。缺点:受图像的仿射畸变和辐射畸变影响较大;像素点约束窗口的大小与形状选择比较困难,选择过大,在深度不连续处,视差图中会出现过度平滑现象;选择过小,对像素点的约束比较少,图像信息没有得到充分利用,容易产生误匹配。) B、基于特征的立体匹配算法(可获得稀疏的视差图,经差值估计可获得稠密视差图。可提取点、线、...

opencv_fjc的博客 4935

基于Python+OpenCV中文及符号检测

一、项目背景与意义在图像处理、文档识别、自动翻译等场景中,中文及符号的准确检测是一个重要且复杂的任务。传统的字符检测方法往往对英文等拉丁字母系的识别效果较好,但对中文及特殊符号的识别准确率较低。本项目旨在利用Python编程语言结合OpenCV库,开发一个能够高效、准确地检测图像中中文及符号的系统,为相关领域的研究和应用提供技术支撑。二、技术实现图像预处理:利用OpenCV的图像处理功能,对输入的图像进行灰度化、二值化、滤波去噪等预处理操作,以提高中文及符号检测的准确性[1]。

2301_79809972的博客 1119

LCD驱动芯片——BL55072A驱动程序

初始化子程序: START 0x7C; I2C子地址 0xEA;ICSET,软件复位芯片 0xC0;MODSET,关显示 0xF0;BLKCTL,关闪烁 0xA3;DISCTL,80Hz Line inversion,High Power mode 0xE8;ICSET,清复位bit1 STOP 显示刷新子程序: START 0x7C;I2C子地址 0xF0;BLKCTL,关闪烁 0xA3;DISCTL,80Hz Line inversion,High Power mode 0xE8或0xEC;ICSE

love421的博客 3175

立体匹配算法SGBM

SGBM算法,作为一种全局匹配算法,立体匹配的效果明显好于局部匹配算法,但是同时复杂度上也要远远大于局部匹配算法。 原文链接:https://blog.youkuaiyun.com/renshengrumenglibing/article/details/8525328SGBM的基本原理 SGBM的基本步骤涉及:预处理、代价计算、动态规划以及后处理 预处理 Step1:SGBM采用水平Sob...

qq_36400704的博客 8714

RuoYi-Cloud-Plus使用minio进行文件上传图片后无法预览解决_修改minio配置minio桶权限---SpringCloud工作笔记198

在文件管理的位置,发现刚刚上传的图片文件,会显示 预览图片失败 后来经过多方查看,发现是minio的配置的问题。可以看到首先登录RuoYi-Cloud-Plus系统然后,打开文件管理页面可以看到,当上传了图片文件以后。登录以后,选中左侧Buckets,可以看到有自己用的桶,找到以后点击打开。显示文件展示中,文件预览失败,那么这个时候,去修改minio的配置。可以看到,点击配置管理,这里我们启用的是minio对吧。默认是没有配置的这个时候,是允许下载,但不允许预览的.

添柴程序猿的专栏 5563

立体匹配算法研究

转载请注明出处:http://www.cnblogs.com/adong7639/p/4267326.html http://blog.youkuaiyun.com/real_myth/article/details/44805321  立体匹配算法最新动态: http://vision.middlebury.edu/stereo/eval/ http://

wu_wenhuan的专栏 1652

量化交易之因子分析大全

在机器学习项目中,特征工程是非常重要的。在量化研究中也是如此。本文将量化研究中常用到的特征,也就是因子进行详细收纳,并给出推导公式和实现代码。

夏之微风的博客 2282

【雕爷学编程】Arduino动手做(75)---TTL转RS-485模块之二线制可以实现真正的多点双向通信

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验七十五:TTL转RS-485模块 MAX485 RS485模块 MAX485 是一个8.

雕爷学编程 1万+

立体匹配3——立体匹配算法中的视差优化

本文系统介绍了立体匹配中的视差计算与优化方法。主要内容包括:1. 全局优化算法(图割法、置信度传播、合作优化),通过最小化能量函数实现视差优化,效果好但计算量大;2. 一维优化算法(动态规划、半全局匹配),在扫描线方向优化,效率高但存在水平撕裂问题;3. 局部一致性优化,作为后处理步骤提升精度,结合超像素分割可进一步改善效果。不同方法在精度、速度等方面各有优劣,需要根据应用场景权衡选择。

Marcus1231的博客 1235

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【图像处理基石】立体匹配的经典算法有哪些?

这些算法奠定了立体匹配的理论基础,后续深度学习方法(如GC-Net、PSMNet)多基于经典算法的约束条件(如视差连续性)进行改进。下面是一个基于OpenCV的Python实现,展示了如何使用SIFT特征和RANSAC算法进行立体匹配并计算视差图。先提取图像中的显著特征(如角点、边缘),再对特征点进行匹配,减少计算量但依赖特征质量。利用图像的相位信息(而非幅值)进行匹配,对噪声和光照不敏感,但需多尺度分析。通过构建能量函数并全局优化(如最小化视差不连续代价),获取更平滑的视差图。

专注:太空算力、AI infra、异构调度、大模型成本工程 2752

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

双目视觉测量中有关立体匹配算法之局部立体匹配算法

双目视觉测量中有关立体匹配算法之局部立体匹配算法 局部立体匹配算法大全(操作对象为灰度图) 局部立体匹配算法基本操作流程 ①构建一个类似于卷积核的小窗口。 ②用窗口覆盖左边的图像,选择出窗口覆盖区域内的所有像素点。 ③同样用窗口覆盖右边的图像,并选择出覆盖区域的像素点。 ④左边覆盖区域减去右边覆盖区域,并求出所有像素点差的相关聚合指标。(聚合指标在下文叙述) ⑤找到最小聚合指标值的窗口,即找到最佳...

qq_40234577的博客 1587

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 面试之高斯牛顿和二分求根
下一篇: g2o总结
人间小客
博客等级 码龄8年 253粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值