第28卷第1期计算机工程与设计2007年1月V01.28No.1ComputerEngineeringandDesignJan.2007
基于OpenCV的摄像机标定尹文生,罗瑜林,李世其(华中科技大学机械科学与工程学院,湖北武汉430074)摘要:以增强现实系统中摄像机标定技术为研究对象,分析了开放计算机视觉函数库OpenCV中的摄像机模型,特别充分考虑了透镜的径向畸变和切向畸变影响及求解方法,给出了基于OpenCV的摄像机标定算法。该算法充分发挥了OpenCV的函数库功能,提高了标定精度和计算效率,具有良好的跨平台移植性,可以满足增强现实和其它计算机视觉系统的需要。关键词:计算机视觉;增强现实;摄像机模型;透镜畸变;摄像机标定中图法分类号:TP391文献标识码:A文章编号:1000.7024(2007)01—0197.03
CameracalibrationbasedonOpenCV
YINWel"1。sheng,LUOYu.1in,LIShi—qi
(SchoolofMechanicalScienceandEngineering,HuazhongUniversityofScienceandTechnology,Wuhan430074,China)
Abstract:Fortheapplicationsoftechnologyofcameracalibrationtoaugustreality,thecameramodelinOpenCV(opensourcecomputer
visionlibrary)isdiscussed,especiallyontheinfluencesandsolvingmethodsoflensradialdistortionandtangentialdistortion,and
an
arithmeticofcameracalibrationbasedonOpenCVisgiven.Thisarithmeticmakesuseofthefunctionsofthelibraryeffectively,improves
precisionandefficiencyofcomputation,andhasagoodpropertyfortheapplicationtomulti-platform.It
can
meettheneedsofaugust
realityandothercomputervisionsystems.
Keywords:computervision;augustreality;cameramodel;lensdistortion;cameracalibration
0引言摄像机标定,是指建立摄像机成像几何模型,描述空间坐标系中物体点同它在图像平面上像点之间对应关系的过程。摄像机标定的目的就是确定几何模型参数即摄像机参数“1。摄像机标定是计算机视觉应用中的关键技术,在增强现实系统中也必须采用摄像机标定技术实现图像的注册眨”。摄像机标定技术在立体视觉研究中占有非常重要的地位。一个完整的立体视觉系统通常可分为图像获取、摄像机标定、特征提取、立体匹配、深度确定及内插等6大部分“1。精确标定摄像机内外参数不仅可以直接提高测量精度,而且可以为后继的立体图像匹配与三维重建奠定良好的基础。一】。目前通常采用的标定方法是基于“两步法圳””的传统摄像机标定方法,该方法比主动视觉摄像机标定方法和摄像机自标定方法标定精度高,而且标定过程简单,经过多年的研究已经发展得比较成熟,鲁棒性高。OpenCV(Intel。opensourcecomputervisionlibrary)是Intel。开放计算机视觉函数库,它由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法,具备强大的图像和矩阵运算能力。该函数库中实现的摄像机标定方法采用的是文献[11]中的两步标定方法,而且在2005年7月最新发布的beta5版本中,不只完全重写了摄像机标定函数,而且引入了文献[12】中的自动寻找角点的方法,进一步提高了标定的智能化程度,用户只需导入用于标定的图片,整个标定过程无需人工的介入。OpenCV中的摄像机标定模块为用户提供了良好的接口,同时支持MS.Windows、Linux平台,有效地提高了开发效率,并且执行速度快,具有良好的跨平台移植性,因此可以很好地应用于工程实际当中。
l标定原理1.1摄像机模型摄像机标定首先要选择合适的摄像机模型,确定内外部参数。OpenCV标定算法中的摄像机模型以针孔模型(pin—holemodel)为基础,引入透镜的径向畸变和切向畸变,该模型相比于只引入一阶径向畸变的Tasi模型和针孔模型更加真实地反映了透镜实际的畸变情况m1。在该模型中,将空间点P在世界坐标系中的坐标值呱,K,乙)变换为图像平面上像素坐标系中
坐标值(“,v)的过程可分解为下述的4步变换”1:
收稿日期:2005-12・06E-marl:wsyin@mail.hust.edu.cn基金项目:国家民用航天科研专项计划基金项目(科工技[2004]1530)。作者简介:尹文生(1963一),男,湖南常宁人,博士,副教授,研究方向为智能CAD、虚拟现实技术、机器人遥操作系统;罗瑜林(1981一),男,江西吉安人,硕士研究生,研究方向为机器人遥操作系统、机器视觉;李世其(1965一),男,江西吉安人,博士,教授,研究方向为CAD/CAE、虚拟现实技术、机器人遥操作系统。
一197— 万方数据K,乙)变换为摄像机坐标系中的坐标值只(疋,K,乙)如下㈧…=㈠M㈤
(2)将坐标值只(冠,K,zc)在针孔模型中进行规范化投影,得只=[妻甜引∽
(3)引入透镜的畸变,畸变后的规范化坐标值可以用雎如砌
阱Xdc,峨‰叫州黝;篙]㈤
将Pd(xa,ya)转换为图像上像素坐标系上的坐标值B(“,访f吲:时‰(4)
够可=f/.劬sx/咖(5)
像素之间的有效距离(mm/pixel);dpy为计算机图像在垂直方向
换)方法计算出摄像机的内部参数和外部参数的初值Ⅲ。该步虑透镜畸变的影响,得到的参数值并不准确。不过作为下一数据拟合目标函数““如式6所示。既要将图像上Ⅳ个角点的坐标值(U,K)(f=1,…朋拾取出来,还要利用上述畸变模型计算出这Ⅳ个标志点的坐标值(‰vJ)(f=1,…朋,然后利用式6进行数
转化为求解非线性最小二乘的问题,通过非线性优化算法“”多次迭代,最后得到使目标函数的值最小的参数值,降低了求解难度。迭代的初值由第①步的DLT方法算出,DLT方法不
2基于OpenCV的摄像机标定基于OpenCV的摄像机标定采用平面棋盘格标定模板,一198一为了提高角点提取的成功率,在标定方块的外围,还要求保留一个方块宽的白色空白区域,如图1所示。摄像机只需在不同的角度抓取几张平面标定模板的图片,就可以实现对摄像机的标定。显然,由于采用最小二乘法,抓得图越多,标定的结果就越精确。图1平面棋盘格标定模板虽然OpenCV中自动寻找角点函数提取角点的成功率很高,但是若碰到光线被遮挡等情况,使得标定模板上的标定块在图像上不清晰或提取的角点数目与设定的数目不相符的状况,就会导致角点提取失败,如图2所示:因此OpenCV并不保证能够提取所有图像上的角点。所以在设计标定算法时必须要考虑角点不能被提取的情况:一方面,如果角点提取成功的图过少,则标定出来的结果就不一定能满足精度的要求,需要重新采图;另一方面,由于摄像机外部参数的个数与标定图像的个数相关联,所以在最后计算标定结果时,应将提取角点失败的图像舍弃,再根据剩下图像的数目,动态地分配参数在内存中的储存空间,如果没有这么一个筛选的过程,盲目得在内存中分配参数的储存空间,则在提取角点失败的图像上,不能找到与角点在世界坐标系中的坐标值相对应的像素坐标系上的坐标值,在这种情况下强行计算的话,很容易出现程序报错,得不到标定结果的情况。因此,本文提出以下摄像机标定算法:(1)读取一组标定用图像数据;(2)用cvFindChessboardComers()筛选图像;将读入的一组图像数据分别代入cvFindChessboardComers0函数,如果返回值是1,则表示在该幅图像上提取的角点数目和设定的相同,提取角点成功;若为0,则表示角点提取失败,该幅图要抛弃;(3)如果可用的标定图的数目满足设定的最少标定用图的数目,继续步骤(4);否则,则应重新采图,返回步骤(1);(4)根据筛选剩下图像的数目用cvCreateMat0为摄像机的内外部参数、角点在世界坐标系的坐标值以及在图像坐标系中的坐标值分配内存存储空间;(5)将筛选剩下的图像代入cvFindChessboardComers0,得到角点在图像像素坐标系中坐标值;再将图像和得到的图像像素坐标系中坐标值代入FindComerSubPix()函数,进一步精(a)角点提取失败(b)角点提取成功图2角点提取图像
万方数据确得到角点亚像素级的坐标值;(6)将角点在世界坐标系的坐标值以及在图像坐标系中的坐标值代入cvCalibrateCamera20函数,最后得到摄像机的内外部参数值;(7)最后注意要用cvReleaseMat0函数释放cvCreateMat()函数分配的内存空间,防止内存泄露。
3实验结果根据上述标定原理和开发步骤,在Windows2000pro平台下利用VC++6.0开发了一个基于OpenCVbeta5版本的摄像机标定程序,程序界面如图3所示。程序经过严格测试,运行稳定,没有出现内存泄露的情况,寻找角点成功率高,标定一组9幅768x512像素的图像,用时O.3秒,可以达到实用的要求。图3标定程序界面为了验证该标定程序的标定结果,利用文献[12】中的图像数据进行标定,并将计算得到的结果与文献[12]中提供的基于相同原理的标定程序得到的标定值进行比较。比较结果如表1所示,其中计算值表示本文程序计算的值;给定值为文献[12】中程序的计算值。从表中可以看到,两者的值是非常接近的。4结束语利用OpenCV开发的摄像机标定程序具有标定结果精确、运算效率高、跨平台移植性好等特性,可以有效地应用于基于增强现实的机器人遥操作系统和其它计算机视觉系统应用中。参考文献:[1]邱茂林,马颂德,李毅.计算机视觉中摄像机定标综述[J].自动化学报,2000,26(1):43—55.[2】ChunyuGao,HongHua,AhujaN.Easycalibrationofahead-mountedprojectivedisplayforaugmentedrealitysystems[C].ProceedingsIEEEVirtualReality,2003.53—60.[3]GibsonS,CookJ,HowardT,eta1.Accuratecameracalibrationforoff-line,video—basedaugmentedreality[C].ProceedingsoftheIEEEandACMInternationalSymposiumonMixedandAugmentedReality,2002.37-46.【4】DavidAForsyth,JeanPonce.计算机视觉——一种现代方法[M].北京:电子工业出版社,2004.[5】RashmiSundareswara,SchraterPR.Bayesianmodelingofca—meracalibrationandreconstruction[C].ProceedingsFifthInter-nationalConferenceon3-DDigitalImagingandModeling,2005.394.401.[6]RodriguezT,SturmP,WilczkowiakM,eta1.VISIRE:Photorea—