相机标定中角点检测与定位算法研究

2015-12-23 07:50戴宪策,刘昌锦
兵器装备工程学报 2015年9期

【信息科学与控制工程】

相机标定中角点检测与定位算法研究

戴宪策,刘昌锦

(新星技术研究所,合肥230031)

摘要:平面标定法是传统相机标定方法中较为常用的方法,标定板角点的准确检测和精确定位是平面标定法的关键;针对当前标定板角点检测算法中存在的需要人工参与、适用性弱或引入伪角点的问题,提出了基于形态学处理的角点检测和定位算法,主要通过形态学处理的方法检测棋盘的角点位置,然后经过拟合得到角点的亚像素级位置;实验验证本文算法在角点检测上具有较高的成功率,并且提高了相机标定的精度。

关键词:相机标定;角点检测;形态学处理

收稿日期:2015-02-20

作者简介:戴宪策(1990—),男,硕士研究生,主要从事立体视觉研究。

doi:10.11809/scbgxb2015.09.031

中图分类号:TP391.4

文章编号:1006-0707(2015)09-0122-04

本文引用格式:戴宪策,刘昌锦.相机标定中角点检测与定位算法研究[J].四川兵工学报,2015(9):122-125.

Citationformat:DAIXian-ce,LIUChang-jin.ResearchofCornersDetectionandLocationAlgorithmforCameraCalibration[J].JournalofSichuanOrdnance,2015(9):122-125.

ResearchofCornersDetectionandLocationAlgorithmfor

CameraCalibration

DAIXian-ce,LIUChang-jin

(NewStarInstituteofAppliedTechnology,Hefei230031,China)

Abstract:Camera calibration based on planar chessboard is commonly used in traditional camera calibration methods. The detection and accurate location of chessboard corners is the key of this method. Aiming to solve the problems of artificial participation, weak feasibility or importing fake corners, a novel corners detection and location algorithm based on morphological processing was introduced. Firstly, initial location of corners was found mainly by morphological processing. Then the sub-pixel location was acquired by curve fitting. Experiments shows that this method not only has a high successful rate, but also improves the accuracy of camera calibration.

Keywords:cameracalibration;cornerdetection;morphologicalprocessing

相机标定的目的是获取相机的内外参数,当前相机标定的方法有传统标定方法,自标定方法和基于主动视觉的标定方法[1]。其中基于黑白棋盘标定板的传统标定方法是应用较为广泛并且精度较高的方法,该方法是由张正友在2000年提出的[2]。黑白棋盘标定法的关键步骤是角点位置的精确获取。典型的黑白棋盘标定板角点检测算法有基于Matlab工具箱的角点检测算法、基于OpenCV的角点检测算法和张广军角点检测算法[3]。但是基于Matlab工具箱的角点检测需要人工选择标定板的4个极限角点,基于OpenCV的角点检测在相机畸变较大、分辨率较低和模糊时失败率很高,张广军的角点检测算法容易引入非棋盘角点。针对以上问题,本文提出了基于形态学的角点检测与定位算法。

1数学形态学

数学形态学是几何形态学分析和描述的有力工具。1964年,法国的Matheron和Serra将数学形态学引入图像处理。数学形态学具有并行快速、易于硬件实现的优点,发展迅速,广泛应用于计算机视觉、模式识别、图像分析等领域。数学形态学使用结构元素对图像中的对应形状作运算来实现图像分析和识别,在保持图像基本形状的同时简化了图像数据[4]。

数学形态学的基本运算有4种:膨胀、腐蚀、开运算和闭运算[5],4种基本运算还可以推导和组合出不同的形态学处理算法。

1.1膨胀

膨胀是在图像中“加长”或“变粗”的操作,程度由结构元素的形状控制。图像A用结构元素B膨胀定义:

(1)

1.2腐蚀

腐蚀与膨胀互为对偶操作,腐蚀的一般效果是将图像中的对象“收缩”或“细化”。腐蚀的运算符号为?,图像A用结构元素B腐蚀定义为

(2)

上述公式表明腐蚀的结果是B平移z后仍在A中的所有z的集合,也即所有结构元素的的原点位置的集合[4]。

1.3开运算和闭运算

开运算和闭运算是膨胀和腐蚀的不同组合操作,结构元素B对图像A进行开运算或闭运算,其定义分别为[6]:

开运算

A ∘ B=(A!B)⊕B

(3)

闭运算

A·B=(A⊕B)!B

(4)

开运算和闭运算都会使图像轮廓光滑。开运算通常用于断开对象中狭窄的断裂和消除细的突出;闭运算与开运算的作用相反,通常用于消除狭窄的断裂,并填充比结构元素小的空洞。

2角点自动检测与定位算法

2.1角点检测算法

黑白棋盘标定板具有以下特征:标定板区域的梯度变化剧烈;标定板区域的梯度分布连续;角点位于梯度线的交点邻域内。

根据以上特征,本文提出了基于形态学的角点检测算法,算法的流程如图1所示。

1) 梯度计算。梯度计算使用的算子是Scharr算子[7],分为x方向和y方向,分别为:

(5)

(6)

分别计算出每个像素点x方向和y方向上的梯度并进行矢量叠加,以叠加后的矢量的模作为该像素点的最终梯度值,设(x,y)处像素点x方向和y方向上的梯度分别为gx(x,y)和gy(x,y),则其最终梯度值g(i,j)为

(7)

通过梯度计算得到梯度图,用G表示。

图1 角点检测流程

2) 局部阈值二值化。二值化的方法是局部阈值二值化,采用9×9的窗口。设窗口中心像素的梯度值为g(x,y),若g(x,y)满足

(8)

其中,β为比例系数。那么该点二值化的结果为1。局部阈值二值化使用腐蚀膨胀简化计算。腐蚀膨胀使用如下的结构元素

即9阶全1方阵,原点在方阵中心位置。设腐蚀后的梯度图为Gmin,膨胀后的梯度图为Gmax,二值化后的图像为B,则有

(9)

其中,b(x,y)表示二值化图像B中(x,y)位置处的值。

3) 条件膨胀。图像中边缘的宽度并非理想的1个像素宽度,加上噪声的影响,导致边缘上的梯度值并非处处相等,在二值化过程中会产生“空洞”。因此对二值化图像进行条件膨胀,以填补空洞。膨胀使用的窗口是3×3的窗口,判断条件如下

(10)

膨胀填补了二值化梯度图中边缘上小的空洞,有利于下一步的处理。

4) 骨架收缩。骨架收缩的目的是将边缘的宽度缩小为1个像素,并保持其连续性。首先使用形态学中的细化算法,定义为

A⊗B=A-(A#B)

(11)

其中A#B表示击中或击不中变换。通过细化后的骨架包含了很多非标定板边缘的结构,可以分为连通结构和非连通结构。通过判定结构是否具有连通性去除非连通结构,同时剔除连通结构中边缘包含的像素点的个数小于一定阈值的部分。

5) 鞍点提取。通过骨架收缩,得到的是梯度连通区域1个像素宽度的边缘,因此,鞍点提取等价于边缘交点的提取。设收缩后的梯度图像为G′,由值为1的点和连通区域的边缘组成,分别为N和E,其数学描述为

(12)

其中,d(ni,nj)表示两点之间的欧式距离。则鞍点S的数学描述为

(13)

6) 鞍点聚拢。点簇的聚拢由距离决定,因而需要设置合适的距离值。距离值小,会导致原本属于一个角点的点簇错误地聚拢成两个点;距离值过大,会造成相邻的两个角点点簇聚拢成一个角点。因此,从距离2开始,结合步骤7的角点验证,逐步增加距离值,并设置距离值的最大阈值为6。当提取出符合条件的角点时或者达到最大距离值截止。

7)角点验证。角点验证使用骨架收缩后的边缘和聚拢后的角点。首先计算一个连通结构中角点的个数,当与实际个数一致时,对角点进行验证。黑白棋盘的角点类型有3种:边缘位置角点,即在3个方向上有相邻角点的角点;角点位置角点,在两个方向上有相邻角点的角点,且两个相邻角点均为边缘位置角点;内部角点,即在4个方向上均有相邻角点的角点。设黑白棋盘角点的个数为m×n个,则3个类型的角点个数分别为:边缘位置角点2(m+n-4)个,角点位置角点4个,内部角点(m-2)×(n-2)个。角点验证正确后,以角点点簇坐标的平均值作为角点的初始位置。角点自动提取过程中的图像如图2所示。

从图2中可以得出,通过以上流程,能够准确自动地提取出标定板区域,并确定出角点的初始位置。

2.2角点定位算法

通过上一节中的角点提取算法提取到角点的初始位置后,必须将角点的定位精度提高到亚像素级别才能使标定的结果准确可靠。本文将角点视作图像中的鞍点,因此通过计算鞍点的方法来确定角点的准确位置。角点定位算法分为图像滤波和拟合两步。首先利用锥形低通滤波器对角点的邻域进行滤波处理,滤波器核c的表达式为

(14)

其中,r表示滤波器核c的半径。r的大小设置需大于拟合所用的邻域窗口的大小,否则会出现拟合失败的情况。

拟合使用的是二元二次多项式,表达式为

(15)

其中,aij表示多项式的系数。

图2 提取过程中间图像

3实验验证

为验证算法的可靠性和精度,本文设计两个实验对基于OpenCV的标定算法和本文算法进行对比。为了验证本文算法的鲁棒性,本文选取了3种不同的相机镜头来进行实验。第1种是普通的网络摄像头,第2种选用的是BalseracA1600-20gc工业相机,镜头采用ComputarM3Z1228C-MP变焦镜头,第3种选择的相机是BalseracA640-120gm工业相机,镜头采用JapanTVlens定焦镜头,焦距为16mm。

3.1成功率对比实验

第1个实验是成功率对比实验,本文拍摄了不同角度和距离下的100张标定板图像进行实验,实验结果见表1。

表1 成功率对比实验结果

从表1中可以得出,本文算法在成功率方面高于OpenCV:对于网络摄像头,OpenCV和本文算法均能够将全部图像中的标定板检测出来;对于两个工业相机和镜头,OpenCV不能将全部标定板区域检测出来,而本文算法则表现出了很好的鲁棒性,能够全部检测出来。

3.2精度对比实验

本文设计的第2个实验是精度对比实验,将本文的角点定位算法得到的角点坐标进行标定,与OpenCV中的标定结果进行比较,比较采用的指标是平均重投影误差,表达式为

(16)

其中,mij表示第i张图像中第j个角点的坐标,k表示标定板上角点总个数,n表示拍摄到的图像的总个数。标定采用的图像个数以此从5个到21个,实验得到的结果如图3所示。

从图3中可以看出,本文算法在3种条件下较OpenCV的标定精度都有很大的提高。

图3 算法对比结果

4结束语

本文提出了角点检测和定位算法,通过形态学处理和角点验证,能够准确检测到黑白棋盘标定板的角点位置,在角点初始位置的基础上,通过拟合算法将角点定位到亚像素级别精度。实验验证表明本文算法具有较高的鲁棒性,相对于OpenCV具有较高的成功率,并且提高了标定的精度。下一步的研究方向是提高角点检测算法的速度,并进一步提高角点检测算法的鲁棒性。

参考文献:

[1]JunhuaSun,QianzheLiu,ZhenLiu,etal.ACalibrationMethodforStereoVisionSensorwithLargeFovBasedon1DTargets[J].OpticsandLasersinEngineering,2011,49(11):1245-1250.

[2]ZhengyouZhang.AFlexibleNewTechniqueforCameraCalibration[J].IEEETransactionsonPatternAnalysisandMachineIntelligence,2000,22(11):1330-1334.

[3]何娟.摄像机标定中角点快速提取算法研究[D].长沙:国防科技大学,2011.

[4]冈萨雷斯.数字图像处理[M].2版.北京:电子工业出版社,2010.

[5]余文勇,石会.机器视觉自动检测技术[M].北京:化学工业出版社,2013.

[6]王洋,谢权威.基于相机响应函数的图像盲检测技术研究[J].重庆工商大学学报:自然科学版,2014,31(3):55-61.

[7]陈兵旗.机器视觉技术及应用实例详解[M].北京:化学工业出版社,2014.

[8]GaryBradski,AdrianKaehler.学习OpenCV(中文版)[M].于仕琪,刘瑞桢,译.北京:清华大学出版社,2009.

(责任编辑杨继森)