在计算机视觉领域中,对相机进行畸变校正是基础。而进行畸变校正就要通过相机标定了。
1. 坐标系介绍
在视觉应用中,总共有四个坐标系需要了解,分别是:像素坐标系(p)、图像坐标系(i)、相机坐标系(c)、世界坐标系(w)。而相机就是将世界坐标系映射到了像素坐标系。
像素坐标系
图像在相机内部的储存形式类似像素坐标系,如下图所示,其中一个像素的坐标为$(u_{i}, v_{i})$,单位是(像素)
图像坐标系
将像素坐标系的中心平移到中心,就得到了图像坐标系,除了原点位置不同,单位也不同,图像坐标系的单位是(m或者mm),坐标系如下图所示:
设图像坐标系的原点为$O_{i}(u_{0}, v_{0})$,相机感光元件中每个像素点的尺寸为$dx*dy$,两坐标系之间的关系可表示为
$\begin{cases}u = \frac{x}{dx} + u_{0}\\v=\frac{y}{dy}+v_{0}\end{cases}$
将其写成矩阵形式为:
$\begin{bmatrix}u \\v \end{bmatrix}=\begin{bmatrix}\frac{1}{dx}&0\\0&\frac{1}{dy}\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}+\begin{bmatrix}u_{0}\\v_{0}\end{bmatrix}$
将偏移项纳入乘积项,转化为齐次坐标形式:
$\begin{bmatrix}u\\v\\1 \end{bmatrix}=\begin{bmatrix}\frac{1}{dx}&0&0\\0 &\frac{1}{dy}&0\\0&0&0\end{bmatrix}\begin{bmatrix}x\\y\\1\end{bmatrix}+\begin{bmatrix}u_{0}\\v_{0}\\1\end{bmatrix}=\begin{bmatrix}\frac{1}{dx}&0&u_{0}\\0&dy&v_{0}\\0&0&1\end{bmatrix}\begin{bmatrix}x\\y\\1\end{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}} $
相机坐标系转化为图像坐标系的齐次形式为:
$\begin{bmatrix}x\\y\\1\end{bmatrix}=\begin{bmatrix}\frac{f}{z_{c}}&0&0&0\\0&\frac{f}{z_{c}}&0&0\\0&0&\frac{1}{z_{c}}&0\end{bmatrix}\begin{bmatrix}x_{c}\\y_{c}\\z_{c}\\1\end{bmatrix}$
图像的畸变
这是相机坐标系到理想的图像坐标系的转化,因为我们默认各个坐标系的变换是线性的。但实际上由于相机镜头中的镜片因为光线的通过产生不规则的折射,总是存在镜头畸变的。畸变的引入使得成像模型中的几何变换关系变为非线性。
图像的畸变有很多,但通常主要考虑两种:径向畸变和切向畸变。
径向畸变:正中心位置的畸变最小,随着半径的增大,畸变增大。径向畸变可以分为枕形畸变和桶形畸变
径向畸变公式为:
$\begin{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}$
切向畸变:在透镜与成像平面不平行时就会产生,类似于透视变换。
切向畸变公式为:
$\begin{cases}x_{dt}=x+2p_{1}xy+p_{2}(r^{2}+2x^{2})\\y_{dt}=y+p_{1}(r^{2}+2y^{2})+2p_{2}xy\end{cases}$
将径向畸变和切向畸变效果叠加,可得:
$\begin{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}xy\end{cases}$
$(k_{1},k_{2},k_{3},p_{1},p_{2})$这五个为畸变参数,畸变参数的一般顺序是$k1$,$k2$,$p1$,$p2$,$k3$。
世界坐标系
世界坐标系与相机坐标系坐标轴不一定平行或重合,它们之间可以通过刚体变换互相转换,也就是只改变物体的空间位置(平移)和朝向(旋转),而不改变物体的形状。用旋转矩阵$R$和平移向量$T$可以表示这种变换,如图所示:
平移矩阵T为:
$T=\begin{bmatrix}t_{x}\\t_{y}\\t_{z} \end{bmatrix}$
因此,世界坐标系转化为相机坐标系的变换为:
$\begin{bmatrix}x_{c}\\y_{c}\\z_{c}\end{bmatrix}=R\begin{bmatrix}x_{w}\\y_{w}\\z_{w}\end{bmatrix}+T\Rightarrow\begin{bmatrix}x_{c}\\y_{c}\\z_{c}\\1\end{bmatrix}=\begin{bmatrix}R & T \\0 & 1 \end{bmatrix}\begin{bmatrix}x_{w}\\y_{w}\\z_{w}\\1 \end{bmatrix}$
2. 相机的内参和外参
根据1中几个坐标系的转化,可以得到世界坐标系转化为像素坐标系:
$\begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}\frac{1}{dx}&0&u_{0}\\0&\frac{1}{dy}&v_{0}\\0&0&1 \end{bmatrix}\begin{bmatrix}\frac{f}{z_{c}} &0&0&0 \\0 & \frac{f}{z_{c}}&0&0\\0&0&\frac{1}{z_{c}}&0 \end{bmatrix}\begin{bmatrix}R&T \\0&1 \end{bmatrix}\begin{bmatrix}x_{w} \\ y_{w} \\z_{w} \\ 1 \end{bmatrix}=\underbrace{\begin{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{\begin{bmatrix}R & T \\0 & 1 \end{bmatrix}}_{extrinsics}\begin{bmatrix}x_{w}\\y_{w} \\z_{w} \\1 \end{bmatrix}$
注意这里的$f_{x}$