基于OpenCV的摄像机标定研究*
2018-01-04聂红梅刘忠艳
聂红梅,刘忠艳
基于OpenCV的摄像机标定研究*
聂红梅,刘忠艳
(黑龙江科技大学,哈尔滨150022)
根据摄像机标定原理,提出了一种基于OpenCV的摄像机标定技术,并且借助于开源计算机视觉库OpenCV在VS 2008开发平台下完成标定。通过相关实验证明了,利用OpenCV开发的摄像机标定程序具有标定结果精确、运算效率高、跨平台移植性好等优点,可以有效地应用于需要计算机视觉系统的各个领域。
OpenCV视觉库;摄像机标定;线性摄像机模型
1 引言
人们通常用仿生物学方法来完成对自然界物体的重构,比如用各种成像系统替代人的视觉系统,用计算机替代人的大脑完成三维重构。用两台摄像机在不同视点下,同时捕获图像信息,通过摄像机标定矩阵进行运算,即可获得三维空间坐标;将这些三维坐标信息综合起来,在三维空间中建立物体模型,以此可以便更方便、更准确地对物体进行全方位观察和操作。OpenCV是英特尔开发的开源计算机视觉库,它由一系列C和C++函数构成,能实现计算机视觉和图像处理方面的很多通用算法,包括对象跟踪、图像处理、运动分析、模式识别、结构分析、摄像机标定和三维重建等。OpenCV中的摄像机标定模块为用户提供了良好的接口,支持Windows、Linux平台,提高了开发效率,增强了程序的移植性,完全可用在工程的实际开发中。
2 标定原理
2.1 概念定义
图像坐标系:物体投射到二维平面形成图像,建立坐标系统,坐标系中某目标点的坐标用(Xu,Yu)表示;
摄像机坐标系:摄像机自身构成一个物体图像坐标系统,坐标系中某目标点的坐标用(Xc,Yc,Zc)表示;
世界坐标系:对我们生活的三维物质世界建立的坐标系,坐标系中某目标点的坐标用(Xw,Yw,Zw)表示。
2.2线性摄像机模型
在没有任何的畸变的情况下,假设摄像成像是理想的针孔成像,针孔摄像机模型如图1所示。图1中O点为投影中心即为坐标系原点,O1点为光轴与成像平面的交点即为成像平面的中心点。
图1 针孔摄像机
图1 中的Q点坐标(Xc,Yc,Zc)是Q点在摄像机坐标系下的坐标。Q点坐标(Xw,Yw,Zw)是Q点在世界坐标系的坐标。q点坐标(Xu,Yu)是q点在图像上的坐标。图1中的 为投影中心到图像平面的距离即焦距。
根据近似三角形原理,得出如下公式:
在现实制作摄像机过程中图像中心O1不可能完全落在光轴上。设光轴落在平面坐标(X0,Y0)上,因此X0和Y0是O1的偏移量。因此式(1)、(2)变为:
另外在现实制作摄像机的过程中像素传感器无法加工成正方形,一般都是长方形,因此我们把像素传感器的长和宽分别定义为x和y。因此有如下公式:
把式(3)和式(5)代入
把式(4)和式(6)代入
把式(7)、式(8)用齐次坐标表示为:
根据式(9)可完成图像坐标和摄像机坐标之间的转换。
至此,我们还需要完成摄像机坐标系向世界坐标系的转换:
式(10)中R是3×3旋转矩阵,T是3×1的平移矩阵:
式(11),式(12)中的α ,β,γ,Tx, Ty和Tz是摄像机外部参数。
2.3非线性摄像机模型
摄像机为了快速成像必须增加光强,通常的做法是在摄像头前加入透镜。加入透镜虽然解决了快速成像的问题,却引入了图像畸变。因此我们需要纠正由于附加镜头的引入而引起的畸变。
透镜引起的畸变有两种形式:径向畸变和切向畸变。在成像传感器平面中,每一个点可以用直角坐标系(x,y)表示;也可用极坐标系(r,t)表示,即矢量表示,其中r是矢量长度,t是矢量水平夹角,中心位于传感器中心。径向畸变就是矢量端点沿长度方向,即r方向发生的变化。切向畸变就是矢量端点沿切线方向即t方向发生的角度变化。径向畸变在r=0时没有发生畸变,因此我们在此周围用泰勒级数展开的前几项来定量描述,即:
对于切向畸变,我们引入了两个参数p1,p2来描述
因此摄像机标定其实就是测量摄像机的内外参数和
畸变参数。
3 OpenCV标定方法
OpenCV的摄像机标定采用平面棋盘格标定模板。通过自由移动摄像机或模板,在不同的角度抓取多张平面标定模板的图片,来实现对摄像机的标定。黑白棋盘标定模板采用边长为20mm,9行13列,共计96个角点的棋盘作为模板。抓取多张不同角度图片采用最小二乘法进行标定计算。把多张标定图片放入相同的目录中,为标定程序读入做好准备。标定流程如图2所示。
图2 标定流程
图2 中所描述的标定流程如下:
(1)获取标定图像目录文件列表。
(2)通过imread()加载图像。该函数支持常用的文件格式。
(3)调用 cvFindChessboardCorners()寻找棋盘角点,函数寻找成功返回非0,失败返回0。函数成功同时返回角点坐标。调用这个函数时,如果这个图像是彩色图像必须转换成灰度图像,如果图像本身是灰度图像则不必进行转换。
(4)使用 cvCreateMemStorage()和 cvCreateSeq()创建存储角点坐标序列。
(5)调用cvFindCornerSubPix()进一步得到角点亚像素级坐标值,并使用cvSeqPush保存所得到的亚像素级坐标值到坐标序列中。
(6)将角点亚像素级坐标值和角点在世界坐标系下的坐标值代入cvCalibrateCamera2()中,得到摄像机内外参数值和畸变参数。
(7)释放函数分配的内存空间,防止内存泄漏。
4 编程实现
程序在WindowsXP下使用VS2008进行编程、调试和测试。由于篇幅限制,变量定义和初始化从略。此处只给出关键代码:
CvSize CBoardSize=cvSize(rCount,cCount);//标定板尺寸
if((srcimage=cvLoadImage(filename,1))==0) //加载图片
continue;
//加载失败,继续加载下一幅图片
cvCvtColor(srcimage,grayimage,CV_BGR2GRAY);
//把色彩图像转换成灰度图像
CvPoint2D32f*pCorners=(CvPoint2D32f*)(rCount*
cCount*sizeof(CvPoint2D32f));
//存储检测到的角点
Int iCount;
//保存检测到角点数
result=cvFindChessboardCorners(grayimage,CBoardSize,
pCorners,&iCount,CV_CALIB
_CB_ADAPTIVE_THRESH);
//获取角点
for(int i=0;i<iCount;i++)
{
cvFindCornerSubPix(grayimage,pCorners,iCount,cvSize(11,11),cvSize(-1,-1),cvTermCriteria
(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,0.1));
//精确获得每一个角点坐标
cvSeqPush(pSeq,pCorners);
//把获得的坐标保存在序列中
}
cvCalibrateCamera2(pObj,pIP,pPC,iS,pIc,pDn,pRn,pTn,0);
//获取矫正数据
其中,pObj是角点的世界坐标,pIP是角点的图像坐标,pPC是不同图片角点的数目,iS是图像尺寸,pIc是获得的摄像机内矩阵,pDn是获得的摄像机畸变系数,pRn是获得的摄像机旋转向量,pTn是获得的摄像机平移向量。
5 实验数据
根据上述的标定原理编写实验程序,程序结果保存为文本文件。经过多次调试的结果表明,该程序运行稳定、准确,能成功寻找到焦点,标定一组20幅1280×1024像素的图片,用时1.2s,能够满足实际需要。为了验证数据的准确性,同时也使用了Matlab对这20幅图片进行标定,以便进行对比。程序标定的摄像机参数和Matlab标定的摄像机参数对比见表1。
表1 摄像机参数对比
在表1中,由于 k3在Matlab中是忽略的参数,这里也没有给出。
6 结束语
目前在计算机视觉应用领域中较为重要的研究是视觉测量和三维重建,而在这些研究中,都需要确定视觉图像中的点与现实世界中对应点的几何位置关系。摄像机标定的目的,就是要建立三维世界坐标与二维图像坐标之间的一种对应关系。利用OpenCV开发的摄像机标定程序,具有标定结果精确、运算效率高、跨平台移植性好等优点,可以有效地应用于需要计算机视觉系统参与工作的各个领域。
[1] 程建璞,项辉宇.基于OpenCV的车体覆盖件视觉测量的摄像机标定[J].机械设计与制造,2010,(11):198-200.Cheng Jianpu,Xiang Huiyu.A Camera Calibration of Vision Measurement of Body Panel Based on OpenCV [J].Mechanical Designand Manufacturing,2010,11:198-200.
[2] 冈萨雷斯,伍兹,埃丁斯,等.数字图像处理(Matlab版)[M].阮秋琦等,译.北京:电子工业出版社,2005.Rafael C.Gonzalez,Richard E.Woods,Steven L.Eddins,et al..Digital Image Process(Matlab Vision)[M].Trans.Ruan Qiuqi,etal..Beijing:Electronic Industry Press,2005.
[3] 孙杰,朱世强,赖小波.一种高效的视觉导航摄像机标定方法[J].计算机工程,2010,(21):212-213.Sun Jie,Zhu Shiqiang,Lai Xiaobo.AMethod of Vision Based Navigation Camera and Effective Calibration[J].Computer Engineering,2010,36(21):212-213.
[4] 马颂德,张正友.计算机视觉一计算理论与算法基础[M].北京:科学出版社,1998.Ma Songde,Zhang Zhengyou.Computer Vision Algorithms and Theoryof Computation Basis[M].Beijing:Science Press,1998.
[5] 袁金刚,张艳宁,郑江滨,等.运动捕获系统中多摄像机布局优化方法[J].微处理机.2009,(3):90-94.Yuan Jingang,Zhang Yanning,Zheng Jiangbin,et al..Multi-camera Layout Optimization Method for Motion CaptureSystem[J].Microprocessors,2009,(3):90-94.
[6] 周敬利,徐欣磊,韩云锋.基于DSP的网络摄像机硬件设计和仿真[J].微处理机,2008,(4):151-154.Zhou Jingli,Xu Xinlei,Han Yunfeng.The Designand Simulation of IPCamera Based on DSP[J].Microprocessors,2008,(4):151-154.
[7] 冯亮,谢劲松,李根,等.摄像机标定的原理与方法综述[J].机械工程师.2016(1):18-20.FengLiang,XieJinsong,LiGen,etal..Reviewof CameraCalibration Principles and Methods[J].Mechanical Engineer,2016(1):18-20.
[8] 江祥奎,纪旭.基于OpenCV和Matlab的摄像机标定系统设计与实现[J].计算机与数字工程,2015(8):1516-1518+1535.Jiang Xiangkui,Ji Xu.Design and Implementation of Camera Calibration System Based on OpenCV and Matlab[J].Computer and Digital Engineering,2015 (8):1516-1518+1535.
Research on Camera Calibration Based on OpenCV
According to the principle of camera calibration,it puts forward a calibration technique based on OpenCV camera,and with the help of open-source computer vision library,OpenCV completes the calibration in VS 2008 development platform.The experiment proves that the calibration procedure based on OpenCV camera has the following advantages:high calibration accuracy,high computation efficiency and good cross platform portability,which can be effectively applied in the field of computer vision system.
OpenCV;Camera calibration;Linear camera model
10.3969/j.issn.1002-2279.2017.06.013
B
1002-2279-(2017)06-0058-04
黑龙江省教育厅科学技术研究项目(项目名称:基于多视几何的三维数字扫描系统关键技术研究,编号:12523051)
聂红梅(1979-),女,黑龙江省通河县人,讲师,硕士,主研方向:计算机科学与技术。
2017-10-17