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

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.mfbz.cn/a/17740.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全国快递物流 API 实现快递单号自动识别的原理解析

概述 全国快递物流 API 是一种提供快递物流单号查询的接口,涵盖了包括申通、顺丰、圆通、韵达、中通、汇通等600快递公司的数据。该 API 的目标是为快递公司、电商、物流平台等提供便捷、快速、准确的快递物流信息查询服务。 数据采集和处理 全国快递物流 API 的…

自定义控件 (?/N) - 颜料 Paint

参考来源 一、颜色 1.1 直接设置颜色 1.1.1 setColor( ) public void setColor(ColorInt int color) paint.setColor(Color.RED) paint.setColor(Color.parseColor("#009688")) 1.1.2 setARGB( ) public void setARGB(int a, int r, int g, int b) paint.se…

Packet Tracer – 研究 VLAN 实施

Packet Tracer – 研究 VLAN 实施 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 S1 VLAN 99 172.17.99.31 255.255.255.0 不适用 S2 VLAN 99 172.17.99.32 255.255.255.0 不适用 S3 VLAN 99 172.17.99.33 255.255.255.0 不适用 PC1 NIC 172.17.10.2…

数字化转型导师坚鹏:数字化转型背景下的企业人力资源管理

企业数字化转型背景下的企业人力资源管理 课程背景: 很多企业存在以下问题: 不清楚企业数字化转型目前的发展阶段与重要应用? 不知道企业数字化转型给企业人力资源管理带来哪些机遇与挑战? 不知道企业数字化转型背景下如何…

SQL注入攻防入门详解

毕业开始从事winform到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下,希望大家多多提意见。 (对于…

系统集成项目管理工程师 下午 真题 及考点(2020年下半年)

文章目录 2020年下半年试题一:第10章 项目质量管理,规划质量管理过程的输入试题二:第9章 项目成本管理,典型:EAC ACETC AC(BAC-EV)/CPI BAC/CPI试题三:第18章 项目风险管理&#x…

吴恩达ChatGPT网课笔记Prompt Engineering——训练ChatGPT前请先训练自己

吴恩达ChatGPT网课笔记Prompt Engineering——训练ChatGPT前请先训练自己 主要是吴恩达的网课,还有部分github的prompt-engineering-for-developers项目,以及部分自己的经验。 一、常用使用技巧 prompt最好是英文的,如果是中文的prompt&am…

【网站架构】Nginx 4层、7层代理配置,正向代理、反向代理详解

大家好,欢迎来到停止重构的频道。 本期我们讨论网络代理。 在往期《大型网站 安全性》介绍过,出于网络安全的考虑,一般大型网站都需要做网络区域隔离,以防止攻击者直接操控服务器。 网站系统的应用及数据库都会放在这个网络安全…

【Python习题集6】类与对象

类与对象 一、实验内容二、实验总结 一、实验内容 1.设计一个Circle类来表示圆,这个类包含圆的半径以及求面积和周长的函数。在使用这个类创建半径为1~10的圆,并计算出相应的面积和周长。 半径为1的圆,面积: 3.14 周长: 6.28 半径为2的圆&am…

云原生介绍

本博客地址:https://security.blog.csdn.net/article/details/130540430 一、云原生的概念 云原生的整体概念思路是三统一,即统一基础平台、统一软件架构、统一开发流程。 基于统一的基础平台、软件架构以及开发流程,数字化转型和云化转型能…

详解:搭建常见问题(FAQ)的步骤?

许多的Web用户都更加偏向于可信赖的FAQ页面,以此作为快速查找更多信息的方法。因为用户时间的紧缺,并且想知道产品的功能和能够提供的服务。构造精巧的FAQ页面是提供人们寻求信息的绝妙方法,而且还可以提供更多的信息。这就是为什么FAQ页面对…

Chrome远程调试

最近接触到Chrome远程调试相关内容,记录一下。 场景:使用Chrome远程调试Chromium。当能够控制目标主机执行命令之后,可以在该主机上建立全局代理,然后在自己这一边开启浏览器监听,接着在目标机器上执行 chrome.exe --…

3.13 结构体嵌套、大小及位域

目录 结构体嵌套结构体 结构体的大小 位域 结构体嵌套结构体 含义 结构体中的成员可以是另一个结构体 语法 struct 结构体名 { struct 结构体名 成员名; }; 结构体中共同的变量可以单独放出来,单独封装一个结构体 结构体的大小 字节对齐 含义 …

Bark:基于转换器的文本到音频模型

Bark是由Suno创建的一个基于转换器的文本到音频模型。Bark可以生成高度逼真的多语言语音以及其他音频,包括音乐、背景噪音和简单的音效。该模型还可以产生非语言交流,如大笑、叹息和哭泣。为了支持研究社区,我们正在提供对预先训练的模型检查…

【c语言】字符串的基本概念 | 字符串存储原理

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

【Java EE】-博客系统(前端页面)

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 分享: 且视他人如盏盏鬼火&#xff0c;大胆地去走你的道路。——史铁生《病隙碎笔》 主要内容&#xff1a;博客系统 登陆页面&#xff0c;列表页面&#xff0c;详情页…

AArch32 AArch64 Registers map详细解析与索引

1、AArch32 Registers AArch32 系统寄存器索引。 例如第一个寄存器ACTLR点击后解析如下&#xff1a; 2、AArch64 Registers AArch64 系统寄存器索引。 3、AArch32 Operations AArch32 系统指令索引。 例如第一个寄存器ACTLR_EL1点击后解析如下&#xff1a; 4、AArch…

Inception模型实现孤立手语词的识别

实现孤立手语词的识别流程如下&#xff0c;在实际研究中&#xff0c;本章将着重研究第三阶段内容&#xff0c;也就是模型的设计与实现过程&#xff0c;目的是提高手语图像的识别准确率。 Inception模型实现 Inception模型是谷歌研究人员在2014年提出的一个深度卷…

一文把 JavaScript 中的 this 聊得明明白白

文章目录 1.this 是什么&#xff1f;2.this的指向2.1 全局上下文的 this 指向2.2 函数&#xff08;普通函数&#xff09;上下文中的 this 指向2.3 事件处理程序中的 this 指向2.4 以对象的方式调用时 this 的指向2.5 构造函数中的 this 指向2.6 在 类上下文中 this 的指向。2.7…

84.python input输入函数知识拓展

文章目录 1. input函数知识回顾2. input常犯错误解析3. 用函数转换从终端输入的数据3.1 输入的数为整数&#xff0c;则用int转换为整数3.2 输入的数为浮点数&#xff0c;则用float转换为浮点数3.3 不考虑输入的数据类型&#xff0c;则用eval函数转换 4. 变量的多种赋值方式4.1 …
最新文章