多视图变换矩阵与SLAM位姿估计中的地图点投影的几何约束

定义

Homography & projective transform

M ( 3 × 4 ) = [ f s x c ′ 0 a f y c ′ 0 0 1 ] [ 1 0 0 0 0 1 0 0 0 0 1 0 ] [ R 3 × 3 0 3 × 1 0 1 × 3 1 ] [ I 3 × 3 T 3 × 1 0 1 × 3 1 ] \underset{(3 \times 4)}{\mathbf{M}}=\left[\begin{array}{ccc} f & s & x_c^{\prime} \\ 0 & a f & y_c^{\prime} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{llll} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right]\left[\begin{array}{cc} \mathbf{R}_{3 \times 3} & \mathbf{0}_{3 \times 1} \\ \mathbf{0}_{1 \times 3} & 1 \end{array}\right]\left[\begin{array}{cc} \mathbf{I}_{3 \times 3} & \mathbf{T}_{3 \times 1} \\ \mathbf{0}_{1 \times 3} & 1 \end{array}\right] (3×4)M= f00saf0xcyc1 100010001000 [R3×301×303×11][I3×301×3T3×11]
依次是 intrinsics projection rotation translation,共有5+3+3= 11个自由度。

Homography 描述了世界坐标系中的点到图像中的映射关系。
p = K [ R   ∣   t ] P = M P [ w ∗ u w ∗ v w ] = [ m 11 m 12 m 13 m 14 m 21 m 22 m 23 m 24 m 31 m 32 m 33 m 34 ] [ X Y Z 1 ] p=K\left[\begin{array}{ll} R \ | \ t \end{array}\right] P=M P \\ {\left[\begin{array}{c} w^* u \\ w^* v \\ w \end{array}\right]=\left[\begin{array}{llll} m_{11} & m_{12} & m_{13} & m_{14} \\ m_{21} & m_{22} & m_{23} & m_{24} \\ m_{31} & m_{32} & m_{33} & m_{34} \end{array}\right]\left[\begin{array}{c} X \\ Y \\ Z \\ 1 \end{array}\right]} p=K[R  t]P=MP wuwvw = m11m21m31m12m22m32m13m23m33m14m24m34 XYZ1

对于每对点,uv坐标考虑之后都有2个方程:

u i ( m 20 X i + m 21 Y i + m 22 Z i + m 23 ) = m 00 X i + m 01 Y i + m 02 Z i + m 03 v i ( m 20 X i + m 21 Y i + m 22 Z i + m 23 ) = m 10 X i + m 11 Y i + m 12 Z i + m 13 u_i\left(m_{20} X_i+m_{21} Y_i+m_{22} Z_i+m_{23}\right)=m_{00} X_i+m_{01} Y_i+m_{02} Z_i+m_{03} \\ v_i\left(m_{20} X_i+m_{21} Y_i+m_{22} Z_i+m_{23}\right)=m_{10} X_i+m_{11} Y_i+m_{12} Z_i+m_{13} ui(m20Xi+m21Yi+m22Zi+m23)=m00Xi+m01Yi+m02Zi+m03vi(m20Xi+m21Yi+m22Zi+m23)=m10Xi+m11Yi+m12Zi+m13

写成矩阵
[ X i Y i Z i 1 0 0 0 0 − u i X i − u i Y i − u i Z i − u i 0 0 0 0 X i Y i Z i 1 − v i X i − v i Y i − v i Z i − v i ] [ m 00 m 10 m 02 m 03 m 10 m 11 m 12 m 13 m 20 m 21 m 22 m 23 ] = [ 0 0 ] \left[\begin{array}{cccccccccccc} X_i & Y_i & Z_i & 1 & 0 & 0 & 0 & 0 & -u_i X_i & -u_i Y_i & -u_i Z_i & -u_i \\ 0 & 0 & 0 & 0 & X_i & Y_i & Z_i & 1 & -v_i X_i & -v_i Y_i & -v_i Z_i & -v_i \end{array}\right] \left[ \begin{array}{l} m_{00} \\ m_{10} \\ m_{02} \\ m_{03} \\ m_{10} \\ m_{11} \\ m_{12} \\ m_{13} \\ m_{20} \\ m_{21} \\ m_{22} \\ m_{23} \end{array}\right] =\left[\begin{array}{l} 0 \\ 0 \end{array}\right] [Xi0Yi0Zi0100Xi0Yi0Zi01uiXiviXiuiYiviYiuiZiviZiuivi] m00m10m02m03m10m11m12m13m20m21m22m23 =[00]

SVD(奇异值分解)是求解超定线性方程组和最小均方误差的最小二乘问题的首选方法.

Essential Matrix

左右目相机坐标系下坐标点的坐标变换
描述了两个相机坐标系,坐标点的坐标变换关系

X ′ = R X + + T \mathbf{X}^{\prime}=\mathbf{R} \mathbf{X}_{+}+\mathbf{T} X=RX++T

左右同时乘以左右目之间的变换矩阵:

X ′ ⋅ ( [ T x ] R X ) = 0 E = [ T x ] R X ′ T E X = 0 \mathbf{X}^{\prime} \cdot\left(\left[\mathrm{T}_x\right] \mathbf{R} \mathbf{X}\right)=0 \\ \mathbf{E}=\left[\mathrm{T}_x\right] \mathbf{R} \\ \mathbf{X}^{\prime^T} \mathbf{E} \mathbf{X}=0 X([Tx]RX)=0E=[Tx]RXTEX=0

Fundamental matrix

左右目像素射线产生的极线和极点
描述了两个相机相同3D点构成的像素坐标的几何约束关系。

p i m , r i g h t T F p i m , l e f t = 0 \mathbf{p}_{i m, r i g h t}^{\mathrm{T}} \mathbf{F} \mathbf{p}_{i m, l e f t}=0 pim,rightTFpim,left=0

对每一个两个成像平面上的匹配点对,投影变换把一个齐次坐标投影到另一个齐次坐标:

[ u ′ v ′ 1 ] [ f 11 f 12 f 13 f 21 f 22 f 23 f 31 f 32 f 33 ] [ u v 1 ] = 0 \left[\begin{array}{lll} u^{\prime} & v^{\prime} & 1 \end{array}\right]\left[\begin{array}{lll} f_{11} & f_{12} & f_{13} \\ f_{21} & f_{22} & f_{23} \\ f_{31} & f_{32} & f_{33} \end{array}\right]\left[\begin{array}{l} u \\ v \\ 1 \end{array}\right]=0 [uv1] f11f21f31f12f22f32f13f23f33 uv1 =0

于是可以写出8个(八点法)这样的方程:

[ u 1 ′ u 1 u 1 ′ v 1 u 1 ′ v 1 ′ u 1 v 1 ′ v 1 v 1 ′ u 1 v 1 1 ] [ f 11 f 12 f 13 f 21 f 22 f 23 f 31 f 32 f 33 ] = 0 \left[\begin{array}{llllllllll} u_1^{\prime} u_1 & u_1^{\prime} v_1 & u_1^{\prime} & v_1^{\prime} u_1 & v_1^{\prime} v_1 & v_1^{\prime} & u_1 & v_1 & 1 \end{array}\right]\left[\begin{array}{c} f_{11} \\ f_{12} \\ f_{13} \\ f_{21} \\ f_{22} \\ f_{23} \\ f_{31} \\ f_{32} \\ f_{33} \end{array}\right]=\mathbf{0} [u1u1u1v1u1v1u1v1v1v1u1v11] f11f12f13f21f22f23f31f32f33 =0

八点法计算出的极线是错误的
极线交于一点,上面八点法计算出的结果是错误的。

在考虑极线约束的情况下, F F F秩为2,需要在求解SVD分解时去除最小特征值。

SLAM中求解Homography矩阵、Essential矩阵和Fundamental矩阵的适用场合是什么

以下是这些矩阵的适用场合和作用:

Homography矩阵

适用场合

  • 平面场景:Homography矩阵适用于两幅图像中包含同一平面的情况,例如,地面、墙面等。
  • 运动估计:在摄像机运动平行于图像平面时,Homography可以有效地估计相机的平移和旋转。
  • 图像配准和拼接:在图像拼接、全景图生成中,Homography用于将两幅图像对齐。
  • 姿态估计:在某些简单场景中,可以用Homography矩阵进行相机姿态估计。

作用

  • 图像变换:将一幅图像的坐标系映射到另一幅图像的坐标系。
  • 特征点匹配:在已知平面场景中,通过Homography矩阵可以将特征点从一个视图映射到另一个视图。

Essential矩阵

适用场合

  • 已校正相机:Essential矩阵适用于内部参数已知且经过校正的相机(内参矩阵K已知)。
  • 相机位姿估计:用于估计相机的相对姿态(旋转和平移),特别是当场景是三维的时。
  • 立体视觉:在双目立体视觉中,用于计算视差和重建3D结构。

作用
相机位姿估计:解出相对旋转和平移。
3D重建:通过求解Essential矩阵,可以进行三维点的重建。

Fundamental矩阵

适用场合

  • 未校正相机:适用于内部参数未知或未校正的相机。 两视图几何:在任意两幅图像之间建立几何关系,无需相机内参。
  • 特征点匹配约束:用于约束特征点匹配的搜索空间。

作用
极线约束:在未校正图像中,Fundamental矩阵定义了特征点对应的极线,从而限制了特征匹配的位置。
相对位姿初步估计:提供相机之间相对位姿的初步估计,但不如Essential矩阵精确。

比较和总结

  • Homography矩阵:适用于平面场景和特定的运动情况,可以用于图像配准和特征匹配,但不适用于一般的三维场景。
  • Essential矩阵:精确的相机位姿估计和三维重建,需要相机内参。
  • Fundamental矩阵:不需要相机内参,可用于特征点匹配的几何约束和初步的相机位姿估计,。

在orb-slam3中,何时会计算这些矩阵,如何根据地图点跟踪相机位姿?

在ORB-SLAM3中,确实在初始化和创建地图点时需要计算Homography矩阵、Essential矩阵或Fundamental矩阵。在系统运行的其他阶段,如相机位姿跟踪和地图点跟踪时,通常不再需要频繁地重新计算这些矩阵,而是依赖于已有的地图点和特征匹配、PnP算法和优化技术实现高效的相机位姿跟踪和地图点的更新。

  • 在初始化阶段,计算Essential矩阵、Homography矩阵或Fundamental矩阵来初始化相机位姿和地图点。
  • 运动跟踪阶段:通过特征点匹配和PnP算法估计相机位姿,利用局部BA优化相机位姿和地图点位置。
  • 跟踪地图点:通过与当前地图中的3D点进行特征匹配,并结合相机位姿预测和优化方法。

然而,计算Homography矩阵、Essential矩阵和Fundamental矩阵不仅仅是在初始化阶段需要,还在以下多个场合中被广泛使用,例如三角化创建地图点、地图点合并、特征匹配等。以下是这些矩阵在具体过程中的应用:

三角化创建地图点

计算Essential矩阵和Fundamental矩阵
三角化过程:当ORB-SLAM3在关键帧之间创建新的地图点时,通常需要通过特征匹配确定图像中的对应点,并利用Essential矩阵或Fundamental矩阵计算视图之间的几何关系。通过这些矩阵,可以确定相机间的相对姿态,然后使用三角化方法从不同视角的对应点计算3D点的位置。

地图点合并

计算Homography矩阵
平面检测和合并:在检测到地图中的某些区域为平面时,可以计算Homography矩阵来描述图像之间的平面变换关系。通过Homography矩阵,可以将多个视角下的特征点合并为同一平面上的点,提高地图的精度和一致性。

特征匹配

计算Fundamental矩阵和极线约束
特征点匹配:在特征点匹配过程中,Fundamental矩阵用来约束特征匹配对的位置。通过极线约束,可以显著减少匹配错误,提高匹配的准确性。
极线约束:利用Fundamental矩阵,可以将图像中一个特征点的匹配对限制在另一幅图像的对应极线上,从而减少匹配的计算量和错误率。

其他应用

局部BA和全局BA
局部和全局优化:在局部BA和全局BA(Bundle Adjustment)过程中,Essential矩阵和Fundamental矩阵帮助建立约束关系,通过优化相机位姿和地图点位置,最小化重投影误差,提升整体地图的精度。

总结

用SLAM十四讲的说法,

  • 2D-2D ( F 1 , F 2 ) (F_1,F_2) (F1,F2) 三角化Triangularization,特征点匹配,创建地图点
  • 2D-2D ( F 1 , F 2 ) (F_1,F_2) (F1,F2) 对极几何,特征点匹配,减少误匹配并初步估计相机位姿
  • 3D-2D ( K F 1 , (KF_1, (KF1, F 1 ) F_1) F1) 地图点和特征点的约束,PnP求解相机位姿
  • 3D-3D ( K F 1 , K F 2 ) (KF_1,KF_2) (KF1,KF2) 地图点之间,ICP匹配,用于地图维护:局部地图融合,精确对齐。

ref

  • 【SLAM模块】多视图几何 - 运动估计_动态slam
    多视图几何-CSDN博客
  • Introduction to Computer Vision
    (udacity.com)

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

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

相关文章

Servlet基础(续集2)

HttpServletResponse web服务器接收到客户端的http的请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse 如果要获取客户端请求过来的参数:找HttpServletRequest如果要给客户端…

MySQL之高级特性(一)

高级特性 外键约束 InnoDB是目前MySQL中唯一支持外键的内置存储引擎,所以如果需要外键支持那选择就不多了。使用外键是有成本的。比如外键通常都要求每次在修改数据时都要在另一张表中多执行一次查找操作。虽然InnoDB强制外键使用索引,但还是无法消除这…

UML精简概述

UML精简概述 UML精简概述 UML精简概述UML的定义常见的关系 在学习设计模式之前,需要掌握一些预备知识,主要包括UML类图和面向对象设计原则,它们是“基础内功”,将为后续的“深入修行”奠定基础。UML类图可用于描述每一个设计模式的…

视频点播系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,客服聊天管理,基础数据管理,论坛管理,公告管理 前台账户功能包括:系统首页,个人中心,论坛,视…

在群晖上通过Docker部署DB-GPT

最近一直有网友在后台私信,发的内容高度统一,只有后面 8 位数字不一样,都是 #22232 xxxxxxxx,有谁知道是什么意思吗?在我印象中,这是第二次这么大规模的发类似的字符串了 什么是 DB-GPT ? DB-G…

C++入门 string常用接口(下)

目录 string类的常用接口说明 string类对象的修改操作(修饰符) operator & append & push_back assign & insert erase & replace swap & pop_back string类对象的非成员函数 operator relational operators(关系…

如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?

前言 昨天分享了在 .NET Core Console 项目中应用 NLog 写日志的详细例子,有几位小伙伴私信说 ASP.NET Core Web Api 项目中无法使用,其实在 ASP.NET Core Web Api 项目中应用 NLog 写日志,跟 .NET Core Console 项目是有些不一样的&#xf…

TLS指纹跟踪网络安全实践(C/C++代码实现)

TLS指纹识别是网络安全领域的重要技术,它涉及通过分析TLS握手过程中的信息来识别和验证通信实体的技术手段。TLS(传输层安全)协议是用于保护网络数据传输的一种加密协议,而TLS指纹则是该协议在实际应用中产生的独特标识&#xff0…

1.0 Android中Activity的基础知识

一:Activity的定义 Activity是一个应用组件,它提供了一个用户界面,允许用户执行一个单一的、明确的操作,用户看的见的操作都是在activity中执行的。Activity的实现需要在manifest中进行定义,不让会造成程序报错。 1.…

第一百零四节 Java面向对象设计 - Java内部类成员

Java面向对象设计 - Java内部类成员 内部类可以访问其所有实例成员,实例字段和其封闭类的实例方法。 class Outer {private int value 2014;public class Inner {public void printValue() {System.out.println("Inner: Value " value);}} // Inner …

SAP PP学习笔记17 - MTS(Make-to-Stock) 按库存生产 的策略70,策略59

上几章讲了几种策略,策略10,11,30,40。 SAP PP学习笔记14 - MTS(Make-to-Stock) 按库存生产(策略10),以及生产计划的概要-CSDN博客 SAP PP学习笔记15 - MTS(Make-to-St…

linux用户态操作GPIO首先需要export导出

在使用系统调用来实现 GPIO(通用输入输出端口)的输入输出操作时,同样需要先通过 export 属性文件来导出 GPIO,这是因为 Linux 内核对 GPIO 的管理和访问机制决定了这一点。 以下是具体原因: 内核设备模型&#xff1a…

Linux C语言:输入输出(printf scanf)

一、数据输出 1、C语言I/O操作由函数实现 #include <stdio.h> 2、字符输出函数 格式: int putchar( int c ) 参数: c为字符常量、变量或表达式 功能&#xff1a;把字符c输出到显示器上 返值&#xff1a;putchar函数的返回值是参数的ASCLL码值&#xff1b; #inclu…

【CTF-Events】R3CTF/YUANHENGCTF 2024 两道密码题记录一下

R3CTF2024 WP 文章目录 R3CTF2024 WPCryptoR0System考点&#xff1a;代码审计 ECDH R1System考点&#xff1a;代码审计 ECDH Crypto R0System 考点&#xff1a;代码审计 ECDH 打开代码后有两个小系统&#xff0c;看一下功能 然后再看一下登录之后有哪些功能 其实到这里就可以…

干货分享!2024年Instagram营销必备插件

Instagram是营销人员常用的社交媒体平台&#xff0c;通过提升品牌知名度来推动业务增长。今天给大家分享一些超实用的Instagram营销插件&#xff0c;无论是下载图片视频&#xff0c;还是预先发布帖子&#xff0c;这些工具都可以是你的得力助手&#xff0c;让你的INS运营效率蹭蹭…

spring常用注解(八)@Async

一、介绍 1、介绍 二、原理 三、集成与使用 1、集成方法 &#xff08;1&#xff09;开启 使用以下注解开启 EnableAsync &#xff08;2&#xff09;使用 在需要异步处理的方法上加上 Async 2、返回值 Async注解的方法返回值只能为void或者Future<T>。 &…

纠删码是什么?有什么作用?

在阿里云对象存储中使用的是用基于纠删码、多副本的数据冗余存储机制&#xff0c;将每个对象的不同冗余存储在同一个区域内多个设施的多个设备上&#xff0c;确保硬件失效时的数据持久性和可用性。这里我们来详细介绍一下什么是纠删码。 纠删码&#xff08;Erasure Coding&…

什么是覆盖索引 ?

走当前索引就足够&#xff0c;而无需回表就能找到所有数据&#xff0c;就叫覆盖索引。 比如 key1 上有索引。&#xff08;它是一个普通的二级索引&#xff09;。 那么select key1 from s1 where key1 a 这种就叫覆盖索引。 表现就是explain时&#xff0c; Extra 那里显示 …

【深度学习】使用 LSTM 网络预测水位数据

使用 LSTM 网络预测水位数据 在本文中&#xff0c;我们将介绍如何使用 LSTM&#xff08;长短期记忆&#xff09;神经网络来预测水位数据。我们将使用 Python 中的一些流行库&#xff0c;如 NumPy、Pandas 和 Keras。首先&#xff0c;我们将加载数据&#xff0c;然后预处理它以…

基于 Transformer 的大语言模型

语言建模作为语言模型&#xff08;LMs&#xff09;的基本功能&#xff0c;涉及对单词序列的建模以及预测后续单词的分布。 近年来&#xff0c;研究人员发现&#xff0c;扩大语言模型的规模不仅增强了它们的语言建模能力&#xff0c;而且还产生了处理传统NLP任务之外更复杂任务…