相机模型用数学的方式描述了一个真实世界中的三维点到图像上像素坐标的映射关系。分为针孔模型、鱼眼模型、全景模型。
针孔模型为小孔成像原理,比较简单,总共有五个内参参数,这里不再讲述。有兴趣的同学可以看看十四讲或者如下博客https://zhuanlan.zhihu.com/p/356546894。
鱼眼模型对应鱼眼镜头是一种极端的广角镜头,也称全景镜头。一般认为16mm或焦距更短的镜头即为鱼眼镜头,但是在工程上视角范围超过140 度的镜头即统称为鱼眼镜头。
- 针孔模型
针孔模型这里讲下逆畸变过程,针孔模型有径向畸变和切向畸变。
对应畸变校正的多项式公式如下。
将无畸变的归一化坐标(x, y),转换为有畸变的归一化坐标(xdistorted, ydistorted)。(xdistorted, ydistorted)再通过内参就可以求得对应的像素坐标。而实际视觉定位应用中,首先知道的是特征点像素坐标,需要将像素坐标转成无畸变的归一化坐标(x, y),这个过程叫做逆畸变。而定位过程中大量特征点都需要进行逆畸变运算,因此一个高效的逆畸变运算方法是十分重要的。我们先看看orb和vins是怎么做的。
- 1 Orb
采用了OpenCV中采用了近视迭代的方法来求解。
式中左边的x和y为上一次计算出的结果,右边的x和y为本次计算出的最新结果。
- 2 Vins
2 鱼眼模型
鱼眼相机成像步骤与普通相机基本一致, 主要的区别在于镜头聚光的部分, 其为了获得更大的FOV, 通过透镜折射实现聚光。如下图所示。
鱼眼相机成像模型相关知识请查看如下博客https://blog.csdn.net/qq_16137569/article/details/112398976。上图也引用自此博客。
2.1 Orb
2.2 Vins
VINS的鱼眼模型的标定,采用了matlab的omnidirectional模型。
先将3d点投影到单位球面,再将单位球面上的点投影到归一化平面上。废话不多说,请看鱼眼相机投影模型示意图:
上图引用自如下博客https://www.sohu.com/a/340019099_100007727。
第一步将三维点 投影到归一化球面。
第二步光心下移。
第三步,投影到归一化平面。
后面的步骤和针孔模型的操作相同。消除径向畸变和切向畸变,再用内参将归一化平面的点转换为像素坐标。
逆畸变运算,比较简单,分两步。第一步,先采用针孔模型的逆畸变运算将像素坐标转换成归一化平面坐标。第二步,再用归一化平面坐标转换到归一化球面坐标。第一步可用vins中的迭代方法。第二步直接用如下公式求解即可。