【理论恒叨】【立体匹配系列】经典SGM:(4)视差计算、视差优化

2024-02-24 23:10

本文主要是介绍【理论恒叨】【立体匹配系列】经典SGM:(4)视差计算、视差优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

理论恒叨系列

【理论恒叨】【立体匹配系列】经典SGM:(1)匹配代价计算之互信息(MI)
【理论恒叨】【立体匹配系列】经典SGM:(2)匹配代价计算之Census变换
【理论恒叨】【立体匹配系列】经典SGM:(3)代价聚合(Cost Aggregation)
【理论恒叨】【立体匹配系列】经典SGM:(4)视差计算、视差优化

【理论恒叨】【立体匹配系列】经典SGM:(4)视差计算、视差优化

    • 视差计算
    • 视差优化
      • 剔除错误匹配
      • 提高视差精度
      • 抑制噪声


视差计算


  在SGM算法中,视差计算采用赢家通吃(WTA)算法,每个像素选择最小聚合代价值所对应的视差值作为最终视差,视差计算的结果是和左影像相同尺寸的视差图,存储每个像素的视差值,在影像内外参数已知的情况下,视差图可以转换为深度图,表示每个像素在空间中的位置,图1为双目立体像对的真实视差图示意图。

图1 双目立体像对及左影像真实视差图示意图

  如图2所示,某个像素的所有视差下的代价值中,选择最小代价值所对应的视差作为最优视差。这一步非常简单,这意味着聚合代价矩阵S的值必须能够准确的反映像素之间的相关性,也表明上一步代价聚合步骤是立体匹配中极为关键的步骤,直接决定了算法的准确性。

图2 赢家通吃算法示意图

视差优化


  视差优化的目的是为了对通过视差计算得到的视差图进行进一步的优化处理,剔除错误视差,提高视差精度,使视差值更可靠、更精确。

剔除错误匹配

  错误匹配直观的反应是聚合后某些像素在真实视差位置的代价值并非最小值,有很多因素能够造成这一现象的产生,如影像噪声、遮挡、弱纹理或重复纹理,以及算法的局限性。实际上目前还没有哪个算法能够完美的处理以上所有问题,所以错误匹配的剔除对所有算法都是有必要的。目前最常用的错误匹配剔除方法是左右一致性法(L-R Check),它基于视差的唯一性约束,即每个像素最多只存在一个正确视差。具体步骤是将左右影像互换位置,即左影像成为右影像,右影像成为左影像,再做一次立体匹配,得到另一张视差图,因为视差图中每个值所反映的是两个像素之间的对应关系,所以依据视差的唯一性约束,通过左影像的视差图,找到每个像素在右影像的同名点像素及该像素对应的视差值,这两个视差值之间的差值若小于一定阈值(一般为1个像素),则满足唯一性约束被保留,反之则不满足唯一性约束而被剔除。一致性检查的公式如式1所示:

式1 LR-Check

图3 一致性检查示意图

  除一致性检查之外,剔除小连连通区(Remove Peaks)、唯一性检测(Uniqueness Check)也是常用的剔除错误视差的方法,可以结合使用。

  剔除小连连通区(Remove Peaks)是指剔除掉视差图中连通的极小块区域,同一个连通区内的视差与邻域视差之差小于设定阈值(一般为1)。

  唯一性检测(Uniqueness Check)是指对每个像素计算最小代价和次最小代价的值,若两者相对差小于一定阈值,则被剔除。

if ((SecMin-Min)/Min < T) {disparity = invalid;
}

提高视差精度

  提高视差精度采用子像素优化技术,因为视差计算得到的视差图是整像素精度,在很多应用中都无法满足精度要求,SGM采用二次曲线内插的方法获得子像素精度,对最优视差的代价值以及前后两个视差的代价值进行二次曲线拟合,曲线的极值点所对应的视差值即为新的子像素视差值,如图4所示。

图4 二次曲线拟合计算子像素视差

抑制噪声

  为了抑制噪声,小窗口(通常为3x3)的中值滤波(Median Filter)是常用的算法。双边滤波(Bilateral Filter)也比较常用,能够较好的保持边缘精度,效率较中值滤波低。

码上教学系列

【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(1)框架与类设计
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(2)代价计算
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(3)代价聚合
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(4)代价聚合2
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(5)视差优化
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(6)视差填充
【恒叨立码】【码上实战】【立体匹配系列】经典SGM:(7)弱纹理优化

完整代码已发布于Github开源项目:Github/SemiGlobalMatching,欢迎免费下载

博主简介:
Ethan Li 李迎松
武汉大学 摄影测量与遥感专业博士

主方向立体匹配、三维重建

2019年获测绘科技进步一等奖(省部级)

爱三维,爱分享,爱开源
GitHub: https://github.com/ethan-li-coding
邮箱:ethan.li.whu@gmail.com

个人微信:

欢迎交流!

喜欢博主的文章不妨关注一下博主的博客,感谢!
博客主页:https://blog.csdn.net/rs_lys

这篇关于【理论恒叨】【立体匹配系列】经典SGM:(4)视差计算、视差优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/743670

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc