基本矩阵、本质矩阵和单应矩阵

2023-05-16

两幅视图存在两个关系:第一种,通过对极几何一幅图像上的点可以确定另外一幅图像上的一条直线;另外一种,通过上一种映射,一幅图像上的点可以确定另外一幅图像上的一个点,这个点是第一幅图像通过光心和图像点的射线与一个平面的交点在第二幅图像上的影像。第一种情况可以用基本矩阵来表示,第二种情况则用单应矩阵来表示。而本质矩阵则是基本矩阵的一种特殊情况,是在归一化图像坐标下的基本矩阵

基本矩阵(Fundamental Matrix)

介绍

  基本矩阵体现了两视图几何(对极几何,epipolar geometry)的内在射影几何(projective geometry)关系,基本矩阵只依赖于摄像机的内参KK和外参R,tR,t。

 

对极几何

 

    上图是一个两视图的几何描述,其中OO、O′O′是两个相机的光心,两点连线OO′OO′称为基线,基线与图像平面的交点ee、e′e′称为对极点,其中ll、l′l′分别是图像点x′x′、xx对应的对极线

    上图的左侧相机的图像平面上的一个点xx,反向投影得到射线OXOX。由于点的深度未知,图像平面上的点xx可能是射线上某一深度的3D点XX。而射线OXOX在第二个相机的图像平面上的投影为l′l′。也就是说,给定一对图像,第一幅图像上的每个点xx,在另外一幅图像上存在一条直线l′l′与之对应。换言之,第二幅图像上与点xx对应的点x′x′必定在线l′l′上。

    我们可以看到这里存在一个从一副图像上的点到另外一幅图像与之对应的对极线的映射x→l′x→l′。而基本矩阵就表示了这种从点到直线的射影映射关系。

几何推导

   首先在几何层面对上述一个图像上的点到另外一个图像上的对极线的映射关系进行分析。可以把这个映射分成两个步骤:

  • 点到平面的转移

       存在一个不经过两个相机光心的的平面ππ,光心OO与xx的射线与平面ππ相交与一点XX。该点XX又投影到第二幅图像平面上的点x′x′。这个称为点xx通过平面ππ的转移。点xx,x′x′是平面ππ上的3D点XX在两个相机平面上的像。对应每一个3D点XX都存在一个2D的单应HπHπ把每一个xx映射到x′x′。

  • 对极线的构造

      已知第二幅图像上的对应点x′x′,再加上对极点e′e′我们可以构造对极线l′=e′×x′=[e′]×x′l′=e′×x′=[e′]×x′(这里的[e′]×[e′]×是叉乘矩阵)。由于x′x′可以表示为x′=Hπxx′=Hπx,则有:

 

l′=[e′]×Hπx=Fxl′=[e′]×Hπx=Fx

 

  基本矩阵可以记作为F=[e′]×HπF=[e′]×Hπ,其中HπHπ是一幅图像到另外一幅图像通过任意平面ππ的转移映射。因为[e′]×[e′]×的秩是2,HπHπ的秩是3,因此FF是秩为2的矩阵。

  从几何角度来讲,F矩阵表示了第一幅图像的2维射影平面P2P2到通过对极点e′e′的对极线束的映射,是从2维到1维的射影空间的映射,因此秩为2。

 

MVG2_FIG.9.5

 

代数推导

  对于两个视图的射影矩阵PP、P′P′,在矩阵PP的作用下,第一个视图中通过xx和光心OO的射线可以由方程PX=xPX=x解出。给出的单参数簇解的形式为: 

X(λ)=P+x+λOX(λ)=P+x+λO


  其中P+P+是PP的伪逆,即P+P=IP+P=I,OO为相机的中心,即PP的零矢量并且定义为PO=0PO=0。这条射线由点P+xP+x和点OO决定,这两点在第二幅图像上的投影分别为点P′P+xP′P+x和点P′OP′O。而对极线则是连接这两点的直线,即l′=(P′O)×(P′P+x)l′=(P′O)×(P′P+x),点P′OP′O也就是在第二幅图像上的对极点e′e′。也可以记为l′=[e′]×(P′P+)x=Fxl′=[e′]×(P′P+)x=Fx,这里的FF就是基本矩阵: 

F=[e′]×(P′P+)F=[e′]×(P′P+)

 

  • 设两个视图的双目系统,且世界坐标系定在第一个视图: 

    P=K[I|0]P′=K′[R|t]=K′R[I|−O′]P=K[I|0]P′=K′[R|t]=K′R[I|−O′]


    则: 

    P+=[K−10]O=(01)P+=[K−10]O=(01)


    且: 

    F=[P′C]×P′P+=[K′t]×K′RK−1=K′−T[t]×RK−1=K′−TR[RTt]xK−1=K′−TRKT[KRTt]×F=[P′C]×P′P+=[K′t]×K′RK−1=K′−T[t]×RK−1=K′−TR[RTt]xK−1=K′−TRKT[KRTt]×


    对极点可以表示为: 

    e=(−RTt1)=KRTte′=P′(01)=K′te=(−RTt1)=KRTte′=P′(01)=K′t


    从而,FF可以记作: 

    F=[e′]×P′P+=K′−T[T]×RK−1=K′−TR[RTt]×K−1=K′−TRKT[e]×F=[e′]×P′P+=K′−T[T]×RK−1=K′−TR[RTt]×K−1=K′−TRKT[e]×

性质

  假设两幅图像由中心不重合的相机获得,则基本矩阵F为所对应点x↔x′x↔x′都满足下式的秩为22的3×33×3齐次线性矩阵。

 

x′TFx=0x′TFx=0

 

  有如下性质:

  • FF是秩为22、自由度为77的齐次矩阵(3×33×3其次矩阵有88个独立比率,还有一个满足约束detF=0detF=0的约束,所以再减去一个自由度)

  • 对应点:如果xx和x′x′是对应的图像点,那么x′TFx=0x′TFx=0。

  • 对极线

    • l′=Fxl′=Fx对应于xx的对极线

    • l=FTxl=FTx对应于x′x′的对极线

  • 对极点

    • Fe=0Fe=0
    • FTe=0FTe=0
  • 有摄像机矩阵PP、P′P′计算

    • 一般相机

    F=[e′]×P′P+F=[e′]×P′P+,其中P+P+是PP的伪逆,e′=P′Oe′=P′O且PO=0PO=0。

    • 规范相机,P=[I|0]P=[I|0],P′=[M|m]P′=[M|m]

    F=[e′]×M=M′T[e′]×F=[e′]×M=M′T[e′]×,其中e′=me′=m且e=M−1me=M−1m

    • 非无穷远相机P=K[I|0]P=K[I|0] ,P′=K′[R|t]P′=K′[R|t]

    F=K′−T[t]×RK−1=[K′[t]×K′RK−1=K′−TRKT[KRTt]×F=K′−T[t]×RK−1=[K′[t]×K′RK−1=K′−TRKT[KRTt]×


本质矩阵(Essentical Matrix)

介绍

  本质矩阵归一化图像坐标下的基本矩阵的特殊情况。基本矩阵把要求标定相机这样一个(非本质的)的基本假设去掉了。

  • 归一化坐标 
    考虑P=K[R|t]P=K[R|t]的相机矩阵,令x=PXx=PX为图像上的一个点。如果已知相机标定矩阵KK,那么用它的逆矩阵作用与点xx得到点x^=K−1xx^=K−1x,则x^=[R|t]Xx^=[R|t]X,其中x^x^是图像的点在归一化坐标下的表示。它可以被视为空间点XX在相机[R|t][R|t]的标定矩阵为单位阵的II的情况下的像。相机矩阵K−1P=[R|t]K−1P=[R|t]称为归一化相机矩阵

      考虑一对归一化的相机矩阵P=[I|0]P=[I|0]和P′=[R|t]P′=[R|t],与归一化相机矩阵对应的基本矩阵称之为本质矩阵。有如下形式: 

    E=[t]×R=R[RTt]×E=[t]×R=R[RTt]×


      用归一化坐标图像坐标表示对应点x↔x′x↔x′时,本质矩阵的定义方程为: 

    x′^TEx^=0x′^TEx^=0

     

      把x′^x′^和 x^x^的表达式代入上式得x′TK′−TEK−1x=0x′TK′−TEK−1x=0,与基本矩阵关系式比较可得两者之间的关系为: 

    E=K′TFKE=K′TFK

     

性质

  本质矩阵只有55个自由度:旋转矩阵RR和平移矢量tt各有33个自由度,由于是齐次矩阵再减去一个自由度。


单应矩阵(Homograph Matrix)

介绍

  射影映射是P2P2到其自身的一种满足以下关系的可逆映射hh:三点x1x1,x2x2和x3x3共线当且仅当h(x1)h(x1),h(x2)h(x2)和h(x3)h(x3)也共线。射影映射也称为保线映射,或者射影变换单应。在代数上可以把这种映射关系hh表示为:P2→P2P2→P2是射影映射的充要条件为:存在一个3×33×3非奇异矩阵HH使得P2P2的任何一个矢量xx表示的点都满足h(x)=Hxh(x)=Hx。

 

MVG2_FIG.13.1

 

  上图中,把点xx的射线延长到世界平面ππ(一般都不经过任何一个相机的光心)并且交于一点xπxπ,该点投影到另外一个视图上得到点x′x′,这个从点xx到点x′x′的映射是从平面ππ诱导的单应。如果世界平面ππ到第一幅图像的透视变换为x=H1πxπx=H1πxπ,而世界平面到第二幅图像的透视变换为x′=H2πxπx′=H2πxπ,那么这两个透视变换的复合是两个平面之间的单应变换x′=H2πH−11πx=Hxx′=H2πH1π−1x=Hx。

代数推导

  给定两幅视图的投影矩阵 

P=[I|0]P′=[A|a]P=[I|0]P′=[A|a]


  定义世界平面ππ为πTM=0πTM=0,其中π=(vT,1)Tπ=(vT,1)T。对于第一幅视图而言,根据透视投影有x=PX=[I|0]Xx=PX=[I|0]X,该射线上的点X=(xT,ℓ)TX=(xT,ℓ)T都投影到xx点,又点XX在平面ππ上,则满足πTX=0πTX=0,从而可以确定参数ℓℓ,得到X=(xT,−vTx)TX=(xT,−vTx)T。该3D点在第二幅图像上的投影为: 

x=P′X=[A|a]X=Ax−avTx=(A−avT)xx=P′X=[A|a]X=Ax−avTx=(A−avT)x


  由该平面诱导的单应为x′=Hxx′=Hx,得 

H=A−avTH=A−avT


  很明显,这里的单应矩阵HH是有向量vv决定,是一个三参数单应簇。

 

  考虑对于已经有标定的双目相机矩阵的相机矩阵 

P=K[I|0]P′=K′[R|t]P=K[I|0]P′=K′[R|t]


  并且世界平面ππ的坐标为π=(nT,d)Tπ=(nT,d)T,则根据上面的结论,有v=b/dv=b/d,则对相机P=[I|0]P=[I|0],P′=[R|t]P′=[R|t]的单应为: 

H=R−tnT/dH=R−tnT/d


  加上内参矩阵KK,K′K′后则得到对应的单应为: 

H=K′(R−tnT/d)K−1H=K′(R−tnT/d)K−1


  这是一个三参数簇,由nT/dnT/d参数化,整个簇由该世界平面以及相机内参和两相机相对外参决定。 
  

 

总结

  我们可以从基本矩阵和单应矩阵的推导看到,基本矩阵不依赖于场景中的物体,只和两帧图像间的相对位姿和相机矩阵有关(本质矩阵则与相机矩阵无关)。而单应矩阵不仅仅和帧间的相对位姿有关,还和特定的世界平面有关。所以,当我们得到两帧图像并且知道图像中点的对应关系后,不论场景是什么样的,通过基本矩阵就都已经直接恢复出帧间的运动;而单应矩阵则不行,只有当匹配点都在特定的世界平面中,才可以使用单应来恢复帧间的运动。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基本矩阵、本质矩阵和单应矩阵 的相关文章

  • 摘要认证,使用HttpClient实现HTTP digest authentication

    文章目录 前言一 四个过程二 过程细节三 HttpClient 代码示例 前言 今天工作需要做了摘要认证 xff08 digest authentication xff09 xff0c 下面就工作中遇到的问题及过程做一个总结 一 四个过程
  • C语言之带参数的宏

    这两天在学习C语言 xff0c 发现宏定义挺有意思 xff0c 可以减少代码量 带参宏定义 的一般形式为 define 宏 名 形参表 字符串 带参宏调用 的一般形式为 xff1a 宏 名 实参表 xff1b define M X Y X
  • visual studio升级

    visual studio升级 概述升级步骤温馨提示 概述 有时处于开发要求或者安全要求 xff0c 需要将visual studio升级到最新的版本 本篇文章记录一下如何升级 升级步骤 1 找到visual studio的安装路径下的安装
  • STL中那些好用的东西!(持续更新)

    一 数据结构部分 1 set amp map xff08 后续持续更新 xff09 2 queue xff08 priority queue xff09 queue lt int gt a 定义 a push i 压入 a pop 弹出 a
  • 工业机器人虚拟仿真设计

  • HTTP详解

    一 什么是HTTP xff1f HTTP xff08 HyperText Transfer Protocol xff0c 超文本传输协议 xff09 是一个简单的请求 响应协议 xff0c 它通常运行在TCP之上 xff08 应用层 xff
  • android练习之为 TextView 添加监听器 ,添加后退按钮 ,从按钮到图标按钮

    为 TextView 添加监听器 NEXT按钮不错 xff0c 但如果用户单击应用的TextView文字区域 xff08 地理知识问题 xff09 xff0c 也可以跳转 到下一道题 xff0c 用户体验会更好 添加后退按钮 为GeoQui
  • ORA-01918: 用户 'SCOTT' 不存在 解决方法

    SQL gt alter user scott account unlock alter user scott account unlock 第 1 行出现错误 ORA 01918 用户 SCOTT 不存在 找到scott sql 文件 S
  • idea 里form表单action提交servlet文件出现报错

    由于在action的字符串中加了空格 xff0c 导致于于url pattern不匹配 xff0c 所以报错
  • 数据结构——二维数组

    二维数组可以理解为数组的数组 二维数组组织为矩阵 xff0c 可以表示为行和列的集合 但是 xff0c 创建二维数组以实现关系数据库外观相似的数据结构 它提供了一次容纳大量数据的便利性 xff0c 可以在任何需要的地方传递给任意数量的功能
  • 数据结构——链表

    链表是一种随机存储在内存中的节点的对象集 节点包括两个字段 xff0c 即存储在该地址的数据和包含下一节点地址的指针 链表的最后一个节点包含指向null的指针 1 链表的用途 链表不需要连续存在于存储器中 节点可以是存储器中任何位置并链接在
  • 多线程学习笔记--第一章 多线程技能(1)

    1 什么是进程 xff1f 进程是操作系统结构的基础 xff0c 是一次程序的执行 xff1b 是一个程序及其数据在处理机上顺序执行时所发生的活动 xff1b 是程序在一个数据集合上运行的过程 xff0c 它是系统进行资源分配和调度的一个独
  • 多线程学习笔记--第一章 多线程技能(2)

    1 currentThread方法 该方法返回代码段正在被哪个线程调用的信息 2 isAlive方法 判断当前线程是否处于活动状态 活动状态是线程已经启动且尚未终止 线程处于运行或准备开始运行的状态 如果将线程对象以构造参数的方式传递给Th
  • Qt编程过程中若给定一些数,把它们四舍五入后,保留两位小数

    double类型的数进行四舍五入后保留两位小数 场景实现方式方法一 方法二总结 场景 开发的过程中需要显示一些double类型的数 xff0c 但是又不能直接显示 xff0c 需要四舍五入之后保留两位小数 如 xff1a 0 124567
  • C语言中,头文件、源文件和库文件的关系(转)

    初学c xff0c 一直搞不懂几个概念 xff0c 偶然看到一篇比较好的文章 xff0c 转载一下 xff0c 原文https blog csdn net xhbxhbsq article details 78955216 一下是原文内容
  • 串口是怎样传输数据的

    概述 通过逻辑分析仪捕捉串口传输的数据来了解串口传输数据的实质 串行接口简称为串口 xff0c 串行接口 xff08 Serial Interface xff09 是指数据一位一位地顺序传送 实现双向通信就需要一对传输线 xff0c 即TX
  • 精准时空:让人工智能更智能

    如今科技界 产业界最热门的关键词是什么 xff1f 各地方政府给出了明确的答案 人工智能 8月的最后一周 xff0c 重庆 上海两大直辖市 xff0c 争先恐后地举办了以智能为主题的大会 精准时空能力 xff0c 作为机器智能的基础数据 x
  • 关于FindCM厘米级定位,这6个问题的答案你需要知道

    面对越来越复杂的应用场景 xff0c 单一的FindCM xff08 千寻知寸 xff09 产品 xff0c 已经无法满足不同行业客户的差异化需求 近日 xff0c 千寻位置完成FindCM产品分级 xff0c 推出了面向不同行业和应用场景
  • 千寻位置如何满足自动驾驶“刚需”

    自动驾驶 xff0c 本质是汽车产业的升级 自动驾驶技术在5G 人工智能和汽车行业的飞速发展下 xff0c 成为业界焦点 目前 xff0c 通用 一汽 广汽 北汽 吉利 长安等国内外主流车企都在进行自动驾驶技术研发 xff0c 而他们正在使
  • 自动驾驶汽车为什么需要高精度定位?干货都在这里

    2019年5月7日 xff0c 曾作为主PM驱动凯迪拉克 Jeep全系 福特全系车型Sync3导航产品研发 xff0c 现任千寻位置车端高精度定位解决方案经理的宋子未 xff0c 讲授了主题为 自动驾驶汽车为什么需要高精度定位 xff1f

随机推荐