基于python的AD-census立体匹配算法实现

news2024/11/19 5:55:30

文章目录

  • 前言
  • 一、AD-census是什么?
    • 1.代价计算
    • 2.代价聚合
    • 3.视差优化
    • 4.视差后处理
  • 二、基于python的AD-census立体匹配算法实现


前言

  AD-Census算法来自于中国学者Xing Mei等在ICCV2011发表的论文《On Building an Accurate Stereo Matching System on Graphics Hardware》,其主要优点是有效兼顾并行速度和精度两点。
原文链接:On Building an Accurate Stereo Matching System on Graphics Hardware
参考文章:
《On Building an Accurate Stereo Matching System on Graphics Hardware》
双目立体匹配算法:ADCensus概述
论文阅读《On Building an Accurate Stereo Matching System on Graphics Hardware》(AD Census-双目立体匹配)


一、AD-census是什么?

  AD-Census是一个将局部算法和半全局算法相结合的算法,它包含四个步骤:代价计算(cost initialization):绝对差AD+Census变换算法、代价聚合(cost aggregation):动态十字交叉域、视差优化(disparity computation):扫描线视差优化、后处理(refinement):多步后处理操作。

1.代价计算

  AD-Census代价计算结合了AD法和Census法(关于AD和census代价计算的方法大家可以参考李博的文章【理论恒叨】【立体匹配系列】经典AD-Census: (1)代价计算)AD法在重复纹理区域比Census法表现更好,Census法在弱纹理区域比AD法表现更好,而AD-Census法在两种场景下都是表现最好的。如下为AD-census的代价计算公式,两个算法的结果尺度并不一样,AD的结果是亮度差,范围是[0,255],而Census是比特串对应位值不相同的个数,范围为[0,N](N等于比特串的位数,一般是32位或者64位)。因此,需要通过归一化,将两者的结果归一化到相同的范围区间。
在这里插入图片描述

2.代价聚合

  AD-Census采用改进的十字交叉域构造进行代价聚合,基于颜色相似度和空间接近度对每个像素计算十字臂的长度,为了在无纹理区域和深度不连续区域获得更好的结果。在交叉构建步骤之后,像素 p 的窗口区域通过合并位于 p 垂直臂(例如 q)上的所有像素的水平臂来建模。获得十字交叉域后,进行代价聚合,原始的聚合策略是第一遍横向汇总匹配成本并存储中间结果; 然后第二遍垂直聚合中间结果以获得最终成本,这个过程迭代2-4次。改进的聚合策略是第一次和第三次先水平聚合,再垂直聚合,第二次和第四次,先垂直聚合再水平聚合,两种聚合方式的十字交叉区域不一样,这样能够提高大的无纹理区域和深度不连续区域的精度。

在这里插入图片描述
  十字交叉域构建过程中,颜色差异阈值 τ \tau τ和最长臂长阈值 L 起着决定性作用,在大的弱纹理区域,需要使用更大的 L和 τ \tau τ值来得到邻域中更多的信息的像素,让结果更稳健 ,但简单增大 L 和 τ \tau τ会在视差非连续区域带来更多的噪声。基于此,AD-Census改进的规则如下(以左臂延伸为例):改进后的规则可以避免臂的延伸穿过边缘像素,同时使弱纹理有更长的臂同时又不会让所有像素的臂过长。
在这里插入图片描述

3.视差优化

  AD-Census学习了SGM的代价聚合方式,想要进一步提高代价的准确性,减少匹配错误(在SGM中此步骤称为代价聚合),优化的方向为4个方向,左右上下。这里李博讲的很明白啦。【理论恒叨】【立体匹配系列】经典AD-Census: (3)扫描线优化(Scanline Optimization)
在这里插入图片描述
在这里插入图片描述
  AD-Census所做的修改在于P1和P2值的设定方式。P1,P2不只是和左视图的相邻像素颜色差D1 = Dc ( p , p − r )
有关,而且和右视图对应同名点的相邻像素颜色差D2 =Dc (pd,pd−r)有关。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.视差后处理

(1)Outlier Detection离群点检测
  离群点检测就是左右一致性检查,将不匹配点分为遮挡区域(occlusion region)和误匹配区域(mismatch region)。
(2)Iterative Region Voting迭代局部投票
在这里插入图片描述

(3)Proper Interpolation(视差填充)
  对于保留下来的无效像素p,在一定范围内沿周围16个方向搜索最近的可靠像素的视差值:对于遮挡区域像素p,选择所有搜索到的可靠像素的视差中最小的值(因为遮挡像素一般在背景,背景离相机远,也就是视差小)。对于误匹配像素p,在搜索到的可靠像素的集合中选择和p颜色最相近的像素的视差赋值给p。
(4)Depth Discontinuity Adjustment视差非连续区调整
  此步的目的是进一步优化视差非连续区域的视差值。首先,会对视差图做一个边缘检测,对于边缘上的像素 p ,记其视差值为D(p),记录其左右两边像素 p1 、p2的视差值DL ( p1 ) 、DL ( p2 ) 。如果DL ( p1 ) 、DL ( p2 )中存在一个视差值赋给像素 p 后的匹配代价比 p pp 原先的匹配代价C2(p,Dp)更小,则把D(p )替换成该视差值。
  其实就是对边缘上的像素值进行微调,选择左右两边使其代价更小的那个视差值。
(5)Sub-pixel Enhancement子像素优化
  子像素优化用一元二次拟合。
在这里插入图片描述

二、基于python的AD-census立体匹配算法实现

参考博主:ADCensus立体匹配算法(Python)的代码
修改如下部分就可以运行啦!
在这里插入图片描述
运行结果如下:
在这里插入图片描述
大家可以直接根据大佬的GitHub下载,这里就不放链接啦!

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

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

相关文章

多类型随机图形生成方法及应用研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

Linux-5 基础命令

Linux-5 基础命令 查看类命令 此类命令仅能查看文件中的内容 ls是用来查看目录中的内容cat是用来查看文件中的内容 查看文件 cat 选项 -n:显示文件内容的行数-A:显示文件中的特殊字符(如果从Windows拷贝配置文件到Linux,很容易出…

化学试剂Biotin-PEG-COOH,Biotin-PEG-acid,生物素-聚乙二醇-羧基

英文名称:Biotin-PEG-COOH,Biotin-PEG-acid 中文名称:生物素-聚乙二醇-羧基 生物素-PEG-COOH是一种含有生物素和羧酸的线性杂双功能PEG试剂。它是一种有用的带有PEG间隔基的交联或生物结合试剂。生物素能以高特异性和亲和力与亲和素和链霉亲…

C++:STL:常用容器(上):string

1:string容器 1.1 string基本概念 本质: string是C风格的字符串,而string本质是一个类 string和char* 区别 1:char* 是一个指针 2:string是一个类,类内部封装了 char* 管理这个字符串,是一个 …

5G无线技术基础自学系列 | 5G网络接入问题分析

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G网络的接入失败或者接入时延过大都会…

实现安卓LED设备驱动:不写一行代码

文章目录一、前言二、准备工作2.1 内核版本2.2 内核文档:bindings->leds2.3 文档解析: leds-gpio.txt三、编写DTS3.1 查原理图,挑选GPIO3.2 编写DTS文件四、编译测试4.1 编译dt.img4.2 烧录dt.img五、基于fs的测试5.1 测试命令5.2 **点灯效…

将单向链表按照目标值value 划分成左边小,中间等,右边大的形式,给定一个单链表,判断单链表的值是否是回文结构【图文解释包你看懂】

将单向链表按照目标值value 划分成左边小,中间等,右边大的形式 例如 1 -> 3 -> 5-> 3 -> 7 按照value 3划分 1-> 3-> 3 -> 5 -> 7 解题思路:给定值为 value 用6个变量,分别表示 小于value 的Head sH &…

2023年天津中德应用技术大学专升本专业课考试具体安排及准考证

2023年天津中德应用技术大学高职升本科专业课考试准考证下载及考生须知 一、准考证下载打印 12月24日12点开始,专业课报名审核通过的考生,登录学校专业课报名系统(114.115.135.236/jobgroup/f),点击“准考证”&#xf…

Qt之悬浮球菜单

一、概述 最近想做一个炫酷的悬浮式菜单,考虑到菜单展开和美观,所以考虑学习下Qt的动画系统和状态机内容,打开QtCreator的示例教程浏览了下,大致发现教程中2D Painting程序和Animated Tiles程序有所帮助,如下图所示&a…

Java反射面试题

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java面试题…

科技交流英语(2022秋)Unit 6 test

科技交流英语(2022秋)Unit 6 test 简介 由电子科技大学组织开设,授课教师为李京南、庞慧、刘兆林等5位老师。 课程介绍 英语广泛用于工程技术领域的国际交流。如何使用简洁的语言清楚地传递信息是工程师在国际舞台上常常面临的问题。本课…

【Vue】Vue重写教室管理系统的前端网页V1(前后端分离)--20221222

项目说明 目的 练习并熟悉Vue2 的API,来为Vue项目做准备: 插值语法插槽props和data父子组件通信Ajax异步请求数据生命周期函数methods方法computed属性vue-router、路由守卫、query/params传参、编程函数式路由模拟后端服务器传送数据打包项目 需要加…

Tableau可视化设计案例-06Tableau填充地图,多维地图,混合地图

文章目录Tableau可视化设计案例06 填充地图,多维地图,混合地图1.填充地图1.1 各省售电量填充地图 地图格式设置2.多维地图2.1 各省售电量多维地图3.混合地图3.1 各省售电量混合地图Tableau可视化设计案例 本文是Tableau的案例,为B站视频的笔…

如何花最少的资源遍历二叉树

文章目录一、递归遍历二叉树1.1 前序遍历1.2 中序遍历1.3 后序遍历二、非递归遍历二叉树2.1 前序遍历2.2 中序遍历2.3 后序遍历三、高效的 Morris 遍历3.1 前序遍历3.2 中序遍历3.3 后序遍历关于二叉树的遍历也是面试过程中非常有可能考的话题。常见的简单的递归遍历二叉树&…

头条号权重高有什么优势?头条权重在线查询

头条号权重是根据你的关键词排名、预估流量等综合评估计算出的一个"权重值",关键词指数越大,排名越好,预估的流量就越多,权重也就越高。 如果是查询头条号权重较少,可以看看这3个方法: 1、指…

flutter 环境搭建

一、简介 Flutter 是谷歌开发的一款开源、免费的,基于 Dart 语言的U1框架,可以快速在i0S和Android上构建高质量的原生应用。 它最大的特点就是跨平台和高性能。Dart是由谷歌,在2011 年开发的计算机编程语言,它可以被用于Web、服务器、移动应…

腾讯云轻量应用服务器安装和配置宝塔 Linux 面板腾讯云专享版

宝塔 Linux 面板腾讯云专享版由腾讯云与堡塔公司联合开发,专享版在已支持普通版所有功能的基础上,还默认集成腾讯云对象存储、文件存储、内容分发网络和 DNS 解析插件。插件具备如下功能: 支持将对象存储的存储桶挂载到轻量应用服务器实例&a…

IDEA技巧:如何根据注释生成swagger注解

相信大家在进行java项目开发,肯定会接触到swagger的,一款动态生成api文档的神奇,只需要在api上面加上注解,就可以生成文档,现在我简单介绍下swagger的快速入门,最后再说下如何根据注释快速生成这些烦人的注…

(模板)矩阵乘法:斐波那契数列问题

在数学上,斐波那契数列以如下被以递推的方法定义: F(1)1,F(2)1, F(n)F(n-1)F(n-2)(n>3,n∈N*)。 由以上推理公式,可以求得任何一项的斐波那契数列值。 弊端:斐波那…

UI自动化测试-pytest框架

在进行UI自动化测试的时候,我们需要工具来对测试用例进行收集,执行,标记,参数化。pytest就是这样一个工具。 pytest实际是python的一个单元测试框架,其他还有如unittest等,它可以实现按照规则搜索测试用例…