百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

基础矩阵,本质矩阵,单应性矩阵讲解

bigegpt 2024-08-03 11:53 1 浏览

ORB-SLAM点云地图中相机的位姿初始化,无论算法工作在平面场景,还是非平面场景下,都能够完成初始化的工作。其中主要是使用了适用于平面场景的单应性矩阵H和适用于非平面场景的基础矩阵F,程序中通过一个评分规则来选择适合的模型,恢复相机的旋转矩阵R和平移矩阵t


那么下面主要讲解关于对极几何中的基础矩阵,本质矩阵,和单应矩阵之间的区别与联系。


对极几何(Epipolar Geometry)描述的是两幅视图之间的内在射影关系,与外部场景无关,只依赖于摄像机内参数和这两幅视图之间的相对位姿。

两视图的对极几何可以理解为图像平面与以基线为轴的平面束相交的几何关系,其中主要有几种概念:

(1)基线(base line):两个相机中心的连线CC'称为基线。

(2)对极点(epipolar):ee'是对极点,是基线与两个成像平面的交点,也就是两个相机在另一个成像平面上的像点。

(3)对极平面(epipolar plane):过基线的平面都称之为对极平面,其中两个相机的中心C和C',三维点X,以及三维点在两个相机成像点xx'这五点必定在同一对极平面上,当三维点X变化时,对极平面绕着基线旋转,形成对极平面束。

(4)对极线(epipolar line):是对极平面和成像平面的交线,所有的对极线都相交于极点。


那么由对极几何的基本性质引出了对极约束的概念,对极约束是指在平面2上的p点在平面1上的对应点一定在基线I'上,这句话说明了对极约束是一个点到直线的射影映射关系。如图所示:

根据对极约束可以引出本质矩阵和基础矩阵。在已知相机标定的情况下,假设有一个三维坐标点P(X,Y,Z)在两个视图上的点分别为p1,p2,由于第一个相机的中心作为世界坐标系的原点,也就是说第一个相机没有旋转R和平移t,通过小孔相机模型有:

p1=KP, p2=K(RP+t)

其中,K是相机的内参,R,t是第二个相机相对于第一个相机的旋转和平移。

从p1=KP可以得到

带入到第二个式子得到

两边同时乘以K_1得到

设x1,和x2表示为

带入到x2=Rx1+t中,两边同时左乘向量t的反对称矩阵t×,由于t×t=0,消除t,

两边再同时左乘xT2

由于t×x2是向量t和向量x2的叉积,同时垂直于向量t和向量x2,所以左边的式子为0得到:

将x1,x2替掉

上式是对极约束的一种表示,该式子中仅包含像点,相机的旋转和平移,中间的矩阵就是基础矩阵F:

当K已知时提取中间的矩阵得到本质矩阵E,E矩阵同样表示的是对极约束的关系,只不过它不再涉及相机内参,只由两视图之间的姿态关系决定:

F矩阵的性质有三:

1, 3*3且自由度为7的矩阵

2,kF 为基础矩阵,相差一个尺度自由度

3,F矩阵的秩为2

基础矩阵的求解方法:

1,直接线性变换法(8点法+最小二乘法)

2,RANSAC-估计基础矩阵

求解基础矩阵后,我们实际上是想求R和t.所以还是要继续求解本质矩阵直到分解出R,t

E矩阵的性质:

(1)3*3且自由度为5的矩阵

(2)因为只包含R,t共有6个自由度,又因为尺度等价去掉一个自由度

(3)本质矩阵E的奇异值 必定为[ delta delta,0]T 的形式

ORB-SLAM中通过E、F矩阵就可以利用两视图中的匹配点求解出相对姿态了,不过这个方法存在一个问题——当两个视图的相机中心相同时,也就是R,t中的t为0,这时对极几何的基础也就不成立了,可知E、F均为0无法求解。这时就需要使用平面间的单应性H矩阵恢复R,t。

单应性矩阵Homogeneous是射影几何中的一个术语,又称之为射影变换。本质上是一个数学概念,一般所说的单应矩阵是平面上的单应性矩阵,主要用来解决两个问题:

(1)表述真实世界中一个平面与他对应图像的透视变换

(2)通过透视变换实现图像从一个视图变换到另一个视图的转换。

把一个射影平面上的点(三维齐次矢量)映射到另一个射影平面上,并且把直接射影为直线,具有保线性,总的来说单应是关于三维齐次矢量的一种线性变换,如图所示,两个平面之间的关系可以用一个3*3的非奇异矩阵H表示x1=Hx2,H表示单应矩阵,定义了八个自由度。这种关系定义为平面单应性。

假设已经取得了两图像之间的单应,则可单应矩阵HH可以将两幅图像关联起来:

其中,(u1,v1,1)T(u1,v1,1)T表示图像1中的像点,(u2,v2,1)T(u2,v2,1)T是图像2中的像点,也就是可以通过单应矩阵H将图像2变换到图像1,该功能有很多实际的应用,例如图像的校正、对齐以及在SLAM中估计两个相机间的运动。并保持某些性质的不变性,显然具有保线性。

而在视觉slam中一般为同一相机在不同的位姿得到同一平面的图像有以下公式

以上公式如何推导而来呢?假设使用同一相机在不同的位姿下拍摄了同一平面,如图:

上图表示场景中的平面π在两相机的成像,设平面π在第一个相机坐标系下的单位法向量为N,其到第一个相机中心(坐标原点)的距离为d,则平面π可表示为:

变换为

其中,X1是三维点P在第一相机坐标系下的坐标,其在第二个相机坐标系下的坐标为X2,则

将上面式子结合起来有

得到了同一平面两个不同相机坐标系的单应矩阵

单应矩阵求解方法:

(1)直接线性变换法。

(2)RANSAC-估计单应矩阵

平面的单应矩阵和对极约束的F矩阵的区别

两图像间的对极约束和场景的结构无关,可以理解对极约束对于任意场景结构的两幅图像都是成立的,约束是不能给出两幅图像上的像点的一一对应关系,但是可以给出点对应的必要条件,另一幅图像上对应的像点位于对应的对极线上。基础矩阵F描述的实际是一种点和直线的映射关系,而不是一种点对点的约束关系,并不能给出另一个点的确切位置。

平面间的单应矩阵,并不像对极约束完全不需要场景的结构信息,它对场景的结构有了要求,场景的点必须在同一个平面上,因此单应矩阵H也就能够对两图像上对应点的提供更多的约束,知道了某点在一幅图像的像点位置后,可以通过单应矩阵,求得其在另一幅图像中像点的确切位置。

单应矩阵的应用场景是相机只有旋转而无平移的时候,两视图的对极约束不成立,基础矩阵F为零矩阵,这时候需要使用单应矩阵H,场景中的点都在同一个平面上,可以使用单应矩阵计算像点的匹配点。 相机的平移距离相对于场景的深度较小的时候,也可以使用单应矩阵H。


本文内容推导大部分来自《视觉SLAM14讲》

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...