相机基础及标定
1.学习目标
这堂课,我们主要学习相机的工作原理,光源,相机参数与标定等
- 能够理解
相机
和镜头
的关系 - 能够理解
小孔模型
- 能够理解
相机成像
的过程 - 能够理解
相机内参
- 能够理解
3D相机
工作原理 - 学会相机内参的标定
2.相机概述
相机是机器视觉的基础,相机直接产生了相机数据。所有视觉算法都是作用在相机数据上的。相机数据的好坏,或者,对相机数据的理解方式,直接决定了视觉算法的效果。
可以说:机器视觉是建立在对相机成像过程的深刻理解的基础之上的。
依据相机数据维度的不同,相机分为两类,
- 2D相机,可以产生图像数据,包括灰度图,彩色图等
- 3D相机,可以产生图形数据,包括深度图,点云图等
从工作原理来看,
2D相机可分为,
- CCD相机
- CMOS相机
3D相机可分为,
- TOF相机
- 双目相机
- 结构光相机
- 激光扫描仪
2.1小孔成像模型
为了理解相机成像原理,我们需要先理解小孔成像模型。
图1 小孔成像原理示意图
<div align="left">
上图是最原汁原味的小孔成像原理图,它描述的是三维空间中的点到图像平面(image plane)上的投影。
思考:
三维空间中的每个点,都在图像平面上有一个唯一对应的投影吗?
在实际的实现和应用中,为了表达的方便,通常会将图像平面放在小孔和三维场景之间。如下图所示,(这是大家在很多教科书,播客,专业书籍上能看到的图)
图2 小孔成像原理的一个实际实现的描述
图3 对图2的一些直观补充
<div align="left">
这里介绍几个概念,
- 光轴
- 光心,光轴中心点,即上图中的O点
- 焦距,光心到图像平面的距离
- 相机坐标系,X-Y-Z
- 图像坐标系,x,y
- 像素坐标系,u,v
我们首先来看看像素坐标:几乎所有的图像,像素坐标都如下图所示,
即:像素原点在图像的左上角,横坐标值表示列数c,通常以u表示;纵坐标值表示行数r,通常以v表示。
为了数学表达的方便,通常以光心为原点,建立一个图像坐标系。
下图详细的描述了这些关系。
下面详细推导下3个坐标系之间的对应关系,
利用相似三角形以及比例的原理,有以下公式,
where
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
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,
where the scaling factor s has value Z. In short hand notation, we write this as
3.透镜
实际成像时,如果小孔过小,则入射光的强度会受到影响,进一步会影响到成像。
另一方面,由于光的波动性,在小孔的边缘上,光将发生衍射,因此,这些光将在像平面上“散播”。当小孔变的越来越小时,入射光的“散播”范围将变得越来越大,因此,入射光中越来越多的能量将会被“散播”到:偏离入射光方向的“地方”。
为了解决小孔相机的上述问题,我们现在考虑:在成像系统中使用透镜。
一个理想的透镜具有如下两个性质:
- 它的投影方式和小孔模型相同
- 将一定数量的光线汇聚在一起。
3.1镜头的畸变
理想的透镜是没有畸变的。但是,因为制造和安装精度等方面的原因,镜头总是存在这畸变。
这里我们主要描述两种主要的透镜畸变,
- 径向畸变,这主要来自于透镜形状以及建模的方式
- 切向畸变,这主要来自于相机的装配误差
从径向畸变开始。实际摄像机的透镜总是在成像仪的边缘产生显著的畸变,如下图所示。对某些透镜,光线在远离透镜中心的地方比靠近中心的地方更加弯曲。
对径向畸变,成像仪中心(光轴)的畸变为0,随着向边缘移动,畸变越来越严重。当然,在实际的相机中,这种畸变比较小,而且可以用r=0位置周围的泰勒级数展开的前几项来定量描述。
下图显示矩形网格因径向畸变而产生的位移。越远离光轴中心的地方,矩形网格上的点偏移越大。
第二大常用畸变是切向畸变,是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的,如下图所示,
切向畸变可以用两个额外的参数p1和p2来描述,
下图描述了3种常见的畸变情形,桶形畸变通常k1>0,枕形畸变通常k1<0。
4. CCD & CMOS
通过透镜聚焦于像平面的光线,最终需要通过传感器来生成图像。目前,有两种最流行的数字传感器技术,
- CCD, charge-coupled device
-
CMOS, complementary metal-oxide semiconductor
两者的主要区别是从芯片中读出数据的方式即读出结构不同。下图描述了两者读出方式的不同。
4.1 CCD传感器
CCD传感器由一系列光线敏感的光电传感器组成,光电探测器能将光子转为电子并将电子转为电流。
曝光时,光电探测器累计电荷,通过转移门电路,电荷被移至串行读出寄存器从而读出。
每个光电探测器对应一个读出寄存器。
下图形象的描述了CCD传感器的工作原理。
4.2 CMOS传感器
CMOS传感器通常采用光电二极管作为光电探测器。
与CCD传感器不同,光电二极管中的电荷不是顺序地转移到读出寄存器,CMOS传感器的每一行都可以通过行和列选择电路直接选择并读出。因此,CMOS传感器可以当做随机读取存储器。
4.3 彩色相机
CCD和CMOS传感器,对于整个可见光波段全部有相应,所以无法产生彩色图像。
为了产生彩色图像,需要在传感器前面加上彩色滤镜阵列(color filter array, CFA)使得一定范围的光到达每个光电探测器。
下图展示了最常见的Bayer滤镜阵列。这种滤镜阵列由三种滤镜组成,每种滤镜都可以透过人眼敏感的三基色红,绿,蓝中的一种。由于人眼对绿色最为敏感,所以滤镜阵列中绿色采样频率是其它两种的两倍。
值得注意的是由于绿色采样是1/2,红、蓝是1/4,这就导致了严重的图像失真。通常在传感器前加上控图像失真滤光片。
下面分别给出CCD彩色相机的示意图,
5. 相机标定
到目前位置,相机的模型已经建立起来了,以下公式中的矩阵描述了相机的固有参数,
同时,镜头还存在物理上的畸变,同样可以用一个矩阵来表达,
决定这两个矩阵的过程,便是相机标定。
通常,把摄像机对准一个有很多独立可标识点的物体,在不同角度观看这个物体,进一步可通过每个图像来计算摄像机的相对位置和方向,以及摄像机的内参。
在内参标定完成后,可以对图像进行矫正。
假定(xp , yp )为点的真实位置,(xd , yd )为畸变的位置,有
通过下面的变换,可以得到没有畸变的标定结果,
通过去畸变,可以完成图像的矫正,如下图,