Camera Model#
我们先来看看2D的图像是怎么形成的。其本质是外界的光线进入相机,在相纸上成像
如果不加限制的话,来自任意地方的光线可以从任何方向进入相机,相纸上的每个pixel被来自不同方向的光线照射,很多时候会变成白色
为了得到清晰的图像,我们要控制相纸上每个点只能收到来自物体上一个点的光线,这就是小孔成像
Pinhole Camera#

在相纸和物体之间放一个barrier,在上面开一个小孔,这样相纸上每个点只能收到来自物体上一个点的光线,形成了一个倒像

这里我们给一些参数:
- f:小孔平面到相纸平面的距离,叫做焦距
- P:物体上一个点,坐标为(x,y,z),其中Z是物体到小孔平面的距离
- P′:相纸上对应的点,坐标为(x′,y′)
根据三角形相似,我们可以得到:
fx′=zx,fy′=zy
Pinhole camera的小孔大小不好控制,太大了会导致图像模糊,太小了会导致图像暗淡
Paraxial Refraction Model#
我们用棱镜来替代小孔,棱镜(这里是凸透镜)可以让光线发生折射,控制光线的方向,使得相纸上每个点只能收到来自物体上一个点的光线

所有平行于凸透镜的光线经过折射后会聚焦到一个点,这个点叫做焦点,焦距就是凸透镜到焦点的距离

同样的,给定一些参数,我们也可以计算物体折射后在相纸上的位置:
z′x′=zx,z′y′=zy
其中z′=z0+f
景深问题:当物体距离相机不在某个范围内时,图像会模糊(即光线没有聚焦在相纸上),这个范围叫做景深
Radial Distortion:只有在距离相机中心较近的地方,图像才会符合上面的规律,距离较远的地方光线会出现弯曲,这就是径向畸变
Camera Geometric Model#
Intrinsics#
我们再来看一下上面的坐标变换
上述变换的本质是进行一个映射 E:R3→R2,此外我们还需要完成两件事:
- 从实际的度量(米)转换到 pixel 为单位
- 在图片中,左下角为零点,而非中心,因此需要添加 offset
因此有:
P=(x,y,z)→P′=(x′,y′)=(αzx+cx,βzy+cy)
其中 α 和 β 是 x,y 两个方向 f 对应的 pixel 数目,cx 和 cy 是 offset,以pixel为单位
这个映射不是线性的,无法用矩阵表示
因此我们引入齐次坐标,将 P 和 P′ 分别表示为 P=(x,y,z,1) 和 P′=(x′,y′,1),变换回来时使用前几维除以最后一维的方式
这样就可以用矩阵表示这个变换了:
P′=α000β0cxcy1000xyz1
这里的相等指的是齐次坐标相等
最后,我们记
K=α000β0cxcy1
这个矩阵被称为相机内参矩阵,变换改写为
P′=K[I0]P
skew:有时候相机的坐标轴不是垂直的,这时就需要添加一个参数θ来表示坐标轴之间的夹角

那么此时相机内参矩阵就变成了
K=α00−αcotθβ/sinθ0cxcy1
Extrinsics#
前面我们认为物体的空间位置由相机定义的坐标系来决定,有时候我们需要根据物体的世界坐标系来描述物体的位置
从世界坐标转化为相机坐标需要进行一个旋转和平移,这些都可以使用矩阵表示
对于点Pw,如果要将其平移一个向量T得到P,我们可以这么表示:
P=[I0TT1]Pw
这里的I是一个3x3的单位矩阵,T是一个3x1的向量,Pw和P都是4x1的齐次坐标
对于旋转,我们可以使用一个3x3的旋转矩阵R来表示:
P=[R0T01]Pw
旋转矩阵R可以分解为三个绕x,y,z轴的旋转矩阵的乘积:(关于旋转矩阵,可以看一下这篇文章 ↗)
R=Rz(γ)Ry(β)Rx(α)
其中
Rx(α)=1000cosαsinα0−sinαcosα,Ry(β)=cosβ0−sinβ010sinβ0cosβ,Rz(γ)=cosγsinγ0−sinγcosγ0001
最终我们将旋转和平移合并到一起(就是这两个矩阵相乘),得到一个4x4的变换矩阵:
P=[R0TT1]Pw
Summary#
最后我们将相机内参矩阵和外参矩阵合并到一起,得到一个从世界坐标系到像素坐标系的变换:
P′=K[RT]Pw
Perspective Camera#
前面的模型都符合透视投影的规律,即近大远小,因此叫做perspective camera(透视相机),下面介绍两种特殊的相机模型:
weak perspective camera#
弱透视相机假设物体上所有点到相机的距离都近似相等,那么就可以将上述变换中的z替换为一个常数z0,得到:
x′=αz0x+cx,y′=βz0y+cy
orthographic Projection#
正交投影直接将物体上的点投影到相纸上,不考虑距离的影响

因此有:
x′=αx+cx,y′=βy+cy