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 函数…

Python批量图像处理--图片重命名、图片旋转

图像批量重命名: 使用batch_rename_images函数实现对多个文件夹下面的图片进行重命名操作 先检查文件名的后缀,使用了.endswith()方法来判断文件名是否以.jpg、.png或.JPG结尾,判断是否为图片文件 然后构造新的文件路径new_filepath&#…

电磁兼容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简介 官方解释如下: 应用微件是可以嵌入其他应用(如主屏幕)并接收定期更新的微型应用视图。这些视图称为界面中的微件,您可以使用应用微…

MySQL学习day04(一)

DQL学习(Data Query Language数据查询语言) DQL-语法: select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件别表 order by 排序字段列表 limit 分页参数 基本查询条件查询(where)…

打板选股的方法

打板选股是一种短线投资策略,主要通过观察和分析股票的涨停板情况来进行选股。以下是一些常用的打板选股方法: 首板选股:在市场开盘后,迅速查看所有股票的涨停情况,找出第一个涨停的股票。这种方法需要投资者有较强的市…

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

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

Sakila数据库和World数据库

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

二叉树k层的叶子结点个数

文章目录 1 题目2 思路2.1 思路12.2 思路2 3 代码实现3.1 思路13.2 思路23.3 完整的代码案例 1 题目 假设二叉树采用二叉链表存储结构,设计一个算法求其指定的第k层(k>1,跟是第1层)的叶子结点个数。 2 思路 2.1 思路1 设置…

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…

关于Maxscript你了解多少?

MAXScript是Autodesk 3dMax的内置脚本语言。MAXScript为3dMax用户提供了以下功能: 编写程序使用的大部分方面的脚本,如建模、动画、材质、渲染等。 通过命令行侦听器窗口以交互方式控制程序。 在自定义实用工具面板卷展栏或无模式窗口中打包脚本&…

MQ - 消息系统

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

力扣二叉树--第三十七天

前言 废话不多说,能学到东西!功不唐捐! 内容 一、二叉搜索树的最小绝对差 530. 二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等…

JAVA代码优化:Spring中redis的工具类

基于Spring框架和Redis的缓存工具类。该类提供了一系列方法用于操作Redis缓存,包括设置缓存对象、设置缓存超时时间、获取缓存对象、删除对象、缓存List、Set、Map等操作。通过这些方法可以方便地对Redis进行数据缓存和读取操作。同时,该类使用了Spring的…

【PyTorch】数据集

文章目录 1. 创建数据集1.1. 直接继承Dataset类1.2. 使用TensorDataset类 2. 数据集的划分3. 加载数据集4. 将数据转移到GPU 1. 创建数据集 主要是将数据集读入内存,并用Dataset类封装。 1.1. 直接继承Dataset类 必须要重写__getitem__方法,用于根据索…

【代码随想录算法训练营-第二天】【数组】977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

977.有序数组的平方 看完思路后一遍AC 思路剖析: 因为提到了时间复杂度为O(n),自然想到只能遍历一遍又因为只规定了时间复杂度,但是没有规定空间复杂度,所以可以考虑在定义一个数组【这一步没有考虑出来,是看了思路的…

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

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