相机基础及标定
相机基础及标定
1.学习目标
这堂课,我们主要学习相机的工作原理,光源,相机参数与标定等
- 能够理解
相机
和镜头
的关系 - 能够理解
小孔模型
- 能够理解
相机成像
的过程 - 能够理解
相机内参
- 能够理解
3D相机
工作原理 - 学会相机内参的标定
可以说:机器视觉是建立在对相机成像过程的深刻理解的基础之上的。
依据相机数据维度的不同,相机分为两类,
- 2D相机,可以产生图像数据,包括灰度图,彩色图等
- 3D相机,可以产生图形数据,包括深度图,点云图等
2D相机可分为,
- CCD相机
- CMOS相机
- TOF相机
- 双目相机
- 结构光相机
- 激光扫描仪
为了理解相机成像原理,我们需要先理解小孔成像模型。
文章图片
20190603-172412.png 图1 小孔成像原理示意图
上图是最原汁原味的小孔成像原理图,它描述的是三维空间中的点到图像平面(image plane)上的投影。
思考:在实际的实现和应用中,为了表达的方便,通常会将图像平面放在小孔和三维场景之间。如下图所示,(这是大家在很多教科书,播客,专业书籍上能看到的图)
三维空间中的每个点,都在图像平面上有一个唯一对应的投影吗?
文章图片
20190603-203150.png 图2 小孔成像原理的一个实际实现的描述
文章图片
20190603-204059.png
文章图片
20190603-204220.png 【相机基础及标定】图3 对图2的一些直观补充
这里介绍几个概念,
- 光轴
- 光心,光轴中心点,即上图中的O点
- 焦距,光心到图像平面的距离
- 相机坐标系,X-Y-Z
- 图像坐标系,x,y
- 像素坐标系,u,v
文章图片
20190603-205145.png 即:像素原点在图像的左上角,横坐标值表示列数c,通常以u表示;纵坐标值表示行数r,通常以v表示。
为了数学表达的方便,通常以光心为原点,建立一个图像坐标系。
下图详细的描述了这些关系。
文章图片
20190603-172623.png 下面详细推导下3个坐标系之间的对应关系,
文章图片
20190603-210517.png 利用相似三角形以及比例的原理,有以下公式,
文章图片
20190603-210812.png
文章图片
20190603-210822.png where
文章图片
20190603-210919.png is a scale factor.
Now, the actual pixel coordinates (u,v) are defined with respect to an origin in the top left hand corner of the image plane, and will satisfy
文章图片
20190603-210933.png We can express the transformation from three dimensional world coordinates to image pixel coordinates using a 3X4
matrix. This is done by substituting equation (1) into equation (2) and multiplying through by Z to obtain,
文章图片
20190603-210947.png where the scaling factor s has value Z. In short hand notation, we write this as
文章图片
20190603-210959.png 3.透镜 实际成像时,如果小孔过小,则入射光的强度会受到影响,进一步会影响到成像。
另一方面,由于光的波动性,在小孔的边缘上,光将发生衍射,因此,这些光将在像平面上“散播”。当小孔变的越来越小时,入射光的“散播”范围将变得越来越大,因此,入射光中越来越多的能量将会被“散播”到:偏离入射光方向的“地方”。
为了解决小孔相机的上述问题,我们现在考虑:在成像系统中使用透镜。
文章图片
20190604-104419.png
文章图片
20190604-104556.png 一个理想的透镜具有如下两个性质:
- 它的投影方式和小孔模型相同
- 将一定数量的光线汇聚在一起。
理想的透镜是没有畸变的。但是,因为制造和安装精度等方面的原因,镜头总是存在这畸变。
这里我们主要描述两种主要的透镜畸变,
- 径向畸变,这主要来自于透镜形状以及建模的方式
- 切向畸变,这主要来自于相机的装配误差
文章图片
20190612-193625.png 对径向畸变,成像仪中心(光轴)的畸变为0,随着向边缘移动,畸变越来越严重。当然,在实际的相机中,这种畸变比较小,而且可以用r=0位置周围的泰勒级数展开的前几项来定量描述。
文章图片
20190612-202901.png 下图显示矩形网格因径向畸变而产生的位移。越远离光轴中心的地方,矩形网格上的点偏移越大。
文章图片
20190612-203624.png 第二大常用畸变是切向畸变,是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的,如下图所示,
文章图片
20190612-204250.png 切向畸变可以用两个额外的参数p1和p2来描述,
文章图片
20190612-204006.png 下图描述了3种常见的畸变情形,桶形畸变通常k1>0,枕形畸变通常k1<0。
文章图片
20190603-210947.png 4. CCD & CMOS 通过透镜聚焦于像平面的光线,最终需要通过传感器来生成图像。目前,有两种最流行的数字传感器技术,
- CCD, charge-coupled device
- CMOS, complementary metal-oxide semiconductor
两者的主要区别是从芯片中读出数据的方式即读出结构不同。下图描述了两者读出方式的不同。
文章图片
20190604-144504.png
CCD传感器由一系列光线敏感的光电传感器组成,光电探测器能将光子转为电子并将电子转为电流。
曝光时,光电探测器累计电荷,通过转移门电路,电荷被移至串行读出寄存器从而读出。
每个光电探测器对应一个读出寄存器。
下图形象的描述了CCD传感器的工作原理。
文章图片
20190604-144735.png 4.2 CMOS传感器
CMOS传感器通常采用光电二极管作为光电探测器。
与CCD传感器不同,光电二极管中的电荷不是顺序地转移到读出寄存器,CMOS传感器的每一行都可以通过行和列选择电路直接选择并读出。因此,CMOS传感器可以当做随机读取存储器。
文章图片
20190604-152128.png 4.3 彩色相机
CCD和CMOS传感器,对于整个可见光波段全部有相应,所以无法产生彩色图像。
为了产生彩色图像,需要在传感器前面加上彩色滤镜阵列(color filter array, CFA)使得一定范围的光到达每个光电探测器。
下图展示了最常见的Bayer滤镜阵列。这种滤镜阵列由三种滤镜组成,每种滤镜都可以透过人眼敏感的三基色红,绿,蓝中的一种。由于人眼对绿色最为敏感,所以滤镜阵列中绿色采样频率是其它两种的两倍。
值得注意的是由于绿色采样是1/2,红、蓝是1/4,这就导致了严重的图像失真。通常在传感器前加上控图像失真滤光片。
下面分别给出CCD彩色相机的示意图,
文章图片
20190604-143455.png 5. 相机标定 到目前位置,相机的模型已经建立起来了,以下公式中的矩阵描述了相机的固有参数,
文章图片
20190612-204741.png 同时,镜头还存在物理上的畸变,同样可以用一个矩阵来表达,
文章图片
20190612-204818.png 决定这两个矩阵的过程,便是相机标定。
通常,把摄像机对准一个有很多独立可标识点的物体,在不同角度观看这个物体,进一步可通过每个图像来计算摄像机的相对位置和方向,以及摄像机的内参。
文章图片
20190612-211621.png 在内参标定完成后,可以对图像进行矫正。
假定(xp , yp )为点的真实位置,(xd , yd )为畸变的位置,有
文章图片
20190612-212125.png 通过下面的变换,可以得到没有畸变的标定结果,
文章图片
20190612-220627.png 通过去畸变,可以完成图像的矫正,如下图,
文章图片
20190612-220907.png
推荐阅读
- JS中的各种宽高度定义及其应用
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- Python基础|Python基础 - 练习1
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 经历了人生,才知道人生的艰难!及精彩!
- Java|Java基础——数组
- 罗塞塔石碑的意义(古埃及文字的起源,圣书体文字是如何被破解的)
- 以太坊中的计量单位及相互转换
- Spark|Spark 数据倾斜及其解决方案