前言

panoramic images(全景图像)以及Fisheye图像都不满足中心透视投影(Central perspective projection),不能使用collinearity equation(共线性方程)


中心透视投影

其中中心透视投影数学模型建立的假设是:

python 鱼眼投影 鱼眼相机投影模型_透视投影


物体点入射线和光轴的夹角和在像平面上的成像点和光轴的夹角相同,如上图所示


鱼眼透视投影

鱼眼图像希望在有限的平面内获取更大的视角(几乎接近90度),然而按照中心透视投影的假设来说,在像平面上的像点会位于无穷远的地方,因此,我们需要修改投影模型,采用折射的方法将入射线沿光轴方向折射得到像点。鱼眼透镜系统的透镜类型和配置实现的。

python 鱼眼投影 鱼眼相机投影模型_中心透视投影_02


鱼眼投影模型

位于头顶的鱼眼图像实际上监控着位于其下方的整个半球中的场景,需要将物体坐标投影到相机坐标系下(这里我觉得是对应着我之前的一篇博客中所说的4种图像坐标系,从世界坐标系变换到相机坐标系下),这不过不同的是这里的变换增加了投影中心的坐标(也是在物体坐标系下的),没有了平移量,得到了如下的转换公式:

python 鱼眼投影 鱼眼相机投影模型_XC_03

其中python 鱼眼投影 鱼眼相机投影模型_透视投影_04为相机坐标系中的物体点坐标,python 鱼眼投影 鱼眼相机投影模型_透视投影_05为物体坐标系下的物体点坐标,python 鱼眼投影 鱼眼相机投影模型_鱼眼投影_06是在物体坐标系下的投影中心坐标,python 鱼眼投影 鱼眼相机投影模型_中心透视投影_07为旋转矩阵的元素。

投影过程

python 鱼眼投影 鱼眼相机投影模型_中心透视投影_08


从上图中将90°的物体点的入射线,映射到了圆形像的边缘位置,由上面定义的鱼眼模型,对应的映射关系为:

python 鱼眼投影 鱼眼相机投影模型_中心透视投影_09

其中python 鱼眼投影 鱼眼相机投影模型_中心透视投影_10是物体点的入射角,python 鱼眼投影 鱼眼相机投影模型_中心透视投影_11是像点的半径,python 鱼眼投影 鱼眼相机投影模型_python 鱼眼投影_12是图像的半径,像点位置python 鱼眼投影 鱼眼相机投影模型_透视投影_13,由于物体点P和像点P’都在一个3维python 鱼眼投影 鱼眼相机投影模型_XC_14的平面上,因此P’和P在各自的Z平面上,和坐标原点(python 鱼眼投影 鱼眼相机投影模型_python 鱼眼投影_15)之间的连线夹角相同,因此有:

python 鱼眼投影 鱼眼相机投影模型_中心透视投影_16,这里由相机坐标系到鱼眼图像坐标系下的变换公式为:

python 鱼眼投影 鱼眼相机投影模型_鱼眼投影_17


论文中给出的公式为:

python 鱼眼投影 鱼眼相机投影模型_透视投影_18
跟推导的公式相比来说查了后面加上的项,其中python 鱼眼投影 鱼眼相机投影模型_python 鱼眼投影_19为失真多项式,他们是为了对镜头失真进行建模设计的,python 鱼眼投影 鱼眼相机投影模型_鱼眼投影_20是主点的坐标( coordinates of the principle point ),这一项我也不是很清楚。