多视图几何总结——基础矩阵、本质矩阵和单应矩阵的求解过程

  • 多视图几何总结——基础矩阵、本质矩阵和单应矩阵的求解过程
    • 1. 说明——其实求解过程大同小异
    • 2. 单应矩阵求解过程
      • 2.1 基于代数误差的线性估计
        • 2.1.1 解法一:最小二乘法 / 高斯消去法(最小配置解情况)
        • 2.1.2 解法二:DLT算法
      • 2.2 基于几何误差的非线性估计
    • 3. 基础矩阵求解过程
      • 3.1 基于代数误差的线性估计
        • 3.1.1 七个点——最小配置解情形
        • 3.1.2 八个点——线性解法
        • 3.1.3 n个点——八点法
      • 2.2 基于几何误差的非线性估计
    • 4. 本质矩阵求解过程
      • 4.1 基于代数误差的线性估计
        • 4.1.1 八点法
        • 4.1.2 五点法

多视图几何总结——基础矩阵、本质矩阵和单应矩阵的求解过程

在《视觉SLAM十四讲》中,仅仅给出了基础矩阵、本质矩阵和单应矩阵的推导过程,并没有详细给出其求解过程,再看过《计算机视觉中的多视图几何》之后才发现这里面原来有这么多巧妙的地方,因此在这篇文章中予以总结。

1. 说明——其实求解过程大同小异

为什么说求解过程大同小异呢,不管是那种矩阵,在求解方法的分类上大致是都可以分为基于代数误差的线性估计基于几何误差的非线性估计,在基于代数误差的线性估计中,不管是那种矩阵最后的形式一般都是Ax=bAx=bAx=b其中AAA是由匹配的点构成的矩阵,而xxx是由待解的基础矩阵或者单应矩阵的元素构成的向量,bbb是根据解法的不同而不同,在基于几何误差的非线性估计中,又几乎都有黄金标准方法(重投影误差)和一阶几何误差(Sampson距离)等方法,因此我个人觉得是比较相似的,因此,我下文主要是单应矩阵的求解过程详解,其他矩阵主要说明不同。

2. 单应矩阵求解过程

2.1 基于代数误差的线性估计

首先我们知道,单应矩阵的对应点的方程为:Hxi=xi′Hx_i=x'_iHxi​=xi′​其中有

通过令xi′=(xi′,yi′,wi′)x'_i=(x'_i,y'_i,w'_i)xi′​=(xi′​,yi′​,wi′​),求解xi′×Hxi=0x'_i×Hx_i=0xi′​×Hxi​=0有

整理得

容易观察到左边的矩阵仅有两个是线性独立的,因此可以方程组变为

注意上面都是针对一个点变换的,因此知道,一对匹配点可以构造出两个方程,而我们的单应矩阵自由度是8,因此我们最少需要四对点进行求解。

2.1.1 解法一:最小二乘法 / 高斯消去法(最小配置解情况)

上面方程的右侧是一个9维的向量,其实就是H矩阵九个未知量,根据尺度不变性的理解,这里第一种方法是将尺度不变性理解为九个元素中间的某一个为1,这样就消除了尺度不变性,假定选择最后一个元素为1的话,方程就可以转换为《视觉SLAM十四讲》里面的方程

这是一个线性方程组,如果匹配点的数量多于4对点的话,就是超定方程,采用最小二乘法,如果是4对点的话,就是普通的非齐次线性方程组,采用高斯消去法就可以。
这种方法的确定是,如果所选为1的元素接近0,结果将导致不稳定解,因此更推荐解法二。

2.1.2 解法二:DLT算法

上述方程形式为Ah=xAh=xAh=x,其中矩阵AAA为的秩为8,未知向量hhh的维数为9,如果四对点都是准确点的话,上述方程存在一维的零空间,即存在一个线性解,但是如果匹配点都存在误差的话,通常的做法是在约束∣∣h∣∣=1||h||=1∣∣h∣∣=1的最小化范数∣∣Ah∣∣||Ah||∣∣Ah∣∣,即求∣∣Ah∣∣/∣∣h∣∣||Ah||/||h||∣∣Ah∣∣/∣∣h∣∣的最小值问题,该问题解为ATAA^TAATA的最小特征值的特征矢量,也就是AAA的最小奇异值的奇异矢量,总之其基本DLT算法步骤如下:

在多视图几何中证明了,DLT算法的结果与点的坐标系有关,为了相处坐标系的影响同时使DLT算法关于相似变换不变,提出了归一化的问题,包括图像坐标的平移和尺度缩放,而归一化是再DLT之前必须实施的。其步骤如下:
(1)对点进行平移使其形心位于原点
(2)对点进行缩放使他们到原点的平均距离等于2\sqrt{2}2​
(3)对两幅图独立进行上述变换
因此归一化的DLT算法如下:

2.2 基于几何误差的非线性估计

几何误差分好几种情况,包括单图像误差对称转移误差重投影误差,如下图

上图的上半图就是对称转移误差,表示为

上图的下半图就是重投影误差,表示为

可以通过DLT获得其初始值,然后通过牛顿法或者列温伯格法进行迭代下降求得最后的值。

基于代数误差的方法会更快,而基于几何误差的方法会根据鲁棒性

3. 基础矩阵求解过程

3.1 基于代数误差的线性估计

基础矩阵的求解方法和单应矩阵就比较相似啦,不过还是有区别的,首先基本矩阵的方程如下:xiFxi′=0x_iFx_i'=0xi​Fxi′​=0与单应矩阵不同的是,对于基本矩阵一对点只能确定一个约束方程,给定n对匹配点就得到如下方程组

下面我换个思路按照点的数量多少对求解方法进行分类:

3.1.1 七个点——最小配置解情形

当矩阵A的秩为7时,其解空间维数为2,因此会有F1F_1F1​和F2F_2F2​两个解,同时FFF又要满足det(F)det(F)det(F)的要求,因此添加一个强迫约束det(αF1+(1−α)F2)=0det(\alpha F_1+(1-\alpha)F_2)=0det(αF1​+(1−α)F2​)=0,此种情况下矩阵可能有一种或者三种解。

3.1.2 八个点——线性解法

这就是解解空间为1维的线性方程组

3.1.3 n个点——八点法

多视图几何中将n个点的解法成为八点法(明明不是八个点…)

其实就对应着前面的求解单应矩阵的DLT算法,归一化的8点法就是归一化 DLT算法,在此不赘述,需要注意的一点是,单应矩阵不是奇异矩阵,而基础矩阵是奇异矩阵(为什么是奇异矩阵参见MVG总结——基础矩阵、本质矩阵和单应矩阵的自由度分析),因此需要添加一个强迫约束, 即求解在Frobenius范数下最接近FFF的奇异矩阵F′F'F′代替FFF,采用SVD分解,具体解法如下:

2.2 基于几何误差的非线性估计

多视图几何中介绍的除了重投影误差,还介绍了一种对称对极点距离的几何误差,如下:

这里顺便插一句,目前state of art的一种过滤动态物体的算法就是基于这种思想完成的DS SLAM

4. 本质矩阵求解过程

4.1 基于代数误差的线性估计

4.1.1 八点法

本质矩阵的八点法求解与基础矩阵是一致的,不同的一点是其强迫约束不同,因为本质矩阵的性质中有一条是其奇异值分解的两个非零奇异值相等,因此再SVD的处理中按照如下方式处理;

4.1.2 五点法

5点算法的大概思路就是把本征方程展开,再加上本质矩阵的充要条件。化简后得到一个高次多项式方程,该多项式实数解中的一个确定出的本质矩阵是系统的真实本质矩阵,对伪解进行剔除。该方法的具体原理可见论文An efficient solution to the five-point relative pose problem

总结大致如此, 有什么问题欢迎交流~

此外,对SLAM算法感兴趣的同学可以看考我的博客SLAM算法总结——经典SLAM算法框架总结

多视图几何总结——基础矩阵、本质矩阵和单应矩阵的求解过程相关推荐

  1. 单应性矩阵和仿射变换_单应矩阵 基本矩阵 本质矩阵的区别与联系

    1. 叉乘 2. 双目系统 3. 对极几何 (Epipolar Geometry) 对极几何定义:是两个视图间的内部射影几何,它只与摄像机的内部参数和相对位姿有关,与场景结构无关. 基线(baseli ...

  2. 多视图几何总结——单应矩阵和基础矩阵的兼容关系

    多视图几何总结--单应矩阵和基础矩阵的兼容关系 多视图几何总结--单应矩阵和基础矩阵的兼容关系 (1)单应矩阵和基础矩阵的兼容性 (2)基础矩阵 -> 单应矩阵 (3)单应矩阵 -> 基础 ...

  3. H(单应矩阵homography),本质矩阵(Essential Matrix)和F(基础矩阵fundamental)

    文章目录 A x = 0 Ax=0 Ax=0 问题的求解 H(单应矩阵homography),本质矩阵(Essential Matrix)和F(基础矩阵fundamental) 单应矩阵 求解H步骤 ...

  4. 三维重建1-位姿追踪:单应矩阵、本质矩阵和基本矩阵

    从今天起,好好复习一下面试到的题目,把研究生时期学习的,工作时间忘记的东西再补回来. 本文所写与原文相距甚远,如有疑问,请拜访原文.未经允许大量盗图,如有不满,请联系删除. 更多的细节请参考多视几何一 ...

  5. linux vim编辑矩阵乘,LM算法计算单应矩阵

    LM算法计算单应矩阵 slam 单应矩阵 单应矩阵的定义 什么是单应矩阵呢?其实简单来说,就是两个图像之间的变换矩阵.什么意思呢,可以考虑这样一个情形: 你有一个相机,拍摄一个建筑物,首先在某一个视角 ...

  6. 单应矩阵(Homography)基本概念和代码测试

    简 介: 应用棋盘格图片或者相机图片中与标准棋盘格之间的单应矩阵.其中应用到opencv中的findChessboardCorners, findHomographys等函数. 这位利用单应矩阵进行下 ...

  7. 多视图几何总结——基础矩阵、本质矩阵和单应矩阵的自由度分析

    多视图几何总结--基础矩阵.本质矩阵和单应矩阵的自由度分析 多视图几何总结--基础矩阵.本质矩阵和单应矩阵的自由度分析 总结 基础矩阵自由度 (1)几何推导 (2)代数推导 (3)直观理解 本质矩阵自 ...

  8. 极几何,本质矩阵,基础矩阵,单应矩阵,相机投影矩阵

    什么是三角化? 三角化就是下图的红字部分:K和K'分别为两个相机的内参矩阵 什么是极几何? 极几何描述了同一场景或者物体在两个视点图像间的对应关系. 下图中的O1和O2分别是两个相机的光心,即摄像机坐 ...

  9. 计算机视觉三维重建的几何基础:坐标系与关键矩阵(基础矩阵、本质矩阵、单应矩阵)...

    作者丨李迎松@知乎 来源丨https://zhuanlan.zhihu.com/p/159194599 编辑丨3D视觉工坊 你站在桥上看风景, 看风景人在楼上看你. 明月装饰了你的窗子, 你装饰了别人 ...

最新文章

  1. OC封装的轮播图-只用调用即可
  2. ‘Series‘ object has no attribute ‘sort‘
  3. 一个页面中多个window.onload = function(){}冲突问题解决思路
  4. PHP自动加载类的实例
  5. mac m1下golang连接mysql极速入门
  6. php 上一个月的开始和结束,php获取上一个月的开始与结束时间遇到的问题
  7. pdo一次插入多条数据的2种实现方式
  8. 用yacc编写的算术运算计算器_如何用纯机械实现乘除运算,这是个问题
  9. 参考文献中英文人名_参考文献中英文人名的缩写规则
  10. NSArray去除重复元素
  11. 江苏省公安厅交管高速公路硬件扩容备份一体机项目
  12. 使用excel、python、tableau对招聘数据进行数据处理及可视化分析
  13. 题解 P1004 【方格取数】
  14. Bias-variance trade off
  15. 关于“元宇宙”,讲点你能听懂的
  16. iTextSharp 使用详解(转) 感谢原著作者
  17. JVM系列(十三)——垃圾回收器
  18. python 远程操作Sqlite3
  19. 渗透工程师日常探测漏洞全流程 初学者必看
  20. 初识Excel的IF, IFERROR, MATCH, COUNTA公式

热门文章

  1. 我这样写代码,比直接使用 MyBatis 效率提高了 100 倍
  2. 介绍一款贼美的Vue+Element开源后台管理UI
  3. 并发基础篇(六):线程Thread类的start()方法和run()方法
  4. struts2教程--快速入门
  5. 2021-9-下旬 数据结构-线性表-动态数组-java代码实现
  6. js日期初始化总结:new Date()参数设置
  7. 注册jdbc驱动程序的三种方式
  8. 【小练习03】CSS-表格(table)--天气预报
  9. 一天搞定CSS: 浮动(float)的副作用--12
  10. java输出打印到文件_log4j简单使用java项目--后台打印以及输出到文件