视觉SLAM十四讲读书笔记:Ch05相机与图像
这是我系列博客《视觉SLAM十四讲》的读书笔记中的一篇,总结了第五章“相机与图像”的内容。
1 相机模型
1.1 针孔相机模型
使用小孔成像来类比针孔相机模型:
我们有两个坐标系:
- 以光心为原点的相机坐标系
,光心用小孔来类比 - 物理成像平面坐标系
,其平行于相机坐标系的 平面并且距离为焦距
两个坐标系都是以向右为x轴正方向、向下为y轴正方向(参考使用opencv时的索引方法)
对于真实的物体

这样式子就变成了:
根据我们上面的描述,显然从成像平面到像素平面的过程需要缩放。同时,我们处理的图像的像素索引是没有负数的,因此还需要平移,我们可以把像素坐标
转换为齐次坐标,得到:
在上式中,我们使用的P是相机坐标,但是我们通常知道的是世界坐标
在上式中,
从另一个角度来看,我们由式子
1.2 畸变模型
相机的透镜可能会对成像产生影响。
由透镜形状引起的畸变(Distortion)称为径向畸变,分为两大类:桶形畸变和枕形畸变。

桶形畸变图形放大率随着与光轴的距离增加而减小,而枕形畸变相反。在这两种畸变中,穿过图像中心和光轴有交点的直线还能保持形状不变。
透镜组装与成像面没能严格平行,会引入切向畸变。可以看成坐标点沿着切线方向发生了变化,也就是水平夹角(极坐标描述)发生了变化。

为了描述径向畸变和切向畸变,对于归一化平面上的坐标为
- 将三维空间点投影到归一化图像平面,得到归一化坐标
- 对归一化平面上各点计算径向畸变和切向畸变
- 将畸变后的点通过内参矩阵投影到像素平面:
一般来说,我们会对整张图象进行去畸变,然后根据去畸变的图像讨论此图像上的点的空间位置。
最后我们总结单目相机的成像过程
- 世界坐标系下点P坐标为
- 相机的运动使用
描述,得到相机坐标系下点坐标为 - 对
归一化到 平面上得到 - 根据畸变参数对
进行去畸变 - 经过内参得到像素坐标
1.3 双目相机模型
单目相机无法确定深度,因此单目相机成像后,像素坐标对应的可能的相机坐标是一条直线:

双目相机类似于人眼,同步采集左右相机的图像,计算图像间视差,估计每一个像素的深度。

我们将两个相机都视为针孔相机,水平放置,光圈中心都在x轴上,两个光圈的距离称为基线,记作
考虑空间点
虽然视差计算公式很简洁,但是实际计算困难,因为我们不知道左眼图像的某个像素出现在右眼图像中的哪个位置。
1.4 RGB-D相机模型
RGB-D相机按照原理可以分为两大类
- 结构光(Structured Light):通过投射特定红外光图案并捕捉其在物体表面的变形,计算深度信息(如 Kinect 1、Intel RealSense)。
- 飞行时间(ToF, Time-of-Flight):通过测量光脉冲从发射到返回的时间来计算距离(如 Kinect 2、ToF 传感器)。
无论哪种方式,RGB-D 相机都会主动发射光(通常是红外光)获取深度,与 RGB 摄像头结合可生成三维彩色点云。结构光适合精度较高的近距离测量,而 ToF 更适合快速获取较大场景的深度信息。
2 图像
数学中,图像可以由一个矩阵来描述;在计算机中,可以用二维数组描述。以最简单的灰度图为例子,在一张灰度图里面,每个像素的位置unsigned char
)来表达灰度读数,那么一张宽度为640像素、高度为480像素的灰度图像可以表示为
1 | unsigned char iamge[480][640] |
在程序中图像以二维数组的形式存储,图像的列对应X轴(宽)、图像的行对应Y轴(高)。按照上述定义方式,一个位于
1 | unsigned char pixel = image[y][x] |
对于更加复杂的图像,有的需要采用16位整数来记录,有的则需要多个通道。