基于OpenCV的摄像机标定方法实现

摘 要: 为了实现在三维重建系统中的对摄像机进行标定的目的,采用理想摄像机成像模型为基础,在模型中引入透镜径向畸变和切向畸变影响的计算方法.在VC++环境下开发了一种基于OpenCV算法库的摄像机标定算法,并同基于Matlab摄像机标定工具箱的标定结果进行了比较.实验结果表明,该方法具有标定精度高、鲁棒性好等优点,可以满足增强现实和其他计算机视觉系统的需要.

关 键 词 : 摄像机标定; OpenCV; 计算机视觉; 透镜畸变

中图分类号: TN91934; TP391.9 文献标识码: A 文章编号: 1004373X(2013)08009704

0 引 言

摄像机标定的目的,就是要建立三维世界坐标与二维图像坐标之间的一种对应关系.在单目视觉中,这种对应关系是一对多的对应,即二维图像上的一个像素点对应着三维空间中的一条直线;而在双目视觉中,可以通过两幅二维图像上的对应像素点计算得到三维世界坐标与二维图像坐标的一一对应关系.由此,便可以得到物体的三维坐标值.

目前常用的标定方法是由Tasi首先提出的基于“两步法”的传统摄像机标定方法[1].随后,张正友提出用二维平面模板来标定摄像机,他的方法首先利用线性和非线性方法求取摄像机内外参数的初值,然后再解非线性最小化方程,以求得内外参数的精确解[2].因此,其无论在精度方面,还是在简便方面都优于Tsai的方法,可以说它是两步法的代表,从而使摄像机标定技术大大前进了一步.

OpenCV(Open Source Computer Vision Library)是Intel开放计算机视觉函数库,具备强大的图像和矩阵运算能力[3].尽管有很多求解摄像机参数的方法,OpenCV函数库中提供的摄像机标定方法就是基于张正友的标定方法.OpenCV中的摄像机标定模块为用户提供了良好的接口,并且执行速度快,具有良好的跨平台移植性,因此可以很好地应用于工程实际当中.

1.摄像机标定原理

1.1 理想摄像机模型

如图1所示[4],首先在棋盘模板平面上,建立世界坐标系(xw,yw,zw),世界坐标系的原点为Ow;然后以摄像机中心Oc为坐标原点,并使其xc轴和yc轴分别平行于像平面(Image Plane)坐标系的x轴和y轴,且方向相同,zc轴为摄像机镜头的主光轴,按右手定则建立摄像机坐标系(xc,yc,zc);再以像平面上像素坐标值(0,0)的点为坐标原点O,以水平像元阵列方向为u方向,以垂直像元阵列方向为v方向,建立图像像素坐标系(Pixel Image Coordinate)(u,v);最后以主光轴与像平面的交点Od为坐标原点,建立图像物理坐标系(Physical Image Coordinate)(xd,yd),并使其坐标轴分别平行于图像像素坐标系.

建立好以上4个坐标系后,棋盘模板平面上的一点pw(xw,yw,zw),在不考虑畸变情况下,其成像点在图像像素坐标系下的坐标pu(u,v)记为[2]:

[zcuv1等于A3×3R3×3t3×1xwywzw1] (1)

式中:[zc]为pw点在摄像机坐标系下的深度;[A3×3]为摄像机内参数矩阵;[R3×3t3×1]是摄像机的外参数矩阵;R和t分别表示世界坐标系相对于摄像机坐标系的旋转矩阵和平移向量.其定义如下:

[A3×3等于αcu00βv0001,R3×3等于r1r2r3]

式中:a,b分别表示在x和y方向上像点的物理坐标到像素坐标的比例系数;u0,v0表示主光轴与像平面的交点(主点)在像素坐标系下的坐标;参数[c]描述了2个图像坐标轴之间的歪斜(即2个坐标轴不完全垂直的情况).需要说明的是,考虑到当前的像机制造水平,可以认为2个坐标轴是垂直的,因此在OpenCV所使用的模型中认为c等于0.


在张正友的平面标定法中,标定板位于世界坐标系的z等于0平面内,即对于模板上的点,其zw等于0,这样式(1)重写为[56]:

[zcuv1等于A3×3r1r2r3t3×1xwywzw1等于A3×3r1r2r3t3×1]

[xwyw01等于A3×3r1r2t3×1xwyw1] (2)

式中:[r1],[r2],[r3]为旋转矩阵[R3×3]的列向量.令[H等于r1r2r3等于Ar1r2t],H称为模板和图像之间的单应矩阵(Homography).式(2)可以改写为:

[zcuv1等于Hxwyw1] (3)

通过一系列运算后,就可以得到摄像机的所有内参数和外参数[2,4].

1.2 引入畸变后的摄像机模型

以上表示的是理想情况下的透镜成像方程,然而由于实际的像机存在着制造精度误差,因此实际的摄像机存在着径向、切向畸变.

这里,为摄像机定义一个归一化的图像平面,这个平面平行于摄像机的像平面,且到针孔的距离为单位长度.接着在这个平面上建立一个坐标系,原点在光轴和这个平面的交点处.由针孔投影可知,摄像机坐标系下的点([xc],[yc],[zc])在这个归一化的像平面上的投影点的坐标([xn],[yn],1)可以写为:

[xn等于xczcyn等于yczc] (4)

引入透镜的畸变后,新的归一化坐标值定义为[7]:

[xdyd等于1+k1r2+k2r4xnyn+2k3xnyn+k4(r2+2x2n)k3(r2+2y2n)+2k4xnyn] (5)

式中:[r2等于x2n+y2n];[k1],[k2]表示径向畸变系数;[k3],[k4]表示切向畸变系数.

应用上述畸变模型后,最终成像点在图像像素坐标系下的坐标为:

[uv1等于A3×3xdyd1] (6) 当4个畸变系数为0时,上面的公式退变成[8]:

[uv1等于A3×3xczcyczc 1等于1zcA3×3xcyczc] (7)

1.3 标定方法

OpenCV中的摄像机标定是基于张正友的平面标定方法来完成的[3,5].该方法要求使用一个具有较高绘制精度的棋盘模板,然后通过自由移动摄像机或标定模板,使得摄像机至少在3个不同的位置(相对标定模板)拍摄模板图像.在求解相机内外参数时,第一步暂不考虑摄像机镜头的畸变,通过将检测到的所有角点代入投影方程,求得模板和图像之间的单应矩阵H,然后确定摄像机的内部参数和外部参数的初始值.第2步,再以这些参数为初始值,考虑畸变的影响,应用LevenbergMarquardt算法对图像点与再投影点间的距离之和进行非线性最小优化,以得到一组精度更高的值[9].

2.基于OpenCV 的标定系统实现

摄像机标定算法的流程如图2所示.

(1)初始化.用cvCreateMat()函数为摄像机的内外参数以及所有图像最大可能数量的角点分配存储空间.

(2)读取一副标定用的图像并进行角点检测.用cvFindChessboardCorners()函数检测并提取图像中的棋盘角点位置.如果返回值为1,则表示该幅图像上提取的角点数目和设定的相同,角点提取成功;否则返回0,表示角点提取失败,即该幅图像中提取到的角点数要少于设定的数目.

(3)细化角点坐标并绘制.对提取到的角点,需要使用cvFindCornerSubPix()函数对这些角点进一步的细化,以得到更为精确的角点像素坐标.而后,调用cvDrawChessboardCorners()绘制提取到的角点.

(4)对于角点提取成功的图像,存储角点在世界坐标系下的坐标值以及在图像坐标系下亚像素级的坐标值.

(5)读取完所有图像后,根据角点提取成功的图片数量,为它们中的所有角点重新分配数据空间,并释放原有的数据空间.

(6)标定.调用cvCalibrateCamera2()函数,求取摄像机的内外参数.需要注意的是该函数输出参数里的rotation_vectors矩阵.

该矩阵里的每一行(或列)向量表示的是相应的一副图像所对应的旋转向量,当需要转换成旋转矩阵时,要使用罗格里格斯变换函数(cvRodrigues2).

(7)标定结果的误差分析.这里使用重投影的方法来计算标定误差,即根据得到的摄像机内外参数,调用cvProjectPoints2()计算角点三维坐标在图像上的投影坐标,然后,调用cvNorm函数将其与通过角点提取到的投影坐标进行比较,从而得到一个均方误差值.

(8)计算每幅角点提取成功图像的旋转矩阵、旋转向量和平移向量.

3.试验与结果分析

根据以上标定原理和开发步骤,本文在Windows XP平台下,用Visual C++开发了一个基于OpenCV 1.0版本的摄像机标定程序.试验使用Canon IXUS 85IS型照相机,分辨率为640×480像素.标定所用的模板是在A4纸上用激光打印机打印的黑白相间的国际象棋图案,然后将其粘贴在平板上.

模板中方格边长为30 mm,共有6×8等于40个角点.利用9副图像对摄像机进行标定,检测出的角点如图3所示,标定结果如表1第2列所示,总体平均误差为0.031 562 6个像素.

为了验证标定结果的正确性,本文还利用Matlab中标定工具箱对这9副图像进行了摄像机标定,结果如表1第3列所示.从中可以看出,两者的值是非常接近的,因此证明了本文标定程序的正确性.

4.结 语

利用OpenCV开发的摄像机标定程序具有标定结果精确、运算效率高、跨平台移植性好等优点,可以有效地应用于需要计算机视觉系统的各个领域.利用OpenCV库的强大功能可以缩短程序员的开发周期,使计算机视觉技术从理论走向实际应用.

类似论文

基于OpenCV的摄像机标定方法实现

摘 要:为了实现在三维重建系统中的对摄像机进行标定的目的,采用理想摄像机成像模型为基础,在模型中引入透镜径向。
更新日期:2024-5-13 浏览量:69141 点赞量:15757

基于OpenCV的火灾视频识别方法

摘 要为了提高火灾自动报警系统的及时性和准确性,以促进灭火效率减少火灾事故损失,提出了一种基于开源跨平。
更新日期:2024-10-12 浏览量:130140 点赞量:28043

加强水利工程质量控制的方法

摘 要 :当前,随着我国经济的快速发展,国家在水利工程方面的投资也越来越大,这就使得我国的水利工程事业发展变快,且相。
更新日期:2024-11-26 浏览量:144185 点赞量:30904

混凝土结构桥梁施工耐久性方法

[摘 要]本文从原因分析和后果分析两个方向阐述了混凝土结构桥梁耐久性不足问题,并就其问题提出相应的解决方法,。
更新日期:2024-6-27 浏览量:83209 点赞量:18629

应用VB开发OPC自动化接口程序的方法

摘 要:为了简单实现不同厂商现场总线设备间的数据访问,本文在提炼OPC自动化接口主要组件和对象模型的基。
更新日期:2024-1-8 浏览量:8932 点赞量:3719

八种有缺陷的减肥方法

1 不吃早餐――阻碍营养吸收、影响精神状态,能量吸收减少,还会令身体机能自动调节消耗能量的速度,反而达不到减肥的目的 2 抽。
更新日期:2024-11-5 浏览量:18698 点赞量:5062