我们平常接触到的世界是3维的,但是计算机视觉的研究中,感知到的信息都是二维的图像。从三维的世界到二维的图像的转换通过相机投影完成。这是3d点到2d点映射的过程。

相机模型

设映射前的点为X=[X1,X2,X3]TX=[X_1,X_2,X_3]^TX=[X1​,X2​,X3​]T,得到的图像中的点的像素坐标为x=[x1,x2]Tx=[x_1,x_2]^Tx=[x1​,x2​]T。则有
x=F(X)x=F(X)x=F(X)
F即为相机的成像模型。

常见的相机模型有针孔模型(pinhole camera),全景模型(omnidirectional,即我们一般所说的鱼眼相机)。前者是计算机视觉中应用最广泛的模型,目前的大多数设备可以使用这一模型进行近似,因此这里只介绍针孔相机模型。

针孔相机模型

针孔相机使用小孔成像的原理,模型如图所示。
图中M为世界坐标系一点,R为像面。C为相机光心。成像的过程可以近似的看成从M向C发出一条光线,落在像面的过程。需要注意,这里的像面其实是为了简化模型人为规定的一个平面,通常假设它的到相机的距离为1,称为归一化平面。

按照图中的投影过程,为得到世界坐标系一点XwX_wXw​在图像上的坐标xxx,我们需要先得到它在相机坐标系中的坐标

Xc=Rcw∗Xw+tcwX_c = Rcw * X_w + tcwXc​=Rcw∗Xw​+tcw

通过简单的相似三角形知识,我们可以得到得到XcX_cXc​在归一化平面上的坐标

Xn=Xc/Xc(2)X_n = X_c/X_c^{(2)}Xn​=Xc​/Xc(2)​

为将归一化平面上的坐标转换为像素,我们需要使用相机的内参。

相机内参的形式如下

K=[fx0cx0fycy001]K = \begin{bmatrix} fx & 0 & cx \\ 0 & fy & cy \\ 0 & 0 & 1 \end{bmatrix}K=⎣⎡​fx00​0fy0​cxcy1​⎦⎤​

其中fx,fy是焦距,表征了物理尺寸到像素距离的映射。在相机坐标系中一般认为光心在原点,而在图像中坐标系原点在左上角,因此在这里需要进行一个变换。我们使用cx,cy表示光心在图像中的偏移。

相机内参一般通过标定获得或者预先从摄像头厂家获得,给定相机内参,我们可以算出XnX_nXn​对应的图像中的位置Ximg=KXnX_{img} = KX_nXimg​=KXn​,这是一个三维向量,我们通常使用的x=(u,v)=Ximg[0:2]x = (u,v) = X_{img}[0:2]x=(u,v)=Ximg​[0:2]

由此我们得到了相机的投影模型。原则上可以将这几步合并起来得到一个表达式,读者可以自行推导。

像差

实际情况中我们使用的并非针孔而是透镜进行投影成像。也由此引入了各种误差。由这些误差在成像上的表现被称为像差,在颜色上的误差成为色差。

常见的像差包括球差、 彗差、 像散、 场曲、 畸变。反应到具体应用中我们一般只关心畸变。下图是常见的畸变形式

通过对相机进行标定,我们可以有效去除这些畸变。具体的方法这里不再赘述。

有几个人私聊我催更SLAM系列,我本来是想写的,但是看了下得先讲相机模型,再讲对极几何和点的跟踪,然后才能讲SLAM中的前端部分。

MVG读书笔记——相机模型相关推荐

  1. CV学习笔记-相机模型(欧式变换及仿射变换)

    相机模型 1.相机模型原理 1. 相机成像 相机成像是一个小孔成像模型,将现实生活中的三维空间物体映射到二维的成像平面上,进而生成二维的图像. 相机模型中的坐标系: 世界坐标系Pw(Xw, Yw, Z ...

  2. 深入理解JVM虚拟机读书笔记——内存模型与线程

    注:本文参考自周志明老师的著作<深入理解Java虚拟机(第3版)>,相关电子书可以关注WX公众号,回复 001 获取. 1. Java内存模型 JMM概述: Java 内存模型指的是 JM ...

  3. css --- [读书笔记] 盒模型(边框、内外边距)

    说明 源代码 学习 盒子模型(css重点) css学习三大重点: css盒子模型. 浮动. 定位 目标: 能说出盒子模型由哪四部分组成: 内容.边框.内外边距 能说出内边距的作用,设置不同数值分别代表 ...

  4. MVG读书笔记——单应矩阵估计这件小事(一)

    参数估计是计算机视觉中经常遇到的一个问题,为较好的估计参数,人们发明了各种各样的算法.这里我们就以单应矩阵H的估计为例,一个个介绍这些常用算法. DLT算法 DLT(direct linear tra ...

  5. MVG读书笔记——求解结果的评价

    在求出模型之后,我们往往需要对模型的正确性进行评估.这种正确性取决于许多因素,包括使用的点的数量和精度,匹配准确度,数据点之间的关系等(比如同一条直线附近的几个对应点对求出的单应矩阵可能在垂直于直线的 ...

  6. MVG读书笔记——射影变换的校正(二)

    虚圆点(circular points) 上一节讲到仿射变换中无穷远处的直线是固定的.而其上的点是不固定的.这很容易理解,对一条直线沿着它的切线方向平移,直线方程不变,但是上面的点的坐标却发生了变化. ...

  7. MVG读书笔记——射影几何下的二次曲线

    双曲线.椭圆.抛物线等统称为二次曲线(或圆锥曲线),它其实是三维空间中圆锥在截面上的投影,如图 齐次坐标下的二次曲线表示 二次曲线的在欧氏空间的方程为 ax2+bxy+cy2+dx+ey+f=0ax^ ...

  8. MVG读书笔记——几何变换续

    上一篇文章讲了欧氏变换和相似变换,这篇文章接着介绍剩下的变换.包括仿射变换和射影变换. 仿射变换 前面介绍了旋转.平移.缩放几种基础的变换.仿射变换则是在它们的基础上加上了类似于四边形不稳定性那种性质 ...

  9. MVG读书笔记——单应矩阵估计这件小事(二)

    还是以两幅图像进行单应矩阵求解为例,上面讲到使用DLT算法一对对应点之间可以构成一个方程组Ah=0Ah=0,其中A为一个2×92 \times 9的矩阵.由此只需要4个点就可以求解出H矩阵.但是在实际 ...

最新文章

  1. redis实现购物车
  2. python小数补0,python用零填充小数
  3. 机器学习算法概述:随机森林逻辑回归
  4. 利用R和Octave求解线性方程组
  5. diff算法_Virtual Dom和Diff算法
  6. java显示毫秒改成分钟_【转】java获取当前年、月、日 、小时 、分钟、 秒、 毫秒...
  7. Linux命令发送Http请求
  8. 全球闪存供应紧张 新iPhone涨价只是开始
  9. php导入rtf文件获取内容,可以使用PHP在网页中显示RTF文件吗?
  10. Matlab 数据类型
  11. Python Intro - xrange obsoleted by Python3
  12. windows10虚拟桌面快捷键
  13. 毕业设计开发日志,基于ARM的嵌入式人脸识别系统的设计与实现
  14. 我的世界 MineCraft RPG 服务器版本选择不完全指北 (内含 我的世界 版本更新内容盘点)
  15. 曹胜欢,java那些事儿
  16. VM虚拟机:VMware Kernel Module Updater
  17. FTP主动和被动模式(详解+图示)
  18. 什么是物联网?定义和解释
  19. 微信小程序自定义模态框
  20. Neo4j笔记(二)Cypher(6)UNWIND和FOREACH

热门文章

  1. 基本电路概念(二)什么是电容?
  2. win7企业版安装vmtool提示无法进行,需要更新到SP1。【不换镜像,已解决】
  3. JavaSE_day14Map集合和Map集合的实现类
  4. Layui 表格 list页显示图片
  5. 南宁计算机专业学校排名,学校排名
  6. 高球嘉年华:2021高博会非去不可的六个理由
  7. 魔力鸭linux驱动下载,魔力鸭原厂2108s固件
  8. 兼职项目分享,在家就可以做的八个副业项目,利用业余时间增加收入吧
  9. 赋值运算符重载和日期运算代码
  10. 计算机测试word总是零分,word excel做好后评分为什么是0分