11. 双目视觉之立体视觉基础

目录

  • 1. 深度恢复
    • 1.1 单目相机缺少深度信息
    • 1.2 如何恢复场景深度?
    • 1.3 深度恢复的思路
  • 2. 对极几何约束
    • 2.1 直观感受
    • 2.2 数学上的描述

1. 深度恢复

1.1 单目相机缺少深度信息

之前学习过相机模型,最经典的就是小孔成像模型。我们知道相机通过小孔成像模型对世界点的观测是缺少深度信息的。我们得到的只是世界点在相机平面上的一个投影。如下图,世界点P只要是在那条红色线上,他在相机上的成像位置就是P‘,所以我们无法知道相机看到的P’对应的世界点的三维位置。
在这里插入图片描述
高博的《视觉SLAM十四讲》中一幅画很形象地说明了这个问题。
在这里插入图片描述
我们人类看到这个照片,也许会想到,这个明显是“近处的人和远处的人”啊。但是从单目视觉的角度来看,它并不能有“近和远”的概念,因为无论那些远处的人是“真人”还是“模型”,他都会给出这么一副图像,从数据的层面来看,他就是给的二维坐标。

1.2 如何恢复场景深度?

那么,我们很容易想到,我们知道了二维坐标,再知道那些场景的深度不就有立体感了吗?
是的,实际操作起来也很简单,再加一个相机,有两个视角看同一个场景,就能通过三角测距来确定场景点的深度。(就像我们的眼睛一样,我们的双眼就是一个完美的立体视觉系统。有人说我一只眼也能分辨出来远近,那是因为我们长久以来积累下来的“经验”让我们有了一些深度的先验信息。)
在这里插入图片描述
我们来假定一种最理想的情况,两个相机焦距相等,成像平面和光轴完美平行,并且其X轴方向也完美对齐,也就是两个相机不存在Y方向的偏移,那么就会如下图:
在这里插入图片描述
成像示意图可以这么画出来:
在这里插入图片描述
我们从上图可以获得一些信息:左右两个相机,他们三个坐标轴都是平行的,且焦距都是f,两者光心的连线定义为基线。两个相机同时观测到世界点P(当然这里没有考虑y,因为两相机在y方向上没有偏移。有偏移的话一样会形成这样的三角关系。)
在这里插入图片描述
根据相似三角形的性质,会有上述公式成立。很容易得出世界点P的深度值Z:
在这里插入图片描述
上面的d=(xl - xr)称为视差,从公式上也能看出,场景点符合近大远小的规则。即,f和b不变,深度z与视差d呈反比。

1.3 深度恢复的思路

通过上面的描述,我们就可以总结出深度恢复的答题思路。

①双目相机标定,标定出相机的焦距f和基线b;
②通过某种方式找到两个相机对同一个场景点观测的匹配关系,这一步一般叫做数据关联,得到视差d;
③根据公式计算深度。

2. 对极几何约束

2.1 直观感受

上面的推导我们也说了是一种理想情况,两个相机三个轴完全平行,上面的两个相机x轴还是重合的。但是我们实际使用双目相机的时候基本不可能做到上述情况。实际一般是下图所示情况:
在这里插入图片描述
做视觉SLAM的朋友肯定对这个对极几何约束非常熟悉。我在这里只把图上符号含义说明一下: O O O为相机光心位置, I I I为相机的成像平面, P P P是世界点, p p p为两相机各自对世界点的观测, l l l为极线, e e e为极点, O 1 O 2 P O_1O_2P O1O2P组成的平面为极平面,极线为极平面与成像平面的交线。

显然,光心和成像平面是固定的,也就是说极点是固定的,基线也是固定的,而世界点们构成的极平面是绕着基线作为轴转动的,这也造成对极线也是以基线为轴在成像平面内移动。
当然,极点不一定都在画面中,比如第一节中提到的理想情况,极点位置就在无穷远处。这种情况叫做极线矫正,后面会详细说。

对极约束说明了这样一个真相:已知左相机的观测点 p 1 p_1 p1,在右相机的成像平面上寻找匹配点,这个匹配点的位置就在极线上。 有了这个约束,我们不必全图范围内去寻找匹配点,而是沿着极线去寻找即可。双目相机观测到的场景中匹配点的关系如下图,途中白线就是极线。
在这里插入图片描述

2.2 数学上的描述

观察对极几何约束的图示,我们重新假设世界点 P P P,在左相机的观测为 P l Pl Pl,在右相机的观测为 P r Pr Pr,则会有如下关系,其中 R R R为两相机的相对旋转, T T T为相对平移。
在这里插入图片描述
我们在等式两侧同时叉乘一个 T T T

在这里插入图片描述
向量和自己叉乘为零,所以有: T T Tx P r = T P_r=T Pr=Tx R P l RP_l RPl
向量叉乘得到以两向量构成平面的法线,所以上式再与 P r P_r Pr点乘得零。
即, P r T ( T P_r^T(T PrT(Tx R P l ) = 0 RP_l)=0 RPl)=0
此时,我们定义 E = T E=T E=Tx R R R,则有, P r T E P l = 0 P_r^TEP_l=0 PrTEPl=0
这就是对极几何约束的数学描述,其中 P l , P r P_l,P_r Pl,Pr为相机成像平面观测的点, E E E为本质矩阵。一般我们会将 P l , P r P_l,P_r Pl,Pr归一化到 z = 1 z=1 z=1的平面上。
当然如果我们使用相机图像像素平面的点来描述对极几何约束,只需在引入一个相机内参,即:在这里插入图片描述
F = K r − T E K l − 1 F=K_r^{-T}EK_l^{-1} F=KrTEKl1,这个 F F F被称为基础矩阵。这个时候的 p l , p r p_l,p_r pl,pr就是像素坐标系上的点了。

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

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

相关文章

力扣LCR 180. 文件组合(双指针)

Problem: LCR 180. 文件组合 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 本题目可以利用滑动窗口的技巧(滑动窗口就是双指针的运用)解决,具体实现如下 1.逻辑上生成窗口:让两个指针i,j分别初始化为1…

Java基本数据类型-字符型,布尔型

目录 字符型转义字符实例运行结果 ASCII码实例运行结果 布尔型实例运行结果 字符型 Java中使用单引号来表示字符常量,字符型在内存中占2个字节。char 类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占2个字节&#…

3DGS 其二:Street Gaussians for Modeling Dynamic Urban Scenes

3DGS 其二:Street Gaussians for Modeling Dynamic Urban Scenes 1. 背景介绍1.1 静态场景建模1.2 动态场景建模 2. 算法2.1 背景模型2.2 目标模型 3. 训练3.1 跟踪优化 4. 下游任务 Reference: Street Gaussians for Modeling Dynamic Urban Scenes 1.…

Linux——常用命令

1、命令的基本格式 对服务器来讲,图形界面会占用更多的系统资源,而且会安装更多的服务、开放更多的端口,这对服务器的稳定性和安全性都有负面影响。其实,服务器是一个连显示器都没有的家伙,要图形界面干什么&#xff…

力扣hot100 字符串解码 栈 辅助栈

Problem: 394. 字符串解码 文章目录 思路💖 辅助栈 思路 👨‍🏫 路飞 💖 辅助栈 ⏰ 时间复杂度: O ( n ) O(n) O(n) 🌎 空间复杂度: O ( n ) O(n) O(n) class Solution {public String decodeString(String s…

MCU启动文件小解一下

GD32启动文件分析 启动文件的一些指令.s启动文件分析栈空间分配堆空间管理中断向量表定义堆空间定义Reset_Handler复位程序HardFault_Handler_main文件分析用户堆栈初始化 GD32启动文件主要做了以下工作: 初始化SP_initial_sp , PCReset_Handler指针,设置…

C#,计算几何,随机点集之三角剖分的德劳内(Delaunay)算法的源代码

一、三角剖分Delaunay算法简介 点集的三角剖分(Triangulation),对数值分析(比如有限元分析)以及图形学来说,都是极为重要的一项预处理技术。尤其是Delaunay三角剖分,由于其独特性,关…

day04 两两交换链表中的节点、删除链表倒数第N个节点、链表相交、环形链表II

题目链接:leetcode24-两两交换链表中的节点, leetcode19-删除链表倒数第N个节点, leetcode160-链表相交, leetcode142-环形链表II 两两交换链表中的节点 基础题没有什么技巧 解题思路见代码注释 时间复杂度: O(n) 空间复杂度: O(1) Go func swapPairs(head *Li…

class_19:抽象类(纯虚函数不能被实例化)

#include <iostream>using namespace std;class Teacher{ public:string name;string school;virtual void goinclass() 0;//纯虚函数不能被实例化 抽象类virtual void startclass() 0;//纯虚函数不能被实例化virtual void afterclass() 0;//纯虚函数不能被实例化 };…

Android App开发-简单控件(4)——按钮触控和图像显示

3.4 按钮触控 本节介绍了按钮控件的常见用法&#xff0c;包括&#xff1a;如何设置大小写属性与点击属性&#xff0c;如何响应按钮的点击事件和长按事件&#xff0c;如何禁用按钮又该如何启用按钮&#xff0c;等等。 3.4.1 按钮控件Button 除了文本视图之外&#xff0c;按钮…

IMXULL驱动学习——通过总线设备驱动模型点亮野火开发板小灯【参考韦东山老师教程】

参考&#xff1a;【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想&#xff08;学习设备树过渡部分&#xff09;-CSDN博客 韦东山课程&#xff1a;LED模板驱动程序的改造_总线设备驱动模型 我使用的开发板&#xff1a;野火imx6ull pro 欢迎大家一起讨论学习 实现了总线设…

【探索科技 感知未来】文心一言大模型

【探索科技 感知未来】文心大模型 &#x1f6a9;本文介绍 文心一言大模型是由中国科技巨头百度公司研发的一款大规模语言模型&#xff0c;其基于先进的深度学习技术和海量数据训练而成。这款大模型具备强大的自然语言处理能力&#xff0c;可以理解并生成自然语言&#xff0c;为…

leetcode hot100岛屿数量

本题中要求统计岛屿数量&#xff08;数字1的上下左右均为1&#xff0c;则是连续的1&#xff0c;称为一块岛屿&#xff09;。那么这种类型题都是需要依靠深度优先搜索&#xff08;DFS&#xff09;或者广度优先搜索&#xff08;BFS&#xff09;来做的。这两种搜索&#xff0c;实际…

蓝牙----蓝牙GAP层

蓝牙协议栈----GAP GAP的角色连接过程连接参数 GAP&#xff1a;通用访问配置协议层 gap的角色发现的模式与过程连接模式与过程安全模式与过程 CC2640R2F的GAP层抽象 GAP的角色 Broadcaster 广播电台 -不可连接的广播者。Observer 观察者 -扫描广播者但无法启动连接。Periphe…

降低文件增长和失真的零系数JPEG图像可逆信息隐藏

一、研究概述和意义 随着多媒体技术和网络的迅猛发展&#xff0c;数字媒体的应用越来越广泛。在网络上传输的数字 媒体如音频、文本、视频和图像的内容及数据安全问题也随之而来。伴随着计算机技术发展与普及&#xff0c;数字媒体的机密性、完整性经常受到非法活动的威胁&…

vue中的computed

目录 一&#xff1a;介绍 二&#xff1a;例子演示 一&#xff1a;介绍 在 Vue.js 中&#xff0c;computed 属性是一种特殊类型的属性&#xff0c;它允许你声明依赖于其他数据属性的值。computed 属性的值是通过一个函数计算得出的&#xff0c;这个函数可以在其依赖的数据发生…

深入理解stressapptest

文章目录 一、概述二、安装2.1、源码编译安装2.2、命令行安装2.3、安装确认三、重要参数详解3.1、查询支持的参数3.2、参数说明 四、实例4.1、随机测试&#xff08;默认模式&#xff09;4.2、循环测试4.2、全内存测试 团队博客: 汽车电子社区 一、概述 stressapptest是一款免费…

HCIA-HarmonyOS设备开发认证-2.设备开发入门

目录 HarmonyOS设备开发学习路径一、开发项目与工具介绍1.1、设备开发环境准备1.2、设备开发流程1.3、Huawei DevEco Device Tool 二、OpenHarmony介绍OpenHarmony目录结构详细介绍applications目录详解base目录详解foundation目录详解 OpenHarmony接口分层介绍CMSIS 和 POSIX …

[每日一题] 01.27 - 斐波那契数列

文章目录 打分斐波那契数列 打分 n int(input()) lis list(map(int,input().split())) a sum(lis) - min(lis) - max(lis) print(round(a / (n - 2),2))斐波那契数列 n int(input()) res [] for i in range(n):res.append(int(input()))Max max(res) lis [1,1] for i in…

nodejs学习计划--(七)express框架

express框架 1. express介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架&#xff0c;官方网址&#xff1a;https://www.expressjs.com.cn/ 简单来说&#xff0c;express 是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发 WEB …