鱼眼相机成像技术
一.特征点选取方法
1.角点选取
以待检测像素为圆心,3为半径,做一个圆,与圆相交的共有16个像素,检测这16个像素中与中心点的像素差大于某个阈值T时n +1,,若这16个点检测完成时n>N(N一般取11或者9)则认为该待检测像素为角点,然后循环这个过程检测没一个像素。
2.特征点选取
KNN 算法会为每个特征点计算出对应的最近距离匹配点,但是由于两个图像并不一定重合,因此部分特征点可能找不到对应的匹配点,需要对计算出的匹配结果进行筛选以删除不可靠的匹配点对。
其中一种筛选方法如下:
设置 KNN 算法中 K 值为2,计算出当前特征点的最近邻以及次近邻;
计算特征点与两个邻点的距离之比是否小于阈值,即;
选择小于阈值的特征点与最近邻作为匹配点对,筛除不匹配的点对。
二.理想相机模型的映射函数
对于单目相机而言,空间的3D点的成像过程可以表达为空间点P(物点)与光心O的连线在成像面上的投影p(像点),机器视觉中的所有问题都是关于P,O,p三点的共线问题:已知p和O求P可以看成是重建;已知P和p求O可以看成是标定。如果成像面是平面,就是常规的小孔成像模型的线性相机。成像面也可以是球面,一个成像点p可以对应一条空间射线,只有两个自由度,可以用地球上的经度和维度表达,地球的中心在坐标(0,0,0),半径为rad。这样每个3D点都可以用球面二维角度坐标来表达。成像过程可以看成是一个降维过程。
如果相机透镜光心在(0,0,0)位置,则只能是线性投影,即空间直线投影成平面直线。对于相机成像模型(包括线性投影模型和广角/鱼眼相机模型),可以理解成空间3D点在球面上投影以后再次投影到真正的投影面上,从而使原来只能在球面上成像的点投影到一个平面上,这个平面可以是地球表面在北极点的切平面,而投影中心(光心)位置可在南北极的轴线上移动,如下图所示:
另一种理解方式是假设有一个理想的小孔成像的相机,光轴方向从南极指向北极,光心(相机的透镜中心)位置可以在北极(0,0,rad)到南极(0,0,-rad)之间的轴线上移动。
不论假设成像平面在哪里,相机光心在不同的位置可以对应不同的映射函数:
1. 透射映射(Perspective):当相机的光心处在地心(0,0,0)位置,对应理想的小孔成像相机的模型。又称rectilinear,即空间中直线的成像也是直线。此时光心到成像面(相机的CCD)的距离为焦距f,空间点与光轴的夹角为θ,那么成像点在图像上对应的半径为R = f*tan(θ)。当f固定,θ增大到接近90度时,此时成像的入射光线与CCD平行,R为无穷大。就是说,常规的小孔成像模型的缺点: 1.处在赤道上的点无法在小孔相机的CCD上成像,2.理想小孔相机的FOV无法达到180度,3.越靠近赤道的物体以(tan(θ)-tan(θ+dθ))/dθ的比例迅速增大,导致变形严重。
2. 等距映射(Equidistant): R = fθ,成像点的位置R与入射角成正比,比例系数为f。与透射映射相比,解决了tan(90)为无穷大的问题。2D图像上θ对应的等高线为半径等比例变化的同心圆,最大的FOV可以达到360度,这是最简单的一种鱼眼模型。
3. 等立体角投影(Equisolid angle): R = 2fsin(θ/2)。这个是比较常用的模型。
4. 正交投影(Orthographic): R = fsin(θ), 与透射映射不同,不会产生近大远小的透视效果。2D图像上θ对应的等高线从0到90度越来越密。最大的FOV是180度。
5. 球极投影(Stereographic): 是一种将圆球面投影至平面的映射,在几何学里也称共型映射conformal mapping,是一种保角映射。此时相机的光心移到南极的位置,光轴朝向北极,所以有R = 2ftan(θ/2)。最大的FOV可以接近360度。
另外,360度VR应用使用的等距圆柱投影(equirectangular),是在垂直方向上采用等距投影,水平方向采用圆柱投影。用一个圆柱形的圆筒把像球面给包了起来。地球仪到世界地图的映射就是典型的等距圆柱投影。
三.鱼眼图像的画幅:
1.Circular (hemispherical) fisheye images:整个半球投影到圆内。水平垂直视角皆为180度。画幅为圆的外接正方形。
2.Full-frame fisheye images:画幅为圆的内接矩形,对角线FOV为180度。水平垂直视角则小于180度。
广角和鱼眼图像校准: 实际相机镜头的加工无法严格按照上面介绍的映射模型精确实现,所有一般用θ的多项式来近似R函数。如文献[4]中的形式: R = fθ(1 + k1θ + k2θ2 + k3θ3 + k4*θ4)。
所以对于鱼眼相机,需要标定的内参为焦距f,图像中光心位置Co和多项式映射函数的系数ki(OpenCV以及一般的文档中称为径向畸变参数),有的还会加上切向畸变参数pi等。引入过多的参数可能会导致优化求解过程陷入局部最小值,所以OpenCV文档中默认畸变参数(distortion coefficients) 为k1,k2,k3,k4。
鱼眼图像拼接时的外部参数校准:
多个鱼眼相机组成的全景视频采集设备,需要校准外参,即每个相机相对于第一个相机的空间关系(通常只有旋转矩阵R)。所有相机的内参和外参以及3D特征点要放在一起做平差(Bundle Adjustment),能量函数定义为空间点(如上面所述表达为360度VR球面上二维点)在各个相机图像上的2D投影误差。下图是6个GoPro广角相机拼接全景视频的示意。