成像过程就是透视投影的过程,三维世界的空间点,投影到相机的相平面的过程。
用小孔成像原理解释成像原理,这个在视觉SLAM14讲中,有非常详细的描述。
1、相机成像就是将相机坐标系下的空间点,投影到相机的像素点,整个过程可以用下面的投影过程描述。
用方程的形式表示就是,其中f为焦距,Xc、Yc、Zc是点在相机坐标系下的坐标,单位是mm,u, v为像素坐标,fx为u轴方向上的系数,fy为v轴方向上的系数,u0为图像坐标系原点在像素坐标系下的像素坐标,单位是pixel:
2、下面,对上面的内容加以解释。
- 首先,坐标系是这样的,图中的方框就是成像平面,本来是在Z轴负方向上的,被翻转到正方向了:
首先,根据小孔成像原理,有:
X'和Y'为空间点M在图像平面上的投影点m的坐标,单位也是mm。注意此时成像平面的坐标原点还是在Z轴上,也就是上图的O点。
此时,假设投影点在相机镜头的正前方,那么,成像平面则对应的在相机的后方。将投影平面翻转到相机正前方来,有:
,
此时,得到新的X'和Y'坐标,也就是在图像平面下的坐标,该平面上的Z坐标始终是f,上述过程也就是投影过程。
2、但是图像坐标不是我们最终想要的,我们最终在计算机视觉中使用的是像素坐标,如下图:
像素坐标的坐标原点是上图的Oo,图像坐标的原点是O,我们就需要把图像坐标系下的坐标,变换到像素坐标系下。
那么,我们就需要对X'和Y'坐标进行一个转换,这个转换过程大家应该熟知:
这里有两个问题:
a、fx、fy是啥?
通过一开始的描述,我们知道,
假设X'的单位是mm,意味着u轴方向,1mm有多少像素(dx),同理。这里完成的是一个缩放的工作。
b、为啥加个u0和v0?
u0和v0就是点O1在以O0点为原点的像素坐标系下的坐标。这里完成的是一个平移的工作。
上述过程就完成了图像的成像过程。
3、啥是归一化平面
通过上面的运算可以知道,所谓归一话平面,可以这么理解:
归一化平面是假象的,因为我们通过模拟投影过程得到了图像坐标系下的投影点坐标:
这个过程可以看作是先将一个将空间点投影到归一化平面上,得到的就是最右边的向量,然后再等比例缩放,比例因子就是f,从而得到图像平面上的投影点坐标。