相机将三维世界中的点投影到二维图像平面坐标系的过程可以用几何模型描述,这种模型有很多,相机采用什么模型根据其镜头、相机视野来确定。采用不同的模型其相机也会有不同的称呼如MEI,ANTA相机。这里相机模型主要分为两种——相机成像模型和畸变模型。
【特别说明:本文是通过相关论文、书籍和博客整理而来,文章中的图片和某些语句也是直接翻译引用过来,如果存在侵权行为请联系本人。也是特别感谢这些作者和文献让我能够更快理解到相关 知识,另外文中存在表述错误欢迎沟通交流~,若需转载请告知本人】
目录
总述
一、相机成像模型
1.1 针孔模型,参数[fx, fy, cx, cy]
1.2全向模型,参数[, fx, fy, cx, cy]
二、相机畸变模型
2.1、切向径向畸变(RadTan,radial-tangential distortion)
2.2视野畸变(FOV,field of view)
2.3等距畸变(Equidistant,EQUI)
三、特殊的相机名称(MEI, Pinhole,Atan)
参考文献
相机成像模型主要包括针孔模型(pinhole model)和全向模型(omnidirectional model),其中我们熟悉的针孔模型是基于初中物理的小孔成像的原理,即一束光线通过针孔后,会在针孔背面投影成像。大多数商业相机可以使用 pinhole 相机模型来描述,使用一个 perspective projection 来建模。但是存在一些高畸变成像设备如广角相机,建模要考虑透镜反射或者鱼眼镜头折射,它们不能使用传统小孔相机模型来描述。需要使用全向模型进行投影。这里广角相机指的是在一个水平面有360度视野的相机,或视野能覆盖半个球或近似整个球的相机。 目前存在几种构建广角相机的方法。如图1所示
1.Dioptric cameras 使用一组 shaped lenses(如鱼眼镜头),可以得到大于180度视野,(稍微多余半球);
2.Catadioptric cameras 则使用一个标准相机和一个 shaped mirror — such as a parabolic, hyperbolic, or elliptical mirror,其在水平面可以提供360度视野,仰角方向大于100度;这里mirrior type可以通过矫正系数值来表示,其中矫正系数的值可以通过透镜圆锥焦点到正焦弦l的距离d这两个参数得到,如表1所示。这个值在后续投影方程中会使用,针孔模型对应Perspective的透镜类型,其矫正系数值为0。其对应图中红色圆圈所对应的值。
3.polydioptric camera 通过组合多个相机来重叠相机视野[1]。
同时为了获得更好的成像效果,我们会在相机前方加了透镜,导致光线投影到成像平面的过程会产生畸变,这一过程需要采用畸变模型去描述,畸变模型主要包括切向径向畸变(RadTan,radial-tangential distortion)、视野畸变(FOV,field of view)和等距畸变(Equidistant,EQUI)等。接下来将分别介绍相机成像模型和畸变模型
在相机坐标系o-xyz下有一个空间点P(X,Y,X),通过光心后在物理成像平面上得到成像点,然后通过比例缩放和偏移得到最终的像素平面上的点p(u,v)。其中fx,fy为成像缩放参数 ,cx,cy为成像偏移参数,它们一起组成了相机的内参矩阵 K,也是我们在平时使用相机过程需要去标定的参数。
首先将空间点P投影到单位球面上,因此有
然后将该点的坐标系变换到一个新的参考坐标系下,新坐标系的中心点为,因此有
这里透镜矫正系数的变化范围为0(planar mirrior)到1(parabolic mirror)。
接下来将上式中的点进行归一化,得到归一化平面上的点,
这里先不考虑投影过程中的畸变,最后将归一化的点通过相机内参矩阵K投影得到相机成像坐标。(s表示坐标轴倾斜系数,如果有知道更多关于s的详细意义的,欢迎补充交流 ~)
畸变参数[k1,k2,k3,p1,p2]
由于透镜形状引起的畸变成为径向畸变,其畸变程度跟离光心距离有关,使得真实环境中的一条直线在图片中变成曲线,往往越靠近图像的边缘,这种现象越明显。由于实际加工的透镜往往是中心对称的,使得不规则的畸变通畅径向堆成。主要分为桶形畸变和枕形畸变。如果向里弯成为桶形畸变,向外弯称为枕形畸变。如下所示,
另外在相机组装过程中由于不能严格使得透镜和成像平面完全平行,这样引起的畸变称为切向畸变,如下所示,
将归一化平面上一点(x,y)用极坐标系表示(r,),径向畸变是跟r相关的,因此采用有关的二次及高项多项式来进行畸变描述,通畅对于畸变较小的图像中心区域主要是k1起作用,对于畸变较大的边缘区域主要是k2起作用,普通摄像头用这两个系数就可以很好的进行径向畸变的矫正。对于畸变很大的相机,比如鱼眼镜头可以加入k3进行畸变矫正。
对于径向畸变可以采用另外两个参数p1和p2表示来进行矫正。
在同时考虑径向畸变和切向畸变,给定归一化坐标,可以求得原始图像上的坐标
最后将纠正后的点 通过内参投影到像素平面,得到该点图像上的正确位置。
畸变参数[],表示FOV畸变参数
其中有
最后将畸变矫正过的点通过内参矩阵投影就可以得到像素平面坐标上的点。
畸变参数为[k1,k2,k3,k4]
其中r的含义和 FOV畸变模型中r含义一致,的求解如下所示
从下左图可知,当入射光线没有发生折射的时候,即入射角等于出射角,对应图中绿色的线,此时
但实际中会有产生各种不同的折射,因为这些折射导致出射角小于,下图中列举了考虑折射影响四种不同的计算方式,这里谈到的等距畸变就是其中之一,对应图中黑色曲线,其投影在图像平面上得到的点到光轴的距离为:
其距离r'和入射角度成正比,因此在右图中关系图中黑色直线是一条曲率为1的直线,我想这也是它被称为等距畸变的原因吧。其他几种的对应关系都是等抛物线形状。
成像点的不同计算方式对比 入射角度和曲线变化图
在上面畸变投影中直接和r相比乘以xc就得到畸变后的坐标,属实有点难以理解。不过观察这里根据的形式近似等于的泰勒展开前五项,
这里各项都能和上面对应上。因此将替换为就可以很好的理解,公式可以重新写为,符合实际的关系。
采用不同的相机成像模型和畸变模型进行建模描述,会有专门的名字来命名。
MEI Camera: Omni + Radtan
Pinhole Camera: Pinhole + Radtan
Atan Camera: Pinhole + FOV
Davide Scaramuzza Camera:这个是ETHZ Davide Scaramuzza的工作,他将畸变和相机内参 放在一起了,为了克服针对鱼眼相机参数模型的知识缺乏,使用一个多项式来代替。
因此当以后我们看到这些相机名字的时候,应该能够反应过来他使用的相机成像模型和畸变模型,以及它们相应的内参形式。另外在相应的视觉SLAM算法中往往涉和支持多种相机模型,在opencv中也有相应的相机模型,如下所示
DSO:Pinhole + Equi / Radtan / FOV
VINS:Pinhole / Omni + Radtan
SVO:Pinhole / atan / Scaramuzza
OpenCV:cv: pinhole + Radtan , cv::fisheye: pinhole + Equi , cv::omnidir: Omni + Radtan
[1]各相机模型(针孔+鱼眼)综述_CG-SpatialAI-CSDN博客_plumb_bob
[2]SLAM 中常用的相机模型&畸变模型总结_啊啦啦的博客-CSDN博客_fov模型
[3]相机模型--Omnidirectional Camera_AI小作坊 的博客-CSDN博客_omnidirectional
[4]高翔,张涛《视觉SLAM十四讲:从理论到实践》电子工业出版社
[5]Scaramuzza D . Omnidirectional Camera. Springer US, 2014.
[6]Mei C , Rives P . Single View Point Omnidirectional Camera Calibration from Planar Grids[C]// 2007 IEEE International Conference on Robotics and Automation, ICRA 2007, 10-14 April 2007, Roma, Italy. IEEE, 2007.
[7]Kneip L , Scaramuzza D , Siegwart R . A novel parametrization of the perspective-three-point problem for a direct computation of absolute camera position and orientation[C]// The 24th IEEE Conference on Computer Vision and Pattern Recognition, CVPR 2011, Colorado Springs, CO, USA, 20-25 June 2011. IEEE, 2011.