基础矩阵和本质矩阵

基础矩阵(Fundamental Matrix)和本质矩阵(Essential Matrix)是计算机视觉和立体视觉中极为重要的几何概念,它们分别描述了两个不同视点(通常是双目相机或连续拍摄的两张图像)下的点对之间的几何关系。

基础矩阵(Fundamental Matrix, F)

基础矩阵 F 是一个 3x3 的矩阵,它描述了在两个不同视点下观测到的同名点对之间的约束关系。在理想情况下,一对共轭的图像点(即立体匹配成功找到的对应点对)必须满足如下关系:

p 2 T F p 1 = 0 p_2^T F p_1 = 0 p2TFp1=0

其中 ( p 1 ) ( p_1 ) (p1) ( p 2 ) ( p_2 ) (p2)分别是左、右相机图像上的齐次坐标点。基础矩阵 F 由两幅图像的相对运动参数(旋转和平移)确定,但不包含相机的内参数(如焦距、主点等)。它有七个自由度,因此,至少需要提供至少包含四个对应点对的数据才能唯一确定一个基础矩阵。

本质矩阵(Essential Matrix, E)

本质矩阵 E 是基础矩阵的一个特殊情况,专门用于双目相机或多视图立体视觉的情况。本质矩阵同样是一个 3x3 的矩阵,但它是在知道相机内参数(焦距、主点坐标相同且相机光轴平行)的基础上定义的。本质矩阵描述的是两个相机光心连线(基线)和三维空间中同名点构成的平面之间的关系。

本质矩阵由相对姿态(旋转矩阵 R 和平移向量 t)派生而来,具体形式可以表示为:

E = [ t ] × R E = [t]_\times R E=[t]×R

其中, ( [ t ] × ) ([t]_\times) ([t]×)是一个由平移向量 t 衍生出的反对称矩阵。

本质矩阵有五个自由度,因为它不包含相机的尺度信息,且受到旋转向量 r 的正交约束(r 的长度固定为单位长度)。与基础矩阵相似,通过至少四对匹配点可以估算出本质矩阵,并且通过分解本质矩阵可以得到相对姿态参数 R 和 t。

总的来说,基础矩阵和本质矩阵都是为了关联两个不同视点的图像点,从而为三维重建提供必要的几何信息。在实际应用中,例如在双目立体视觉中,往往先估计本质矩阵,然后进一步分解得到相机的姿态参数。而在不知道相机内参数的情况下,需要先计算基础矩阵,随后通过内参数进行转换以得到本质矩阵。

基础矩阵(Fundamental Matrix)和本质矩阵(Essential Matrix)的求解通常依赖于图像中的特征点匹配。以下是它们各自的求解步骤概述:

基础矩阵的求解

输入:
  1. 两幅图像中互相匹配的特征点对集合,每个点对表示为 (p1, p2),其中 p1p2 分别为第一幅图像和第二幅图像中的二维点,用齐次坐标表示。
求解过程:
  1. 八点法(8-point algorithm):是最常用的求解基础矩阵的方法之一,它需要至少4对匹配点。通过最小化满足基础矩阵约束的误差函数,可以求得基础矩阵的解。

  2. DLS(Direct Linear Solvers)TLS(Total Least Squares) 方法:这两种方法尝试解决因匹配点噪声而导致的问题,寻找最优的基础矩阵。

  3. RANSAC(Random Sample Consensus) 或其他迭代求解方法:对于含有大量错误匹配点的情况,可以使用RANSAC算法来找出最有可能正确的基础矩阵。

具体步骤:
  • 收集足够数量的匹配点对。
  • 应用上述方法之一,解算出满足约束条件的矩阵F。
  • 对于得到的矩阵,验证其秩为2,且满足基础矩阵的约束条件(即对于所有的匹配点对,满足 ( p 2 T F p 1 = 0 ) ( p_2^T F p_1 = 0 ) (p2TFp1=0))。

本质矩阵的求解

输入:
  1. 两台相机的内参数矩阵(焦距、主点坐标等),记为 K1K2
  2. 两幅图像中互相匹配的特征点对集合。
求解过程:
  1. 首先,使用上述基础矩阵的求解方法,基于匹配点对计算基础矩阵 F

  2. 通过相机内参矩阵将基础矩阵转换为本质矩阵 E,公式为:
    E = K 2 T F K 1 E = K_2^T F K_1 E=K2TFK1
    或者在两个相机具有相同内参数的情况下:
    E = K − T F K − 1 E = K^{-T} F K^{-1} E=KTFK1

  3. 对得到的 E 矩阵进行进一步处理,例如奇异值分解(SVD)来获取相机的旋转矩阵 R 和平移向量 t(注意:还需要进行一定的规范化处理以确定唯一的旋转和平移解)。

在实际应用中,由于噪声的存在和匹配点的不确定性,通常会结合RANSAC等算法来优化求解过程,筛选出符合模型的最佳匹配点集,并据此估计出最可靠的基础矩阵和本质矩阵。

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

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

相关文章

【WebSocket连接异常】前端使用WebSocket子协议传递token时,Java后端的正确打开方式!!!

文章目录 1. 背景2. 代码实现和异常发现3. 解决异常3.1 从 URL入手3.2 从 WebSocket子协议的使用方式入手(真正原因) 4. 总结(仍然存在的问题) 前言: 本篇文章记录的是使用WebSocket进行双向通信时踩过的坑&#xff0c…

基础拓扑学习

基础拓扑 有限集、可数集和不可数集 2.1 定义 考虑两个集 A A A和 B B B,他们的元素可以是任何东西。假定对于 A A A的每个元素 x x x,按照某种方式,与集 B B B的一个元素联系着,这个元素记作 f ( x ) f\left( x \right) f(x);那…

python学习笔记B-07:序列结构之列表--列表的常用函数和方法

以xx_函数名(列表名)的形式出现的是函数;以xx_列表名.xx_方法名的形式出现的是方法。 列表常用函数如下: len():计算列表元素数量 max():获取列表元素最大值 min():获取列表元素最小值 sum():计算列表中各元素之和 列表常用方法如…

windows下安装kibana

下载:https://www.elastic.co/cn/downloads/kibana 安装:https://www.elastic.co/guide/cn/kibana/current/install.html 安装好后,cd到kibana的bin目录,启动kibana.bat 然后访问localhost:5601

42.AQS

1.AQS, AbstractQueuedSynchronizer,是阻塞式锁和相关同步器工具的框架。 2.阻塞式的锁就类似于Synchronized锁。 3.用state属性表示资源的状态:独占模式,共享模式。子类需要定义如何维护这个状态,控制如何获取锁和释放锁。 4.独占模式&am…

LeetCode450:删除二叉搜索树中的节点

题目描述 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤&#xf…

链表(C语言)

前言:前面几篇文章我们详细介绍了顺序表,以及基于顺序表来实现的通讯录。今天我们连介绍一下链表的下一个结构链表。那么链表和顺序表究竟有什么区别呢?他们两个的优缺点分别是什么。今天这篇文章就带大家了解一下链表。 目录 一.链表的概念…

R语言处理RNA等位基因不平衡(二)

1.前言: RNA测序技术允许研究人员在转录组水平上精细地检测基因表达,包括等位基因特异性表达的变异。通过比较来自同一基因的不同等位基因的表达量,可以揭示细胞内遗传和表观遗传调控机制的差异。本代码通过对RNA测序数据中的读数计数进行详…

瑞芯微RK3328(ROC-RK3328-PC)buildroot 开发QT的hello world

第一部分:编译rk3328 sdk 0. 环境 - EC-R3328PC(ROC-RK3328-PC) - ubuntu18(100GB) 1. 安装依赖 sudo apt-get updatesudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools devi…

【系统移植三】uboot移植

开发板类型:emmc、7寸屏 1 NXP官方开发板uboot编译测试 1.1 获取源码 1)源码路径:1、例程源码->4、NXP 官方原版 Uboot 和 Linux -> uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2。 2)将源码拷贝到ubuntu中的~/linux/IMX6…

数据安全中的访问安全包含哪些内容,如何实现数据访问安全

无极低码 :https://wheart.cn 数据安全中的访问安全是指为了保护数据不被未经授权的个人或程序访问而采取的一系列技术和管理措施。访问安全包括但不限于以下关键内容: 身份验证: 用户身份确认,通常通过用户名/密码组合、多因素认…

Linux 目录结构与基础查看命令

介绍 目录结构如下 /bin:存放着用户最经常使用的二进制可执行命令,如cp、ls、cat等。这些命令是系统管理员和普通用户进行日常操作所必需的。 /boot:存放启动系统使用的一些核心文件,如引导加载器(bootstrap loader…

采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示

采用C#.Net JavaScript 开发的云LIS系统源码 二级医院应用案例有演示 一、系统简介 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享&#xff0…

Java学习笔记零基础入门2

前部分,基础篇章 第八章面向对象编程(高级部分) 持续更新中...

动态库的制作和使用

动态库的制作 动态库(在Windows上称为DLL,即Dynamic Link Library,在Unix-like系统上称为SO,即Shared Object)的制作过程涉及几个关键步骤:编写源代码、编译源代码为共享的动态对象,并链接它们…

4*5的矩阵(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int result 0;//嵌套循环输出&#xff1b;for (i 1; i < 4; i){//列…

【JavaScript】数组 Array 总结(202404)

🥰 数组 Array (202404) 数组 🔗 ❤️‍🔥 数组是一种有序的多个变量值的集合,可以通过索引来获取元素。 ❤️‍🔥 数组是一种特殊的对象类型。 1、创建数组 字面量 // a. 有元素 let arr = [a, b, c]; console.log(arr); // b. 空数组 let arr1 = []; console.…

L2正则化——解释为什么可以减少模型的复杂度

L2正则化是一种用于机器学习模型的技术&#xff0c;旨在减少模型的复杂度&#xff0c;从而提高其泛化能力。在L2正则化中&#xff0c;通过添加一个惩罚项&#xff0c;模型的权重被迫保持较小的值&#xff0c;这有助于防止过拟合&#xff0c;即模型在训练数据上表现良好但在未见…

【Python】OPC UA模拟服务器实现

目录 服务器模拟1. 环境准备2. 服务器设置3. 服务器初始化4. 节点操作5. 读取CSV文件6. 运行服务器 查看服务器客户端总结 在工业自动化和物联网&#xff08;IoT&#xff09;领域&#xff0c;OPC UA&#xff08;开放平台通信统一架构&#xff09;已经成为一种广泛采用的数据交换…

单链表的基本操作实现:初始化、尾插法、头插法、输出单链表、求表长、按序号查找、按值查找、插入结点、删除结点。

1.参考学习博文&#xff08;写的相当好的文章&#xff09;&#xff1a; http://t.csdnimg.cn/AipNl 2.关于我的总结&#xff1a; 定义单链表&#xff1a; typedef struct LNode {Elemtype data;struct LNode* next; }LNode; data用来存放元素值&#xff0c;next用来指向后…