APP下载

基于天牛须搜索算法的单目相机标定方法

2020-11-10王道累

关键词:畸变步长标定

王道累,孙 昊,胡 松,韩 洋

(1. 上海电力大学能源与机械工程学院,上海200090; 2. 中国电建集团江西省电力设计院有限公司,江西南昌330000)

随着人工智能技术的飞速发展,计算机视觉技术已广泛地应用于智能制造、自动控制、自动导航、三维重建逆向工程、虚拟现实(VR)和增强现实(AR)等领域中。相机标定是计算机视觉技术中一个必不可少的基础环节,其结果将会参与到其他与之有关的计算过程中,直接影响整个计算机视觉系统的精度[1]。

相机标定就是利用空间中的一些固定的标定点或者标志物,通过它们在世界空间中的位置以及在图片中的坐标关系,确定世界空间坐标系对于相机图像坐标系的对应几何关系模型,然后计算得到该几何模型的对应参数,也就是求解出相机的内部参数和外部参数以及畸变系数[2]。其中,内部参数对应的是相机自身的成像特性和内部结构,外部参数则可以反映相机关于真实世界坐标系的朝向和位置关系[3]。

目前,在实际应用中使用最广泛的相机标定方法主要包括直接线性变换(DLT)解法[4]、基于径向校正约束(RAC)的两步标定法[5]以及张正友平面标定法等[6]。DLT算法中使用的透视变换模型被简化为线性模型,所求解的参数矩阵方程都是基于线性模型,但是相机在实际成像时受制造工艺等因素的影响,拍摄的图像都会存在一定程度的非线性畸变,导致用这种方法求解出的相机参数在精度上存在很大的局限性[7]。

基于RAC的两步标定法利用相机成像模型中的部分内在性质和关系,先求解出一些参数,然后利用这些已求出的参数增加相机非线性畸变等因素对模型进行优化,进一步求解出较为精确的标定结果[8],但这种方法在实际使用中需要一个精确的标定物,存在对初始值敏感、收敛性差和容易陷入局部最优解等缺点。张正友平面标定法是在RAC两步标定法的基础上对标定物进行改进,仅需要一个打印的棋盘格就可以求解标定结果,克服了RAC两步标定算法需要高精度标定物的缺点,但标定结果精度并没有很大提高,仍然存在与RAC算法相同的缺点[9]。

相机标定计算是一个多维的非线性问题,每一幅标定图像都对应着不同的外参数,因此在对标定点进行反投影的过程中,难以找到具体的计算方程。常见的优化算法如拟牛顿法等,必须依赖具体的函数形式,不能适用于相机标定的优化,因此,研究者们多聚焦于使用粒子群算法对相机标定结果进行优化。黄伟光等[10]使用经典粒子群算法对相机标定进行了优化,以平均相对误差绝对值为目标函数,求解出相机参数,标定精度得到了提高。秦瑞康等[11]研究了基于全参数自适应变异粒子群算法的单目相机标定方法,设计了基于粒子群平均粒距的改进的粒子自适应变异率,对相机标定结果进行了优化。徐呈艺等[12]引入扩散机制来改善粒子群算法易陷入局部最优解的问题。

为了提高相机标定所获得相机参数的精度,本文中利用天牛须搜索(BAS)算法,对标定结果进行优化。所使用的BAS算法具有不依赖目标函数具体形式、收敛快、优化多维问题时参数不会互相影响以及不容易陷入局部最优解等优点,收敛速度和标定结果精度都优于粒子群算法的。

1 针孔相机成像模型

在实际应用的相机成像模型中,针孔相机成像模型因原理简单而得到最广泛的应用[13]。

图1所示为针孔相机的成像模型,反映了相机把真实三维世界拍摄成图像的过程[14]。该过程主要包括4个坐标系及其转换关系: 1)世界空间坐标系和相机坐标系之间的转换关系称为刚体变换,涉及旋转矩阵R和平移向量T,统称为相机外部参数; 2)相机坐标系和理想图像坐标系之间通过透视投影相互变换,涉及2个焦距参数fx、fy与1个主点坐标(u0,v0),共4个参数,统称为相机内部参数; 3)最终的实际图像坐标系和理想图像坐标系之间的畸变校正模型,涉及5个参数k1、k2、k3、p1、p2,统称为畸变系数[15-16]。

(Xc, Yc, Zc)、(Xw, Yw, Zw)—三维世界中的点在相机坐标系与世界坐标系下的坐标; (x, y)、(u, v)—对应的理想图像坐标系下的坐标,其中(x, y)为以图像中心作为原点时的坐标,(u, v)为以图像左上角顶点为原点时的坐标; (xr, yr)—真实图像坐标系下的坐标; R、T—相机外部参数; fx、fy、u0、v0、α、β—相机内部参数,其中α、β可以由另外4个参数变换得到; k1、k2、k3、p1、p2—畸变参数。图1 针孔相机成像模型

2 BAS算法

BAS算法是一种新的基于仿生原理的智能优化算法[17],受仿生学中对天牛在觅食时行为的启发,优化的目标函数就是天牛要寻找食物的位置。在天牛寻找食物的过程中,会根据左、右2个触角接收到食物气味的强度不同来确定食物的方向,然后跳跃到下一个位置,直到找到食物[18]。跟大多数智能优化算法相比,BAS算法在寻优的过程中只有一只天牛,即只有一个“粒子”就可以实现多维的寻优,运算过程简单,运算量小,速度快。在运算过程中只利用左、右触角的食物气味强度来判断方向,也就是只依赖于2个不同方向的函数值即可获得下一步寻优的方向,可以不依赖目标函数的具体形式和梯度信息即可实现寻优计算,而且在多维目标的优化计算中各维度也不会互相干扰而影响结果。在寻优的过程中,天牛每移动一步头的朝向是随机的,只要初始步长设定的足够大,就可以避免陷入局部最优解[19]。

根据BAS算法的仿生学思想,可以抽象出BAS算法的策略模型如下:

1)把天牛抽象为一个质心,左、右2个触角抽象为质心两侧的2个相反方向,且尖端距离质心的长度相等。

2)质心每一次跳跃的距离与2个触角尖端的距离成一定比例,也就是步长与触角尖端之间的距离成一定的比例。

3)质心在跳跃到新的一点时头部的朝向是随机的。

依照这个策略模型,可以进一步建立BAS算法的数学模型,并推广到n维空间:

1)该目标函数是一个n维空间的寻优问题,质心的初始位置是一个n维向量 ,左、右触角尖端的位置分别为xl、xr,2个尖端之间的距离为d0。

2)质心每一步的朝向是随机的,因此生成一个随机的n维向量来表示这个方向,并归一化,即

3)写出xl、xr的表达式,即

式中x为相机标定的初始值。

进而得到左、右两触角尖端对应的函数值y(xl)、y(xr)。

4)比较y(xl)、y(xr)的大小。如果y(xl)

x=x+s(xl-xr) ;

如果y(xl)>y(xr),则寻找y的最小值,质心需要向左触角的方向跳跃步长s,得到下一步质心的位置

x=x-s(xl-xr) 。

5)设定每一步迭代的步长为

s=ηs,

式中η为变步长系数,取值为0~1之间的任意数。通常,为了避免陷入局部最优解,该系数的选取尽量接近1。

3 基于BAS算法的相机参数优化

基于BAS算法的相机参数优化的第一步是应用MATLAB软件自带的相机标定工具箱计算相机参数,结果设置为初始参数,然后结合BAS算法使用Python编程语言进行计算机编程,通过反投影重建标定角点,再以反投影重建出的标定角点与检测到的真实角点坐标之间的误差作为目标,进而对相机的内参数和畸变系数进行优化迭代。

1)使用OpenCV计算机视觉库中的FindCornerSubPix函数,可以直接检测图像中的标定角点亚像素坐标。

2)利用MATLAB软件自带的相机标定工具箱计算出相机的内部参数、外部参数和畸变系数。其中包括4个内部参数fx、fy、u0、v0,2个外部参数以及5个畸变系数k1、k2、p1、p2、k3,将这些参数作为优化迭代的初始值,该初始值是一个九维向量x0=(fx,fy,u0,v0,k1,k2,p1,p2,k3),用实际识别到的标定角点的图像坐标系亚像素坐标(x,y),结合BAS算法计算出的内部参数以及畸变系数得到标定角点的反投影坐标(x′,y′)之间的平均误差作为目标函数,

3)设2个触角尖端距离d0=5,初始步长s=1,变步长系数η=0.95。

4)随机生成一个9维向量并对其归一化作为当前朝向,计算当前前进步长,根据y(xl)、y(xr)的值确定前进方向,然后计算跳跃步长,更新y(xl)、y(xr)的值。

5)比较当前目标函数值和全局最优值。如果当前目标函数值小于全局最优值,则更新全局最优值并继续运行;否则直接进入下一步。

6)返回步骤4)继续运行,直到迭代次数达到预设次数。

7)输出最终的全局最优值。

4 结果与讨论

实验采用德国AVT公司生产的一款工业数字相机来拍摄标定图像,采用Sony ICX274型传感器,使用千兆以太网口作为数据传输接口,拍摄的图像分辨率为4 032像素×3 024像素。棋盘格标定板使用激光打印的9行、12列的棋盘格,每个格子的尺寸为25 mm×25 mm(长度×宽度),以棋盘格角点作为标定点,每幅图像共有88个标定点,共拍摄20张图像,如图2所示。

图2 相机拍摄的标定图像

首先采用软件对相机参数进行标定,得到相机的外部参数(R,T)、内部参数(fx,fy,u0,v0)以及畸变系数(k1,k2),并假设p1=0,p2=0,p3=0,以此为初始值然后随机生成一个9维向量作为初始朝向。根据每张标定图像对应的参数,利用OpenCV库中的反投影函数ProjectPoints求出标定角点的反投影坐标,计算检测到的实际像素坐标与反投影坐标的欧氏距离。实验中采用全部20幅图像中所有的角点参与优化计算,最高迭代次数设置为500。

图3所示分别为基于BAS的优化标定算法和文献[12]中基于改进粒子群的优化标定算法在500次循环迭代过程中目标函数值的变化情况。从图中可以看出,基于BAS的标定方法在迭代开始的阶段函数值一直没有改变,原因是为了防止陷入局部最优解,初始步长设置较大,导致在迭代开始阶段没有找到更优解,最优解一直没有得到更新,所以目标函数值也一直没有得到优化。当迭代进行到40次后,目标函数函数值开始快速收敛,到80次后函数值趋于平稳。而基于改进粒子群算法的标定方法的函数值经过380次迭代以后才趋于稳定,收敛速度明显慢于基于BAS的标定方法的收敛速度。

表1所示为基于BAS的优化标定算法求解出的相机标定内部参数和畸变系数以及目标函数值,分别给出第40、60、80、100、500次迭代后优化的结果。从图3和表1可以看出,由于初始步长设置较大,因此在最初阶段各个参数值都没有得到更新。随着迭代次数的增加,当迭代次数达到40后,目标函数值开始快速收敛; 当迭代次数大于80时,目标函数值基本趋于稳定; 经过100次迭代后,求解的各个参数都趋于稳定; 当迭代次数为500时,最终目标函数值即标定的平均反投影误差为0.07像素,优化计算得到的值即为相机的内参数和畸变系数。

(a)基于天牛须搜索(BAS)优化标定算法(b)基于粒子群优化标定算法图3 不同相机优化标定算法得到的收敛曲线

表1 基于天牛须搜索(BAS)的相机优化标定算法的结果

图4所示为根据最终优化结果进行反投影所有标定点的结果,每幅标定图像用不同颜色显示,图中每个编号对应的平面即为20张不同的标定图像在空间中的反投影,图4中坐标系原点为相机所在位置。为了证明基于BAS的优化标定算法计算出的相机内参和畸变系数的可靠性,提取出实际检测到的角点亚像素坐标(x,y)和迭代500次之后的反投影角点像素坐标(x′,y′)。为了验证算法的有效性,同时给出张正友标定法和文献[12]中的基于改进粒子群标定法得到的反投影像素坐标,分别计算不同算法的误差和平均误差。由于标定点数量巨大,在此只给出第1幅图像中前11个标定点(第1行)的数据和所有标定点的总体平均误差,如表2、3所示。

(xc, yc, zc)—三维世界中的点在相机坐标系下的坐标; 1—20—平面编号。图4 相机标定点反投影重建结果

表2 不同相机优化标定算法的反投影坐标及对应误差

表3 不同相机优化标定算法的总体平均误差

从表2、3中可以看出,对于第1幅图像的前11个标定点,张正友标定法得到的x、y轴方向上的平均误差分别为1.73、0.74像素,整体的平均误差约为1.88像素; 基于改进粒子群的优化标定算法得到的x、y轴方向上的平均误差分别为0.55、0.45像素,整体的平均误差约为0.71像素; 本文中提出的基于BAS的优化标定算法得到的x、y轴方向上的平均误差分别为0.05、0.07像素,整体的平均误差为0.08像素。对于本实验中用到的所有标定点,张正友标定法总体平均误差为1.18像素,总体平均误差为0.39像素;基于BAS的优化标定算法的总体平均误差为0.07像素,说明本文中提出的基于BAS的优化标定算法可以有效地提高标定精度。

5 结论

本文中提出了基于BAS算法的相机优化标定方法,通过MATLAB软件的相机标定工具箱获得了相机的内部、外部参数,将其作为优化算法的初始值,然后基于BAS算法对相机的所有参数进行迭代优化。该算法是一个非常复杂的多维度非线性目标优化求解问题,使用的BAS算法具有收敛快、不容易陷入局部最优解等优点。研究结果表明,本文中采用的BAS算法可以快速、有效地提高相机标定的精度,算法简单,易于实现,求解多维度问题时各参数不会互相影响,且稳定成熟,收敛快,适用于工程实践。

猜你喜欢

畸变步长标定
中心差商公式变步长算法的计算终止条件
基于Armijo搜索步长的BFGS与DFP拟牛顿法的比较研究
基于随机森林回归的智能手机用步长估计模型
使用朗仁H6 Pro标定北汽绅宝转向角传感器
几何特性对薄壁箱梁畸变效应的影响
CT系统参数标定及成像—2
CT系统参数标定及成像—2
在Lightroom中校正镜头与透视畸变
基于匀速率26位置法的iIMU-FSAS光纤陀螺仪标定
基于MATLAB 的CT 系统参数标定及成像研究