多视图几何总结——摄像机模型

  • 多视图几何总结——摄像机模型
    • 有限摄像机矩阵——推导
    • 有限摄像机矩阵——计算
      • (1)最小配置解
      • (2)超定解(DLT)
      • (3)几何误差
    • 仿射无限摄像机

多视图几何总结——摄像机模型

摄像机模型相对来说比较基础,针孔模型对于搞CV或者SLAM的人来说,是入门必须掌握的知识点,这里为了保证总结的完整性,同时也让自己再巩固下,抽了点时间进行一个简单的总结。
多视图几何中对于相机模型的介绍主要分为有限摄像机无限摄像机有限摄像机就近似于我们非常熟悉的针孔模型,而无限摄像机书中主要介绍的是仿射摄像机,下面分别总结分析下:

有限摄像机矩阵——推导

先上图

如上左图所示,我们需要将一个空间点XXX映射到一个图像点xxx上即
根据右上图我们很容易推到处下面的变换:
这个结论是将图像平面的原点设立在主轴与图像平面的交点上,而实际上我们默认的图像坐标系应该是位于图像的左上角,向下为x轴向右为y轴,因此我们这里进行一个坐标系调整(可以理解为在齐次坐标下对点进行一个平移):


则上面的矩阵可以改写为

这里的KKK就是内参,而XcamX_{cam}Xcam​指的是相机坐标系下的空间坐标,现在我们将其转到世界坐标系下
其中C~\widetilde{\mathrm{C}}C为摄像机中心在世界坐标系下的坐标,结合上面的内参我们可以将针孔模型的最终结论写成如下形式:
而我们所谓的摄像机矩阵就是
为了增加一般性,将KKK变为
其中sss为扭曲参数,这个参数的意义可以解释为像素元素产生的扭曲似的x轴和y周不垂直,在现实生活中,这个参数不为零的情况一般出现在对一张照片再次重拍的情况,所以参数sss一般是为零的。那为什么要这么做呢?因为这样我们可以将KKK看做是一个上三角矩阵,如果我们已经事先得到了相机矩阵PPP,我们可以很轻易地通过QR分解的分解的方法获得KKK和RRR,从而确定相机的内参和相机的相对于全局坐标系的方向,在相机标定中就是这么做的。
顺便提一句,上面这种情况下,相机矩阵一共11个自由度,秩为3.

有限摄像机矩阵——计算

有限摄像机矩阵计算的过程其实就是相机的标定过程,我们给定的数据是一组空间中的3D点XiX_iXi​和对应的2D图像点xix_ixi​,求解一个3×4的矩阵PPP满足xi=PXix_i=PX_ixi​=PXi​,这和计算单应矩阵、基础矩阵的方法几乎是一致的,可以参考多视图几何总结——基础矩阵、本质矩阵和单应矩阵的求解过程,这里简单分几种情况讨论下:

(1)最小配置解

上一节的文末提到了PPP矩阵的自由度是11,而我们一对点(指一个3D空间点和一个2D图像点)能构成两个约束,因此最小配置解需要的点的对数是6,但是最后一对点我们只需要知道x或者y方向的数据即可,最后构成一个Ap=0Ap=0Ap=0的方程,存在一维零空间,求解即可

(2)超定解(DLT)

在满足某个归一化的约束下,求∣∣Ap∣∣||Ap||∣∣Ap∣∣的最小值(为什么是这样可以参考刚刚提到的博客里面单应矩阵的求解方法,这里有一点不同的是,这里需要对3D空间点进行归一化,平移到原点后缩放使它们到原点的均方根距离是3\sqrt{3}3​,而不是2\sqrt{2}2​)

(3)几何误差

其实就是根据几何意义建立一个优化目标,通过非线性优化的方法进行迭代优化,如下式:
,这是以图像上的误差作为优化目标,当然我们也可以用空间点的误差作为优化目标,或者是两个误差一起优化,只是优化目标函数不同而已,这里可以将DLT或者最小配置解的结果作为迭代最小化的初始值,从书上的结果大概可以知道,非线性优化的方法会更加准确,但是肯定也会更加耗时。

上面提到的几种方法是不考虑约束的(s=0,α1=α2)(s=0, \alpha_1=\alpha_2)(s=0,α1​=α2​),上面的方法其实也是可以在带约束下进行求解的,简单地说就是在几何误差的方法中我将约束确定下来只优化剩下了没确定的六个参数,在DLT方法中就是进行一个矩阵映射,然后最小化映射后的结果。求出来矩阵PPP之后进行QR分解就可以获得KKK和RRR了

这里在实际的算法操作中(例如张正友标定法)是不是一致的我还没有来得及去确认…之后有时间再补上。

仿射无限摄像机

仿射无限摄像机可以将其理解为其摄像机中心在无穷远平面,而仿射性质体现在将无穷远点映射为无穷远点,怎么理解呢?可以参考下这篇知乎如何理解无穷远摄像机模型?,对比下面两张图片就明白了


第一张图是有限摄像机拍出来的结果,第二张图就是仿射无限摄像机拍出来的图,可以发现在现实生活中平行的线(楼角)在这张图片中也是平行的,这就是所谓的将无穷远点映射为无穷远点,用过Solidworks的同学应该记得咱们画图的时候就是用的这种视角,我对于这个理解就这么深了,这种相机矩阵在电影拍摄的场景中有所应用,在SLAM里面好像还没有注意到相关的应用,因此不再深究

ok,有问题欢迎交流~

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

多视图几何总结——摄像机模型相关推荐

  1. 《计算机视觉中的多视图几何》笔记(一)有限射影摄像机

    目录 前言 1.二维射影几何与变换 1.1数学基础 1.2射影变换 2.有限射影摄像机 2.1有限摄像机模型 2.2射影摄像机的几何含义 2.3射影摄像机对点的作用 2.3.1点对射线的反向投影 2. ...

  2. 多视图几何总结——从本质矩阵恢复摄像机矩阵

    多视图几何总结--等距变换.相似变换.仿射变换和射影变换 多视图几何总结--从本质矩阵恢复摄像机矩阵 (1)本质矩阵性质 (2)从本质矩阵恢复摄像机矩阵 多视图几何总结--从本质矩阵恢复摄像机矩阵 本 ...

  3. 多视图几何三维重建实战系列之MVSNet

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 1. 概述 MVS是一种从具有一定重叠度的多视图视角中恢复场景的稠密结构的技术,传统方法利用几何.光学 ...

  4. 多视图几何总结——三角形法

    多视图几何总结--三角形法 多视图几何总结--三角形法 线性三角形法 (1)齐次方法 (2)非齐次方法 几何法 (1)非线性优化法 (2)最优解法 误差分析 补充:深度滤波器 多视图几何总结--三角形 ...

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

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

  6. 基于多视图几何的三维重建

    前言 三维重建是计算机视觉研究的重要内容之一,是根据单视图或者多视图的图像重建三维信息的过程.        早期的三维重建更多的是通过在相机进行预标定.或相机按照特定轨迹运动的情况下进行重建,这样的 ...

  7. 多视图几何的数学基础知识的掌握(2)--李群李代数

    文章目录 前言 多视图几何的数学基础知识的掌握(2)--李群李代数 三维重建的起源 三维欧式空间 叉乘与反对称阵 刚体运动 刚体运动的表示 旋转的指数坐标 李群$SO(3)$ 李群与李代数 李群定义 ...

  8. 计算机视觉中的多视图几何<Part0—基础知识:射影几何、变换和估计>(1)

    1. 2D射影几何和变换 射影几何的概念和表示法是多视图几何分析的核心,使用齐次坐标就能用线性矩阵方程来表示非线性映射(例如透视投影):主要目的是为了从透视图像中恢复仿射和度量性质. 1.1 平面几何 ...

  9. 多视图几何中的三维重建

    1. 简介 资料来源为: 1)B站多视图几何三维重建视频讲解:https://www.bilibili.com/video/BV1Sj411f73e 2)武汉大学摄影测量与遥感专业博士李迎松的CSDN ...

最新文章

  1. 初学者SQL语句介绍
  2. 知名Node.js组件存在代码注入漏洞
  3. pythonjson数据提取_python爬虫学习笔记(十)-数据提取之JsonPath的使用
  4. java获取操作系统信息
  5. 解密万亿参数M6模型预训练背后的分布式框架Whale
  6. java虚拟机内存监控_java虚拟机内存监控工具jps,jinfo,Jstack,jstat,jmap,jhat使用...
  7. 前端与java绘制三维图_使用HTML5 Canvas绘制三维波浪图算法和实现
  8. SQL Server where语句使用举例
  9. 10许可证即将到期_食品经营许可证延续
  10. 【bzoj1604】[Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 旋转坐标系+并查集+Treap/STL-set...
  11. 串口485接法图_RS485通讯的正确接线方式介绍
  12. Nginx不解析PHP,无法打开PHP文件
  13. 服务器非80端口无法访问网页,使用非80网站访问服务器web提示需要备案呢?
  14. 断言(C++大师Andrei Alexandrescu的文章)
  15. react使用@tweenjs/tween.js实现数字动态增长
  16. (附源码)小程序校园拼车微信小程序 毕业设计 091617
  17. ios html背景音乐,iOS音频篇:使用AVPlayer播放网络音乐
  18. 小知识·CMake基本指令
  19. 一个简单的软件测试流程
  20. thinkphp源码无差别阅读(一)

热门文章

  1. 通俗讲解分布式锁,看完不懂算我输
  2. 本人真实经历:面试了20家大厂之后,发现这样介绍项目经验,显得项目很牛逼!...
  3. 两个月的打卡活动圆满结束,今天公布兑奖详情
  4. Error:Cannot build artifact ‘ssm:war exploded‘ because it is included into a circular dependency
  5. ViewFlipper的功能和用法
  6. 【Intellij IDEA系列】IDEA的Debug调试技巧
  7. Java中switch语句支持的类型
  8. 数据结构与算法—图论之dfs、bfs(深度优先搜索、宽度优先搜索)
  9. 在ListView中使用BaseAdapter进行适配
  10. Elasticsearch之mapping映射入门