相机成像模型

小孔成像

image

小孔成像是初中物理知识,如图所示,蜡烛发出的光线经过小孔投射在光屏上呈现出倒立的实像。

以上成像过程涉及三个重要对象,即物点(蜡烛本身)、光心(小孔)、像点(光屏上的亮点),三者连起来的直线叫做光路。

小孔成像是理想条件下的相机成像模型。

相机坐标系

为了方便研究,我们可以小孔为坐标原点,建立相机坐标系。

image

在空间直角坐标系 \(O_c X_c Y_c Z_c\)中,原点 \(O_c\) 为小孔,点 \(M(X_m,Y_m,Z_m)\) 为物点,点 \(P'(X'_p,Y'_p,Z'_p)\) 为像点,于是根据三点满足共线的约束,向量 \(\vec{O_cM}\) 与向量 \(\vec{O_cP'}\) 满足 \(\vec{O_cM} = \lambda' \vec{O_cP'}\),即:

\[(X_m-0,Y_m-0,Z_m-0) = \lambda' (X'_p-0,Y'_p-0,Z'_p-0) \]

但是,我们会发现,\(\lambda'\) 是负数(因为穿过原点了),所成的像也是倒立的像,不便于建模和对比,于是,将像点 \(P'\) 移动到关于原点对称的点 \(P(X_p,Y_p,Z_p)\)上,使物点像点在同一象限内。由此得到物点坐标与像点坐标之间的关系:

\[\frac{X_p}{X_m} = \frac{Y_p}{Y_m} = \frac{Z_p}{Z_m} = \lambda \]

此时的 \(\lambda\) 为正数,像也是正立的,有利于后续研究。

这里的坐标系 \(O_cX_cY_cZ_c\) 就是所谓的相机坐标系,他将相机的光心作为坐标原点。

从相机坐标系到图像坐标系

过像点 \(P\) 且平行于 \(O_cX_cY_c\) 平面,建立二维坐标系 \(o_fxy\) ,那么像点\(P(X_p,Y_p,Z_p)\) 在该坐标系下表示为点 \(p(x_p,y_p)\),且满足:

\[\left\{ {\begin{array}{*{20}{c}} {{X_p} = {x_p}} \\ {{Y_p} = {y_p}} \end{array}} \right. \]

\(f=Z_p\),则有:

\[\frac{x_p}{X_m} = \frac{y_p}{Y_m} = \frac{f}{Z_m} \]

image

于是,我们可以得到在小孔成像条件下,三维坐标系 \(O_cX_cY_cZ_c\) 中的物点\(M(X_m,Y_m,Z_m)\) 与二维坐标系 \(o_fxy\) 中的像点 \(p(x_p,y_p)\) 之间的坐标转换关系:

\[\left\{ {\begin{array}{*{20}{c}} {{Z_m}{x_p} = f{X_m}} \\ {{Z_m}{y_p} = f{Z_m}} \end{array}} \right. \]

化为齐次式则可表示为:

\[{Z_m}\left( {\begin{array}{*{20}{c}} {{x_p}} \\ {{y_p}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} f&0&0&0 \\ 0&f&0&0 \\ 0&0&1&0 \\ \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{X_m}} \\ {{Y_m}} \\ {{Z_m}} \\ 1 \end{array}} \right) \]

这里的坐标系 \(o_fxy\) 就是所谓的图像坐标系,其中 \(f\) 为相机的有效焦距,即 三维坐标系 \(O_cX_cY_c\) 与二维坐标系 \(o_fxy\) 的原点距离。

该变换通常被称作透视变换。

从图像坐标系到像素坐标系

拍摄所得到的图像是以矩阵的形式存储起来的,行列索引得到的值即为像素值,在坐标系中占据一个像素(pixel)。对于一幅图像,像素坐标系以图像左上角为坐标原点,单位长度以像素计算。

image

图像坐标系的原点为图像的中心点处(对角线交点处),在像素坐标系中可表示为 \(o_f(u_0,v_0)\),单位长度以 mm 计算,设行方向上每1个像素对应 \(dx\) 个 mm,列方向上每1个像素对应 \(dy\) 个 mm 。所以对于图像坐标系中的一点 \(p(x_p,y_p)\) ,设其在像素坐标系中的坐标为 \(p(u_p,v_p)\) 。则坐标转换关系为:

\[\left\{ {\begin{array}{*{20}{c}} {{u_p} = \frac{{{x_p}}}{{dx}} + {u_0}} \\ {{v_p} = \frac{{{y_p}}}{{dy}} + {v_0}} \end{array}} \right. \]

转换为齐次式,可表示为:

\[\left( {\begin{array}{*{20}{c}} {{u_p}} \\ {{v_p}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} {\frac{1}{{dx}}}&0&{{u_0}} \\ 0&{\frac{1}{{dy}}}&{{v_0}} \\ 0&{0}&1 \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{x_p}} \\ {{y_p}} \\ 1 \end{array}} \right) \]

该过程是缩放+平移变换。

从相机坐标系到像素坐标系

前面推导了相机坐标系→图像坐标系,图像坐标系→像素坐标系,实际上二者是连贯的变换关系,可以实现相机坐标系→像素坐标系。

\[\left\{ {\begin{array}{*{20}{c}} {{Z_m}\left( {\begin{array}{*{20}{c}} {{x_p}} \\ {{y_p}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} f&0&0&0 \\ 0&f&0&0 \\ 0&0&1&0 \\ \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{X_m}} \\ {{Y_m}} \\ {{Z_m}} \\ 1 \end{array}} \right)} \\ {\left( {\begin{array}{*{20}{c}} {{u_p}} \\ {{v_p}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} {\frac{1}{{dx}}}&0&{{u_0}} \\ 0&{\frac{1}{{dy}}}&{{v_0}} \\ 0&{0}&1 \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{x_p}} \\ {{y_p}} \\ 1 \end{array}} \right)} \end{array}} \right. \]

由上述关系式,推导得到:

\[{Z_m} \left( {\begin{array}{*{20}{c}} {{u_p}} \\ {{v_p}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} {\frac{1}{{dx}}}&0&{{u_0}} \\ 0&{\frac{1}{{dy}}}&{{v_0}} \\ 0&0&1 \end{array}} \right)\left( {\begin{array}{*{20}{c}} f&0&0&0 \\ 0&f&0&0 \\ 0&0&1&0 \\ \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{X_m}} \\ {{Y_m}} \\ {{Z_m}} \\ 1 \end{array}} \right) \]

image

化简得到:

\[{Z_m}\left( {\begin{array}{*{20}{c}} {{u_p}} \\ {{v_p}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} {\frac{f}{{dx}}}&0&{{u_0}}&0 \\ 0&{\frac{f}{{dy}}}&{{v_0}}&0 \\ 0&0&1&0 \\ \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{X_m}} \\ {{Y_m}} \\ {{Z_m}} \\ 1 \end{array}} \right) = {M_1}\left( {\begin{array}{*{20}{c}} {{X_m}} \\ {{Y_m}} \\ {{Z_m}} \\ 1 \end{array}} \right) \]

其中 \(M1\) 为相机内参矩阵,其包括了相机有效焦距 \(f\)、尺度因子 \(dx\)\(dy\) ,以及图像中心点 \((u_0,v_0)\) ,以上参数只与相机本身有关。

上图通常简化为如下形式,用来表示相机:

image

从世界坐标系到相机坐标系

实际拍摄过程中,摄像机的姿态可以不一样,因此要描述这种相对变化,需要新的坐标系作为参考系来描述姿态,该新坐标系就是世界坐标系。

在世界坐标系中 \(O_wX_wY_wZ_w\),物体(相机坐标系)可以发生旋转和平移运动,即所谓的刚体变换。

其中旋转分绕 \(X\) 轴、\(Y\) 轴、\(Z\) 轴旋转,平移分沿着 \(X\) 轴、\(Y\) 轴、\(Z\) 轴方向平移。

\(X\) 轴旋转 \(\alpha\)

\[\left( {\begin{array}{*{20}{c}} {{X_m}} \\ {{Y_m}} \\ {{Z_m}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} 1&0&0&0 \\ 0&{\cos \alpha }&{\sin \alpha }&0 \\ 0&{ - \sin \alpha }&{\cos \alpha }&0 \\ 0&0&0&1 \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{X_w}} \\ {{Y_w}} \\ {{Z_w}} \\ 1 \end{array}} \right) \]

\(Y\) 轴旋转 \(\beta\)

\[\left( {\begin{array}{*{20}{c}} {{X_m}} \\ {{Y_m}} \\ {{Z_m}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} 0&{\cos \beta }&{ - \sin \beta }&0 \\ 0&1&0&0 \\ 0&{\sin \beta }&{\cos \beta }&0 \\ 0&0&0&1 \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{X_w}} \\ {{Y_w}} \\ {{Z_w}} \\ 1 \end{array}} \right) \]

\(X\) 轴旋转 \(\gamma\)

\[\left( {\begin{array}{*{20}{c}} {{X_m}} \\ {{Y_m}} \\ {{Z_m}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} {\cos \gamma }&{\sin \gamma }&0&0 \\ {\sin \gamma }&{\cos \gamma }&0&0 \\ 0&0&1&0 \\ 0&0&0&1 \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{X_w}} \\ {{Y_w}} \\ {{Z_w}} \\ 1 \end{array}} \right) \]

以上旋转可以连续操作,变换过程可写作:

\[\left( {\begin{array}{*{20}{c}} {{X_m}} \\ {{Y_m}} \\ {{Z_m}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} {{R_{3 \times 3}}}&{{O_{3 \times 1}}} \\ {{O_{1 \times 3}}}&1 \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{X_w}} \\ {{Y_w}} \\ {{Z_w}} \\ 1 \end{array}} \right) \]

平移:

\[\left( {\begin{array}{*{20}{c}} {{X_m}} \\ {{Y_m}} \\ {{Z_m}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} 1&0&0&{{t_x}} \\ 0&1&0&{{t_y}} \\ 0&0&1&{{t_z}} \\ 0&0&0&1 \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{X_w}} \\ {{Y_w}} \\ {{Z_w}} \\ 1 \end{array}} \right) \]

旋转和平移连续操作,变换过程可写作:

\[\left( {\begin{array}{*{20}{c}} {{X_m}} \\ {{Y_m}} \\ {{Z_m}} \\ 1 \end{array}} \right) = \left( {\begin{array}{*{20}{c}} {{R_{3 \times 3}}}&{{T_{3 \times 1}}} \\ {{O_{1 \times 3}}}&1 \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{X_w}} \\ {{Y_w}} \\ {{Z_w}} \\ 1 \end{array}} \right) = {M_2}\left( {\begin{array}{*{20}{c}} {{X_w}} \\ {{Y_w}} \\ {{Z_w}} \\ 1 \end{array}} \right) \]

其中 \(M_2\) 为相机外参矩阵,记录了相机相对于世界坐标系的旋转和平移情况。

从世界坐标系到像素坐标系

整个成像过程实际经历了以下坐标系变换:

\[世界坐标系→相机坐标系→图像坐标系→像素坐标系 \]

整个变换过程可写作:

\[{{Z_m}\left( {\begin{array}{*{20}{c}} {{u_p}} \\ {{v_p}} \\ 1 \end{array}} \right) = {M_1}{M_2}\left( {\begin{array}{*{20}{c}} {{X_w}} \\ {{Y_w}} \\ {{Z_w}} \\ 1 \end{array}} \right)} \]

image

物理世界的三维信息被记录到二维图像中,丢失了一个维度的信息,因此要尝试从图像中测量出物理世界尺寸,则需要计算变换矩阵 \(M_1\)\(M_2\),这就涉及到相机内外参矩阵的计算,也叫做相机标定

标定结束后,可根据拍摄的图像测算现实世界中的物理尺寸,该过程相当于:

\[像素坐标系→图像坐标系相→机坐标系→世界坐标系 \]

即:

\[\left( {\begin{array}{*{20}{c}} {{X_w}} \\ {{Y_w}} \\ {{Z_w}} \\ 1 \end{array}} \right) = {Z_m}M_2^{ - 1}M_{_1}^{ - 1}\left( {\begin{array}{*{20}{c}} {{u_p}} \\ {{v_p}} \\ 1 \end{array}} \right) \]

总结

image

image

posted @ 2022-03-20 18:14  GShang  阅读(180)  评论(0编辑  收藏  举报