1.3 相机模型

相机模型

相机模型定义世界坐标系中的点如何投影到相机坐标系和图像坐标系。相机的外参数描述世界坐标系与相机坐标系之间的相对位置与朝向,相机内参数则描述从相机坐标系到图像坐标系的投影关系。
不同的相机有不同的投影模型,以下讨论仅限于针孔相机模型。欲查看不同相机模型,请参看文章:

相机内参数 camera intrinsic

相机内参数用来描述从相机坐标系到图像平面的投影过程。

焦距反映了相机中心到成像中心(图像中心)的距离,成像中心则是图像平面和光轴的交点,两者均以实际尺度(米或毫米)为单位。但最终我们希望得到的图像坐标是以像素为单位而不是以实际尺度(米或者毫米)为单位。所以在计算像素坐标时需要除以像素的尺寸大小

\[f_x = f/p_x \\ f_y = f/p_y \\ c_1 = c_x/p_x\\ c_2 = c_y/p_y \]

由此得到的图像坐标的计算公式为:

\[x= f_x\frac{X}{Z} + c_1\\ y= f_y\frac{Y}{Z} + c_2 \]

有时我们还会引入一个扭曲系数(skew factor)用以描述单位像素不是长方形时的情况, 这个系数反映了像素的某一边与垂直方向的夹角大小

skew angle alpha

扭曲系数sigma 的计算公式为

\[\sigma = \tan(\alpha)f_y \]

其中α为扭曲角(见上图)

通常情况下像素都为长方形,所以我们将会忽略这个扭曲系数,最终得到的相机内参数矩阵将如下所示:

\[K = \left[ \begin{matrix} f_x & \sigma & c_1\\ 0 & f_y & c_2\\ 0 & 0 & 1 \end{matrix} \right] \]

投影过程可描述为

\[Z \left[ \begin{matrix} u\\v\\1 \end{matrix} \right] = \left[ \begin{matrix} f_x & \sigma & c_1\\ 0&f_y&c_2\\ 0&0&1 \end{matrix} \right] \left[ \begin{matrix} X\\Y\\Z \end{matrix} \right] \]

进行进一步整理,得到:

\[\left[ \begin{matrix} u\\v\\1 \end{matrix} \right] = \frac{1}{Z} \left[ \begin{matrix} f_x & \sigma & c_1\\ 0&f_y&c_2\\ 0&0&1 \end{matrix} \right] \left[ \begin{matrix} X \\ Y \\ Z \end{matrix} \right] \]

上述步骤可以分解解释为:

  1. 首先将相机坐标系内的点投影到归一化平面(Z=1)
  2. 利用相机内参数计算像素坐标

如果相机坐标系内的点采用齐次坐标表示,则相机投影矩阵的形式为:

\[K = \left[ \begin{matrix} f_x & \sigma & c_1&0\\ 0 & f_y & c_2&0\\ 0 & 0 & 1&0 \end{matrix} \right] \]

相机外参数 camera extrinsic

相机外参数描述相机坐标系与世界坐标系之间的相对位移和朝向。通常用一个旋转矩阵R和平移向量t表示相机位姿。相机位姿共有6个自由度。

非线性畸变 nonlinear distortion

径向畸变 radial distortion

我们分析的相机模型均假设直线经过相机投影后在图像中仍旧是直线。但在某些情况下直线的投影并非仍旧为直线,而是会发生一定的弯曲,这就是径向畸变(radial distortion)。如果畸变过程没有得到合适的校正,我们将无法获得精确的重建结果。对径向畸变而言,某点的畸变程度与距离成像中心的距离(radial distance)有关。径向畸变分为枕形畸变(pincushion distortion)和桶形畸变(barrel distortion)。

桶形畸变指的是图像的放大率随着与光轴的距离增加而减小的情况(相当于将物体远离成像中心推移),枕形畸变指的是图像的放大率随着与光轴的距离增大而增大的现象(相当于将物体往成像中心的方向靠近)。

我们用x y 表示没有畸变的像素坐标,用x_dis, y_dis表示畸变后的图像坐标。通常情况下非线性畸变通常用以下模型来描述:

\[x_{dis} = x(1+k_1r^2 + k_2r^4 + k_3r^6)\\ y_{dis} = y(1+k_1r^2 + k_2r^4 + k_3r^6) \]

其中k1k2k3是畸变系数,其正负号反映了径向畸变的类型:正号代表桶形畸变,负号代表枕形畸变。对于相机坐标系中任何一个给定的点X,我们都能通过如下方式找到它在图像中的坐标:

  1. 将点X投影到归一化平面,得到归一化坐标[x,y]

    \[x= \frac{X}{Z}\\ y= \frac{Y}{Z}\\ \]

  2. 用上面的非线性模型求解出畸变后的像素坐标

  3. 用内参数将校正后的坐标投影到像素坐标系中

    \[u=f_xx_{dis} + c_1\\ v=f_yy_{dis} + c_2\\ \]

注意,有的时候非线性模型会写成如下形式:

\[x = x_{dis}(1+k_1r_{dis}^2 + k_2r_{dis}^4 + k_3r_{dis}^6)\\ y = y_{dis}(1+k_1r_{dis}^2 + k_2r_{dis}^4 + k_3r_{dis}^6) \]

上面的公式便于我们从畸变图像还原相机坐标系中的点

切向畸变 tangential distortion

如果成像平面和透镜所在平面不平行的话便会出现切向畸变

\[x_{dis} = x+(2p_1xy +p_2(r^2+2x^2))\\ y_{dis} = y+(p_1(r^2+2y^2)+2p_2xy) \]

如果需要同时应用切向畸变和径向畸变模型:

\[x_{dis} = x(1+k_1r^2 + k_2r^4 + k_3r^6)+(2p_1xy +p_2(r^2+2x^2))\\ y_{dis} = y(1+k_1r^2 + k_2r^4 + k_3r^6)+(p_1(r^2+2y^2)+2p_2xy) \]

posted @ 2019-05-26 01:37  孙小鸟  阅读(720)  评论(0)    收藏  举报