基于OpenCV摄像机标定研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于OpenCV的摄像机标定研究
摘要:根据摄像机标定原理,实现了vc 2010环境下基于opencv 的摄像机标定系统。
该系统以棋盘格标定板图像作为输入,计算出了摄像机的各内外参数及畸变系数。
通过图像矫正实验证明了系统的有效性。
关键词:摄像机标定;棋盘格;opencv;图像矫正
中图分类号:tp391.41 文献标识码:a文章编号:1007-9599 (2013) 05-0000-02
1引言
视觉测量、三维重建等是计算机视觉应用中较为重要的研究领域。
在这些研究中,都需要确定视觉图像中的点与现实世界中对应点的几何位置关系。
我们常用的图像,由摄像机拍摄得到,因此,确定这种关系,就要依靠成像系统即摄像机的几何模型。
几何模型的参数就是摄像机的参数。
但这些参数不能够直接获取,而是要利用摄像机拍摄的图像,通过实验来获取。
获取这些参数的过程我们称之为摄像机标定。
摄像机标定是计算机视觉应用中的关键技术。
摄像机标定精度直接影响视觉测量精度,也是做好立体图像匹配与三维重建工作的基础[1]。
摄像机标定方法有3类:基于标定物的方法,自标定方法和基于主动视觉的标定方法[2,3]。
其中,使用平面标定物的标定方法[4],因其标定物制作简单、标定方法灵活而广泛使用。
本文详细介绍了摄像机标定原理,及在vc++ 2010环境下,利用opencv 2.4.4实
现摄像机标定的方法和步骤,并通过实验验证了其有效性。
2标定原理
摄像机标定首先需要利用合适的数学工具来描述和表达空间中
的点与图像中对应点之间的关系。
这个工具就是几何模型,它涉及到摄像机的光学参数如图像中心、镜头焦距和镜头畸变等,还涉及到摄像机坐标系与世界坐标系的相对位置和方位等。
常用的针孔模型是一种理想的成像模型,没有考虑摄像机透镜的厚度及畸变对成像的影响,不能很好地反映实际情况。
opencv中的标定算法,其摄像机模型以针孔模型为基础,同时考虑了透镜的径向畸变和切向畸变,引入了径向畸变和切向畸变两个参数。
由于摄像机的安装位置是随机的,要描述摄像机的位置,就必须在相应的环境中建立一个坐标系作为基准,来描述摄像机及拍摄对象的位置,该坐标系称为世界坐标系。
摄像机成像几何关系由图1表示[5]。
环境空间中某点p的世界坐标用pw(xw,yw,zw)表示,该点在摄像机坐标系中的对应坐标用pc(xc,yc,zc)表示,该点在图像平面坐标系中的物理坐标用p(x,y)表示,像素坐标用p (u,v)表示。
oo1的距离即为摄像机焦距f。
图1坐标关系图
根据图1可知,物理坐标(x,y)与像素坐标(u,v)存在如下关系:
(1)
其中(u0,v0)表示物理单位坐标系原点在像素坐标系下的坐标,
dx、dy表示单一像素在x、y方向的物理尺寸。
在线性摄像机模型中,摄像机坐标系与世界坐标系之间的关系可以表示为:
(2)
其中r为3×3正交单位矩阵,t为三维平移向量,m1为4×4矩阵。
在针孔模型中依据透视投影关系还可以得到:
(3)
将式(1)与式(2)代入式(3),可得到:
(4)
其中αx=f/dx,αy=f/dy。
m1称为摄像机的内参数矩阵,只与摄像机的内部结构有关;m2称为摄像机的外参数矩阵,由摄像机相对于世界坐标系的方位决定。
除自标定方法外,摄像机标定时一般需要使用一个特定的标定物,如几何图案模板、棋盘格模板等,标定物需要专门制作。
在坐标系的选取方面,为减少计算,世界坐标系一般选取标定物的物体坐标系。
标定物上的每一个特征点(如棋盘格的角点)相对于世界坐标系的位置在制作时已测定。
利用数字图像特征提取工具可获得特征点在图像上的像素坐标,根据一系列的空间点pw(xw,yw,zw)及其在图像上的投影位置p(u,v),可由式(4)计算出摄像机的内外参数[4,5]。
3标定步骤
基于opencv的摄像机标定,采用的是平面标定算法,需使用标定模板。
本实验采用一个棋盘格模板,并用摄像机在不同角度、方
位拍摄一组图像。
设计标定流程如下[1,6,7]:
3.1读取标定图像文件
标定图像文件的读入由函数imread()完成。
该函数支持的文件类型包括bmp、jpeg、png等类型。
3.2对图像进行角点检测
对图像进行角点检测,需要先将图像转换为灰度图像,如果图像本身已是灰度图像,则这一步可以省略。
因拍摄角度及环境光线等因素的影响,不同的图像,其质量也不同,opencv并不保证能够提取所有图像上的全部内部角点。
而摄像机外部参数的个数与标定图像的个数相关联,所以在最后计算标定结果时应将提取角点失败的图像舍弃。
在设计标定算法时必须考虑角点不能被提取的情况。
opencv中,检测棋盘格角点的功能是由函数cvfindchessboardcorners()提供的。
待标定图像被预先读入到mat型的变量中,转换为灰度图像数据,传入到检测函数中。
该函数要求图像中的角点均能被正确检测,否则,将视为检测失败。
对于检测失败的图像,程序将不记录其检测结果,直接忽略。
对于检测成功的图像,为进一步提高检测精度,可调用cvfindcornersubpix()函数,得到所有角点亚像素级的坐标值。
3.3标定
所有参数的计算工作都有函数cvcalibratecamera2()完成,其结果存放于矩阵或向量中。
这些参数包括摄像机的内参矩阵和畸变
系数向量,还包括了每张图像的旋转向量和平移向量。
其输入参数主要为所有角点的世界坐标和图像坐标。
3.4实验结果验证
采用图像矫正实验来验证标定结果是否正确,即利用标定结果对原始图片进行矫正,通过分析矫正效果,并与原始图片进行对比,来判断标定结果的正确性。
4标定实验
开始实验前,制作了一个7×9的棋盘格标定板,每个棋盘格的长和宽均为2cm,并拍摄了棋盘格模板图像用于标定。
根据上述标定原理和步骤,在windows 7平台下利用vc++2010开发了一个基于opencv 2.4.4版本的摄像机标定程序,程序界面如图2所示。
图2标定程序运行界面
为了验证该标定程序标定结果的正确性,利用标定的摄像机参数对畸变图片进行了矫正实验。
图2左边上图为畸变图片,下图为矫正后的图片。
对比两图可以发现原图的畸变得到了较好的矫正。
5结论
本文在vc++ 2010 + opencv 2.4.4环境下,完成了摄像机标定程序的开发。
该程序预先设定好标定图像的初始参数,在标定过程中能够自动、快速地完成标定操作,其标定结果具有较高的精度。
通过图像矫正实验,验证了该系统的正确性。
参考文献:
[l]尹文生,罗瑜林,李世其.基于opencv的摄像机标定[j].计
算机工程与设计,2007,28(1):197-199
[2]邱茂林,马颂德,李毅.计算机视觉中摄像机定标综述[j].自动化学报,2000,26(1):43-55
[3]吴福朝,胡占义.摄像机自标定的线性理论与算法[j].计算机学报,2001,24(11):1121—1135
[4]zhang z. a flexible new technique for camera calibration [j].ieee transactions on pattern analysis and machine intelligence,2000,22(11):1330-1334
[5]马颂德,张正友.计算机视觉一计算理论与算法基础[m].北京:科学出版社,1998.52-60
[6]李洪雷,管群,胡凯衡,杨宇.vc ++ 环境下基于opencv的摄像机标定系统的开发[j].计算机应用与软件,2011,28(6):19-21 [7]李跃,汪亚明,黄文清,朱小锴.基于opencv的摄像机标定方法研究.浙江理工大学学报,2010,27(3):417-420
[作者简介]王明蓉(1977.10-),女,硕士研究生,讲师,主要从事图像处理和计算机视觉方面的研究。
基金项目:四川省教育厅科研项目(12zb053),乐山师范学院科研基金资助项目(z1157)。