【理论恒叨】【立体匹配系列】经典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

相关文章

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py