基于OpenCV算法库的摄像机标定方法
一种基于OpenCV的摄像机标定算法的研究与实现
一种基于OpenCV的摄像机标定算法的研究与实现作者:孙昆穆森邱桂苹赵倩来源:《电子世界》2012年第14期【摘要】摄像机标定是计算机视觉中的一个重要问题。
本文介绍了标定的基本原理,详尽阐述了使用二维模板的标定算法,重点分析了如何借助开源软件OpenCV实现该算法。
实验结果显示,使用OpenCV中的相关函数,可以方便地进行数学计算,简单有效地完成摄像机标定。
【关键词】摄像机标定;内部参数;单应性矩阵;OpenCV1.引言计算机视觉的基本任务之一是从摄像机获取的图像信息出发计算三维空间中物体的几何信息,并由此重建和识别物体。
而空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系是由摄像机成像的几何模型决定的,这些几何模型参数就是摄像机参数。
摄像机标定是确定摄像机内外参数的一个过程,其中内参数的标定是指确定摄像机固有的、与位置参数无关的内部几何与光学参数,包括图像中心坐标(也称主点坐标)、图像纵横比、相机的有效焦距和透镜的畸变失真系数等;外参数的标定是确定摄像机坐标系相对某一世界坐标系的三维位置和方向关系。
目前,摄像机标定技术主要有两种实现方法:(1)基于标定物的方法:需要尺寸已知的标定参照物,通过建立标定物上三维坐标已知点与其图像点之间的对应,利用一定的算法获得摄像机的内外参数。
标定物可以是三维的,也可以是二维共面的。
三维标定物条件下,只需一幅图像就可以求出摄像机的全部内外参数。
但三维标定物的加工和维护比较困难。
二维共面标定物加工维护简单,但一幅图像不足以标出所有的摄像机参数,因此需要简化摄像机模型,或者从不同角度获取多幅图像来同时标出所有的参数。
当应用场合要求的精度很高而且摄像机的参数不经常变化时,这种标定法应为首选。
(2)自标定法:不需要标定物,仅依靠多幅图像对应点之间的关系直接进行标定。
利用了摄像机内部参数自身的约束,而与场景和摄像机运动无关。
该方法非常灵活,但不是很成熟,由于未知参数太多,很难得到稳定的结果。
相机标定过程(opencv)+matlab参数导入opencv+matlab标定和矫正
相机标定过程(opencv)+matlab参数导⼊opencv+matlab标定和矫正%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%⾟苦原创所得,转载请注明出处%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%start -- 摄像机标定 ---------------------------------------------->摄像机标定的数学过程如下标定事先选⽤棋盘格要注意⼀些问题,张正友论⽂中建议棋盘格数⼤于7*7。
opencv标定时候对正⽅形的棋盘格标定板是不能识别的,需要长⽅形的标定板。
张正友论⽂中建议每次拍摄标定板占50%以上,但这是对畸变并不是很⼤的普通相机⽽⾔的,对于球⾯相机是不适⽤的,相反球⾯相机标定使⽤的标定板占⽐应该较⼩⽐较好(对于格⼦并不是⾮常密的棋盘格⽽⾔),原因是因为棋盘格每个⾓点之间的距离越⼤,这段距离之间的可能发⽣畸变的点越多,如果占⽐过⼤就⽆法将形变体现在棋盘格中。
棋盘格的选⽤应该根据实际需要选⽤,对于要求精密识别的情况,则需要⾼精度的棋盘格,相应的价格也会较⾼;对于精度要求并不是很⾼的(如抓取)情况并不需要精度很⾼的标定板,也能够节省开⽀。
这⾥程序的实现是在opencv中,所以就⽤opencv的程序来说明具体的过程.注意各个版本的opencv之间的程序移植性并不好,以下程序是在opencv2.4.3下编制运⾏的,每⼀步的要⽤到的输⼊输出都做了红⾊标记.⽴体相机标定分为两个步骤,⼀个是单⽬标定(本⽂档第2步),另⼀个是双⽬标定单⽬标定获得相机的x,y轴的焦距;x,y轴的坐标原点位置;世界坐标系和平⾯坐标之间的旋转和平移矩阵,5个畸变系数双⽬标定获得两个相机成像平⾯之间的旋转和平移矩阵注意1.程序运⾏前需要插上摄像头,否则程序有可能不能正常运⾏2.单⽬标定(1).获取棋盘格图像for (int i=1; i<=19; i++)//输⼊左标定板图像{std::stringstream str;//声明输⼊输出流str << "./left" << i << ".jpg";//以名字⽅式把图像输⼊到流std::cout << str.str() << std::endl;//.str("")清除内容 .clear()清空标记位leftFileList.push_back(str.str());//.push_back从容器后向前插⼊数据leftBoardImage = cv::imread(str.str(),0);//⽤来显⽰即时输⼊的图像cv::namedWindow("left chessboard image");cv::imshow("left chessboard image",leftBoardImage);cv::waitKey(10);}(2).定义棋盘格的⾓点数⽬cv::Size boardSize(14,10)(3).程序定位提取⾓点这⾥建⽴的是理想成像平⾯(三维,第三维为0,单位为格⼦数)和图像坐标系(⼆维,单位是像素)之间的关系(a)⾸先声明两个坐标容器std::vector<cv::Point2f> imageCorners;//⼆位坐标点std::vector<cv::Point3f> objectCorners;//三维坐标点(b)初始化棋盘⾓点,令其位置位于(x,y,z)=(i,j,0),⼀个棋盘格为⼀个坐标值for (int i=0; i<boardSize.height; i++){for (int j=0; j<boardSize.width; j++){objectCorners.push_back(cv::Point3f(i, j, 0.0f));}}(c)直接使⽤opencv内函数找到⼆维⾓点坐标,并建⽴标定标定格⼦和实际坐标间的关系(像素级别)这个函数使⽤时,当标定板是长⽅形时可以找到⾓点,但是标定板是正⽅形时,就找不到,原因还未知.cv::findChessboardCorners(image, boardSize, imageCorners);(d)获得像素精度往往是不够的,还需要获得亚像素的精度cv::cornerSubPix(image,imageCorners, //输⼊/输出cv::Size(5,5),//搜索框的⼀半,表⽰在多⼤窗⼝定位⾓点cv::Size(-1,-1), //死区cv::TermCriteria(cv::TermCriteria::MAX_ITER + cv::TermCriteria::EPS,30, // max number of iterations//迭代最⼤次数0.01)); // min accuracy//最⼩精度注:TermCriteria模板类,取代了之前的CvTermCriteria,这个类是作为迭代算法的终⽌条件的,这个类在参考⼿册⾥介绍的很简单,我查了些资料,这⾥介绍⼀下。
学习笔记:使用opencv做双目测距(相机标定+立体匹配+测距).
学习笔记:使⽤opencv做双⽬测距(相机标定+⽴体匹配+测距).最近在做双⽬测距,觉得有必要记录点东西,所以我的第⼀篇博客就这么诞⽣啦~双⽬测距属于⽴体视觉这⼀块,我觉得应该有很多⼈踩过这个坑了,但⽹上的资料依旧是云⾥雾⾥的,要么是理论讲⼀⼤堆,最后发现还不知道怎么做,要么就是直接代码⼀贴,让你懵逼。
所以今天我想做的,是尽量给⼤家⼀个明确的阐述,并且能够上⼿做出来。
⼀、标定⾸先我们要对摄像头做标定,具体的公式推导在learning opencv中有详细的解释,这⾥顺带提⼀句,这本书虽然确实⽼,但有些理论、算法类的东西⾥⾯还是讲的很不错的,必要的时候可以去看看。
Q1:为什么要做摄像头标定?A: 标定的⽬的是为了消除畸变以及得到内外参数矩阵,内参数矩阵可以理解为焦距相关,它是⼀个从平⾯到像素的转换,焦距不变它就不变,所以确定以后就可以重复使⽤,⽽外参数矩阵反映的是摄像机坐标系与世界坐标系的转换,⾄于畸变参数,⼀般也包含在内参数矩阵中。
从作⽤上来看,内参数矩阵是为了得到镜头的信息,并消除畸变,使得到的图像更为准确,外参数矩阵是为了得到相机相对于世界坐标的联系,是为了最终的测距。
ps1:关于畸变,⼤家可以看到⾃⼰摄像头的拍摄的画⾯,在看矩形物体的时候,边⾓处会有明显的畸变现象,⽽矫正的⽬的就是修复这个。
ps2:我们知道双⽬测距的时候两个相机需要平⾏放置,但事实上这个是很难做到的,所以就需要⽴体校正得到两个相机之间的旋转平移矩阵,也就是外参数矩阵。
Q2:如何做摄像头的标定?A:这⾥可以直接⽤opencv⾥⾯的sample,在opencv/sources/sample/cpp⾥⾯,有个calibration.cpp的⽂件,这是单⽬的标定,是可以直接编译使⽤的,这⾥要注意⼏点:1.棋盘棋盘也就是标定板是要预先打印好的,你打印的棋盘的样式决定了后⾯参数的填写,具体要求也不是很严谨,清晰能⽤就⾏。
之所⽤棋盘是因为他检测⾓点很⽅便,and..你没得选。
EmguCV类(CvInvoke_Class) 方法整理
规范化输入数组
Randn(IInputOutputArray, IInputArray, IInputArray)
用正态分布的随机数填充数组
Randn(IInputOutputArray, MCvScalar, MCvScalar)
用正态分布的随机数填充数组
RandShuffle
将原数组(矩阵)打乱
用于标定立体相机
StereoRectify
计算每个摄像机的旋转矩阵(虚拟地)使两个摄像机图像平面处于相同的平面。
StereoRectifyUncalibrated
在不知道摄像头的固有参数和它们在空间的相对位置计算校正变换
方法
CalibrateCamera(IInputArray, IInputArray, Size, IInputOutputArray, IInputOutputArray, IOutputArray, IOutputArray, CalibType, MCvTermCriteria)
cvGetRawData
以低级别信息填充输出变量。
cvGetRow
返回头文件信息,对应于输入数组的指定行。
cvGetRows
返回头文件信息,对应输入数组的指定行跨度。
cvGetSubRect
返回头文件,对应于输入数组的指定矩形。换句话说,它允许用户将输入阵列的一部分视为独立阵列。通过还可提取ROI的子阵列。
计算源数据的加权平均和,使得acc变为帧序列的运行平均值(Calculates weighted sum of input src and the accumulator acc so that acc becomes a running average of frame sequence: acc(x,y)=(1-alpha) * acc(x,y) + alpha * image(x,y) if mask(x,y)!=0 where alpha regulates update speed (how fastaccumulator forgets about previous frames).
opencv手眼标定方法
opencv手眼标定方法
OpenCV中的手眼标定方法是用于估计相机与机器人末端执行器之间的相对姿势关系。
这个问题可以从理论和实际操作两个方面来回答。
从理论上讲,手眼标定是通过使用已知的相机和机器人末端执行器的位姿数据,来估计它们之间的变换关系。
这个变换关系可以用一个4x4的齐次变换矩阵表示,通常称为T矩阵。
在OpenCV中,可以使用solvePnP函数来解决这个问题,该函数可以通过已知的
3D空间点和它们在图像中的对应点来估计相机的位姿。
另外,还可以使用calibrateHandEye函数来估计相机和机器人末端执行器之间的变换关系。
从实际操作上讲,手眼标定通常需要以下步骤:
1. 收集数据,首先需要收集相机和机器人末端执行器的位姿数据。
这可以通过移动相机和机器人末端执行器,并记录它们的位姿数据来实现。
2. 数据处理,收集到的位姿数据需要进行处理,以便用于手眼
标定。
这可能涉及到坐标系的转换和数据格式的整理。
3. 手眼标定,使用OpenCV中的函数,如solvePnP和calibrateHandEye来进行手眼标定,估计相机和机器人末端执行器之间的变换关系。
4. 评估结果,完成标定后,需要对结果进行评估,通常是通过重投影误差等指标来评估标定的质量。
总的来说,手眼标定是一个重要的问题,它在机器人视觉和自动化领域有着广泛的应用。
在OpenCV中,有一些函数可以帮助我们实现手眼标定,但在实际操作中需要注意数据的采集和处理,以及对标定结果的评估。
希望这个回答能够帮助你更好地理解OpenCV中的手眼标定方法。
一种基于OpenCV的简易摄像机标定方法
图像像素坐标系, 该坐标系的单位是像素 , 坐标原点 0 在图像的左上角。由于 ( 只表示像素位于数 。 , ) 组中的列数与行数, 并没有用物理单位表示出该像 素在 图像 中的位置, 因此, 需要再建立 以物理单位 ( 毫米 ) 表示 的图像坐标系 , 如图 l 所示 , Y 是图 ( ) , 像物理坐标 , 光心 0 在图像的中心点上 。
图 1 图像坐标系
由图 1 可得, 图像中任意一个像素在两个坐标
系下 的坐标 有 如下 的关 系 :
=
孚+ ‰
() 1
() 2
用齐 次坐标 与矩 阵表示为 :
1 O
u。
图 3 摄 像 机模 型
图 3 0为摄像机光心 , 中, 0 为图像坐标原点 ,
() 3
①读取 实验所 需 的图像 。
②使用 cF d hs orCr r 函数提取棋盘 vi C e ba o e n s d ns
模 板上 的角点 。
1y ,) k, +, + p( )) 2l ] 6( Y :z( ,) [23 , +p y x ) +2 x
() 7
③使用 cFnC r r b i vi o e uP d n S x函数对上步 中所提 取 出来的角点进行进一步的细化, 以得到更精确 的 角 点位 置 。 ④亚像素精确化后, 再使用 cDa C e ba — v r hs or w s d
界坐 标 系。
收 稿 E期 :2 1 0 t 0 1— 7—0 4
取三维空间信息的前提和基础。标定结果的好坏直
接影 响 着 三 维 测 量 的 精 度 和 三 维 重 建 结 果 的 好 坏H , 因此研究 摄像 机 标定 方 法 具有 重 要 的理 论 意 义 和实 际应用 价值 。
基于OpenCV的红外与可见光双摄像机标定方法研究
基于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和C++的摄像机标定研究与实现
Ab s t r a c t I n t h e a na l y s i s b a s e d o n t h e c a me r a mo d e l ,a n d c o n s i d e r t h e l e ns d i s t o r t i o n,i n e n s ur i n g t h e s t a b i l i t y o f t h e c a me r a mo de l ,t he t h e n e w me t h o d me t h o d r e d uc i n g t h e a mo u n t o f c o mp ut a t i o n t o e n s u r e c a l i b r a t i o n a c c u r a c y . Th e me t h o d i n VC+ + d e v e l op me nt e n v i r o n — me nt ,g i v e f u l l p l a y t o t h e Op e nc v l i br a r y f u n c t i o n s,a n d i mp l a n t e d i n t o t h e GM L c a l i b r a t e t o o l s t o i mp l e me n t . Exp e r i me n t s s ho w t h a t t he
me t h o d of c a l i b r a t i o n h a s a c c u r a c y,r o b u s t n e s s ,a n d a g oo d c r o s s pl a t f o r m po r t a b i l i t y,c a n me e t r e a l - t i me r e q u i r e me nt s .
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()`将原始图像映射到校正后图像。
通过以上方法,可以完成相机的标定和校正,得到更准确的图像处理结果。
基于OpenCV的挖掘机器人摄像机参数标定
( . l g f e h n c l g n e iga d Au o ai n No t e se nUn v ri , h n a g 1 0 0 , ia 1 Col eo c a ia e M En i e rn n t m t , rh a tr ie st S e y n 1 0 4 Chn ; o y
(. 1 东北大学 机械 工程 与 自动化学院, 辽宁 沈阳 10 0 ;2河北理工大学 计 算机 与 自动控 制学院, 10 4 . 河 北 唐 L 0 3 0 :3东北大学 信 息科学与工程学院, 宁 沈阳 10 0 ;) U 609 . 辽 04 1 摘 要:为了建立挖掘机器人视觉 系统摄像机测量模 型,提高视觉测量精度 ,分析了挖掘机器人摄像机视觉系统
矩 阵 及 平 移 向量 ,并 给 出 了标 定 参 数 误 差 。研 究 结 论 表 明采 用 角 点 提 取 方 法 ,标 定 误 差 可 达 亚 像 素 级 ,能够 满 足 挖 掘 机 器 人 视 觉 系 统 的标 定 及 视 觉 测 量 精 度 要 求 。 关 键 词 :挖 掘 机 器 人 ;角 点 检 测 ;摄 像 机 标 定 :O e C p n V 中图 分 类 号 :T 4 . P2 23 文 献 标 识 码 :A
Ca e ap r m ee ai r t n o c v t r o o a e n o e CV m r a a t r l ai f x a ao b t s d o p n c b o e r b
W ANG Fubi - LI Ji LIYi ya 。 CHEN i un n ’, U e , ng n , Zh k , W ANG i bo J ng
第2 9卷 第 6期
、 1 9 , . 0 2 No 6 .
基于OpenCV的摄像机标定方法的实现
空间物 体表 面某 点 的三 维几何位 置 与其在 图
标定 法而 言 , 摄像 机标 定法 标定 结果稳 定 , 传统 精 度 较高 . 摄 像机 方 位 、 在 焦距 固定 不 变 的情况 下 , 往往 采用传 统摄像 机标 定法 . 开放 源代码 的计 算 机 视觉 类 库 ( pnSuc O e ore
M e h d o m e a Ca i r to s d o t o n Ca r lb a i n Ba e n Ope CV n
W ANG is e Ba— h ng,GAO u— a Yo nin,S HEN e —h n W nz o g
(colfEetc o e a dA t ai n i e n , h n hi n e i Sho o l r P w r n uo tnE gn r g S ag a i rt o ci m o ei U v sy f
第2 6卷 第 4期
上 海 电 力 学 院 学
报
Vo . 6, No 4 12 . Au . 2 1 g 0 0
21 0 0年 8月
J u n l o S a g a Un v r i o E e ti Po r o r a f hn hi i e st y f l crc we
位于俄 罗斯 的研究 实 验室 开 发 , 一 套 可免 费获 是 得 的 由一些 C函数和 c+ 类 所组 成 的库 , 来实 + 用 现 一些 常用 的图 像处 理 及 计 算 机 视 觉算 法 , 实 可
opencv 圆点标定 世界坐标计算
opencv 圆点标定世界坐标计算一、概述1. opencv是一个开源的计算机视觉库,被广泛应用于图像处理和计算机视觉领域。
2. 圆点标定是一种常见的相机标定方法,通过标定得到相机的内参和外参,从而实现图像到世界坐标的转换和计算。
二、opencv相机标定方法1. opencv提供了相机标定的函数calibrateCamera和undistort,可以通过相机内参和畸变参数对图像进行修正。
2. 相机标定的过程包括捕获一组棋盘格图像、提取棋盘格角点、根据实际物理尺寸设定世界坐标、利用cv2.calibrateCamera函数进行相机标定以及通过cv2.undistort函数进行图像矫正。
三、圆点标定原理1. 圆点标定是一种基于圆点模式的相机标定方法,通过拍摄已知世界坐标的圆点图案,并对图像中的圆点进行提取和匹配,从而得到相机的内参和外参。
2. 圆点标定可以通过利用图像中相邻三个圆点在实际世界中的位置关系,计算相机与物体之间的变换矩阵,以实现图像到世界坐标的转换和计算。
四、圆点标定的步骤1. 准备圆点标定板:准备一个已知世界坐标的圆点标定板,可以是印刷的二维图案或者三维物体。
2. 拍摄圆点图像:在不同的角度和位置下,使用已知内参的相机拍摄圆点标定板的图像。
3. 圆点提取和匹配:利用图像处理算法对拍摄的图像进行圆点提取和匹配,得到图像中圆点的像素坐标。
4. 世界坐标设定:根据已知的圆点标定板的实际尺寸和布局,设定世界坐标系。
5. 计算相机内参和外参:利用得到的图像中圆点的像素坐标和设定的世界坐标系,通过数学模型和优化算法计算相机的内参和外参。
6. 图像到世界坐标转换:根据得到的相机内参和外参,可以将图像坐标转换为世界坐标,并进行相应的计算和应用。
五、圆点标定的应用场景1. 三维重建:通过圆点标定可以得到相机的内参和外参,从而实现对三维物体的重建和测量。
2. 摄像机跟踪:利用相机的内参和外参,可以结合实时图像处理和计算,实现对移动物体的跟踪和定位。
张正友标定法示例(含源代码)
张正友标定法⽰例(含源代码)
博主在博客园的第⼀篇博客,以著名的张⼤⽜标定法开始吧!
具体标定原理就不详细说了,资料数不胜数,重点看张正友的原著《A Flexible New Technique for Camera Calibration》,搞明⽩这篇⽂章就⾜够了。
好了,现在主要说⼀下标定过程,并附上博主⾃⼰调⽤Opencv接⼝编写的代码。
1.拍摄棋盘格图⽚,8幅左右合适,⽂献⾥说n=8时,最⼩⼆乘法计算内参有稳定解。
所以我就拍了9幅。
2. 读取棋盘格图像,提取⾓点(注意:都是内⾓点)。
为了提⾼⾓点提取精度,进⼀步进⾏亚像素⾓点的提取,附上亚像素⾓点提取后的棋盘格图像。
3. 开始摄像机标定,opencv1.0 2.0版只有⼀种摄像机标定模型,就是普通的⼩孔成像模型,在cv::空间下。
⽽从opencv3.0开始,新增了⼀种鱼眼相机标定模型,在fisheye::空间下。
两种模型的主要区别在于像与物的投影关系不同,具体的⽂献资料依然是数不胜数,这⾥就不赘述。
根据opencv官⽅⽂档的建议,在畸变程度较⼤的⼴⾓镜头(⽐如:鱼眼镜头)上进⾏摄像机标定和畸变校正,最好是⽤fisheye模型,该模型在图像边缘畸变程度很⼤的地⽅⽐普通相机模型的效果要好。
4. 对标定结果进⾏评价
5.保存标定结果,写⼊txt⽂件,主要是内参(归⼀化焦距,fx,fy; 光⼼坐标cx,cy;以及畸变系数k1,k2k3...)
好了,主要过程介绍完了,附上我放在码云上的源代码连接:。
相机标定的原理与意义及OpenCVMatlab实现差异小结
2018-01-30 相机标定的原理与意义及OpenCV、Matlab实现差异小结分类:OpenCV点滴2018-01-30 20:35 2292人阅读评论(3> 收藏举报本文是一篇关于相机标定意义和原理的个人总结,包含了OpenCV和Matlab中常用的相机标定函数的注解。
相机标定是机器视觉的基础,标定结果的好坏直接决定了机器视觉的系统精度,作用可见一斑。
在这一年半的时间里,我个人也是随着实验和程序的进一步理解,对标定的原理和意义有了更多的想法。
同样,由于博文的关系,仍有一些朋友会常常询问标定的程序问题。
本人的2018-05-17OpenCV标定程序的问题也多次被朋友询问,由于当时对标定的认识还不够系统,因此现在认为该文对标定的意义和原理有很多误解,并在此推荐一些较好的博文拱大家学习:双目测距与三维重建的OpenCV实现问题集锦<一)图像获取与单目标定;双目测距与三维重建的OpenCV实现问题集锦<二)双目标定与双目校正;双摄像头测距的OpenCV实现;分享一些OpenCV实现立体视觉的经验;下面结合本人的毕业论文及一年半来对机器视觉的学习,对相机标定的意义和原理进行叙述。
1.单目相机模型单目相机模型中的三种坐标系关系如图1所示,相机坐标系即是以光轴中心O为原点的坐标系,其z轴满足右手法则,成像原点所代表平面即为像平面坐标系<实际应用中,均以图像左上角为坐标系原点),实际物体坐标系即为世界坐标系。
图1 单目相机模型的三坐标系统关系其中,在世界坐标系的值为,是在像平面坐标系的投影点,其相机坐标系的值为。
是相机坐标系轴与像平面夹角,一般情况下轴与像平面垂直,值为。
且相机坐标系与像平面平行,为相机的焦距。
对于从相机坐标系到像平面坐标系的变换,像平面坐标系是用像素单位来表示的,而相机坐标系则是以毫M为单位来表示,因此,要完成改变换过程就需要先得到像平面的像素单位与毫M单位之间的线性关系。
基于OpenCV摄像机标定研究
基于OpenCV的摄像机标定研究摘要:根据摄像机标定原理,实现了vc 2010环境下基于opencv 的摄像机标定系统。
该系统以棋盘格标定板图像作为输入,计算出了摄像机的各内外参数及畸变系数。
通过图像矫正实验证明了系统的有效性。
关键词:摄像机标定;棋盘格;opencv;图像矫正中图分类号:tp391.41 文献标识码:a文章编号:1007-9599 (2013) 05-0000-021引言视觉测量、三维重建等是计算机视觉应用中较为重要的研究领域。
在这些研究中,都需要确定视觉图像中的点与现实世界中对应点的几何位置关系。
我们常用的图像,由摄像机拍摄得到,因此,确定这种关系,就要依靠成像系统即摄像机的几何模型。
几何模型的参数就是摄像机的参数。
但这些参数不能够直接获取,而是要利用摄像机拍摄的图像,通过实验来获取。
获取这些参数的过程我们称之为摄像机标定。
摄像机标定是计算机视觉应用中的关键技术。
摄像机标定精度直接影响视觉测量精度,也是做好立体图像匹配与三维重建工作的基础[1]。
摄像机标定方法有3类:基于标定物的方法,自标定方法和基于主动视觉的标定方法[2,3]。
其中,使用平面标定物的标定方法[4],因其标定物制作简单、标定方法灵活而广泛使用。
本文详细介绍了摄像机标定原理,及在vc++ 2010环境下,利用opencv 2.4.4实现摄像机标定的方法和步骤,并通过实验验证了其有效性。
2标定原理摄像机标定首先需要利用合适的数学工具来描述和表达空间中的点与图像中对应点之间的关系。
这个工具就是几何模型,它涉及到摄像机的光学参数如图像中心、镜头焦距和镜头畸变等,还涉及到摄像机坐标系与世界坐标系的相对位置和方位等。
常用的针孔模型是一种理想的成像模型,没有考虑摄像机透镜的厚度及畸变对成像的影响,不能很好地反映实际情况。
opencv中的标定算法,其摄像机模型以针孔模型为基础,同时考虑了透镜的径向畸变和切向畸变,引入了径向畸变和切向畸变两个参数。
基于OpenCV的高精度零件角点距离测量研究
机器视 觉中所测量的一般为 近景 , 对于要快速生成
图像 的摄像机 而言, 必须利用 大面积且弯曲的透镜 , 让足 够多的光线能够收敛聚焦到投影点上 。透镜可 以聚焦足 够多的光线 到某个点上 , 图像的生成更加迅速 , 使得 其代
【 关键词 】O eC ; pn V 哈里斯角点检测; 摄像机标定 ; 素检测 亚像 【 中图分类号】T 3 1 P9 【 文献标识码 】A
Re e r h o g - r cso e s r m e t o r s Ba e n Op n s a c f Hi h p e ii n M a u e n f Pa t s d o e CV
实现测 量 的 自动化 。高精度 测量 的关 键是摄 像机测 量
系统 的标定 , 在零件 尺寸测量 中, 一般 选用 的是短焦距
1 摄像机标定
1 透镜畸变参数 . 1
定焦光学镜头 , 而短焦距光学镜 头的非线性径向畸变是
影响测 量精度 的主要 因素 , 以需要 标定镜头 的非线性 所
畸变【】 1。 . 2 标定后从 图像 中提取特征点是 图像 的一个重要 的局 部特征 , 它在保 留了图像 中物体重要特 征信息 的同时又 有效减少 了信息 的数据 量 , 哈里斯角点提取 方法首先定 义某些算子 , 通过在 灰度 图像上寻找该算子 的极值提取 特征点。在文献【】 3中提到 , 哈里斯角点提取方法是 目前 效果 最好 最稳定的角点检测算子 , 它对亮度变化和刚体 几何变换有很 高的重复性 。
tc n q e n s b p x l d tc in e h i u r u e t g t h e ta t n o o n r .At a t h sz me s r me t e u t o e h i u a d u - i e ee t tc nq e a e s d o e te x r ci f c r e s o o ls,t e ie a u e n r s l f
基于OpenCV算法库的摄像机标定方法
21 01年第 4期
刘国平 , 蔡建平 : 基于O! n o CV算法库的摄像 机标定方法 e
通过 下列坐标系之间 的变换 , 实现 了世界 坐标 系 中任一 点 P与其像 素坐 标系 中投影 点之 间 的映 射关系 。
( ) 界坐标系 中点 1世 摄像机坐标系点
1
式 ( ) 是 两坐标 系之 间的 3 3的正 交 卜1 中, x
旋 转单位矩 阵, 是两坐标 系之 间 的 3 l的平 移 向 t x
量,£ ( , ,z ,=00 O 。 = £ t o (,,) )
() 2 摄像 机坐 标系 中点
, , ,) 图 1 与
1 V r ’r v ,
表示 ;2 摄像机坐标 系, 图 i () 如 所示 , 光心到 图像
平面的距离 为摄像机的有效焦距/ , Z) . ,c o( ,
图 2 像素 坐标 系和 图像坐 标系
I 收稿 日期 l2 1 -0 -2 01 5 0
I 作者简介l刘 国平 (94 16 一) , ,江西临川人 ,工学博士 ,教授 ,博士生导师;蔡建平 (9 1 男 18一),男 ,江
的很多通用算法 。
yc
zc
O eC pn V标 定模 块是基 于 张正友 H 的平 面标 定法来实现 的, 该方法是在传统 标定方法 的基础上 发展起来 的, 并且它对棋 盘模板的绘制精度具有较
高 的要求 , 图 3 如 所示 。摄像机 在不 同位置 ( 至少 两个 ) 上拍摄平面模板 的 图像 , 中平面模板和摄 其
摄像 机标定实 质上就是 为了确定三维 世界坐 标与二维 图像坐标之 间的映射关系 , 只要这种映射 关系确定 了, 就能从二维 图像 中提取三维信息 。因
opencv的相机标定方法
opencv的相机标定方法相机标定是计算机视觉中的一个重要步骤,它的目标是通过对相机进行一系列的测量来确定相机的内部参数和外部参数,从而提高图像处理和计算机视觉任务的精确度和稳定性。
OpenCV是一个广泛使用的计算机视觉库,提供了多种相机标定方法。
1.单目相机标定方法:单目相机标定是指使用一个相机拍摄多张不同的棋盘格图像,通过提取图像中的棋盘格角点来确定相机的内部参数和外部参数。
OpenCV中提供了函数`cv::calibrateCamera(`来进行单目相机标定。
该函数需要输入一组棋盘格图像,每幅图像中的棋盘格角点坐标,以及每个角点在现实世界中的坐标。
函数根据这些数据计算相机的内部参数矩阵、畸变系数和每幅图像的旋转矩阵和平移向量。
2.双目相机标定方法:双目相机标定是指使用一对相机拍摄同一场景的图像,并通过识别这些图像中的共享特征点来计算相机的内部参数和外部参数。
OpenCV中提供了函数`cv::stereoCalibrate(`来进行双目相机标定。
该函数需要输入两个相机拍摄的图像,每幅图像中的特征点坐标,以及每个特征点在现实世界中的坐标。
函数根据这些数据计算两个相机的内部参数矩阵、畸变系数和旋转矩阵、平移向量之间的转换关系。
3.深度相机标定方法:深度相机标定是指使用深度相机(如Kinect)拍摄不同的场景,并通过识别图像中的特征点来确定深度相机的内部参数和外部参数。
OpenCV 中提供了函数`cv::rgbd::calibrate(`来进行深度相机标定。
该函数需要输入一系列深度图像和对应的RGB图像,以及特征点的坐标。
函数根据这些数据计算深度相机的内部参数矩阵和旋转矩阵、平移向量之间的转换关系。
4.灰度相机标定方法:灰度相机标定是指使用灰度相机(只能获取灰度图像)进行标定。
与单目相机标定类似,灰度相机标定也是通过拍摄多张棋盘格图像,提取角点坐标进行计算。
OpenCV中提供了函数`cv::calibrateCamera(`来进行灰度相机标定,其使用方式与单目相机标定相似。
一种基于OpenCV及CVUT的摄像机标定方法
c l r t n r c s a d ai r t n l o i m. T e eo e t e a ir t n b s d n ai ai p o e s n c l ai a g rt b o b o h h rf r , c l ai a e o Op n V n C T o l b h b o e C a d VU c u d e
Ke r s o e o re cmp trvs n l rr ( e C ;o ue i o ti o l( VUT)c mea mo e ;a r y wo d :p n su c o ue ii i ay Op n V)c mp tr vs n ui t tos C o b i ly ;a r d lcmea
文 章 编 号 :0 19 4 (0 11.0 80 10 —9 42 1)204 —4
一
种 基 于 Op n V及 C U 的摄 像 机 标定 方法 eC V T
张 立静 , 宜利 , 付 冯 美
( 尔 滨 Z 业 大 学 机 电 工程 学院 , 尔 滨 1 0 0 ) 哈 - 哈 0 1 5
a h e e whih u s t e f n to o Op nCV a d c iv d, c p t h u c in f e n CVUT ir re i t fl p a lb ai s no u l ly.Ths n o rt i kid f a i hmei h d r c ia tc a p a tc l
nCV ,h prce s te o s wh c ih so uit tos .T e we n lz d h cmea in ti o l) h n ly a ay e te a r mo e i te iin fn t n irr Ope d l n h vso u ci l ay o b
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表示 ;2 摄像机坐标 系, 图 i () 如 所示 , 光心到 图像
平面的距离 为摄像机的有效焦距/ , Z) . ,c o( ,
图 2 像素 坐标 系和 图像坐 标系
I 收稿 日期 l2 1 -0 -2 01 5 0
I 作者简介l刘 国平 (94 16 一) , ,江西临川人 ,工学博士 ,教授 ,博士生导师;蔡建平 (9 1 男 18一),男 ,江
4 结 束 语
实 验表 明, 于 OeC 法库 的摄 像 机标 定 基 pn V算 程序具有 计算速度快 、 精度 高等优点 。整个 标定过 程都是 由计 算机控制和 实现的 , 符合未来 的机器视
2 1 ) l 3 — 3 . 2( 1 : 0 1 4 3 3
[]陈胜 勇, 5 刘盛. 于0 e C 的计 算机 视觉 技术 实现 基 pnV
西南昌人,助理工程师;南昌大学机 电工程学院。
万方数据
21 01年第 4期
刘国平 , 蔡建平 : 基于O! n o CV算法库的摄像 机标定方法 e
通过 下列坐标系之间 的变换 , 实现 了世界 坐标 系 中任一 点 P与其像 素坐 标系 中投影 点之 间 的映 射关系 。
( ) 界坐标系 中点 1世 摄像机坐标系点
[】 北 京 : 学 出版 社 , 0 8 5 M. 科 20:.
( 责任编辑 : 四叶 )
Ca r l r to e h d Ba e n Op n V g rt m i r r me a Ca i a i n M t o s d o e C Al o ih L b a y b
总体 平均 误差 ( 素 ) 像 0 1 2 3 .8 66
c i r i n[ 】 I E T a s c i n o P t r ai b at o J . E E r n a t o s n at e n
Ana1 and Mechi I YSiS ne nt 1igence,2000 e1 ,
每个像素在 轴与 】轴上 的物理尺寸用Ax △ , , 表示。
综上所述 , 有
() 3 标定 并分析误 差 。调 用 c C l rtC m. v ai ae a b
=
M l 2 M
Zw
( 5 卜 )
1
ea 0 函 数 , 取 摄 像 机 的 内 外 参 数 。 利 用 得 r2 求
摄像 机标定实 质上就是 为了确定三维 世界坐 标与二维 图像坐标之 间的映射关系 , 只要这种映射 关系确定 了, 就能从二维 图像 中提取三维信息 。因
此, 计算机视觉系统实现的基础和前提就是摄像机 标定 。随着计算机视觉系统智能化 的发展 , 人们对 其实时性 、 稳定性 以及精度要求越来越高。 目前常用 的标定方法有三类 : 传统标 定方法、 基于主动 视觉 的标定方法 和 自标 定方法。基于主
表示 目标点P在摄像机坐标系下 的三维坐标 ;3 像 ()
素坐标系, 2 如图 所示 , 坐标用 ( v 来表示 ; ) u ) , ( 图像 4
坐标系, 图 2 如 所示, 坐标用 (, ) X Y 来表示。
动视觉的标定方法的优点是算法简单 , 总是可 并且
以得到线性解, 其缺 点是无法适用于 不能设 定摄像 机运动或者摄像机运动未知的场合 ; 所有 自标定算 法的最显 著特 征是利用 了摄像机 内部参数 的 自身 约束性 , 而与摄像机 的运动状态和场景无关 。该特 征使得摄像机 标定在摄 像机任意 运动和场 景未知 的一般情况下的成为 了可能 ;有标定 结果稳定 、 精度 高
程序,实验结果表明,该程序能 自动、快速、精确地标定摄像 机。
I 关键 词 lO eC p n V算 法 库 ;摄 像 机 标 定 ;透视 投 影 成 像模 型
l 中图分类号】T 3 1 1 I P9 . 文献标识码lA I 4 文章编号l 10-96 (010 -00 -0 08 74 2 1)4 16 4
1
式 ( ) 是 两坐标 系之 间的 3 3的正 交 卜1 中, x
旋 转单位矩 阵, 是两坐标 系之 间 的 3 l的平 移 向 t x
量,£ ( , ,z ,=00 O 。 = £ t o (,,) )
() 2 摄像 机坐 标系 中点
, , ,) 图 1 与
定方 法研 究 【] 浙江理 工大 学学 报, 1 , () J. 2 2 3: 00 7
41 —4 . 7 20
[] 瑞 祯 , 仕 琪 . p n V 程 一 基 础 篇 [】 北 京 : 3刘 于 OeC 教 M. 航
空航 天 出版 社 , 0 7 6 2 0: .
[】 h n Z A 1 x b e e t c ni u f c m r 4 Z a g . f e i l n w e h q e or a e a
c lb a i n am st o v he i rnsc a d xti i r m e e s ai r to i O s l e t nti i n e rnscpa a t r .Fu t r or ,c m m o ec q s ofc e a c lb ai n a e rhe m e o n t hniue am r ai r to r
刘国平 蔡 建平
(南昌大学,江西南 昌,303 301)
【 摘要 l通过分析摄 像机 的透视投影成像模 型和四个 笛卡尔坐标系之 间的变换关系 ,从而 明确摄像机标定的 目
的就是求解其 内外参 数。 比较 常用标定方法 的优缺 点,在V 十 环境 下开发 了一种基于O e C C十 p n V算法库的摄像 机标定
第 2 0卷
V 1 2 o. 0
总 第 明 期
S mN .8 u o 8
广 东 广 播 电 视 大 学 学 报
J0URNAL OF GUANGDONG RADI & TV UNI O VERSI TY
2 1 年第 4 期 01
N .4 2 1 o . 01
基于O eC 算法库 的摄像机标定方法 pn V
/ (一 ) 4
置 , 果该 幅 图像 上提 取 的角 点 数 目和设 定 的相 如
:
同 , 回非零值 , 点提取成功 , 则返 角 角点像素坐标用 链 表形式存储 ; 否则返回 0角点提取失败。 , ( )亚 像 素 化 角 点 坐 标 。用 c Fn C me. 2 v id o r
=
图 3 标 定模 板
2 基于 O eO p nV的标定 系统实现 嘲
摄像机标定流程 , 图 4所示。 如 () 入 图 像 并 进 行 角 点 检 测 。 用 c Fn — 1读 v id C eso rC mes 函数检 测并提 取棋 盘角 点位 h sb ad o r0
f/ x A
2
内外的参数。
引入透 镜 的径 向畸变 和切 向畸变 ,图像平 面
[c2 [ ] + + ]+ ・ = ≥ + l ry [yl ] 2 +) pp 2J P x 2( l —2 2 2 x … ’
式 ( ) t 和 是径 向畸 变系 数 , 卜3 中 P 和 是切 向畸变系数 , x + 。 r= () 3 图像平面坐标系 中物理坐标 P , )转换 为像素坐标 P u (,
Ab t a t h o g n l z n h e s e t e i g n d la d c o d n t r n f r t n e we n f u i e e t sr c :T r u h a ay i g t e p r p c i ma i g mo e n o r i a e ta so ma i sb t e o rd f r n v o f Ca t sa o r i a e s se s a c me a c l r t n meh d b s d o e CV l o i m i r r sp e e t d T e c me a re i n c o d n t y tm , a r a i a i t o a e n Op n b o a g rt h l ay i rsn e . h a r b
S b i0函数亚像素化角点的坐标值, u Px 并调用 cO a - vr w
C e b a C me O函数将提取到 的角 点标注 出来 , hs or o r s d s 如图 5 所示 。
式( ) 卜4 中 ,
为 图像 坐标 系 的中心 点 D
在像素坐标系下的坐标, 为摄像机 的有效焦距, - 厂
像机 的运动 是任意 的 。通过 建立模 板和 图像上 的
像 坐标系 Px 的转换 (,
点 的匹配关系 , 来确定模板 和图像之间 的单应矩 阵
( o o r h) 然后利 用该单应矩 阵来 求解摄像机 H m ga y , p
[rZ  ̄Xc ] c] ='
坐标系中物理坐标P j 扩展为P , ,) , )
的很多通用算法 。
yc
zc
O eC pn V标 定模 块是基 于 张正友 H 的平 面标 定法来实现 的, 该方法是在传统 标定方法 的基础上 发展起来 的, 并且它对棋 盘模板的绘制精度具有较
高 的要求 , 图 3 如 所示 。摄像机 在不 同位置 ( 至少 两个 ) 上拍摄平面模板 的 图像 , 中平面模板和摄 其
到 的 摄 像 机 的 内 外 参 数 进 行 重 新 投 影, 用 调
c P oe tons0 函数来计算重新投影误差 。 v rjcP it 2
万方数据
万方数据
21 年 4 01 第 期
刘国平 , 平 : 于O e CV 蔡建 基 o n 算法库的摄像 机标 定方法
1 0 9
表 2 标 定 误差 分析