想到学习下相机模型,是因为最近做的事情涉及到求解相机参数、恢复相机位置等。而在这里开博,主要也是当做学习笔记来用。其中【】表示引用和参考。

在相机模型中,针孔相机是相对简单而常用的模型。简单的说,针孔相机模型就是把相机简化成小孔成像,如图1【3】,f标注的距离是焦距。可以想见,这种简化对于精度要求高的情况或者广角相机是不适用的。但由于其用的是投影成像的方法,因此要先了解下投影变换。

图1

比较基础简单的投影变换有正交变换和透视变换。正交变换就是物体上的点全都平行地投射到投影面,没有远近的区别,即没有透视效果。透视变换正好相反,被投影物体处于一个四棱台区域中,物体被投影到离相机较近的平面上。相机被抽象为一个点,而投影点是物体上的点和相机的连线与投影平面的交点。由于投影的路径不再相互平行,因此会产生透视效果,这个随便自己画下就明白了。具体可以参考【1】。

针孔相机模型是基于透视变换的相机模型。其公式如图2【2】,而以字母表示矩阵,则如图3【2】。

图2

图3

其中m‘为屏幕uv坐标,A为相机内参,[R|t]为相机外参,M’为物体世界坐标,而s为物体在相机坐标系中的z坐标,这是公式推导过程中产生的参数。这里提到的相机内参是指仅由相机本身决定的参数,也就是对某一相机一旦这个值算好就不用再次进行计算。相对的,外参是和世界坐标系和相机位置有关的。

那么这个公式是如何产生的呢?相机模型是属于计算机3d视觉中的,而所谓3d视觉就是要建立二维图像和三维场景的联系,比较主要的一个用途是根据二维图片重建三维场景。所以一个自然的想法就是通过各种方式使得可以从三维坐标计算得到屏幕空间坐标或者相反。在进行推导之前,先要普及下齐次坐标的知识,因为所有推导都是在齐次坐标系下进行的。齐次坐标简单的来说就是将原来的坐标添加一个维度,比如[x,y,z]在齐次坐标系下就是[nx,ny,nz,n](n!=0),其中n为多少是无所谓的。针对于相机模型这个话题,也只会将[x,y,z]变为[x,y,z,1]。在对于图形图像的处理中,大量的使用到齐次坐标,因为这样在非齐次坐标系下需要通过加法进行的运算就都可以合并到乘法运算中去了,也就是合并为一个参数矩阵,各种方便。

想要推导这个公式,就要先分析相机及其所处环境的模型。将世界中的物体映射到屏幕上的整个过程,涉及四个坐标系。首先是世界坐标系,这个不用多说了。而相机本身也是世界中的物体,因此在世界坐标系中也有一个位置。但是还需要一个相对与相机位置不变的相机坐标系。一般这个坐标系的原点设在抽象出的针孔相机处,z轴为光轴。而相机的投影平面存在两个坐标系。投影平面是和相机相隔焦距距离并垂直于光轴的平面,一般位于z的正方向。这两个坐标系最大的区别是一个像前两个坐标系一样使用浮点数,其原点位于光轴和和投影平面的交点处,x、y轴与相机坐标系对应轴平行,如图4【4】。将三维空间物体投影到这样一个平面坐标系上是很直观的,但是对于计算机的显示来说,不但要求位置以像素为单位表示,而且最好值全是正数,才符合编程的需要。因此就产生了第四个坐标系——uv坐标系。这个坐标系的原点在显示屏幕的一个角上,使得显示部分全落在第一象限,同时坐标值是以像素为单位的正数。uv坐标和平面浮点坐标关系如图5【4】。

图4

图5

在此要注意下相机坐标系部分模型和实际相机的关系。实际相机的朝向在相机坐标系中应当是朝向负z方向,也是景物真实所在的方向。而在图4和很多其他图中都将真实景物的位置绘制在正z方向,个人理解是这样在推导上比较直观。景物在真实的位置,还要将投影好的影像颠倒位置才合理,而将其假想在负方向,不但推导容易,而且直接就得出所需的结果。

接下来就是详述如何进行公式的推导了。这部分基本参考马颂德等人的《计算机视觉》一书中的推导。

首先是由世界坐标系转换到相机坐标系,这部分使用图形学中基础的旋转平移矩阵的推导,不详述了,以后有时间再补上。可以得到如下等式,如图6

图6

其中,带有下标w的代表世界坐标系,而带有下标c的表示相机坐标系,R、t分别表示旋转与平移矩阵。

继而是由相机坐标系到投影平面的转换,使用的是相似三角形的原理,有如图7所示关系。由于全部过程使用齐次坐标系,对于这个关系也尽量使用齐次坐标和矩阵,如图8。Zc这个系数被单独放在等号左边作为系数,是为了凑出[Xc, Yc, Zc, 1]。

图7

图8

之后处理投影平面上的坐标系转换,其中使用浮点数作为单位的坐标系,在此称为浮点平面坐标系。uv坐标系和浮点平面坐标系的关系如图5所示。在这里注意到《计算机视觉》中的图示都是y轴向下的,感觉是因为uv坐标的原点是设置在屏幕左上角,v轴向下的。这样设置是由于习惯还是计算机显存将较高部分像素标记为较小序号等原因还没有考证过,但是可以想见y轴都向下是为了推导方便,而且如果全部翻转向上应该也是没有影响的。

设想uv坐标系中每个像素在浮点平面坐标系中在x方向长dx,在y方向长dy,浮点平面坐标系在uv坐标系中的位置是(u0, v0)。则它们有如图9所示关系。依旧要用齐次坐标表示,如图10。

图9

图10

至此,便可以将几个矩阵合并,最终得到一个uv坐标系与世界坐标系的关系,如图11。可以注意到内参全部是由相机本身确定的,而外参是需要根据相机位置变化的。

图11

参考资料

【1】http://netclass.csu.edu.cn/NCourse/hep089/Chapter5/CG_Txt_5_033.htm

【2】http://wiki.opencv.org.cn/index.php/Cv%E7%85%A7%E7%9B%B8%E6%9C%BA%E5%AE%9A%E6%A0%87%E5%92%8C%E4%B8%89%E7%BB%B4%E9%87%8D%E5%BB%BA

【3】http://baike.baidu.com/view/104209.htm?fr=aladdin

【4】《计算机视觉》,马松德等

相机模型——针孔相机相关推荐

  1. 针孔相机、鱼眼相机模型推导

    针孔相机.鱼眼相机模型 一.针孔相机模型 空间的三维物体要成像到相机的 CMOS/CCD 上面,形成了图像.图像上的每个点对应空间上的一个点. 将世界坐标系上的一点 (x,y,z)映射到CMOS/CC ...

  2. 几种相机模型:针孔相机模型、双目相机模型、RGB-D相机——SLAM学习笔记5

    几种相机模型:针孔相机模型.双目相机模型.RGB-D相机 针孔相机模型 双目相机模型 RGB-D相机模型 针孔相机模型 针孔相机是最简单的相机,很多相机也可以看作是针孔相机来进行处理.如图1所示,空间 ...

  3. 相机标定(五)—— 相机模型详细介绍

    相机模型 相机与图像的一些基本概念 针孔相机模型 坐标系介绍 世界坐标系 相机坐标系(光心坐标系) 图像坐标系 像素坐标系 成像过程的数学模型 世界坐标系->相机坐标系 相机坐标系–>像平 ...

  4. 传统图像处理之相机模型

    博主简介 博主是一名大二学生,主攻人工智能研究.感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c++,Python,爬虫等方面知识的分享. 如果有需要的小伙伴可以关注博主,博主会继续更新 ...

  5. 相机模型-Unified Camera Model

    相机模型-Unified Camera Model 模型介绍 投影过程 反投影过程 雅可比计算 开篇不知道说啥了,直接开始吧. 模型介绍 这个相机模型在其它地方又被叫做 Omnidirectional ...

  6. 2.3ORBSLAM3之相机模型与畸变模型

    1.简介 主要内容: 1. 对SLAM中常见的相机模型进行介绍,包括针孔相机模型和鱼眼相机模型 2. 对每种相机模型的畸变模型进行介绍 3. 对VSLAM中常见的几种去畸变方法进行介绍 4. 对常见的 ...

  7. OpenCV——将针孔相机模型图片转换成鱼眼相机模型图片

    一 理论基础 关于针孔相机模型,参考博客: 关于鱼眼相机模型,参考参考文献[1][2]. 这里只需要知道我们这里使用的鱼眼相机模型是等距投影的鱼眼相机模型,即r=fθ(1),而针孔相机模型是透视投影, ...

  8. 视觉SLAM——针孔相机模型 相机标定原理 双目相机模型 深度相机对比

    前言 本博客为主要学习<视觉SLAM十四讲>第5讲.<机器人学的状态估计>第6章6.4.1透视相机.<多视图几何>第5章摄像头模型等SLAM内容的总结与整理. 主要 ...

  9. 针孔相机(透视相机模型)

    大多数运动结构(线性和非线性)技术都是从假设透视投影模型开始的,如图 3所示,该模型可以追溯到 Durer 和文艺复兴时期的画家.替代投影模型包括副透视或正交案例.在这里,三个 3D 特征点投影到图像 ...

最新文章

  1. 383. Ransom Note/691. Stickers to Spell Word-- String, Map, back tracking-- 未完待续
  2. 一个比 Spring Boot 快 44 倍的 Java 框架
  3. Minimum supported Gradle version is 6.1.1
  4. GSM手机SMS编码解码
  5. RandomStringUtils的使用
  6. windows隐藏python运行时的终端
  7. window下的Django环境搭建
  8. Ubuntu 下如何查看已安装软件版本
  9. ORCU浅析之安装和作用
  10. wordpress主题怎样获取当前用户的相关信息?
  11. 打破国外垄断,开发中国人自己的编程语言(1):编写解析表达式的计算器
  12. m3u8格式视频源列表
  13. 中英对照的网络游戏术语
  14. 什么是ACL和RBAC
  15. 松下gh6参数 松下gh6评测
  16. 帧中继环境中NBMA模式下OSPF的配置
  17. 《第一堂棒球课》:王牌二垒手·棒球4号位
  18. MySQL优化/面试,看这一篇就够了
  19. 总结餐饮行业现状痛点
  20. 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

热门文章

  1. java web打印 (记录一下,自己使用)
  2. 荣威之后是名爵,上汽对YunOS是真爱,但还不够?
  3. c-nasm简易的汇编语言编译器(nasm、nask语法)
  4. linux 路由跟着命令,Linux基础命令---tracepath追踪路由
  5. 小妍老师软考真题解析!!信息系统项目管理师(高项)--最新23年5月(案例分析)
  6. 7.服务器内部转发以及客户端重定向
  7. 大数据信息资料采集:美国财富500强企业信息资料采集爬取
  8. ip地址phpinfo.php,本地主机/phpinfo.php
  9. 平衡之道:区块链是一场非常大型的社会实验(圆桌实录)
  10. CSS中详解height属性