针孔相机、鱼眼相机模型
一、针孔相机模型
空间的三维物体要成像到相机的 CMOS/CCD 上面,形成了图像。图像上的每个点对应空间上的一个点。
将世界坐标系上的一点 (x,y,z)
映射到CMOS/CCD图像坐标系上,只要两步:
- 世界坐标系的坐标转化到相机坐标系。
- 相机坐标系坐标转化到图像坐标系。
1.1 世界坐标系到相机坐标系

即要将世界坐标系上的点(Xw,Yw,Zw)T 转化成相机坐标系上的点(Xc,Yc,Zc)T。
根据线性代数(计算机图形学)的知识可以知道,坐标系的转化只需要将原坐标乘以一个旋转矩阵再加上一个平移矩阵即可。公式如下:
⎣⎡XcYcZc⎦⎤=⎣⎡R11R21R31R12R22R32R13R23R33⎦⎤⎣⎡XwYwZw⎦⎤+⎣⎡t1t2t3⎦⎤
写成齐次矩阵的形式如下:
⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤=⎣⎢⎢⎡R11R21R310R12R22R320R13R23R330t1t2t31⎦⎥⎥⎤⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤
平移矩阵有三个参数,分别是相机坐标系x,y,z
轴相对于世界坐标系的位移
旋转矩阵也有三个参数,分别是相机坐标系x,y,z
轴相对于世界坐标系的旋转角度
其中,旋转矩阵的具体形式如下:
⎣⎡cos(β)cos(θ)−cos(α)sin(θ)+sin(α)sin(β)cos(θ)sin(α)sin(θ)+cos(α)sin(β)cos(θ)cos(β)sin(θ)cos(α)cos(θ)+sin(α)sin(β)sin(θ)−sin(α)cos(θ)+cos(α)sin(β)sin(θ)−sin(β)sin(α)cos(β)cos(β)⎦⎤
α:x轴的旋转量. β:y轴的旋转量. θ:z轴的旋转量
相机的外参就是旋转矩阵的三个参数加上平移矩阵的三个参数。代表了相机相对于世界坐标系的位姿
1.2 相机坐标系坐标转化到图像坐标系


相机坐标系上的点(X,Y,Z)T 转化成图像坐标系上将会变成
(ZfX,ZfY)T
用齐次坐标表示相当于(X,Y,Z,1)T→(fX,fY,Z)T
用矩阵乘法来表示:
(fX,fY,Z)T=⎝⎛f000f0001000⎠⎞⎝⎜⎜⎛XYZ1⎠⎟⎟⎞
如果相机的CMOS/CCD的位置不在像面的中心位置,则要添加两个参数px和py:
(fX+Zpx,fY+Zpy,Z)T=⎝⎛f000f0pxpy1000⎠⎞⎝⎜⎜⎛XYZ1⎠⎟⎟⎞
现在我们能得到空间上的点在图像坐标系上的坐标位置,但是该坐标的单位是米,我们需要将其转化成像素单位,所以要有比例因子mx、my:
⎝⎛fmxX+ZmxpxfmyY+ZmypyZ⎠⎞=⎝⎛fmx000fmy0mxpxmypy1000⎠⎞⎝⎜⎜⎛XYZ1⎠⎟⎟⎞
如果相机CMOS的x轴和y轴不垂直,还要有一个参数s:
K=⎝⎛αx00Sαy0x0y01⎠⎞
这就是相机的内参数矩阵。
空间的点Pw左乘一个旋转矩阵R,加上旋转矩阵t,得到了该点在相机坐标系上的坐标。再左乘相机的内参数矩阵K就得到了该点在图像坐标系上的像素坐标。
P~c=⎣⎡XYZ⎦⎤=K(RPw+t)
至此,针孔相机模型推导完成。
二、鱼眼相机模型
针孔相机的模型为:rd=ftan(θ)
鱼眼相机模型的公式表示为:rd=fθ
鱼眼相机模型有多种,此处只选择了其中一种
类似针孔相机模型的推导,鱼眼相机成像也很简单。
首先,我们用上面的方法可以得到空间上的点在相机坐标系上的表示。
⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤=⎣⎢⎢⎡R11R21R310R12R22R320R13R23R330t1t2t31⎦⎥⎥⎤⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤
简单推导可得:
θ=arctan[Zc(Xc2+Yc2)1/2]
这样,就可以得到该点在鱼眼相机图像坐标系上的位置了。
Xfish=ftan(θ)(Xc2+Yc2)21Xc
Yfish=ftan(θ)(Xc2+Yc2)21Yc