基于python实现的SGM半全局立体匹配算法

news2024/11/20 14:33:25

文章目录

  • 前言
  • 一、SGM是什么?
    • 1.代价计算
    • 2.代价聚合
    • 3.视察计算
    • 4.视察优化
  • 二、基于python实现SGM算法?
  • 总结


前言

  开始正是入门立体匹配算法啦,会不断更新立体匹配的算法和代码。
  水平有限,旨在先了解和读懂别人的代码的实现方式,和大家交流互相学习,自己用代码实现的话,…emmm…水平有限,可能还有点困难,大家一起努力呀。
参考文章:计算机视觉方向简介 | 半全局匹配SGM
    【理论恒叨】【立体匹配系列】经典SGM:(1)匹配代价计算之互信息(MI)
    【立体匹配】Stereo Processing by Semiglobal Matching and Mutual Information(SGM)

一、SGM是什么?

  SGM原文下载链接:Stereo Processing by Semiglobal Matching and Mutual Information
  SGM算法是Heiko Hirschmu¨ller提出的半全局匹配算法,是一种介于局部匹配与全局匹配之间的匹配算法,一方面高效率的局部算法由于所基于的局部窗口视差相同的假设在很多情况下并不成立导致匹配效果较差;而另一方面全局算法虽然通过二维相邻像素视差之间的约束(如平滑性约束)而得到更好的匹配效果,但是对内存的占用量大,速度慢。其较好的中和了局部匹配和全局匹配的优缺点,在精度和效率上有较好的平衡。

1.代价计算

  SGM采用的是基于互信息匹配代价(MI,Mutual Information)。互信息是一种对影像明暗变化不敏感的相关性测度,它通过两张影像各自的熵H 以及两者的联合熵来定义,熵代表影像的信息量,是基于灰度的概率分布所得到的统计量,图像的熵越大代表包含的像素灰度越丰富,灰度分布越均匀。
  基于互信息的匹配代价计算公式:
在这里插入图片描述

2.代价聚合

  由于代价计算步骤只考虑了局部的相关性,对噪声非常敏感,无法直接用来计算最优视差,所以SGM算法通过代价聚合步骤,增加一个额外的约束,通过惩罚临近视差的变化来保证平滑。
在这里插入图片描述
  C为匹配代价,公式的第一项是数据项,表示当视差图为D时,所有像素的匹配代价的累加,第二项和第三项是平滑项,表示对像素p 的Np邻域内的所有像素q进行惩罚,其中第二项惩罚力度较小(P1较小),对相邻像素视差变化很小的情况(1个像素)进行惩罚;第三项惩罚力度较大(P2>P1),对相邻像素视差变化很大(大于1个像素)的情况进行惩罚。
  为了保护真实场景中的视差非连续情况,P2 往往是根据相邻像素的灰度差来动态调整。
在这里插入图片描述
  上式中能量函数的最优化是一个NP问题,故而SGM提出了一个思路,即将像素所有视差下的匹配代价进行像素周围所有路径(比如8或者16)上的一维代价聚合,然后再将所有的一维代价聚合值相加,以近似二维的最优,这不仅可以取得和全局算法相媲美的结果,还大大的增加了效率。
在这里插入图片描述
  论文中16个方向上的代价聚合。
在这里插入图片描述

3.视察计算

  在SGM算法中,视差计算采用赢家通吃(WTA)算法,每个像素选择最小聚合代价值所对应的视差值作为最终视差,视差计算的结果是和左影像相同尺寸的视差图,存储每个像素的视差值。
在这里插入图片描述

4.视察优化

  视差优化则是对计算得到的视差图进行进一步的优化,包括剔除粗差,亚像素插值,平滑等等。比如经常使用的左右一致性检查,可用来剔除遮挡点所产生的错误匹配,对视差图的改进比较大。

二、基于python实现SGM算法?

  借鉴github上大佬的SGM实现算法,已经整理好,直接替换图片就可以运行啦!
点击下载 :基于python实现的SGM半全局立体匹配算法
在这里插入图片描述
在这里插入图片描述

总结

  看了相关文章,只能怪自己数学功底太弱,手撕SGM生不如死。。。。。

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

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

相关文章

3D立体匹配入门 - 视差计算

经典假设 1、左右视图成功匹配的窗口,具有相同的像素 这个是最经典的假设,几乎所有视差图计算都用上了他,通过匹配左右窗口像素,得到最佳匹配对应的x轴坐标差,就是视差 2、像素P的视差只与其领域有关 这个是基于马尔…

外汇天眼:即使与世界第一的差价合约提供商交易也会被骗!

你能想象,当你与世界第一的差价合约提供商进行交易时,也可能会被骗吗? 在投资理财多元化的今天,外汇投资理财也备受大家的关注,而与此同时,骗子的诈骗渠道也与时俱进,各类外汇投资骗局也层出不穷…

VMware Workstation 17.0 Pro SLIC Unlocker for Linux

VMware_Dell_2.6_BIOS-EFI64_Mod;macOS Unlocker,支持 macOS Ventura 请访问原文链接:VMware Workstation 17.0 Pro SLIC & Unlocker for Windows & Linux,查看最新版。原创作品,转载请保留出处。 作者主页&a…

多模式直方图的视网膜图像增强

论文题目:Retinal Image Enhancement in Multi-Mode Histogram 1 摘要 视网膜图像的评估被广泛用于帮助医生诊断许多疾病,如糖尿病或高血压。从采集过程来看,视网膜图像往往具有较低的灰度对比度和动态范围。本文提出了一种基于直方图分析的…

MySQL回表

1.索引结构 1.1.B-Tree(B树)和BTree(B树) 前面是B-Tree,后面是BTree,两者的区别在于: B-Tree中,所有的节点都会带有指向具体记录的指针;BTree中只有叶子节点才会带有指向具体记录的指针;B-Tree中,不同的叶子之间没有连在一起;BTree中所有的叶子节点通过指针连接在一起;B-Tree中…

java版商城之 Spring Cloud+SpringBoot+mybatis+uniapp b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案?以下是我结合公司的产品做的总结,希望可以帮助到大家! 搜索体验小程序:海哇 1. 涉及平台 平台管理、商家端(PC端、手机端)、买…

浴室预约小程序毕业设计,洗澡预约澡堂预约系统设计与实现,微信小程序毕业设计论文怎么写毕设源码开题报告需求分析怎么做

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序浴室预约系统,前台用户使用小程序,后台管理使用JavaMysql开发,后台使用了springboot框架;通过后台添加设定浴室类型、录入浴室和管理浴室、管理…

CTPN+CRNN算法端到端实现文字识别的实战开发

本文分享自华为云社区《CTPNCRNN 算法端到端实现文字识别》,作者:HWCloudAI。 OCR介绍 光学字符识别(英语:Optical Character Recognition,OCR)是指对文本资料的图像文件进行分析识别处理,获取…

Java规则引擎Drools急速入门

文章目录1.Drools规则引擎简介2.Drools API开发步骤3.SpringBoot整合Drools案例4.Drools基础语法5.Drools条件语法部分6.Drools结果操作部分7.Drools内置属性部分8.Drools高级语法部分1.Drools规则引擎简介 (1)什么是规则引擎 ​ 全称为业务规则管理系…

类与对象(上篇)

类与对象面向过程和面向对象类的引入类的定义类的访问限定符及封装访问限定符封装类的作用域类的实例化类对象类对象的存储方式类成员函数的this指针this指针的引出this指针的特性面向过程和面向对象 C语言是面向过程,注重的是过程,先分析求解问题的步骤…

【计算机视觉】目标检测中Faster R-CNN、R-FCN、YOLO、SSD等算法的讲解(图文解释 超详细必看)

觉得有帮助请点赞关注收藏~~~ 一、基于候选区域的目标检测算法 基于候选区域的深度卷积神经网络(Region-based Convolutional Neural Networks)是一种将深度卷积神经网络和区域推荐相结合的物体检测方法,也可以叫做两阶段目标检测算法。第一…

Web大学生网页作业成品——环保垃圾分类网站设计与实现(HTML+CSS+JavaScript) web前端开发技术 web课程设计 网页规划与设计

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

RFID标签让企业海量固定资产实现科学化管理

近年来,随着物联网、IoT、移动技术、云计算技术的成熟,越来越多的企业开始使用RFID标签管理企业海量的固定资产。优化固定资产标准化管理流程,有效管理和库存固定资产,进一步提高企业实物资产管理和库存效率。 包括资产申购、验收…

【操作系统】计算机大脑CPU

1.CPU组成机构和存储器层级 (1)CPU是计算机硬件系统的核心部件-大脑 结构:运算器控制器(两个部件里面有寄存器组)通过CPU内部的总线进行通信 (2)单核CPU架构 控制器Control Unit简称【CU】 …

Python使用Opencv图像处理方法完成手势识别(二)

Opencv完成手势识别根据坐标识别寻找最低点计算其他点与最低点的距离通过距离阈值判断手指根数和手势效果展现完整代码当我们把手近似出来后会得到一组轮廓的点坐标,我自己手势识别的思路就是根据点坐标来判断手势。根据坐标识别 寻找最低点 所谓寻找最低点&#…

浅谈Nacos注册中心集群分布式架构设计

前言 Nacos的压测性能是非常好的,这里是Nacos官方的压测报告。3节点(CPU 16核,内存32G)规模集群,压测容量服务数可达60W,实例注册数达110W,集群运行持续稳定,达到预期;注册/查询实例TPS达到 13…

ModStartBlog v6.3.0 任务调度重构,UEditor 升级

系统介绍 ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场,后台一键…

跨设备链路聚合 M-LAG

M-LAG(Multichassis Link Aggregation Group)即跨设备链路聚合组,是一种实现跨设备链路聚合的机制,如下图所示,将SwitchA和SwitchB通过peer-link链路连接并以同一个状态和Switch进行链路聚合协商,从而把链路…

学校介绍静态HTML网页设计作品 DIV布局学校官网模板代码 DW大学网站制作成品下载 HTML5期末大作业

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

iOS app上架app store流程详解​

前提条件​ 在有效期内的苹果开发者账号(类型为个人或者公司账号)。还有一种情况,就是你的Apple ID被添加到公司开发者账号团队里面,这样也是可以的,但是需要叫管理员给你开通相应的账号权限,如下截图&…