基于OpenCV的摄像机标定问题研究
- 格式:pdf
- 大小:362.49 KB
- 文档页数:3
OpenCV相机标定坐标系详解在OpenCV中,可以使⽤calibrateCamera函数,通过多个视⾓的2D/3D对应,求解出该相机的内参数和每⼀个视⾓的外参数。
使⽤C++接⼝时的输⼊参数如下:objectPoints - 每⼀个视⾓中,关键点的世界坐标系。
可以使⽤vector < vector <Point3f> >类型,第⼀层vector表⽰每⼀个视⾓,第⼆层vector表⽰每⼀个点。
如果使⽤OpenCV⾃带的棋盘格,可以直接传⼊交叉点(不包括边⾓)的实际坐标,以物理世界尺度(例如毫⽶)为单位。
写坐标时,要保证z轴为0,按照先x变化,后y变化,从⼩到⼤的顺序来写。
如果⽹格尺⼨为5厘⽶,写作:(0,0,0),(5,0,0), (10,0,0)...(0,5,0), (5,5,0), (10,5,0),...如下图例⼦,x⽅向是8个交叉点,y⽅向3个较差点。
imagePoints - 每⼀个视⾓中,关键点的图像坐标系。
可以使⽤vector < vector <Point2f> >类型。
这个值可以通过findChessboardCorners函数从图像中获得。
注意:传⼊findChessboardCorners函数的patternSize参数,要和objectPoints 中的⾏列数统⼀。
imageSize - 图像尺⼨。
flags - 参数。
决定是否使⽤初始值,扭曲参数个数等。
输出参数如下:cameraMatrix - 3*3的摄像机内矩阵。
distCoeffs - 4*1(具体尺⼨取决于flags)。
对图像坐标系进⾏进⼀步扭曲。
这两个参数是内参数,可以把摄像机坐标系转换成图像坐标系。
rvecs - 每⼀个视图的旋转向量。
vector<Mat>类型,每个vec为3*1,可以⽤Rodrigues函数转换为3*3的旋转矩阵。
tvecs - 每⼀个视图的平移向量。
一种基于OpenCV的摄像机标定算法的研究与实现作者:孙昆穆森邱桂苹赵倩来源:《电子世界》2012年第14期【摘要】摄像机标定是计算机视觉中的一个重要问题。
本文介绍了标定的基本原理,详尽阐述了使用二维模板的标定算法,重点分析了如何借助开源软件OpenCV实现该算法。
实验结果显示,使用OpenCV中的相关函数,可以方便地进行数学计算,简单有效地完成摄像机标定。
【关键词】摄像机标定;内部参数;单应性矩阵;OpenCV1.引言计算机视觉的基本任务之一是从摄像机获取的图像信息出发计算三维空间中物体的几何信息,并由此重建和识别物体。
而空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系是由摄像机成像的几何模型决定的,这些几何模型参数就是摄像机参数。
摄像机标定是确定摄像机内外参数的一个过程,其中内参数的标定是指确定摄像机固有的、与位置参数无关的内部几何与光学参数,包括图像中心坐标(也称主点坐标)、图像纵横比、相机的有效焦距和透镜的畸变失真系数等;外参数的标定是确定摄像机坐标系相对某一世界坐标系的三维位置和方向关系。
目前,摄像机标定技术主要有两种实现方法:(1)基于标定物的方法:需要尺寸已知的标定参照物,通过建立标定物上三维坐标已知点与其图像点之间的对应,利用一定的算法获得摄像机的内外参数。
标定物可以是三维的,也可以是二维共面的。
三维标定物条件下,只需一幅图像就可以求出摄像机的全部内外参数。
但三维标定物的加工和维护比较困难。
二维共面标定物加工维护简单,但一幅图像不足以标出所有的摄像机参数,因此需要简化摄像机模型,或者从不同角度获取多幅图像来同时标出所有的参数。
当应用场合要求的精度很高而且摄像机的参数不经常变化时,这种标定法应为首选。
(2)自标定法:不需要标定物,仅依靠多幅图像对应点之间的关系直接进行标定。
利用了摄像机内部参数自身的约束,而与场景和摄像机运动无关。
该方法非常灵活,但不是很成熟,由于未知参数太多,很难得到稳定的结果。
基于OpenCV的红外与可见光双摄像机标定方法研究任贵文【摘要】With the development of infrared thermal imaging technology , as well as the advantages of non-con-tact temperature measurement , study of infrared thermal imaging technology is also increasing , And the fusion of in-frared and visible images become the focus of current research , integration of the main difficulty is the calibration of infrared and visible light cameras , for image registration .Based on the versatile camera calibration technique , in the VS2013 environment , combined with the OpenCV open source computer vision library , we developed a set of calibration system for infrared and visible light cameras .The system overcomes the disadvantages of Infrared Image camera can not take clear checkerboard images , and achieving fast , accurate real-time infrared and visible light cameras calibration .%随着红外热成像技术的不断发展,以及其非接触性测温的优点,人们对红外热成像技术的研究也越来越多;其中,红外与可见光图像的融合成为目前研究的热点;融合的主要难点是对红外和可见光摄像机的参数标定,已达到图像配准的目的。
opencv 标定参数使用OpenCV是一个开源的计算机视觉库,广泛应用于图像处理和计算机视觉任务中。
在许多计算机视觉应用中,相机的标定是一个重要的步骤,用于确定相机内部和外部参数,以便准确地测量和分析图像中的物体。
本文将介绍使用OpenCV进行相机标定的参数设置。
相机标定是将相机的内参和外参参数进行估计的过程。
内参包括焦距、主点坐标和畸变参数等,而外参则包括相机的位置和朝向参数。
在进行相机标定之前,需要准备一组已知的三维空间点和对应的二维图像点对,这些点对即为标定板上的特征点。
在OpenCV中,相机标定的参数设置包括标定板的尺寸、标定板上特征点的尺寸、待标定相机的图像尺寸等。
首先,标定板的尺寸是指标定板上特征点的行列数,通过设置这些参数可以提供更准确的标定结果。
其次,标定板上特征点的尺寸也需要根据实际情况进行设置,通常选择较大的特征点尺寸可以提高标定的精度。
最后,待标定相机的图像尺寸也需要根据实际情况进行设置,以确保标定结果的准确性。
在进行相机标定之前,还需要设置一些与标定相关的参数,例如用于检测标定板的方法、标定板上特征点的检测阈值等。
OpenCV提供了多种方法用于检测标定板,例如使用棋盘格或圆点阵列等。
根据实际情况选择合适的检测方法可以提高标定的准确性。
此外,还可以设置标定板上特征点的检测阈值,通过调整这个参数可以提高标定的鲁棒性。
在进行相机标定时,还需要设置一些与优化相关的参数,例如优化算法的类型、最大迭代次数等。
OpenCV提供了多种优化算法,例如Levenberg-Marquardt算法、高斯牛顿算法等。
根据实际情况选择合适的优化算法可以提高标定的精度。
此外,还可以设置最大迭代次数,通过增加迭代次数可以提高标定的收敛性。
在进行相机标定时,还需要设置一些与畸变矫正相关的参数,例如是否进行畸变矫正、畸变矫正的类型等。
OpenCV提供了多种畸变矫正方法,例如简单的多项式模型和更复杂的鱼眼模型等。
opencv的相机标定方法
OpenCV提供了多种相机标定方法,其中最常用的是棋盘格标
定法。
下面是使用棋盘格标定相机的步骤:
1. 准备一副棋盘格图片,棋盘格的每个方格必须是完整的黑白交替的。
2. 使用摄像机拍摄多幅图片,确保棋盘格图片处于不同的位置和角度,同时保持棋盘格在整个图像中都可见。
3. 初始化标定板格点的三维坐标数组和图像中对应点的二维坐标数组。
4. 使用OpenCV的函数`findChessboardCorners()`在每个图像中
查找棋盘格的角点,并将其保存在图像对应的二维坐标数组中。
5. 使用OpenCV的函数`drawChessboardCorners()`在每个图像
上绘制出检测到的角点。
6. 使用OpenCV的函数`calibrateCamera()`计算相机的畸变系数和相机矩阵。
7. 使用OpenCV的函数`undistort()`去除图像的畸变。
8. 使用OpenCV的函数`imshow()`显示校正前后的图像进行对比。
9. 使用OpenCV的函数`getOptimalNewCameraMatrix()`获取校正后图像的新相机矩阵。
10. 使用OpenCV的函数`initUndistortRectifyMap()`获取校正后图像的映射矩阵。
11. 使用OpenCV的函数`remap()`将原始图像映射到校正后图像。
通过以上方法,可以完成相机的标定和校正,得到更准确的图像处理结果。
总第230期2008年第12期计算机与数字工程Computer&Digital EngineeringVol.36No.12128基于OpenCV的摄像机标定问题研究3高文娟 李 健(陕西科技大学电气与信息工程学院 西安 710021)摘 要 介绍了可用于图像处理与计算机视觉编程的强大类库OpenCV,对其应用于双目视觉中摄像机标定问题的主要数据结构进行了说明,重点分析了在VC++环境下调用OpenCV相关库函数的实现摄像机标定的设计问题,并探讨了该方法中须注意的程序设计问题。
该算法对于图像处理与计算机视觉方面的应用设计具有实用价值,对于利用OpenCV 进行视觉研究有一定参考价值。
关键词 计算机视觉 摄像机模型 摄像机标定 透镜畸变 OpenCV中图分类号 TP391.41Resea rch on Ca mera Calibration Tech nique Based on Op e n CVGao Wenjuan L i J ian(School of Elect rical a nd Inf or mation Engineering,Shaa nxi U niversity of Science a nd Technology,Xiπan 710021) Abs t rac t Int roduced op en source comp uter vision library-Ope nCV,used in image p rocessing a nd comp uter vision; Discussed t he imp orta nt data st ructure of Op enCV used in camera calibration;Especially analyzed t he met hod of ca mera calibration design using f unction give n by Op enCV under t he e nvironment of V C w hich has p ractical value on t he applica2 tion design of image p rocessing a nd comp uter vision.Ke y w ords comp uter vision,ca mera model,ca mera calibration,lens dist ortion,Ope nCVClass Nu m ber TP391.411 引言人类获取环境信息至少80%是通过视觉,人眼与大脑的协作使得人们可以获取、处理及理解这些视觉信息。
计算机视觉即是模拟这一理论而形成,其广泛应用于工业、医疗保健、航空航天、地理探测、军事等各个领域。
摄像机标定作为计算机视觉中解决三维世界坐标与二维图像坐标之间对应关系的关键问题,拥有众多的研究方法。
2 OpenCV介绍OpenCV(Intel Open Source Comp uter Vi2 sion Library)是英特尔公司开发的开放源代码计算机视觉类库。
它在数字图像处理和计算机视觉方面功能强大,可轻松实现物体轮廓跟踪、图像的几何处理、形态学处理、图像特征提取、背景分离、金字塔算法、种子填充算法、光流算法、主动轮廓算法、相机的校正、姿势的识别等众多操作,其最新版本追加了三维图像/影像处理技术[1]。
OpenCV库拥有以下显著优点:1)独立性:既可独立运行,也可调用其它外部库。
2)跨平台:拥有通用的图像/视频载入、保存和获取模块,独立于操作系统/硬件/图形管理器。
3)高性能:由于其算法都是基于封装于IPL的高灵活性动态数据结构的,故一半以上的函数在设计及汇编时被Intel公司针对其所生产的处理器优化。
4)可扩展性好:OpenCV提供了与EiC、Ch、3收稿日期:2008年7月28日,修回日期:2008年8月15日基金项目:陕西省教育厅专项科研计划项目(编号:05J K145)资助。
作者简介:高文娟,女,硕士研究生,研究方向:计算机视觉,图形图像处理。
李健,男,教授,博士,研究方向:逆向工程、数字图像处理、虚拟现实。
第36卷(2008)第12期计算机与数字工程129 MA TL AB、VC等其它语言或环境的接口。
5)开放性:它是完全免费的,且源代码完全开放。
3 摄像机标定技术摄像机标定的目的是确定摄像机的位置、属性参数、建立成像模型,以便确定空间某点与它在图像平面像点间的对应关系。
图1 摄像机成像原理其要确定的参数可以分为内部参数和外部参数:内部参数描述摄像机的内部光学和几何特性,如图像中心、焦距、镜头畸变等;外部参数就是相对于世界坐标系的摄像机坐标的三维位置和方向。
摄像机标定的方法有很多,大致可以分为传统标定技术和自标定技术。
传统标定技术标定时,需要特定的标定物,并人为提供一组已知坐标的特征基元,而自标定技术则不需要。
图1为摄像机标定时成像原理。
4 OpenCV中的摄像机标定原理OpenCV进行摄像机标定时,摄像机模型[2~3]采用针孔模型,并引入透镜的径向畸变和切向畸变。
图2 摄像机标定中的各坐标系设P(X W,Y W,Z W)是一个点的世界坐标,P(X C,Y C,Z C)是该点在摄像机坐标系中的坐标,P(x,y)是该点在图像平面坐标系中的物理坐标,P(u,v)是图像平面坐标系中的像素坐标,如图2所示。
具体原理为:1)世界坐标系中坐标P(X W,Y W,Z W)转换为摄像机坐标系中坐标P(X C,Y C,Z C)X cY cZ c=RX wY wZ w+t(1)其中R为一个3×3旋转矩阵,t为一个3×1平移向量。
2)摄像机坐标系中坐标P(X C,Y C,Z C)在针孔模型中进行规范化投影,得到图像平面坐标系中物理坐标P(x,y)xy=X c/Z cY c/Z c(2)3)引入透镜的径向畸变和切向畸变,图像平面坐标系中物理坐标P(x,y)扩展为P(x q,y q)x qy q=(1+k1r2+k2r4)×X c/Z cY c/Z c+2p1x y+p2(r2+2x2)p1(r2+2y2)+2p2x y(3)其中k1和k2是径向畸变系数,p1和p2是切向畸变系数,r2=x2+y2。
4)图像平面坐标系中物理坐标P(x q,y q)转换为像素坐标P(u,v)uv=f x x q+u0f y y q+v0f x=f・s/Δxf y=f/Δy(4)其中(u0,v0)是基准点(通常在图像的中心),f为摄像机的有效焦距,s为比例因子,Δx为计算机图像在水平方向(x方向)上相邻两像素之间的有效距离(mm/pixel),Δy为计算机图像在垂直方向(y方向)上相邻两像素之间的有效距离(mm/pixel)。
5)综合上述公式得到如下等价表示s・p=A(R/t)・P(5)其中p=(u,v,1)T为图像像素点的齐次坐标,P=(X,Y,Z,1)T为空间点的齐次坐标,A为摄像机的内参矩阵,(R|t)为外参矩阵,这样就得到了一个图像点和空间点之间的一个映射关系。
5 OpenCV摄像机标定程序分析下面按照标定的模块逐个分析所用的OpenCV结构和函数[4]。
流程模块如图3所示。
图3 摄像机标定模块1)读取标定图像其间要用到的数据结构与函数有:Ipl Image结构,可以方便的存取图像中的像素值;CvPoint2D32f结构,表示二维浮点型坐标点;CvMat结构,C语言里的数组类型相似,但含有更130 高文娟等:基于OpenCV的摄像机标定问题研究第36卷多信息;cvLoadImage()函数,其支持的图像格式众多。
2)角点检测将图像数据输入cvFindChessboardCorners(),如果返回值非0,表示在该幅图像上提取的角点数目和设定的相同,提取角点成功,用cvDraw2ChessboardCorners()在图上画出角点;若返回值为0,表示角点提取失败,抛弃该图进行下一幅图的检测。
函数cvFindChessboardCorners()提取到的角点坐标为(CvPoint2D32f结构)。
用函数cvFind2CornerSubPix()对这些角点进一步的细化,得到更为精确的亚像素级的坐标(CvPoint2D32f结构)。
3)结构转换由于后面步骤中函数的输入参数均为CvMat结构,所以要将上一步得出的角点坐标CvPoint2D32f结构转化为CvMat,这一步很多人在使用时不会注意到,因而产生了错误的结果。
4)计算内参矩阵初始化所有的输入参数后,将角点在世界坐标系中坐标值以及在图像坐标系中的坐标值代入cv2CalibrateCamera2(),最后得到摄像机的内参数矩阵、畸变系数向量、每幅图像的旋转向量(旋转矩阵的压缩表示,要转换成通常使用的旋转矩阵需用函数cvRodrigues2()转化)、每幅图像的平移向量。
图4 实验所使用棋盘图格式(任选一幅)5)计算外参矩阵利用得到的内参数矩阵和畸变系数向量,用函数cvFind2 Ext rinsicCameraParams 2()分别计算各幅图的外参数(旋转向量和平移向量)。
6)误差分析先用cvProject Point s2()计算出三维角点坐标的投影坐标,再用函数cvNorm()比较计算出的投影坐标与通过角点提取到的投影坐标,从而得到一个误差值。
7)结果输出将检测出的角点坐标,计算出的投影坐标,摄像机的内外参数矩阵输出到t xt文本中。
其间会用到cvm Get()函数。
8)释放内存最后用cvReleaseMat()函数释放cvCreateM2at()分配的内存空间,防止内存泄露。
根据上述标定原理和开发步骤,在Windows XP平台下利用VC++6.0开发一个基于OpenCV beta5的摄像机标定程序,程序运行结果为t xt文本。
经过测试,其运行稳定,寻找角点成功,标定7幅3072×2304像素的图像,用时23. 7563秒,可以达到实用的要求。
图5 实验结果6 结语Intel公司开发OpenCv库,旨在建立一个完全开放的研究机构使得图像处理及计算机视觉技术在快速发展的PC环境中得到更好的应用,将复杂的操作变的很容易处理,缩短程序的开发周期。
故利用OpenCV开发的摄像机标定程序具有标定结果精确、运算效率高、跨平台移植性好等特性,可以有效地应用于需要计算机视觉系统的各个领域。
参考文献[1]OpenCV中文参考册./[2]Zhang Zhengyou.A Flexible New Technique for Camera Calibration[J].IEEE Transactions on Pattern Anal2 ysis and Machine Intelligence,November,2000,22(11): 1330~1334[3]Intel Open Source Computer Vision Library Refer2 ence Manual[R].2001,12[4]马颂德,张正友.计算机视觉—计算理论与算法基础[M].北京:科学出版社,2003,12[5]黎松,平西建,丁益洪.开放源代码的计算机视觉类库OpenCv的应用[J].计算机应用与软件,2005,22(18): 134~136[6]尹文生,罗瑜林,李世其.基于OpenCV的摄像机标定[J].计算机工程与设计,2007,28(1):197~199。