一种基于张氏标定法的单目相机改进标定算法

2019-02-27 06:59黄琬婷胡小平
导航与控制 2019年1期
关键词:角点畸变棋盘

黄琬婷,胡小平

(国防科技大学,长沙410073)

0 引言

近年来,基于视觉传感器的导航定位方法逐渐成为研究的热点,视觉信息被广泛应用于地面机器人、小型飞行器等无人系统导航中的三维重构。相机参数的标定作为实现安全准确视觉导航的前提和关键,对提高导航的精度有着十分重要的意义。设计适用于高精度视觉测量的灵活、稳健的相机标定算法,仍是视觉导航领域研究工作的重点之一。

根据视觉传感器数目的不同,现有的相机标定方法可被分为:单目视觉相机标定、双目视觉相机标定和多目视觉相机标定。根据标定方式的不同,相机标定方法又可被分为:传统相机标定法、基于主动视觉的相机标定法和相机自标定法[1]。

所谓传统相机标定法,是利用一个结构已知、精度很高的标定物作为空间参照,通过空间点和图像点之间的对应关系来建立相机模型参数间的约束,根据优化算法求解这些参数的方法。典型代表方法有 DLT 方法[2]和 Tsai两步法[3]等。传统相机标定法可以获得比较高的标定精度,但其标定物的加工和维护较为复杂,而且在危险、恶劣的实际环境中,往往很难设置标定物。基于主动视觉的相机标定法是指把相机安装在一个可以精确控制的平台上,通过主动控制相机做某些特殊运动来获取多幅图像,利用图像和可控制相机的运动参数来确定相机参数,其代表性方法是马颂德提出的基于两组三正交运动的线性方法[4]。后来,杨长江、李华等人提出了改进方案,即分别基于4组平面正交及5组平面正交运动,利用图像中的极点信息来线性标定相机[5⁃6]。这种标定法计算简单,通常可以线性求解且鲁棒性较好,但系统成本高且不适用于相机运动参数未知或无法精确控制相机运动的场合。近年来提出的相机自标定方法,不依赖于标定参照物,仅利用相机在自然运动过程中对周围环境多视图之间的对应关系,对相机进行标定,灵活性大,实用性强,常用基于绝对二次曲线或其对偶绝对二次曲面的方法进行相机参数拟合[7]。但该方法属于非线性标定,标定结果的精度欠佳,鲁棒性不高。

受张正友平面标定方法[8]的启发,本文综合运用相机传统标定法与自标定方法的优势,主要针对单目相机径向畸变误差,通过对采集到的棋盘格图像进行加权平均法灰度化的图像预处理、Harris角点检测和亚像素精确化等方法,在角点提取精度等方面进行改进,有效地提高了相机标定结果的精度,对畸变图像进行了有效校正,并且对多种摄像头传感器实验均有效,适用性强。

1 单目相机改进标定算法

由于图像采集设备的性能差异、棋盘格本身的平整性、复杂多变的外界环境及图像采集过程中的偶然因素影响,直接采集到的棋盘格图像往往并不适合直接进行标定。因此,需要对采集到的棋盘格图像先进行图像预处理、Harris角点检测和亚像素精确化,再进行参数标定,具体流程如图1所示。

图1 单目视觉相机标定改进算法的基本流程图Fig.1 Basic flow chart of improved calibration algorithm for monocular vision camera calibration

1.1 加权平均法灰度化

由相机直接采集到的棋盘格图像是RGB格式的彩色图像,每个像素点由红(Red)、绿(Green)、蓝(Blue)3种基本颜色分量的变化及它们相互之间的叠加得到[9]。其中,每个分量用8位数据表示,数据范围为0~255,占用了大量的存储空间。由于棋盘格本身是黑白的,不需要颜色信息,所以在相机标定过程中,可先把彩色图像转化为灰度图像。这样不仅可以大大降低图像后续处理的内存开销和运算复杂度,还可以提高相机标定的效率。

对RGB图像进行灰度化,通俗地说就是对图像的R、G、B 3个分量进行不同加权,得到最终的灰度值。由于人眼对绿色的敏感度最高,对红色次之,对蓝色敏感度最低[10],所以本文采用从人体生理学角度所提出的一种权值——加权平均法,得到最为合理的灰度图,即

1.2 角点坐标提取

(1)Harris角点检测

目前,数字图像处理中的角点检测的方法大致可以划分为3类:基于灰度图像的角点检测、基于二值图像的角点检测和基于轮廓曲线的角点检测[11]。本文采用了具有很高鲁棒性的基于灰度图像的Harris角点检测算法。

Harris角点检测算法主要利用图像的灰度变化,其检测过程为:根据实际需求设定1个固定大小的模板,以每个像素点为中心,沿任意方向移动,记录每次移动后模板内所有像素点的灰度值总和的变化量。如果在某点的变化值比预先设定的阈值高,则判定该点为角点[12]。据此可得到Harris矩阵M,并定义角点响应函数R

其中,w(x,y)为Gauss核函数,IX和IY分别表示图像在X和Y2个方向上的灰度梯度。k是经验系数,一般取值为0.04~0.06,trace(M)表示矩阵的迹,det(M)表示矩阵的行列式。当某个像素的角点响应R高于预先设定的阈值时,判定该像素点为角点。

(2)亚像素精确化

通过Harris角点检测算法获得的角点坐标是整像素级别的坐标(整数),对相机标定而言并不够精确[13]。因此,本文对角点坐标进行了亚像素精确化,将其坐标位置精确到亚像素级别的浮点值。

在实际图像中,边缘两侧的灰度变化是缓慢过渡的,并非理想的阶跃变化。利用这一特性,对像素的基本单位再进行细分,以提高图像的分辨率。角点即2个边缘的交点,亚像素角点通常位于图像中灰度发生过渡变化的区域,利用边缘点两侧的相关信息和向量的点积理论,即1个向量和其正交向量的点积为0,可将角点坐标值精确到亚像素级[10]。

如图2所示,先假设起始角点Q′在实际亚像素角点Q附近,角点Q附近的点可分为在边缘上的点与不在边缘上的点两大类。其中,点Q与其附近在边缘上的点Pi之间的灰度梯度关系为

在实际图像中,由于受到噪声的影响,式(4)往往并不等于0。于是,可将其转化为求最小误差和的方程形式,即

对式(5)进行一系列整理变换,得到实际亚像素角点Q的迭代式为

其中,上标k代表第k次的迭代值。求解时,取起始角点Q′的坐标为初始值Q0,然后通过式(6)进行迭代计算,即可得到更加精确的亚像素级别的角点坐标。

1.3 张氏标定法

张氏标定法是张正友教授于1999年在文献[8]中提出的基于单平面棋盘格的相机标定方法。此方法综合了传统标定法与自标定法的优势,不需要额外的辅助器材,仅需一张打印的棋盘格,操作简单且实用性强,既克服了传统标定法需要高精度标定物、操作繁琐等缺点,又较自标定方法精度更高,且已经作为封装好的工具箱函数,被广泛应用于视觉导航的摄像头标定中。

将世界坐标系的X-Y平面建立在棋盘格平面上,即Z=0,式(7)可简化为

H即为单应性矩阵。将H矩阵定义为

由于r1和r2标准正交,可得如下约束

B矩阵是一个对称矩阵,其未知量可表示为一个六维向量b

设H矩阵的第i列为hi,hi=[hi1hi2hi3]T,根据b的定义可以推导出如下公式

因此,2个基本约束式(10)和式(11)可被改写为方程组

V矩阵是2×6矩阵,即每个单应性矩阵可建立起2个方程组,而内参矩阵包括5个未知参数,要对其进行求解,至少需要使用3张棋盘格图片进行标定。计算得到矩阵b后,相机的内参矩阵A即可通过b求解出,从而R、t可根据式(7)得到。

1.4 重投影法

重投影法可以有效反映相机标定精度,通常被用作对标定结果进行评估的手段。

利用标定所得相机参数,计算某个角点反向投影所得的像点坐标,再与实际检测到的像点坐标作差,得到总体平均误差[14]。这一方法可以定量、直观地对标定结果进行评估,以评定相机标定算法的好坏。重投影法的误差计算公式为

其中,M代表标定所得到的相机参数矩阵,利用角点的三维空间坐标 [XwYwZw]T反向投影到像素坐标系,Q代表重投影点坐标与角点实际检测的像坐标的向量差,S即为这两点的标量距离。

对在一幅图像中检测到的多个角点进行重投影,分别求得误差Si,再进行均值处理,即可求得一幅图像的平均误差。在实验中,使用总体平均误差评价标定结果,即所有有效图像的平均误差的均值为

2 实验与结果分析

2.1 实验准备

(1)标定板

选用平整性良好的印有10×10黑白棋盘格图像的标定板,如图3所示。

图3 10×10黑白棋盘格标定板Fig.3 Calibration board of 10×10 black-andwhite checkerboard

(2)摄像头

本文选用5个型号相同的摄像头传感器(型号为 RER⁃USBFHD01),分别编号 209、301、302、305和307。通过对多个摄像头进行标定,检验本文标定算法的适用性。

2.2 图像采集及预处理

在光线均匀明亮的环境中,利用5个摄像头分别从不同角度对标定板进行拍摄,采集不同姿态的图像各40张。为保证所拍摄的图像较为清晰,需将标定板置于画面中央,占图像1/2以上。如图4所示,利用Matlab对采集图像进行加权平均法灰度化,最后将图像设为.bmp格式文件 (数据采集时间为2017年12月14日)。

图4 采集图像加权平均法灰度化(摄像头209)Fig.4 Grayscale the weighted average method for collected images(Camera 209)

2.3 相机标定

分别将5个摄像头拍摄的经过图像预处理的.bmp图片,添加到本文在OpenCV的标定程序文件夹下。通过Harris角点检测、亚像素精确化和张氏标定法,完成相机标定任务。每幅图像提取6×8个角点,如无法提取成功,则视该图为无效。

以摄像头209为例,可得相机内参矩阵及畸变向量如下

内参矩阵:

畸变向量:

[-0.4596802777437611 0.307237431144763-0.002709521158450577-0.001103777488967206-0.5369128000898185]

利用所得相机参数对原畸变图像进行校正,如图5所示。

作为对比,利用 Matlab相机标定工具箱Toolbox_calib分别对5个摄像头拍摄的图片进行标定。以摄像头209为例,得到结果如下

图5 畸变图像校正前后对比图Fig.5 Contrast picture before and after the correction for a distorted image

2.4 实验结果分析

(1)重投影法对比本文标定算法与Matlab标定工具箱

通过重投影法对本文的标定算法和Matlab相机标定工具箱Toolbox_calib所得的标定结果进行评估。仍以摄像头209为例,因图像清晰度等问题,本文标定算法实际采用了40张图像中的20张有效图像,得到各有效图像的像素平均误差如表1所示。

通过计算可得,本文标定算法对摄像头209的标定结果的像素总体平均误差约为S=0.19。

在相同条件下,Matlab相机标定工具箱Toolbox_calib所得标定结果的像素平均误差如图6所示,总体平均误差为S′=0.58。

表1 摄像头209标定结果的图像像素平均误差Table 1 Image pixel mean error of camera 209 calibration results

图6 Matlab标定工具箱的像素平均误差直方图(摄像头 209)Fig.6 Histogram of pixel mean error of Matlab Toolbox_calib (Camera 209)

另外4个摄像头所得标定结果经重投影法所得像素总体平均误差如表2所示。

表2 两种标定算法的重投影误差Table 2 Re-projection error of two calibration algorithms

通过对比可知,本文标定算法取得的标定结果明显优于Matlab相机标定工具箱,误差更小,精度更高,且本文标定算法对多个摄像头均适用,标定算法的稳定性良好。

(2)实验存在的不足

分析标定原理、实验过程和实验结果,本文标定算法仍存在一些不足:

1)易受拍摄图像亮度不均的影响。尽管拍摄环境光线均匀,但所得图像仍存在亮度不均、局部过曝等现象,造成部分角点坐标提取误差较大,如图7所示。

图7 局部过曝图像角点提取图Fig.7 Corner extraction of local overexposed image

2)只考虑了单目相机的径向畸变。相机的畸变主要可分为径向畸变、薄棱畸变和偏心畸变三类[15]。想要进一步提高标定算法的精度,应建立畸变模型,考虑多种畸变。

3 结论

本文在张正友平面标定法的基础上,利用Matlab和OpenCV设计了基于张氏标定法的单目相机改进标定算法。通过对直接采集到的棋盘格图像进行图像预处理、Harris角点检测和亚像素精确化等,有效提高了角点提取的精度,并通过重投影法对标定结果的精度进行了评估。实验结果表明,本文标定算法的标定结果明显优于Matlab标定工具箱Toolbox_calib的标定结果,对畸变图像进行了有效的校正,并且对多个摄像头传感器均适用,体现了算法的有效性和稳定性。同时,通过观察在实验过程中出现的问题,分析相机标定原理及实验结果,仍发现一些不足。可通过数字图像处理技术改善图像局部过曝和噪声现象,并考虑相机的多种畸变,进一步提高标定算法的精度和稳定性。

猜你喜欢
角点畸变棋盘
基于能量变分法的曲线组合箱梁畸变效应分析
基于条纹分析技术的镜头畸变校正实验设计
一种改进的自适应FAST 角点检测算法
大型焊接容器局部热处理防畸变工装优化设计
多支撑区域模式化融合角点检测算法仿真
基于点云聚类的垛型角点检测方法
建筑风光摄影中的畸变控制
角点检测技术综述①
棋盘人生
棋盘里的天文数字