【OpenCV】 2D-2D:对极几何算法原理

news2024/9/20 6:00:22

2D-2D匹配: 对极几何

SLAM十四讲笔记1

1.1 对极几何數學模型对极几何 Epipolar Geometry

考虑从两张图像上观测到了同一个3D点,如图所示**。**我们希望可以求解相机两个时刻的运动 R , t R,t R,t

假设我们要求取两帧图像 I 1 , I 2 I_1,I_2 I1,I2之间的运动,设第一帧到第二帧的运动为R ,t,两个相机中心分别为 O 1 , O 2 O_1,O_2 O1,O2.考虑 I 1 I_1 I1中有一个特征点 p 1 p_1 p1,它在 I 2 I_2 I2中对应着特征点 p 2 p_2 p2.连线$\overrightarrow{O_1 p_1} 和 和 \overrightarrow{O_2 p_2}$ 在三维空间中交于点P,这时点 O 1 , O 2 , P O_1 ,O_2,P O1,O2,P三个点可以确定一个平面,为极平面. O 1 , O 2 O_1,O_2 O1,O2连线与像平面 I 1 , I 2 I_1,I_2 I1,I2的交点分别为 e 1 , e 2 e_1,e_2 e1,e2, e 1 , e 2 e_1,e_2 e1,e2称为极点, O 1 O 2 O_1O_2 O1O2称为基线,极平面与两个像平面 I 1 , I 2 I_1,I_2 I1,I2之间的相交线 l 1 , l 2 l_1,l_2 l1,l2称为极线.

P P P I 1 I_1 I1下的线号机坐标为 P = [ X , Y , Z ] T P=[X,Y,Z]^{T} P=[X,Y,Z]T,两个投影像素点 p 1 , p 2 p_1,p_2 p1,p2 的像素位置满足如下公式:
{ s 1 p 1 = K P s 2 p 2 = K ( R P + t ) \left\{ \begin{aligned}s_1p_1 =KP\\ s_2p_2=K(RP+t)\\ \end{aligned} \right. \\\\ {s1p1=KPs2p2=K(RP+t)
p 1 , p 2 p_1,p_2 p1,p2 的归一化坐标 { x 1 = K − 1 p 1 x 2 = K − 1 p 2 \left\{\begin{aligned} x_{1} =K^{-1}p_1\\ x_{2} =K^{-1}p_2\\ \end{aligned}\right. {x1=K1p1x2=K1p2

x 1 , x 2 x_1,x_2 x1,x2是两个像素归一化平面上的坐标。代入上式,得到 x 2 = R x 1 + t x_2=Rx_1 +t x2=Rx1+t

同时左乘 t ∧ t^{ ∧ } t可得:
t ∧ x 2 = t ∧ R x 1 t^{ ∧ }x_2=t^{ ∧ }Rx_1 tx2=tRx1
同时左乘 x 2 T x^{T}_2 x2T,可得
x 2 T t ∧ x 2 = x 2 T t ∧ R x 1 x^{T}_2t^{ ∧ }x_2=x^{T}_2t^{ ∧ }Rx_1 x2Ttx2=x2TtRx1
可得
x 2 T t ∧ R x 1 = 0 x^{T}_2t^{ ∧ }Rx_1=0 x2TtRx1=0
重新带入 p 1 , p 2 p_1,p_2 p1,p2,可得:
p 2 T K − T t ∧ R K − 1 p 1 = 0 p_2^{T}K^{-T}t^{ ∧ }RK^{-1}p_1=0 p2TKTtRK1p1=0
以上俩个式子称为对极约束,定义基础矩阵F和本质矩阵E,可以进一步简化对极约束:
E = t ∧ R F = K − T E K − 1 x 2 T E x 1 = p 2 T F p 1 = 0 E=t^{ ∧ }R \quad \quad \quad F=K^{-T}EK^{-1}\quad \quad \quad x^{T}_2Ex_1=p_2^{T}Fp_1=0 E=tRF=KTEK1x2TEx1=p2TFp1=0
本质矩阵E 的求解
考虑到E 的尺度等价性,可以用8对点来估计E,是为八点法.

对于一对匹配点,其归一化坐标 x 1 = [ u 1 , v 1 , 1 ] , x 2 = [ u 2 , v 2 , 1 ] x_1=[u_1,v_1,1],x_2=[u_2,v_2,1] x1=[u1,v1,1],x2=[u2,v2,1]根据对极约束,有
( u 1 , v 1 , 1 ) [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] [ u 2 v 2 1 ] = 0 (u_1,v_1,1)\left[ \begin{matrix} e_1 &e_2 &e_3\\e_4 &e_5 &e_6 \\e_7 &e_8 &e_9 \end{matrix} \right]\left[ \begin{matrix} u_2\\v_2\\1\end{matrix} \right]=0 (u1,v1,1) e1e4e7e2e5e8e3e6e9 u2v21 =0

把矩阵E展开为向量 [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] T \left[ \begin{matrix} e_1 &e_2 &e_3 &e_4 &e_5 &e_6 &e_7 &e_8 &e_9 \end{matrix} \right]^{T} [e1e2e3e4e5e6e7e8e9]T ,对极约束可以写成与e ee有关的线性形式:
[ u 1 u 2 , u 1 v 2 , u 1 , v 1 u 2 , v 1 v 2 , v 1 , u 2 , v 2 , 1 ] T . e = 0 [u_1u_2,u_1v_2,u_1,v_1u_2,v_1v_2,v_1,u_2,v_2,1]^{T}.e=0 [u1u2,u1v2,u1,v1u2,v1v2,v1,u2,v2,1]T.e=0
把八对点对应的 x 1 , x 2 x_1,x_2 x1,x2分别代入方程中,得到线性方程组:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K9n4lOEh-1629730544222)(../AppData/Roaming/Typora/typora-user-images/1629650165462.png)]

求得E后,对E进行SVD分解以求取R,t :设E的SVD分解为 E = U ∑ V T E=U \sum V^T E=UVT则对应的R ,t 分别为:
t ∧ = U R Z ( π 2 ) ∑ U T R = U R Z T ( π 2 ) ∑ V T t^{∧} =U R_Z(\frac{\pi}{2})\sum U^T \quad \quad R=U R^{T}_Z(\frac{\pi}{2})\sum V^T t=URZ(2π)UTR=URZT(2π)VT
其中 R Z ( π 2 ) R_Z(\frac{\pi}{2}) RZ(2π)表示沿Z轴旋转90°得到的旋转矩阵.

1.2 对极几何讨论

对极几何的讨论:

    1. 尺度不确定性: 2D图像不具有深度信息,这导致了单目视觉的尺度不确定性. 实践中设t 为单位1,计算相机运动和和特征点的3D位置,这被称为单目SLAM的初始化.

    2. 退化问题:当特征的共面或者相机发生纯旋转时,基础矩阵的自由度下降,就出现所谓的退化。实际中数据总是包含一些噪声,这时候继续使用八点法求解基础矩阵,基础矩阵多余出来的自由度将会主要由噪声决定。

      为了可以避免退化现象造成的影响,通常在估计基础矩阵F的同时会求解单应矩阵H,选择重投影误差比较小的那个作为最终的运动估计矩阵。

    3. 初始化的纯旋转问题: 若相机发生纯旋转,导致t 为零,得到的E也将为零,会导致我们无从求解R.因此单目初始化不能只有纯旋转,必须要有一定程度的平移.

    4. 多于8对点的情况:

      对于八点法,有 A e = 0 Ae=0 Ae=0,其中A为一个8×9的矩阵.

      若匹配点的个数多于8个,A的尺寸变化,上述方程不成立.因此转而求取最小化二次型
      m i n e ∣ ∣ A e ∣ ∣ 2 2 = m i n e e T A T A e min_e||Ae||^2_2=min_e e^TA^TAe mine∣∣Ae22=mineeTATAe
      是为最小二乘意义下的E矩阵.

      1.3 E/F的意义

      基础矩阵F描述了三维空间点P在摄像机不同方位下成像得到的投影像素点之间的关系。
      本质矩阵E描述 相邻图像上对应像素归一化平面上的,估计相机在两个位置的相对运动。

1.4 SVD(奇异值分解)是一种常用的矩阵分解方法,其特点包括:

可以将任何矩阵分解成三个部分:左奇异矩阵、右奇异矩阵和奇异值矩阵。

  1. 奇异值矩阵是一个对角矩阵,其中的元素称为奇异值。奇异值是非负实数,代表着矩阵在每个主方向上的“重要程度”。

  2. 左奇异矩阵和右奇异矩阵都是正交矩阵。这意味着它们的转置矩阵等于它们的逆矩阵,所以可以用于矩阵的变换和逆变换。

  3. SVD 分解可以用于数据降维、噪声滤波、图像压缩等领域,具有广泛的应用价值。

  4. 对于奇异值较小的部分可以进行截断操作,这可以有效地减少数据的维度并去除噪声。

  5. SVD 分解是一种数值稳定的算法,能够处理大部分类型的矩阵并且不容易出现数值不稳定的情况。

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

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

相关文章

MiniGPT-4部署过程

文章目录 项目背景部署过程环境配置与文件准备部署推理报错1报错2 项目背景 2023年4月19日,开源项目MiniGPT-4发布,该项目是由KAUST(沙特阿卜杜拉国王科技大学),是几位博士开发的。 项目地址:https://gith…

Spark大数据处理讲课笔记3.4 理解RDD依赖

文章目录 零、本讲学习目标一、RDD依赖二、窄依赖(一)map()与filter()算子(二)union()算子(三)join()算子 三、宽依赖(一)groupBy()算子(二)join()算子&#…

字符设备驱动

字符设备就是按字节流进行读写的设备,读写数据分先后顺序,如点灯,IIC,SPI,LCD等都是字符设备,这些设备的驱动就叫字符设备驱动。 include/linux/fs.h中 file_operations 结构体为内核驱动操作函数集合&…

如何关闭tomcat?tomcat端口号被占用怎么办

我tomcat一跑就报被占用怎么办?我没开tomcat呀!! 这种情况一般是你上一次打开tomcat没有关tomcat服务就关闭了变成软件(如强行关闭正在运行tomcat的idea),这样你在开tomcat就会显示端口号占用了&#xff0…

API 渗透测试从入门到精通系列文章(上)

导语:这是关于使用 Postman 进行渗透测试系列文章的第一部分。 这是关于使用 Postman 进行渗透测试系列文章的第一部分。我原本计划只发布一篇文章,但最后发现内容太多了,如果不把它分成几个部分的话,很可能会让读者不知所措。 所…

SMOKE Single-Stage Monocular 3D Object Detection via Keypoint Estimation 论文学习

论文地址:SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation Github 地址:https://github.com/open-mmlab/mmdetection3d/tree/main/configs/smoke 1. 解决了什么问题? 预测物体的 3D 朝向角和平移距离对于自动驾…

hive之入门配置

学习hive之路就此开启啦,让我们共同努力 目录 Hive网站: Hive的安装部署: 启动并使用Hive: 安装Mysql: 安装Mysql依赖包: 启动Mysql: 查看密码: 登录root: 密码错误报错: 元数据库配置…

信创国产中间件概览

信创国产中间件概览 中间件国内中间件市场份额第一梯队仍然是IBM> 和Oracle,市场份额合计51%。第二梯队为五大国产厂商,包括东方通、普元信息、宝兰德、中创中间件、金蝶天燕,市场份额合计15%。东方通应用服务器TongWeb对标 开源&#xf…

人脸检测和行人检测3:Android实现人脸检测和行人检测检测(含源码,可实时检测)

人脸检测和行人检测3:Android实现人脸检测和行人检测检测(含源码,可实时检测) 目录 人脸检测和行人检测3:Android实现人脸检测和行人检测(含源码,可实时检测) 1. 前言 2. 人脸检测和行人检测数据集说明 3. 基于YOLOv5的人脸检…

Databend 开源周报第 91 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 新数据类型&…

【Robot Framework】RF关键字大全

收录工作当中最常用的Robot Framework关键字 内容较多,可以CtrlF快速搜索自己想要的 1. RF循环使用(FOR循环) {list1} create list LOG TXT INI INF C CPP JAVA JS CSS LRC H ASM S ASP FOR ${file_type} IN {list1} log 构造请求参数 ${t…

第二十二章 解释器模式

文章目录 前言一、解释器模式基本介绍解释器模式的原理类图 二、通过解释器模式来实现四则运算完整代码抽象表达式类 Expression变量表达式类 VarExpression抽象运算符号解析器 SymbolExpression加法解释器 AddExpression减法解释器 SubExpression计算器类 CalculatorClint 测试…

【C++】仅需一文速通继承

文章目录 1.继承的概念及定义继承的概念继承的定义定义格式:继承关系和访问限定符继承基类成员访问方式的变化 2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数题目:设计出一个类A,让这个类不能被继承(继承了也没用) 5.继承与友元6.继承与静态成员7.复杂的菱…

VK Cup 2017 - Round 1 A - Bear and Friendship Condition(并查集维护大小 + dfs 遍历图统计边数)

题目大意: 给你一些n个点m条边,如果三个点(a,b,c)是合法的,当且仅当 a-b,b-c,c-a都有一条边,问你这个图是否合法,如果有一个或两个点视为合法 思路 考虑什么图才是个合法图:除了点…

Spring 更简单的读取和存储对象

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 前面介绍了通过配置文件的方式来存储 Bean 对象,那么有没有更简单的方式去存储 Bean 对象? 有以下 2 种方…

【论文】LearningDepth from Single Monocular Images

2005 NIPS 文章目录 特征提取卷积核的使用Multiscale 多尺度提取特征特征的相对深度 模型结论特征提取数据集导致的error 文章使用了Markov 随机场(Markov Random Fields, MRF) 从单图像上直接估计出图像的深度信息。 与RGBD输入数据不同的是,文章中采用了YCbCr数据…

知识点总结-DAY1

1. 请解释OSI模型中每一层的作用 应用层:为用户提供服务,处理应用程序之间交换的数据。 表示层:处理数据在网络上的表示形式,如加密和解密、压缩和解压缩等。 会话层:建立、维护和终止两个节点之间的会话&#xff0c…

安全防御 --- IPSec理论

IPSec 1、概述: 是IETF(Internet Engineering Task Force)制定的一组开放的网络安全协议,在IP层通过数据来源认证、数据加密、数据完整性和抗重放功能来保证通信双方Internet上传输数据的安全性。 IPSec安全服务 机密性完整性…

雨季时,骑行经过泥泞路段该怎么办?

泥泞路段骑行是一项需要技巧和勇气的挑战。在泥泞路段骑行,骑友又叫玩泥巴,不仅需要良好的车技和身体素质,还需要有足够的经验和判断力,以应对各种突发情况。下面,将从多个角度介绍泥泞路段骑行的挑战和技巧&#xff0…

宏观经济笔记--社会消费品零售总额

我们讨论了GDP的三个分项:投资、消费、净出口。投资我们前面已经介绍了,消费这一个分项我们还一直没有讨论。消费最重要的数据是每个月月中统计局公布的社会消费品零售总额。 一般的论调中,认为消费是三个GDP驱动项中最健康的一项&#xff0…