针孔相机模型
1. 坐标系介绍
在视觉应用中,总共有四个坐标系需要了解,分别是:像素坐标系(p)、图像坐标系(i)、相机坐标系(c)、世界坐标系(w)。而相机就是将世界坐标系映射到了像素坐标系。
像素坐标系
图像在相机内部的储存形式类似像素坐标系,如下图所示,其中一个像素的坐标为$(u_{i}, v_{i})$,单位是(像素)
图像坐标系
将像素坐标系的中心平移到中心,就得到了图像坐标系,除了原点位置不同,单位也不同,图像坐标系的单位是(m或者mm),坐标系如下图所示:
设图像坐标系的原点为$O_{i}(u_{0}, v_{0})$,相机感光元件中每个像素点的尺寸为$dx*dy$,两坐标系之间的关系可表示为
$$egin{cases}u = frac{x}{dx} + u_{0}\v=frac{y}{dy}+v_{0}end{cases}$$
将其写成矩阵形式为:
$$egin{bmatrix}u \v end{bmatrix}=egin{bmatrix}frac{1}{dx}&0\0&frac{1}{dy}end{bmatrix}egin{bmatrix}x\yend{bmatrix}+egin{bmatrix}u_{0}\v_{0}end{bmatrix}$$
将偏移项纳入乘积项,转化为齐次坐标形式:
$$egin{bmatrix}u\v\1 end{bmatrix}=egin{bmatrix}frac{1}{dx}&0&0\0 &frac{1}{dy}&0\0&0&0end{bmatrix}egin{bmatrix}x\y\1end{bmatrix}+egin{bmatrix}u_{0}\v_{0}\1end{bmatrix}=egin{bmatrix}frac{1}{dx}&0&u_{0}\0&dy&v_{0}\0&0&1end{bmatrix}egin{bmatrix}x\y\1end{bmatrix}$$
相机坐标系
相机坐标系的z轴和图像坐标系的z轴重合,x轴和y轴平行且同方向,相机坐标系原点$O_{c}$和图像坐标系原点$O_{i}$连线的距离是焦距$f$(注意这里的$f$单位为m或mm),相机坐标系中的一点$B(x_{c},y_{c},z_{c})$成像到图像坐标系$P(x,y)$,过程如下::
根据三角形相似可得:
$$frac{f}{z_{c}}=frac{x}{x_{c}}=frac{y}{y_{c}}$$
即:
$$x=frac{fx_{c}}{z_{c}},y=frac{fy_{c}}{z_{c}} $$
相机坐标系转化为图像坐标系的齐次形式为:
$$egin{bmatrix}x\y\1end{bmatrix}=egin{bmatrix}frac{f}{z_{c}}&0&0&0\0&frac{f}{z_{c}}&0&0\0&0&frac{1}{z_{c}}&0end{bmatrix}egin{bmatrix}x_{c}\y_{c}\z_{c}\1end{bmatrix}$$
图像的畸变
这是相机坐标系到理想的图像坐标系的转化,因为我们默认各个坐标系的变换是线性的。但实际上由于相机镜头中的镜片因为光线的通过产生不规则的折射,总是存在镜头畸变的。畸变的引入使得成像模型中的几何变换关系变为非线性。
图像的畸变有很多,但通常主要考虑两种:径向畸变和切向畸变。
径向畸变:正中心位置的畸变最小,随着半径的增大,畸变增大。径向畸变可以分为枕形畸变和桶形畸变
径向畸变公式为:
$$egin{cases}x_{dr}=x(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})\y_{dr}=y(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})end{cases}$$
其中$(x,y)$为理想坐标,$(x_{dr},y_{dr})$为畸变后的坐标,$r^{2}=x^{2}+y^{2}$
切向畸变:在透镜与成像平面不平行时就会产生,类似于透视变换。
切向畸变公式为:
$$egin{cases}x_{dt}=x+2p_{1}xy+p_{2}(r^{2}+2x^{2})\y_{dt}=y+p_{1}(r^{2}+2y^{2})+2p_{2}xyend{cases}$$
将径向畸变和切向畸变效果叠加,可得:
$$egin{cases}x_{distorted}=x(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})+2p_{1}xy+p_{2}(r^{2}+2x^{2})\y_{distorted}=y(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})+p_{1}(r^{2}+2y^{2})+2p_{2}xyend{cases}$$
$(k_{1},k_{2},k_{3},p_{1},p_{2})$这五个为畸变参数,畸变参数的一般顺序是k1,k2,p1,p2,k3。
世界坐标系
世界坐标系与相机坐标系坐标轴不一定平行或重合,它们之间可以通过刚体变换互相转换,也就是只改变物体的空间位置(平移)和朝向(旋转),而不改变物体的形状。用旋转矩阵$R$和平移向量$T$可以表示这种变换,如图所示:
平移矩阵T为:
$$T=egin{bmatrix}t_{x}\t_{y}\t_{z} end{bmatrix}$$
因此,世界坐标系转化为相机坐标系的变换为:
$$egin{bmatrix}x_{c}\y_{c}\z_{c} end{bmatrix}=egin{bmatrix}x_{w}\y_{w}\z_{w}end{bmatrix}+TRightarrowegin{bmatrix}x_{c}\y_{c}\z_{c}\1end{bmatrix}=egin{bmatrix}R & T \0 & 1 end{bmatrix}egin{bmatrix}x_{w}\y_{w}\z_{w}\1 end{bmatrix}$$
2. 相机的内参和外参
根据1中几个坐标系的转化,可以得到世界坐标系转化为像素坐标系:
$$egin{bmatrix}u\v\1end{bmatrix}=egin{bmatrix}frac{1}{dx}&0&u_{0}\0&frac{1}{dy}&v_{0}\0&0&1 end{bmatrix}egin{bmatrix}frac{f}{z_{c}} &0&0&0 \0 & frac{f}{z_{c}}&0&0\0&0&frac{1}{z_{c}}&0 end{bmatrix}egin{bmatrix}R&T \0&1 end{bmatrix}egin{bmatrix}x_{w} \ y_{w} \z_{w} \ 1 end{bmatrix}=underbrace{egin{bmatrix}frac{f_{x}}{z_{c}} & 0&frac{u_{0}}{z_{c}}&0 \0&frac{f_{y}}{z_{c}} & frac{v_{0}}{z_{c}}&0\0&0&frac{1}{z_{c}}&0 end{bmatrix}}_{intrinsics}underbrace{egin{bmatrix}R & T \0 & 1 end{bmatrix}}_{extrinsics}egin{bmatrix}x_{w}\y_{w} \z_{w} \1 end{bmatrix}$$
注意这里的fx和fy单位是像素。公式中的内参不含畸变参数。
相机标定
相机标定的目的就是要得到相机内参(包含畸变参数)和外参。最重要的还是内参(包含畸变参数),因为外参跟摄像机和拍摄物体的相对位置有关,所以不同图像的外参都不一样。
有了相机内参(包含畸变参数)后,我们就可以对相机拍摄的图像进行畸变校正。
参考资料:
https://blog.csdn.net/qq_36342854/article/details/88933308
https://blog.csdn.net/baidu_38172402/article/details/81949447
https://blog.csdn.net/heiheiya/article/details/96151958