Active Stereo Without Pattern Projector论文精读

1.背景补充

主动立体相机和被动立体相机的主要区别在于它们获取立体视觉信息的方式

主动立体相机12:

  • 主动立体视觉是指寻找最佳的视角去重建目标或者场景1。
  • 主动视觉的实现方式通常有:改变环境中的光照条件、改变相机的视角、移动相机自身位置等,其目的是提高感知结果的质量1。
  • 主动立体视觉还包括没有先验的场景信息去主动识别或是跟踪,存在与环境的交互1。
  • 结构光法采用主动投射已知图案的方法来实现匹配特征点,达到较高的精度,同时也扩展了适用范围2。

被动立体相机134:

  • 被动视觉是指观察者不主动调整观测场景或者自身的参数1。
  • 被动立体需要用到两台投影机,是因为被动立体需要同时投放出不同角度的影像,分别输入人体的左右眼球,让人看到的是立体影像4。
  • 被动式立体视觉要求被测物体有纹理特征,对于一些没有纹理特征的,可以辅助一些特征,例如散斑等,人为造一些纹理特征5。

2.框架思想

VPP框架的主要思想是根据双目几何和深度传感器的测量,在左右图像上虚拟投影一个与场景一致的图案,使得对应的像素在两个图像中更加相似和区分度更高【 可以增强两幅图像中两个像素的视觉外观,使它们尽可能相似,尽可能与邻居不同 】,就像有一个虚拟的智能投影仪在场景中发射信号一样。

在左右图像上虚拟投影一个与场景一致的图案的主要目的是增强双目相机的视觉对应问题。在双目视觉中,我们需要找到左右图像中相同物体的对应像素,这是立体匹配的关键步骤。然而,由于照明、纹理、颜色等因素的影响,找到正确的对应关系可能是一个挑战。

通过在左右图像上虚拟投影一个与场景一致的图案,我们可以使对应的像素在两个图像中更加相似,从而提高立体匹配的准确性。同时,这种方法也可以增加像素的区分度,使得不同的像素在图案上有不同的表现,从而减少匹配的歧义性。

根据本文框架处理后得到的目标和参考图,下一步可以进行立体匹配的步骤如下:

  • 选择一个合适的立体匹配算法或网络,例如传统的半全局匹配(Semi-Global Matching, SGM)[27],或者基于深度学习的PSMNet [8],RAFT-Stereo [41]等。
  • 将虚拟投影后的目标和参考图作为输入,计算每个像素的视差(disparity),即左右图像中对应点的水平偏移量。视差与深度(depth)有反比关系,即视差越大,深度越小,表示物体离相机越近。
  • 根据视差图和已知的相机参数(如焦距和基线距离),将视差转换为深度,得到稠密的深度图。深度图可以用来进行三维重建,场景理解,增强现实等应用。

本文框架的优势在于,通过虚拟投影,可以增强图像的局部区分性,减少匹配的歧义性,提高立体匹配的准确性和鲁棒性。本文框架还可以处理遮挡区域,避免在前景和背景之间投影相同的模式,从而降低误匹配的风险。本文框架不依赖于特定的物理投影器,因此可以在任何环境和距离下工作,也不会受到阳光等干扰。本文框架还可以与现有的立体匹配方法结合使用,无需对原有的算法或网络进行大幅修改或重新训练。
在这里插入图片描述

3.虚拟投影原理

Such a disparity value represents the offset needed to obtain the location along the same epipolar line of the corresponding point IR(x′, y) in the target image with x′ = x − d(x, y).

如何根据深度值计算两幅图像中对应点的位置。它假设了一个已经校准的立体相机,也就是说,两个相机的图像是在同一水平线上的。它用了以下的公式:

d(x,y)=b⋅f/z(x,y)

其中,

  • d(x,y) 是视差,也就是左右图像中对应点的水平距离;

  • b 是相机的基线,也就是两个相机中心的距离;

  • f 是相机的焦距;

  • z(x,y) 是左图像中点 (x,y) 的深度值。

根据这个公式,我们可以得到右图像中对应点的横坐标 x′,它等于左图像中的横坐标 x 减去视差 d(x,y),即:

x′=x−d(x,y)

这样,我们就可以在同一水平线上找到两幅图像中的对应点,从而进行立体匹配。

在这里插入图片描述

4.不同的虚拟图案的生成策略

为了正确地产生幻觉并简化匹配,对应的点应该尽可能相似,因此提出了两种增强策略:随机模式和基于直方图的模式

随机模式

直接从均匀分布中随机采样算子A

基于直方图的模式

如何使用直方图来选择图像中的颜色模式。首先,对于参考图像中的点 (x, y),我们在它和目标图像中的点 (x’, y) 上分别考虑一个高度为3,长度为L的窗口。然后,计算这两个窗口上的直方图,并将它们相加。

接下来,算子 A(x, x’, y) 会选择使得直方图中的距离最大的颜色。

这个距离是通过函数 hdist(i) 来计算的,它返回填充的直方图柱子中距离最小的一个。具体来说,对于直方图中的每一个颜色 i,hdist(i) 的计算公式为:

hdist(i)={min{∣i−il∣,∣i−ir∣},il∈[0,i[:H(il)>0,ir∈]i,255]:H(ir)>0

其中,il 和 ir 分别是颜色 i 左边和右边的填充柱子。

如果直方图 H 中的每一个柱子都被填充了,那么就选择出现次数最少的颜色。这样,我们就可以根据直方图来选择图像中的颜色模式了。

选择使得直方图中的距离最大的颜色原因: 是为了保证选取的颜色具有足够的区分度。在图像处理中,我们希望选取的颜色能够尽可能地反映出图像的特征。如果选择的颜色在直方图中的距离较小,那么这个颜色可能就无法有效地区分图像中的不同区域。而如果选择的颜色在直方图中的距离较大,那么这个颜色就能够更好地反映出图像的特征,从而提高图像处理的效果。

5. 处理遮挡的区域

由于立体设置中不可避免地存在遮挡区域,即使假设深度传感器与参考相机完全对齐,我们也可能无法在两个视图上一致地投影图案,如下图左边部分【点P被参考相机和深度传感器框住到那时由于鸭子的遮挡,导致目标相机并不能正确投影P】所示。

1. BKGD策略

至关重要的是检测撞击被遮挡区域的点,以避免在参考图像和目标图像上分别在被遮挡像素和遮挡像素上投影相同的图案。

深度点被分类为被遮挡是通过一个简单而有效的启发式方法来实现的。

具体来说,将(x, y)点的视差d扭曲(映射)到坐标(x’, y)处的一个类似于网格的结构W中。

如果出现碰撞 - 即,多个d映射到同一位置(x’, y) - 则保留最大的d。然后,W中的每个点(xo, yo)如果满足以下不等式,就被分类为被遮挡,至少对于一个在rx × ry补丁内的邻居W(x, y):

其中,λ, γ, rx, ry, t是超参数。最后,被遮挡的点被反向映射回来,得到一个遮挡掩码o。这就是深度点如何被分类为被遮挡的。这个过程可以帮助我们避免在参考图像和目标图像上投影相同的模式,从而减少在遮挡处的模糊性。

"BKGD"指的是处理立体成像中的遮挡的一种策略。

当一个深度点被分类为被遮挡时,系统可以避免在参考图像和目标图像上投影相同的模式,分别在被遮挡和遮挡像素上。这被称为"NO"投影策略。然而,"BKGD"投影策略涉及到在前景(在目标图像中)和背景(在参考图像中)上投影相同的模式,这可能会增加遮挡处的模糊性。在"NO"和"BKGD"策略之间的选择取决于立体成像任务的具体要求。

当深度点被分类为遮挡时,我们可以忽略在参考和目标图像上的投影(“NO”投影策略)。然而,"BKGD"投影策略涉及在前景(在目标图像中)和背景(在参考图像中)上投影相同的模式。这可能会增加遮挡处的模糊性,因为在遮挡和遮挡像素上投影了相同的模式。

如下图所示

在这里插入图片描述

2. FGD策略

FGD:这种策略中,我们避免在参考图像和目标图像上进行投影,而是将参考图像中的原始内容替换为目标图像中的内容。

这并不改变前景(源自Q的光线)上正确匹配的外观【对点Q的虚拟投影关系并不会变】,但会刺激立体匹配器建立与目标图像中的同一点(x’,y)的第二个对应关系,即与源自P的像素(x,y)的对应关系。

此外,参考图像的左边界上的点会在目标图像外部投影模式。尽管这对于传统的算法来说是无关紧要的,但我们仍然在那里进行投影,以避免深度立体网络的预测中出现伪影。

在这里插入图片描述

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

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

相关文章

利用 LD_PRELOAD劫持动态链接库,绕过 disable_function

目录 LD_PRELOAD 简介 程序的链接 动态链接库的搜索路径搜索的先后顺序: 利用LD_PRELOAD 简单的劫持 执行id命令 反弹shell 引申至 PHP 绕过disable_function 方法1:使用蚁剑的扩展工具绕过disable_function 方法2:利用 mail 函数…

电磁兼容EMC理论基础汇总

目录 0. 序言 1. EMC的基础介绍 1.1 EMC电磁兼容的定义 1.2 EMC的重要性 1.3 EMC的三要素 2. 库仑定律 3. 趋肤效应与趋肤深度 4. 电阻抗公式 4.1 电阻 4.2 容抗 4.3 感抗 4.4 电路元件的非理想性 5. 麦克斯韦方程组 5.1 高斯磁定律 5.2 高斯定律 5.3 法拉…

Appwidget开发基本介绍

本篇主要对appwidget开发进行简单介绍,为后续漏洞挖掘相关做前置铺垫 appwidget简介 官方解释如下: 应用微件是可以嵌入其他应用(如主屏幕)并接收定期更新的微型应用视图。这些视图称为界面中的微件,您可以使用应用微…

软件工程精品课程教学网站的设计与实现

系统功能需求分析 本系统要求采用Browser/Server模式设计开发,可以作为一般高等院校的网络学堂;可以为教师的辅助教学或者网络教学提供一个完善的教学网站;学生可以利用本教学网站来完成一些课程的学习任务。 2.2.1 功能划分 《软件工程》教学…

Sakila数据库和World数据库

Sakila数据库和World数据库 安装MySQL8.2的时候多出两个样例数据库 Sakila数据库和World数据库 Sakila数据库是一个关于DVD租赁的样例数据库,用于展示MySQL的各种功能和特性。Sakila数据库中包含了多个表,包括电影、演员、客户、租赁记录等,可…

Oracle(2-6) Backup and Recovery Overview

文章目录 一、基础知识1、Categories of Failures 故障类别2、Causes of Statement Failures 语句失败的原因故障情况Resolutions 决议 3、User Process Failures 用户进程失败故障情况Resolutions 决议 4、Possible User Errors 用户错误类型故障情况Resolutions 决议 5、Inst…

实验6 二叉树操作

0x01 实验目的 掌握二叉树的基本概念,二叉树的存储结构使用链表。 0x02 实验内容 输入一个完全二叉树的层次遍历字符串,创建这个二叉树,输出这个二叉树的前序遍历字符串、中序遍历字符串、后序遍历字符串、结点数目、二叉树高度(上述每一个…

计算UDP报文CRC校验的总结

概述 因公司项目需求,遇到需要发送带UDP/IP头数据包的功能,经过多次尝试顺利完成,博文记录以备忘。 环境信息 操作系统 ARM64平台的中标麒麟Kylin V10 工具 tcpdump、wireshark、vscode 原理 请查看大佬的博文 UDP伪包头定义&#x…

MQ - 消息系统

消息系统 1、消息系统的演变 在大型系统中,会需要和很多子系统做交互,也需要消息传递,在诸如此类系统中,你会找到源系统(消息发送方)和 目的系统(消息接收方)。为了在这样的消息系…

数据结构和算法-哈夫曼树以相关代码实现

文章目录 总览带权路径长度哈夫曼树的定义哈夫曼树的构造法1法2 哈夫曼编码英文字母频次总结实验内容: 哈夫曼树一、上机实验的问题和要求(需求分析):二、程序设计的基本思想,原理和算法描述:三、调试和运行…

Matter学习笔记(3)——交互模型

一、简介 1.1 交互方式 交互模型层定义了客户端和服务器设备之间可以执行哪些交互。发起交互的节点称为发起者(通常为客户端设备),作为交互的接收者的节点称为目标(通常为服务器设备)。 节点通过以下方式进行交互&a…

Spring Initial 脚手架国内镜像地址

官方的脚手架下载太慢了,并且现在没有了Java8的选项,所以找到国内的脚手架镜像地址,推荐给大家。 首先说官方的脚手架 官方的脚手架地址为: https://start.spring.io/ 但是可以看到,并没有了Java8的选项。 所以推荐…

3dMax拼图生成工具Puzzle2D使用教程

Puzzle2D for 3dsMax拼图生成工具使用教程 Puzzle2D简介: 2D拼图随机生成器(英文:Puzzle2D) ,是一款由#沐风课堂#用MAXScript脚本语言开发的3dsMax建模小工具,可以随机创建2D可编辑样条线拼图图形。可批量…

【tensorflow学习-选择动作】 学习tensorflow代码调用过程

a actor.choose_action(s) def choose_action(self, s):s s[np.newaxis, :]return self.sess.run(self.action, {self.s: s}) # get probabilities for all actions输入:s 输出:self.sess.run(self.action, {self.s: s}) :a

解决:UnboundLocalError: local variable ‘js’ referenced before assignment

解决:UnboundLocalError: local variable ‘js’ referenced before assignment 文章目录 解决:UnboundLocalError: local variable js referenced before assignment背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使…

实战案例:chatglm3 基础模型多轮对话微调

chatglm3 发布了,这次还发了base版本的模型,意味着我们可以基于这个base模型去自由地做SFT了。 本项目实现了基于base模型的SFT。 base模型 https://huggingface.co/THUDM/chatglm3-6b-base由于模型较大,建议离线下载后放在代码目录&#…

OSG编程指南:专栏内容介绍及目录

1、专栏介绍 OpenSceneGraph(OSG)场景图形系统是一个基于工业标准 OpenGL 的软件接口,它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。本专栏基于 OSG 3.6.5版本进行源码的编写及扩展,也通用于其他OSG版本的…

OpenTelemetry系列 - 第2篇 Java端接入OpenTelemetry

目录 一、架构说明二、方式1 - 自动化2.1 opentelemetry-javaagent.jar(Java8 )2.2 使用opentelemetry-javaagent.jar完成自动注入2.3 配置opentelemetry-javaagent.jar2.4 使用注解(WithSpan, SpanAttribute)2.5.1 代码集成WithS…

【栈和队列(2)】

文章目录 前言队列队列方法队列模拟实现循环队列练习1 队列实现栈 前言 队列和栈是相反的,栈是先进后出,队列是先进先出,相当于排队打饭,排第一的是最先打到饭出去的。 队列 队列:只允许在一端进行插入数据操作&…