一种基于OpenCV的摄像机标定方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种基于OpenCV 的摄像机标定方法
*
田克微 张爱武 王少敏
(首都师范大学三维空间信息获取与应用教育部重点实验室,北京 100037)
摘要
针对双目立体视觉系统研制过程中的摄像机标定步骤,分析了计算机视觉函数库O penCV 中的摄像机模型,其中的非线性畸变考虑到了切向畸变和径向畸变,采用Bo uguet 角点提取算法,实现了基于O penCV 的摄像机标定.该算法具有很高的标定精度和计算效率、良好的跨平台移植性,可以满足双目立体视觉系统的需要.
关键词:计算机视觉,摄像机模型,OpenCV,摄像机标定,双目立体视觉.中图分类号:TP391
收稿日期:2007204210
*基金项目:国家自然科学基金(40601081);北京市教委科技发展计划(KM200610028012)
立体视觉系统的设计目标是从摄像机获取的图像信息出发,计算三维空间物体的位置、形状等信息,并由此识别环境中的物体.图像上每一点的亮度反映了空间物体表面某点反射光的强度,而该点在图像上的几何位置则与空间物体表面相应点的几何位置有关.这些位置的相互关系,由摄像机成像的几何模型所决定.该几何模型的参数称为摄像机参数,这些参数必须由实验与计算来确定,实验与计算的过程称为摄像机标定.至今已经有许多摄像机标定的方法,如Tsai 提出的基于三维标定参照物的标定方法[1]
,标定参照物一般由两块互相垂直的平面模板组成,标定前需要知道参照物表面标定点的空间三维坐标,因而这种方法需要一套昂贵的精密标定设备.张正友提出了基于二维平面模板的标定方法[2]
,张氏标定法只要求从不同角度拍摄的同一标定平面(标定板)2幅以上的图像,就可以求出摄像机的内外参数,由于该方法不需要知道平面模板移动的具体方位和位移信息,而且平面模板的制作简单,因此这种方法更简单、灵活
[3]
.
OpenC V(Open S ource Computer Vision Library)是Intel 公司开发的开源计算机视觉库,由一系列C 函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法.其中的计算机视觉函数库
包含图像处理、结构分析、运动分析与对象跟踪模式识别照相机定标和三维重建等算法.在最新发布的
OpenCV 110中实现的摄像机标定方法采用的是张氏标定法[3]
,并且提供了一个基于的DirectSho w 的过滤器CalibFilter,使用户可以直接在组件的层次上实现个性化的标定应用.
1 标定原理
111 摄像机模型
摄像机模型的选择直接影响最后的标定结果.常用的针孔模型
[4,8]
忽略了透镜的厚度和畸变的存
在,因此不能很好的反映实际情况.OpenC V 提供的标定算法中的摄像机模型考虑了摄像机镜头的径向和切向畸变,该模型比只引入一阶径向畸变的Tasi 模型[1]更接近透镜的实际情况,但又没有引入Weng 模型
[5]
的薄棱镜畸变,从而加大算法的运算量.三维
空间点P (X ,Y ,Z ),它的齐次坐标为(X ,Y ,Z ,1),在世界坐标系中投影到图像平面上象素坐标系(u ,v )的过程如下:
z c
u v l
=
A C u 000
B v
000
1
R T
1
x w
y w z w 1
(1)
=A #M #X w =P #X w
其中A =f P dx ,B =f P dy ,C =s f ,A 、B 分别为图像u 轴和v 轴上的尺度因子,C 为描述两图像坐标
第29卷 第2期2008年4月
首都师范大学学报(自然科学版)Journal o f Capital No rmal University
(Natural Science Edition) No.2Apr.2008
轴倾斜程度的参数,称为倾斜因子,(u 0,v 0)为摄像机主点.R 为摄像机坐标系相对于世界坐标系的3@3的旋转矩阵,T 为摄像机坐标系相对于世界坐标系的3@1平移矩阵.
由于实际成像系统中存在着各种误差因素,如透镜和成像平面与透镜光轴并不垂直等,因此,像点、光心和物点在同一条直线上的假设并不成立.实际中的成像模型并不满足线性关系,而是一种非线性关系,需要引入透镜畸变如下:
x =x d +D x (x ,y )
y =y d +D y (x ,y )
(2)
其中,D x 和D y 表示非线性畸变值的X 、
Y 轴分量.
OpenC V 中的非线性畸变采用下述公式描述:
D x (x ,y )=k 1x (x 2+y 2
)
+(p 1(3x 2
+y 2
)+2p 2xy )
D y (x ,y )=k 2y (x 2
+y 2)
+(p 2(3x 2
+y 2
)+2p 2xy )
(3)
其中,D x 或D y 的第一项k 1、k 2称为径向畸变,第二项p 1、p 2称为切向畸变,确定畸变系数是摄像机标定的重要步骤之一.
112 标定方法
张氏标定法要求一个精确定位点阵的平面模板,如图1所示.然后通过自由移动摄像机或标定模板,使得摄像机至少在2个不同的位置(相对标定模板)拍摄模板图像,通过模板上的点和其图像的单应性(Homograph)来确定摄像机的内参,可以进一步解出摄像机的外参.
然后再以这些参数为初始值,在考虑畸变的同时应用Levenberg 2Marquardt 算法对图像点与再投影点间的距离之和进行非线性最小优化,以得到一组精度更高的值
.
图1 平面标定模板和成功提取
2 标定系统实现
由于OpenC V 提供的cvCalibrateCamera2()只适用于n @n 的图像,因此设计的标定模板为图1的8
@8棋盘格图像,并打印出来.使用Matrox I ma ging
Library 接口编程实现对摄像机的实时控制,并且由于对I P O 设备的调用需求远多于对C PU 的占用,因此使用多线程技术控制摄像机的采集,采用多线程后,两路视频数据的采集分别进行,同时我们在内存中开辟了两块缓存来存放视频数据,有效地避免了内存的竞争,同时也保证了两个摄像头采集数据的同步性.同步采集界面如图2所示
:
图2 同步采集
先将评估用的棋盘格图像读入计算机,再采用
Jean 2Yves Bouguet 提出的角点提取算法[6]
,对每个格点分别利用高精度角点探测器进行精确定位.文中提取到的格点像素坐标可达到亚像素精度.拍摄过程中要求保持一定的光照,这样cvFindChessboard Corners()才能有效的提取到棋盘内侧的角点.成功提取到49个角点如图1所示.
3 实 验
实验使用两台B ASL ER A102kc CCD 相机,焦距为14mm 的镜头和两个M ETE OR22CL P 32图像采集卡.所采集图像的分辨率为1392@1040像素.标定模板采用Bouguet 方法的模板(如图1所示),模板离摄像机的距离约为500mm 左右.实验分两步进行:第一步是标定摄像机,首先将双摄像机置于两个不同的位置拍摄3对处于不同方位的平面模板的图像(如图3所示),然后根据这3对图像对摄像机进行标定
:
图3 用于标定摄像机的3对图像
第2期田克微等:一种基于OpenCV 的摄像机标定方法