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

news2024/11/15 0:08:17

定义

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)

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

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

相关文章

前端已学习内容

一、HTMLCSS 1、黑马B站视频-27小时 地址:基础班导学-精讲与实战_哔哩哔哩_bilibili 说明:讲义已下载。两个小项目还没学没练。 2、菜鸟教程 地址:HTML 简介 | 菜鸟教程 二、JavaScript 1、菜鸟教程 网址:JavaScript 教程 …

【点击收藏】鸿蒙HarmonyOS实战开发—如何实现应用悬浮窗

前言 鸿蒙登场!它的征途是万物互联 备受瞩目的华为HarmonyOS 2(即鸿蒙系统)正式发布。同时,华为发布了多款搭载鸿蒙系统的新产品,包括Mate 40系列新版本、Mate X2新版本、华为WATCH 3系列、华为MatePad Pro等手机、智能…

vue-editor设置字体font-family

背景:Vue项目中需要用到富文本编辑器,所以选择了vue-editor这个富文本编辑器,发现字体font-family只有三种Sans Serif、Serif、MonoSpace可以选择,满足不了产品的需求,所以用想要定义成常用字体,主要是需要…

AGI时代的奠基石:Agent+算力+大模型是构建AI未来的三驾马车吗

★AI Agent;人工智能体,RPA;大语言模型;prompt;Copilot;AGI;ChatGPT;LLM;AIGC;CoT;Cortex;Genius;MetaGPT;大模…

借助ChatGPT撰写学术论文,如何设定有效的角色提示词指

大家好,感谢关注。这个给大家提供关于论文写作方面专业的讲解,以及借助ChatGPT等AI工具如何有效辅助的攻略技巧。有兴趣的朋友可以添加我(yida985)交流学术写作或ChatGPT等AI领域相关问题,多多交流,相互成就…

段页式管理

缝合怪!!! 分页、分段的对比 分段分页段页式管理 先将进程按逻辑模块分段,再将各段分页 段页式管理的逻辑地址结构 段号页号页内偏移量 段号的位数:决定了每个进程最多可以分为几个段。 页号的位数:决定…

马斯克怒了,禁止员工使用苹果设备,抨击库克出卖数据给OpenA

昨晚,苹果发布会正式宣布了一系列重磅AI升级,甚至创造了一个新的概念——苹果智能(Apple Intelligence)。 这次升级在操作系统的交互层面上进行了智能化改进,使得更多自然语音和语言理解的控制成为可能,将…

常见数据编码方式

数据编码方式: 二进制数字信息在传输过程中可以采用不同的代码,各种代码的抗噪声特征和定时功能各不相同,实现费用也不一样。下面介绍几种常用的编码方式。 1、单极性码 在这种编码方案中,只用正的(或负的)…

服务器如何远程桌面连接不上,服务器远程桌面连接不上解决办法

服务器远程桌面连接不上,是IT运维中常见的挑战之一。针对这一问题,专业的解决方法通常涉及以下几个方面的排查与操作: 首先,我们需要检查网络连接是否正常。远程桌面连接依赖于稳定的网络连接,因此,确认服务…

第十九节:暴力递归到动态规划

一 动画规划的概念 优化出现重复解的递归 一旦写出递归来,改动态规划就很快 尝试策略和状态转移方程是一码事 学会尝试是攻克动态规划最本质的能力 如果你发现你有重复调用的过程,动态规划在算过一次之后把答案记下来,下回在越到重复调用过程…

Java四舍五入保留小数

这里介绍两种方法: package Book.jj.hh;import java.text.DecimalFormat; //使用DecimalFormat类 public class Demo1 {public static void main(String[] args) {double num 123.52631;DecimalFormat a new DecimalFormat("#.00"); //小数点后有几个0…

UE4 RPC进行网络同步

说明 基于UE本身提供的RPC同步机制 RPC远程过程调用允许客户端或服务器通过网络连接相互发送消息: 使用时需要注意: 1、必须从 Actor 上调用 2、Actor 必须被复制,注意勾选BP中Replicates,或使变量bReplicates true 3、注意如…

揭秘独孤信印章:多面性与历史地位的双重传奇

2024高考已经结束,小编回顾前几年高考试卷时发现在2019年全国高考II卷中,一枚古老的印章被做成了一道数学题。这枚印章不仅因其独特的多面体设计而引人注目,更因为其背后所代表的历史人物——独孤信,而成为了热门的话题。那么&…

pip切换至国内镜像超简单方法

新配置的python环境,pip安装包超时 这里给出最简单配置国内镜像的方法 这里将服务器地址切换为国内清华镜像,具体执行的命令如下: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 执行完,看到上面提…

【C++ 类和对象】初始化列表

文章目录 1. 构造函数体赋值2. 初始化列表🔍 1. 构造函数体赋值 🍎① 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { public:// 构造函数 Date(int year, int month, int day) {_y…

面试题:如何避免索引失效?

(1) 范围条件查询 (2) 不要在索引上使用函数运算, 否则索引也会失效. 比如在索引上使用切割函数, 就会使索引失效. (3) 字符串不加引号, 造成索引失效. (4) 尽量使用索引覆盖, 避免 select *, 这样能提高查询效率. 如果索引列完全包含查询列, 那么查询的时候把要查的列写出来…

一文教你如何实现并发请求的失败自动重试及重试次数限制

需求 在并发接口请求的时候,能够自动对失败的请求进行重发尝试(超过指定重试次数则不再重试),并将最终的结果返回(包含每个请求是否成功、返回结果) 核心思路 代码实现 使用案例 为了演示我们代码的最终实现效果&a…

期权交易单位是什么?期权懂新手必看!

今天带你了解期权交易单位是什么?很多对期权还不太熟悉的朋友,不知道期权的单位是什么,下面小编就来告诉你期权的交易单位到底是什么? 期权交易单位是什么? 50ETF期权的交易单位,用大白话来说,…

从盛世到衰落,历史上八大强国的兴衰与现代地位!

人类文明史悠久,从远古时代至今日,世界舞台上曾经涌现出许多强盛的帝国。它们在自己的黄金时代,曾经无人能敌,不论是在军事、经济还是文化上都独领风骚。然而,无论多么强大的国家也难逃“兴盛必衰”的命运。今天&#…

【文档+源码+调试讲解】精准扶贫管理系统

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了精准扶贫管理系统的开发全过程。通过分析精准扶贫管理系统管理的不足,创建了一个计算机管理精准扶贫管理系统的方案。文章介绍了精准扶贫管理系统的系…