SLAM入门之视觉里程计(2):相机模型(内参数外参

【2019-12-26】

  相机成像的过程实际是将真实的三维空间中的三维点映射到成像平面(二维空间)过程,可以简单的使用

  本文包含两部分内容,首先介绍小孔成像模型的各种几何关系;接着描述了成像过程中的四种坐标系(像素坐标,图像坐标,相机坐标,世界坐标)的变换关系。

  相机可以抽象为最简单的形式:一个小孔和一个成像平面,小孔位于成像平面和真实的三维场景之间,任何来自真实世界的光只有通过小孔才能到达成像平面。因此,在成像平面和通过小孔看到的真实三维场景存在着一种对应关系,也就是图像中的二维像点和真实三维世界的三维点存在某种变换关系。找到了这种变换关系,就可以利用图像中的二维点信息来恢复场景的三维信息。

  下图是小孔成像的模型,为了简化模型,将成像平面放在了小孔的前面,并且成的像也是正立的

  小孔成像实际就是将相机坐标系中的三维点变换到成像平面中的图像坐标系中的二维点。

  假设,三维空间中点\(P\),其在相机坐标系中的坐标是\(P_c=[X,Y,Z]^T\);其像点\(p\),在图像坐标系的中的坐标是\(p=[x,y]^T\),由于光轴垂直与成像平面,那么可以知道像点\(p\)在相机坐标系中的坐标是\(p=[x,y,z]^T,其中z =f(f是焦点到成像平面之间的距离,被称为焦距)\)。

  上面的公式就是小孔相机模型的基础公式了,有了此公式可以推导出更详细的小孔相机模型的参数:

  相机的成像过程实际是将三维空间的点\(P=(X,Y,Z)\)变换到成像平面的过程,这个过程也可以被称为射影变换(更多关于射影变换的内容可参考《计算机视觉中的多视图几何》)。如上面描述的,设射影变换的中心\(O\)作为相机坐标系的原点,该点到成像平面的距离为\(f\),\(P\)在成像平面的投影点为\(p=(x,y)\),根据相似三角形原理,可以得到公式:

  上面的公式就描述了三位空间到二维平面的映射,但是该映射对于坐标\(Z\)来说却是非线性(作为分母),通过上面的公式方便的统一处理\(X,Y,Z\)这三个坐标轴的数据。就需要引入新的坐标(扩展坐标的维度)将其线性化,如下:

  通过上面的公式可以很容易的推导出,怎么通过扩展坐标维度构建齐次坐标。具体步骤就是将x和y同时除以一个不为0的z,并且将z作为其添加维度的坐标,通常可以选择\(z=1\)。

  假设像素坐标的水平方向的轴为\(\mu\),竖直方向的轴为\(\nu\),那么将一个成像平面的坐标\((x,y)\)在水平方向上缩放\(\alpha\)倍,在竖直方向上缩放\(\beta\)倍,同时平移\((c_x,c_y)\),就可以得到像素坐标系的坐标\((\mu,\nu)\),其公式如下:

  上面提到对于齐次坐标,缩放一个常量因子仍然是相等的,将\(Z\)挪到左边

  通过上面的的推导,就得到了相机的内参数矩阵(Camera Intrinsics)K,

  K有4个未知数和相机的构造相关,\(f_x,f_y\)和相机的焦距,像素的大小有关;\(c_x,c_y\)是平移的距离,和相机成像平面的大小有关。

  求解相机内参数的过程被称为标定,在SLAM中可以假定相机的内参是已知的,而在三维重建中内参数则是未知的,需要手动的标定(比如使用标定板),也有自标定的方法,不过精度较低。

  其中,\(p\)是图像中像点的像素坐标,\(K\)是相机的内参数矩阵,\(P\)是相机坐标系下的三维点坐标。

  上面推导使用的三维点坐标是在相机坐标系下的,相机坐标系并不是一个“稳定”的坐标系,其会随着相机的移动而改变坐标的原点和各个坐标轴的方向,用该坐标系下坐标进行计算,显然不是一个明智的选择。需要引进一个稳定不变坐标系:世界坐标系,该坐标系是绝对不变,SLAM中的视觉里程计就是求解相机在世界坐标系下的运动轨迹。

  设\(P_c\)是\(P\)在相机坐标系坐标,\(P_w\)是其在世界坐标系下的坐标,可以使用一个旋转矩阵\(R\)和一个平移向量\(t\),将\(P_c\)变换为\(P_w\)

  其中,\(R\)是一个\(3\times3\)的旋转矩阵,\(t\)是\(3\times1\)的平移向量,上面运算的过程还需要做加法运算,为了方便计算,现将其改写为齐次坐标的形式

  \(p=(\mu,\nu)\)是图像中的像点,其坐标系是像素坐标系;\(P_c=(X_c,Y_c,Z_c)\)是场景中的三维店,其坐标系是相机坐标系

  这里使用的三维点坐标\(P_c\)是相机坐标系下的,带入外参数,将其该坐标变换为世界坐标系\(P_w=(X_w,Y_w,Z_w)\)

  可以将内外参数组合到一起称为相机矩阵,其作用是将真实场景中的三维点投影到二维的成像平面。

  本文总结了将场景中的三维点投影到二维成像平面变为像点的过程,下面对本文再作个总结。

  设有一像点\(p=(x,y)\)其对应的场景中的三维点为\(P_c=(X_c,Y_c,Z_c)\),成像平面距离相机中心的距离为\(f\),依据小孔成像的原理,得到下面的变换公式

  上式左边的像点坐标是成像平面坐标系下的坐标,需要将其变换到像素坐标系下。成像平面坐标系和像素坐标系间相差一个缩放和一个原点的平移

  在上式的右边三维点的坐标\(P_c\)使用的是相机坐标系,而相机位置却不是固定不变的,需要将其变换到世界坐标系下;从相机坐标系变换到世界坐标系下需要一个旋转和平移