一种基于OpenCV的摄像机标定新方法

一种基于OpenCV的摄像机标定新方法
一种基于OpenCV的摄像机标定新方法

一种基于OpenCV的摄像机标定新方法

A Novel Method of Camera Calibration Based on OpenCV

李明金熊显名张绍兵

(桂林电子科技大学电子工程学院,广西桂林541004)

Li Mingjin Xiong Xianming Zhang Shaobing

(School of Electronic Engineering,Guilin University of Electronic Technology,Guilin,Guangxi541004,China)

摘要针对基于计算机视觉技术的空间方位测量系统研制过程中摄像机标定问题,分析了通用摄像机模型,深入讨论了镜头的径向畸变和切向畸变对标定精度的影响以及相应的解决办法。介绍了2D平面标定靶标制

作规范,给出了一种改进型SUSAN算子进行角点亚像素检测的方法,该方法具有速度快、定位精度高等优

点。在VC++6.0环境下调用OpenCV1.0库函数实现了摄像机的标定,在实现过程中充分利用了OpenCV

库函数,提高了标定精度和计算效率。

关键词摄像机标定;改进型SUSAN算子;OpenCV;镜头畸变;内部参数

Abstract For the camera calibration problem in research of spatial position measurement system based on computer vision technology,the general camera model is analysed,the influences and solutions of

lens radial distortion and tangential distortion are discussed.A2D planar pattern is built,and an

improved SUSAN operator for sub-pixel corner detection is proposed,which has high speed and

positioning accuracy.The camera calibration using the library functions of OpenCV1.0in VC++6.0is

achieved,which improves the calibration accuracy and calculation efficiency.

Key words camera calibration;improved SUSAN operator;OpenCV;lens distortion;intrinsic parameter

中图分类号:O436doi:10.3788/LOP20094612.0099

1引言

基于计算机视觉技术的空间方位测量系统的一个主要任务是根据摄像机获取的图像信息计算三维空间中物体的几何信息。图像上每一点的亮度反映了空间物体表面某点反射光的强度,而该点在图像上的几何位置则与空间物体表面相应点的几何位置有关。这些位置的相互关系由摄像机成像的几何模型所决定,这些几何模型的参数就是摄像机参数,实验与计算这些参数的过程称为摄像机标定[1]。

摄像机标定技术在视觉测量研究中占有非常重要的地位,是视觉测量工作中开展其他方面研究的基础。目前摄像机标定方法主要分为两大类:传统的摄像机标定方法和摄像机自标定方法。传统的摄像机标定方法,以利用最优化理论的标定算法和透视变换矩阵算法等为代表,这类算法通过建立参照物上三维坐标已知点与其图像点之间的对应关系来计算摄像机的内外参数,精确度高但计算复杂。摄像机自标定方法则不需要标定参照物,直接利用从图像序列中得到的约束关系来计算摄像机的内外参数,但自标定的精确度没有传统标定的高[2,3]。本文在传统摄像机标定的

基础上,借助于OpenCV强大的函数库给出了一种基于改进型SUSAN算子[4]进行角点检测的摄像机标定算法,该算法思路清晰,标定精度较高。

OpenCV是英特尔公司开发的开放型计算机视觉类库。它在数字图像处理和计算机视觉方面具有强大的功能,可轻松实现物体轮廓跟踪图像的几何处理、形态学处理图像特征提取、背景分离、主动轮廓算法、摄像机的校正、姿势的识别等众多操作[4]。OpenCV中的摄像机标定模块为用户提供了良好的接口,同时支持MS-Windows,Linux平台,具有良好的跨平台移植性,用户可以直接在组件的层次上实现个性化的标定应用,是实际工程当中理想的二次开发工具。

2摄像机模型及内外参数

为了更好地描述摄像机光学成像过程,根据世界坐标系、摄像机坐标系、像平面坐标系和计算机图像坐标系之间的相互关系[1],本文首先给出了摄像机的通用模型,如图1所示。其中XYZ坐标系为世界坐标系,xyz坐标系为摄像机坐标系,x′y′坐标系为像平面坐标系,uv坐标系为计算机图像坐标系。

由于透镜、成像平面与透镜光轴在空间位置上存在偏差等原因,像点、光心和物点并不能保证在同一条直线上,实际中的成像模型并不满足线性关系,而是一种非线性关系,需要引入透镜畸变,定义为

x=x d+d x(x,y),

y=y d+d y(x,y),(1)式中x d和y d分别表示实际的图像点的坐标,d x和d y 表示非线性畸变值的X,Y轴分量。

OpenCV中的非线性畸变,定义为

d x(x,y)=k1x(x2+y2)+p2(3x2+y2)+2p1xy,

d y(x,y)=k2y(x2+y2)+p1(3x2+y2)+2p2xy,(2)式中k1,k2为径向畸变,p1,p2为切向畸变。确定畸变系数是摄像机标定的重要步骤之一。

根据通用摄像机模型及其具体的成像模型,考虑摄像机可能出现的各种畸变,三维空间点w(X,Y, Z)的齐次坐标(X,Y,Z,1)在世界坐标系中投影到图像平面上像素坐标系(u,v)的过程为

z

c

u

v

1

=

a g u

0b v

001

R T

00

1

x

w

y

w

z

w

1

=A·M·X

w

=P·X

w

(3)

式中z

c

为任意比例因子a=f/d x,b=f/d y,f为摄像机的焦距,d x,d y为每一个像素在x轴与y轴方向上

的物理尺寸,g是图像坐标轴偏斜度参数,(u

,v

)为摄像机光轴平面交点在图像直角坐标系中的坐标,R为摄像机坐标系相对于世界坐标系的3×3的旋转矩阵,T为摄像机坐标系相对于世界坐标系的3×1平移矩阵,A为摄像机内参数矩阵(内参数矩阵只与摄像机内部结构有关,一旦计算出来,在焦距一定的情况下可以被重复使用),M为摄像机外参数矩阵,P为投影矩阵。

3摄像机标定方法和标定系统实现

3.1一种基于改进型SUSAN算子的棋盘格角点亚像

素检测

在基于2D平面靶标的摄像机标定中,角点位置提取对后续摄像机标定的精度产生重要影响[5],OpenCV 中用于角点检测的cvFindChessboardCorners()函数得到的只是一个大概的坐标,不能很好地满足更高精度的摄像机标定,针对这个问题采用了一种改进型SUSAN算子对棋盘格平面模板亚像素级角点进行检测并提取其坐标。首先用sobel算子检测图像边缘,然后对图像边缘处的像素进行SUSAN角点检测,最后用灰度平方重心法[6]进行亚像素角点定位,角点灰度的重心(x0,y0)为

x0=(i,j)∈M

Σiw(i,j)

(i,j)∈M

Σw(i,j)

,y0=(i,j)∈M

Σjw(i,j)

(i,j)∈M

Σw(i,j)

,(4)

式中w(i,j)为权值,M是用改进后的SUSAN算子检测到的角点邻域。该方法运算速度快,可以有效地实现角点亚像素定位,其重投影平均误差为0.215pixel。3.2标定系统实现

3.2.1标定靶标的制作及其图像拍摄规范

在OpenCV中利用这种改进型SUSAN算子进行

图1通用摄像机模型

图2摄像机标定算法流程框图

角点亚像素检测的摄像机标定方法,同样采用棋盘格平面模板作为标定的靶标。

由于靶标的不平整度对标定精度造成的影响远大于随机噪声造成的影响,为了能更好地对角点进行检测,需要对该标定靶标做如下约定:用高质量的纸张在高清晰的激光打印机中打印出棋盘格平面靶标,并粘贴在特制的平面玻璃板上,在棋盘格平面标定模板边缘保留至少一个棋盘格宽的白色空白区域,在对模板进行拍摄时其最好与图像平面成45°角;由于采用最小二乘法进行拟、合迭代,

拍摄的图越多,标定的结果就越精确,因此要在光线充足的情况下在不同的角度拍摄至少8幅以上的图像[5]。

3.2.2标定程序的分析及实现

OpenCV 提供了很多摄像机标定及三维重建方面的库函数,运用这些库函数及OpenCV 编程规范,结合改进型SUSAN 算子对棋盘格角点进行亚像素检测的方法,中给出摄像机标定算法的流程框图,如图2所示。

读取从摄像机传输进来的多帧标定图像时,用到可以方便存取图像中像素值的IplImage 结构,CvPoint2D32f 结构用来定义基于二维浮点型的坐标点,CvMat 结构用来定义标定用的多通道矩阵;cvLoadImage ()函数用来从文件中打开对象;为了提高角点检测的效率和精度,仍然采用cvFindChessboardCorners()函数对输入的图像进行筛选,选出符合标定用的图像,并用cvDrawChessboardCorners()函数在图上画出角点;用cvCreateMat()函数为摄像机的内外部参数、畸变系数、角点在世界坐标系的坐标值以及在图像坐标系中的坐标值开辟内存存储空间。

然后用改进型的SUANSAN 算子对筛选出的标定图片进行角点的检测,得到标定角点的图像坐标值;将角点在世界坐标系中的坐标值和在图像坐标系中的坐标值经结构转化后传递给cv2CalibrateCameras()函数,初始化所有的输入参数后计算得到摄像机的内参数矩阵、

畸变系数向量和每幅标定图像的外参数矩阵;当得到内参数和畸变系数后将这些数值传递给Undistort2()函数,完成对图像的变换,从而抵消掉径向畸变和切向畸变对图像的影响,并用cvShowImage()函数将变换过的图像显示出来,通过对比变换前后的图像判断变换后的图像畸变减小的程度,从而初步验证求得的内参数和畸变系数的可靠性。

在进行误差分析时,通过上述求得的内参数和外参数运用cvProjectPoints2()计算出三维角点投影到二维图像平面上的坐标值,再用函数cvNorm()比较计算出的投影坐标与通过角点提取到的投影坐标,从而得到一个误差值;最后将检测出的角点坐标,摄像机的内外参数矩阵、镜头的畸变系数写入到文本文件中并保存下来,当完成上述工作后一定要注意用cvReleaseMat()函数释放前面用cvCreateMat()函数开辟的内存空间,防止内存泄露。

4实验和结果分析

依据文中阐述的标定原理和算法,在VC++6.0环境下调用OpenCV1.0库函数,开发了基于MFC 单文档结构的摄像机标定程序,程序经过严格测试,运行稳定,没有出现内存泄露的情况,寻找角点成功率高,本文选用13幅1280×1024像素的图像作为标定用图。

标定得到的内参数矩阵、镜头畸变系数及部分图片的外参数矩阵和图像坐标偏差如表1所示。为了验证该标定程序的标定结果,结合Matlab 摄像机标定工具箱[7]和一种常用2D 平面靶标标定算法[5],使用上文中同一组标定用的图像在Matlab7.0环境下编程求出摄像机的内部参数、镜头畸变系数和所有外部的参数,并采用二维平均绝对误差[8]对两种标定算法的精度进行比较,为

1马颂德,张正友.计算机视觉———计算理论与算法基础[M].北京:科学出版社,2003.12

2D.A.Forsyth,J.Ponce .计算机视觉———一种现代方法[M].林学问,王宏译北京:电子工业出版社,2004.63R.Sundareswara,P.R .Schrater.Bayesian modeling of camera calibration and reconstructio [C].Fifth International Conference on 3-D Digital Imaging and Modeling(3DIM'05),2005.394~4014刘瑞祯,于仕琪.OpenCV 教程[M].北京:北京航空航天大学出版社,20085Z.Y.Zhang.A flexible new technique for camera calibration [J].IEEE Transactions on Pattern Analysis and

Machine Intelligence ,2000,22(11):1330~1334

6陈廉清,袁红彬,王龙山.SUSAN 算子在微小轴承表面缺陷图像分割中的应用[J].光学技术,2007,33(2):305~3077https://www.360docs.net/doc/d211139023.html,/bouguetj/calib_doc/

8费业泰.误差理论与数据处理[M].北京:机械工业出版社,2004.6

E =1n

i =1

Σ[

(x ui

-x i )2+(y ui -y i )2

]1/2,

(5)

式中(x ui ,y ui )为用图像处理得到的标定点像素坐标经过一系列变换得到的图像物理坐标的理想坐标,(x i ,y i )为世界坐标的点经过投影得到的理想状况下图像物理坐标系下的坐标。另外E 1为在OpenCV 下算法的精度,

E 2为在Matlab 下算法的精度,经过计算随机选取几幅图的精度如表2所示。

通过比较可以看出,在OpenCV 中采用这种改进型SUSAN 算子进行角点亚像素检测的摄像机标定算法的精度略高于常用的2D 平面靶标标定算法,但是在OpenCV 中标定精度相对于在Matlab 中标定的精

度不是很稳定。经过分析得知,这种不稳定性与标定

过程中大量的数据拟合、迭代不能保证解的绝对封闭性有一定联系。

在进行后续的基于计算机视觉技术的空间方位测量系统的研制工作中,常选用一组相对稳定准确的标定参数,且能较好地满足研制工作。

5结束语

通过实验及对标定结果比较分析得知,这种改进型的SUSAN 算子亚像素角点检测法可以有效地避免噪声的影响,较精确地检测出正确的角点,在棋盘格

边缘点附近进行角点检测时,其运算速度大大提高。在OpenCV 中采用这种角点检测方法而编写的摄像机标定程序具有运算效率高、标定结果精度较高、跨平台移植性好、

能快速进行在线标定等特性,可以有效地应用于其他计算机视觉系统中。

收稿日期:2009-04-15;收到修改稿日期:2009-09-03

作者简介:李明金(1983-),男,硕士研究生,主要从事计算机视觉测量的研究。

E-mail:mingjin1106@https://www.360docs.net/doc/d211139023.html,

导师简介:熊显名(1964-),男,教授,主要从事模式识别与图像处理的研究。

E-mail:xmxiong@https://www.360docs.net/doc/d211139023.html,

参考文献

表1标定结果

图片

E 1E 2image000.bmp 0.511080.71334image003.bmp 0.521000.71322image007.bmp 0.421010.74231image011.bmp

0.68101

0.70110

摄像机内部参数

矩阵A

4887.677

0.000637.2100.000

4873.321481.1740.0000.000 1.000

畸变参数矩阵(k 1,k 2,p 1,p 2)-0.174

0.450

-0.0050.000image000.bmp 外部参数矩阵[R |t ]

0.019-1.0000.015 2.120-0.971-0.022-0.239-2.0770.239-0.010

-0.971

0.268

实际坐标与投影后的坐标的偏差

0.3492397image001.bmp

外部参数矩阵

-0.009-0.9920.129 2.144-0.967-0.024-0.255-2.128

0.256

-0.127

-0.958

0.418

实际坐标与投影

后的坐标的偏差

0.3157161

表2图像精度

基于OpenCV的摄像机标定

第28卷第1期计算机工程与设计2007年1月V01.28No.1ComputerEngineeringandDesignJan.2007 基于OpenCV的摄像机标定 尹文生,罗瑜林,李世其 (华中科技大学机械科学与工程学院,湖北武汉430074) 摘要:以增强现实系统中摄像机标定技术为研究对象,分析了开放计算机视觉函数库OpenCV中的摄像机模型,特别充分考虑了透镜的径向畸变和切向畸变影响及求解方法,给出了基于OpenCV的摄像机标定算法。该算法充分发挥了OpenCV的函数库功能,提高了标定精度和计算效率,具有良好的跨平台移植性,可以满足增强现实和其它计算机视觉系统的需要。 关键词:计算机视觉;增强现实;摄像机模型;透镜畸变;摄像机标定 中图法分类号:TP391文献标识码:A文章编号:1000.7024(2007)01—0197.03 CameracalibrationbasedonOpenCV YINWel"1。sheng,LUOYu.1in,LIShi—qi (SchoolofMechanicalScienceandEngineering,HuazhongUniversityofScienceandTechnology,Wuhan430074,China)Abstract:Fortheapplicationsoftechnologyofcameracalibrationtoaugustreality,thecameramodelinOpenCV(opensourcecomputervisionlibrary)isdiscussed,especiallyontheinfluencesandsolvingmethodsoflensradialdistortionandtangentialdistortion,andanarithmeticofcameracalibrationbasedonOpenCVisgiven.Thisarithmeticmakesuseofthefunctionsofthelibraryeffectively,improvesprecisionandefficiencyofcomputation,andhasagoodpropertyfortheapplicationtomulti-platform.Itcanmeettheneedsofaugustrealityandothercomputervisionsystems. Keywords:computervision;augustreality;cameramodel;lensdistortion;cameracalibration 0引言 摄像机标定,是指建立摄像机成像几何模型,描述空间坐标系中物体点同它在图像平面上像点之间对应关系的过程。摄像机标定的目的就是确定几何模型参数即摄像机参数“1。摄像机标定是计算机视觉应用中的关键技术,在增强现实系统中也必须采用摄像机标定技术实现图像的注册眨”。摄像机标定技术在立体视觉研究中占有非常重要的地位。一个完整的立体视觉系统通常可分为图像获取、摄像机标定、特征提取、立体匹配、深度确定及内插等6大部分“1。精确标定摄像机内外参数不仅可以直接提高测量精度,而且可以为后继的立体图像匹配与三维重建奠定良好的基础。一】。 目前通常采用的标定方法是基于“两步法圳””的传统摄像机标定方法,该方法比主动视觉摄像机标定方法和摄像机自标定方法标定精度高,而且标定过程简单,经过多年的研究已经发展得比较成熟,鲁棒性高。OpenCV(Intel。opensourcecomputervisionlibrary)是Intel。开放计算机视觉函数库,它由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法,具备强大的图像和矩阵运算能力。该函数库中实现的摄像机标定方法采用的是文献[11]中的两步标定方法,而且在2005年7月最新发布的beta5版本中,不只完全重写了摄像机标定函数,而且引入了文献[12】中的自动寻找角点的方法,进一步提高了标定的智能化程度,用户只需导入用于标定的图片,整个标定过程无需人工的介入。OpenCV中的摄像机标定模块为用户提供了良好的接口,同时支持MS.Windows、Linux平台,有效地提高了开发效率,并且执行速度快,具有良好的跨平台移植性,因此可以很好地应用于工程实际当中。 l标定原理 1.1摄像机模型 摄像机标定首先要选择合适的摄像机模型,确定内外部参数。OpenCV标定算法中的摄像机模型以针孔模型(pin—holemodel)为基础,引入透镜的径向畸变和切向畸变,该模型相比于只引入一阶径向畸变的Tasi模型和针孔模型更加真实地反映了透镜实际的畸变情况m1。在该模型中,将空间点P在世界坐标系中的坐标值呱,K,乙)变换为图像平面上像素坐标系中坐标值(“,v)的过程可分解为下述的4步变换”1: 收稿日期:2005-12?06E-marl:wsyin@mail.hust.edu.cn 基金项目:国家民用航天科研专项计划基金项目(科工技[2004]1530)。 作者简介:尹文生(1963一),男,湖南常宁人,博士,副教授,研究方向为智能CAD、虚拟现实技术、机器人遥操作系统;罗瑜林(1981一),男,江西吉安人,硕士研究生,研究方向为机器人遥操作系统、机器视觉;李世其(1965一),男,江西吉安人,博士,教授,研究方向为CAD/CAE、虚拟现实技术、机器人遥操作系统。 一197— 万方数据

摄像机标定方法综述

摄像机标定方法综述 摘要:首先根据不同的分类方法对对摄像机标定方法进行分类,并对传统摄像机标定方法、摄像机自标定方法等各种方法进行了优缺点对比,最后就如何提高摄像机标定精度提出几种可行性方法。 关键字:摄像机标定,传统标定法,自标定法,主动视觉 引言 计算机视觉的研究目标是使计算机能通过二维图像认知三维环境,并从中获取需要的信息用于重建和识别物体。摄像机便是3D 空间和2D 图像之间的一种映射,其中两空间之间的相互关系是由摄像机的几何模型决定的,即通常所称的摄像机参数,是表征摄像机映射的具体性质的矩阵。求解这些参数的过程被称为摄像机标定[1]。近20 多年,摄像机标定已成为计算机视觉领域的研究热点之一,目前已广泛应用于三维测量、三维物体重建、机器导航、视觉监控、物体识别、工业检测、生物医学等诸多领域。 从定义上看,摄像机标定实质上是确定摄像机内外参数的一个过程,其中内部参数的标定是指确定摄像机固有的、与位置参数无关的内部几何与光学参数,包括图像中心坐标、焦距、比例因子和镜头畸变等;而外部参数的标定是指确定摄像机坐标系相对于某一世界坐标系的三维位置和方向关系,可用3 ×3 的旋转矩阵R 和一个平移向量t 来表示。 摄像机标定起源于早前摄影测量中的镜头校正,对镜头校正的研究在十九世纪就已出现,二战后镜头校正成为研究的热点问题,一是因为二战中使用大量飞机,在作战考察中要进行大量的地图测绘和航空摄影,二是为满足三维测量需要立体测绘仪器开始出现,为了保证测量结果的精度足够高,就必须首先对校正相机镜头。在这期间,一些镜头像差的表达式陆续提出并被普遍认同和采用,建立起了较多的镜头像差模型,D.C.Brown等对此作出了较大贡献,包括推导了近焦距情况下给定位置处径向畸变的表达式及证明了近焦距情况下测得镜头两个位置处的径向畸变情况就可求得任意位置的径向畸变等[2]。这些径向与切向像差表达式正是后来各种摄像机标定非线性模型的基础。随着CCD器件的发展,现有的数码摄像机逐渐代替原有的照相机,同时随着像素等数字化概念的出现,在实际应用中,在参数表达式上采用这样的相对量单位会显得更加方便,摄像机标定一词也就代替了最初的镜头校正。

opencv摄像机标定代码

// cvCalib.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #include void InitCorners3D(CvMat *Corners3D, CvSize ChessBoardSize, int Nimages, float SquareSize); int image_width = 768; int image_height = 576;//待标定图片的大小 const int ChessBoardSize_w = 7; const int ChessBoardSize_h = 7;//图片中可标定的角数 const CvSize ChessBoardSize = cvSize(ChessBoardSize_w,ChessBoardSize_h); const int NPoints = ChessBoardSize_w*ChessBoardSize_h;//角点个数 const int NImages=6;//待标定的图片数 int corner_count[NImages] = {0}; float SquareWidth = 10; //棋盘格子的边长,可任意设定,不影响内参数 CvMat *intrinsics; CvMat *distortion_coeff; CvMat *rotation_vectors; CvMat *translation_vectors; CvMat *object_points; CvMat *point_counts; CvMat *image_points; void main() { IplImage *current_frame_rgb; IplImage *current_frame_gray; IplImage *chessBoard_Img; CvPoint2D32f corners[NPoints*NImages]; chessBoard_Img =cvCreateImage(cvSize(image_width, image_height), IPL_DEPTH_8U, 3); current_frame_gray = cvCreateImage(cvSize(image_width, image_height), IPL_DEPTH_8U, 1); current_frame_rgb = cvCreateImage(cvSize(image_width, image_height), IPL_DEPTH_8U, 3); int captured_frames=0;

基于OpenCV的CCD摄像机标定方法_雷铭哲_孙少杰_陈晋良_陶磊_魏坤

MethodofCCDCameraCalibrationBasedOnOpenCV LEIMing-zhe1,SUNShao-jie2,CHENJin-liang1,TAOLei1,WEIKun1 (1.North Automation Control Technology Institute ,Taiyuan 030006,China ; 2.Navy Submarine Academy ,Qingdao 266042,China )Abstract: Computervisionhasbeenwidelyusedinindustry,agriculture,military,transportationareaandsoon.Cameracalibrationisveryimportantandalsothekeyresearchfieldofvisionsystem.ThispapermainlyresearchesonthemethodofCCDcameracalibration,thepin-holemodelhasbeenintroducedandappliedinprocessofcalibration.Specially,inordertoimprovetheaccuracy,bothradialandtangentiallensdistortionhavebeentakenintoaccountduringtheimplementofcalibrationbasedonOpenCV.Thiskindofarithmetichaspracticalvalueontheapplicationdesignofimageprocessingandcomputervision,andexperimentresultsshowgoodprecision,whichcanmeettheapplicationneedofvisualinspectionorothervisionsystemswell. Keywords: pin-holemodel,cameracalibration,lensdistortion,OpenCV摘要: 计算机视觉在工业,农业,军事,交通等领域都有着广泛应用。摄像机标定是视觉系统的重要环节,也是研究的关键领域。以摄像机标定技术为研究对象,选取针孔成像模型,简述了世界坐标系、摄像机坐标系和图像坐标系及其相互间的位置关系,对标定过程进行了深入研究。特别地,为提高标定精度,充分考虑了透镜径向和切向畸变影响及其求解方法,制作了棋盘格平面标定模板,基于开放计算机视觉函数库(OpenCV)实现了摄像机标定。该标定算法能够充分发挥OpenCV函数库功能,对于图像处理与计算机视觉方面的应用设计具有实用价值。实验结果表明该方法取得了较高精度,能够满足视觉检测或其他计算机视觉系统的应用需要。 关键词:针孔模型,摄像机标定,透镜畸变,OpenCV中图分类号:S219 文献标识码:A 基于OpenCV的CCD摄像机标定方法 雷铭哲1,孙少杰2,陈晋良1,陶 磊1,魏坤1 (1.北方自动控制技术研究所,太原030006;2.海军潜艇学院,山东青岛266042 )文章编号:1002-0640(2014) 增刊-0049-03Vol.39,Supplement Jul,2014 火力与指挥控制 FireControl&CommandControl第39卷增刊 引言 摄像机标定是计算机视觉系统的前提和基础,其目的是 确定摄像机内部的几何和光学特性(内部参数)以及摄像机 在三维世界中的坐标关系(外部系数) [1] 。考虑到摄像机标定在理论和实践应用中的重要价值,学术界近年来进行了广泛的研究。 摄像机标定方法可以分为线性标定和非线性标定,前者简单快速,精度低,不考虑镜头畸变;后者由于引入畸变参数而使精度提高,但计算繁琐,速度慢,对初值选择和噪声敏感。本文将两者结合起来,采用由粗到精策略,以实现精确标定。 1摄像机模型 本文选取摄像机模型中常用的针孔模型[2-3],分别建立三维世界坐标系(O w X w Y w Z w ),摄像机坐标系(O c X c Y c Z c )及图像平面坐标系(O 1xy ) 如下页图1所示。其中摄像机坐标系原点O c 为摄像机光心,Z c 轴与光轴重合且与图像平面垂直,O c O 1为摄像机焦距f 。图像坐标系原点O 1为光轴与图像平面的交点,x ,y 轴分别平行于摄像机坐标系X c 、Y c 轴。设世界坐标系中物点P 的三维坐标为(X w ,Y w ,Z w ),它在理想的针孔成像模型下图像坐标为P (X u ,Y u ),但由于透镜畸变引起偏离[4-5],其实际图像坐标为P (X d ,Y d )。图像收稿日期:2013-09-20修回日期:2013-11-10 作者简介:雷铭哲(1977-),男,湖北咸宁人,硕士。研究方向:故障诊断系统。 49··

最新-01-30相机标定的原理与意义及opencv、matlab实现差异小结汇总

2011-01-30相机标定的原理与意义及O p e n C V、M a t l a b实现差异小结

2011-01-30 相机标定的原理与意义及OpenCV、Matlab实现差异小结 分类:OpenCV点滴2011-01-30 20:35 2292人阅读评论(3) 收藏举报本文是一篇关于相机标定意义和原理的个人总结,包含了OpenCV和Matlab中常用的相机标定函数的注解。 相机标定是机器视觉的基础,标定结果的好坏直接决定了机器视觉的系统精度,作用可见一斑。在这一年半的时间里,我个人也是随着实验和程序的进一步理解,对标定的原理和意义有了更多的想法。同样,由于博文的关系,仍有一些朋友会常常询问标定的程序问题。本人的2010-05-17OpenCV标定程序的问题也多次被朋友询问,由于当时对标定的认识还不够系统,因此现在认为该文对标定的意义和原理有很多误解,并在此推荐一些较好的博文拱大家学习:双目测距与三维重建的OpenCV实现问题集锦(一)图像获取与单目标定; 双目测距与三维重建的OpenCV实现问题集锦(二)双目标定与双目校正; 双摄像头测距的OpenCV实现; 分享一些OpenCV实现立体视觉的经验; 下面结合本人的毕业论文及一年半来对机器视觉的学习,对相机标定的意义和原理进行叙述。 1.单目相机模型

单目相机模型中的三种坐标系关系如图1所示,相机坐标系即是以光轴中心O为原点的坐标系,其z轴满足右手法则,成像原点所代表平面即为像平面坐标系(实际应用中,均以图像左上角为坐标系原点),实际物体坐标系即为世界坐标系。 图1 单目相机模型的三坐标系统关系其中,在世界坐标系的值为,是在像平面坐标系的投影点,其相机坐标系的值为。是相机坐标系轴与像平面夹角,一般情况下轴与像平面垂直,值为。且相机坐标系与像平面平行, 为相机的焦距。 对于从相机坐标系到像平面坐标系的变换,像平面坐标系是用像素单位来表示的,而相机坐标系则是以毫米为单位来表示,因此,要完成改变换过程就需要先得到像平面的像素单位与毫米单位之间的线性关系。在图1中,相机光轴中心z轴方向上与像平面的交点称为投影中心,坐标为,是像素单位,而每个像素在和的物理尺寸为和,单位是像素/毫米,则像平面的像素与毫米间的线性关系如式(1):

基于OpenCV的摄像机标定的应用研究

38562009,30(16)计算机工程与设计Computer Engineering and Design 0引言 机器视觉的基本任务之一是从摄像机获取的图像信息出发计算三维空间中物体的几何信息,并由此重建和识别物体,而空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系是由摄像机成像的几何模型决定的,这些几何模型参数就是摄像机参数。在大多数条件下,这些参数必须通过实验与计算才能得到,这个过程称为摄像机标定(或定标)。标定过程就是确定摄像机的几何和光学参数,摄像机相对于世界坐标系的方位。标定精度的大小,直接影响着机器视觉的精度。迄今为止,对于摄像机标定问题已提出了很多方法,摄像机标定的理论问题已得到较好的解决[1-5]。对摄像机标定的研究来说,当前的研究工作应该集中在如何针对具体的实际应用问题,采用特定的简便、实用、快速、准确的标定方法。 OpenCV是Intel公司资助的开源计算机视觉(open source computer vision)库,由一系列C函数和少量C++类构成,可实现图像处理和计算机视觉方面的很多通用算法。OpenCV有以下特点: (1)开放C源码; (2)基于Intel处理器指令集开发的优化代码; (3)统一的结构和功能定义; (4)强大的图像和矩阵运算能力; (5)方便灵活的用户接口; (6)同时支持Windows和Linux平台。 作为一个基本的计算机视觉、图像处理和模式识别的开源项目,OpenCV可以直接应用于很多领域,是二次开发的理想工具。目前,OpenCV的最新版本是2006年发布的OpenCV 1.0版,它加入了对GCC4.X和Visual https://www.360docs.net/doc/d211139023.html,2005的支持。 1摄像机标定原理 1.1世界、摄像机与图像坐标系 摄像机标定中有3个不同层次的坐标系统:世界坐标系、摄像机坐标系和图像坐标系(图像像素坐标系和图像物理坐标系)。 如图1所示,在图像上定义直角坐标系 开发与应用

摄像机标定程序使用方法

一、材料准备 1 准备靶标: 根据摄像头的工作距离,设计靶标大小。使靶标在规定距离范围里,尽量全屏显示在摄像头图像内。 注意:靶标设计、打印要清晰。 2图像采集: 将靶标摆放成各种不同姿态,使用左摄像头采集N幅图像。尽量保存到程序的debug->data文件夹内,便于集中处理。 二、角点处理(Process菜单) 1 准备工作: 在程序debug文件夹下,建立data,left,right文件夹,将角探测器模板文件target.txt 复制到data文件夹下,便于后续处理。 2 调入图像: File->Open 打开靶标图像 3 选取角点,保存角点: 点击Process->Prepare Extrcor ,点击鼠标左键进行四个角点的选取,要求四个角点在最外侧,且能围成一个正方形区域。每点击一个角点,跳出一个显示角点坐标的提示框。当点击完第四个角点时,跳出显示四个定位点坐标的提示框。 点击Process->Extract Corners ,对该幅图的角点数据进行保存,最好保存到debug->data-> left文件夹下。命名时,最好命名为cornerdata*.txt,*代表编号。 对其余N-1幅图像进行角点处理,保存在相同文件夹下。这样在left文件夹会出现N 个角点txt文件。 三、计算内部参数(Calibration菜单) 1 准备工作: 在left文件夹中挑出5个靶标姿态差异较大的角点数据txt,将其归为一组。将该组数据复制到data文件夹下,重新顺序编号,此时,文件名必须为cornerdata*,因为计算参数时,只识别该类文件名。 2 参数计算: 点击Calibration->Cameral Calibrating,跳出该组图像算得的摄像机内部参数alpha、beta、gama、u0、v0、k1、k2七个内部参数和两组靶标姿态矩阵,且程序默认保存为文件CameraCalibrateResult.txt。 3 处理其余角点数据文件 在原来N个角点数据文件中重新取出靶标姿态较大的5个数据文档,重复步骤1和2;反复取上M组数据,保存各组数据。 注意:在对下一组图像进行计算时,需要将上一组在data文件夹下的5个数据删除。 四、数据精选 1 将各组内部参数计算结果进行列表统计,要求|gama|<2,且gama为负,删掉不符合条件的数据。 2 挑出出现次数最高的一组数据。

相机标定程序

/*环境OpenCV2.3.1+visual studio2010 *calibdata.txt 保持标定图片的路径(根据实际设置) */ #include "stdafx.h" #include "cv.h" #include "highgui.h" #include #include #include using namespace std; int main() { IplImage * show; //RePlay图像指针 cvNamedWindow("RePlay",1); int number_image_copy=7; //复制图像帧数 CvSize board_size=cvSize(5,7); //标定板角点数 CvSize2D32f square_size=cvSize2D32f(10,10); //假设我的每个标定方格长宽都是1.82厘米 float square_length=square_size.width; //方格长度 float square_height=square_size.height; //方格高度 int board_width=board_size.width; //每行角点数 int board_height=board_size.height; //每列角点数 int total_per_image=board_width*board_height; //每张图片角点总数 int count; //存储每帧图像中实际识别的角点数 int found;//识别标定板角点的标志位 int step; //存储步长,step=successes*total_per_image; int successes=0; //存储成功找到标定板上所有角点的图像帧数 int a=1; //临时变量,表示在操作第a帧图像 const int NImages = 7;//图片总数

2011-01-30相机标定个人总结

本文是一篇关于相机标定意义和原理的个人总结,包含了OpenCV和Matlab中常用的相机标定函数的注解。 相机标定是机器视觉的基础,标定结果的好坏直接决定了机器视觉的系统精度,作用可见一斑。在这一年半的时间里,我个人也是随着实验和程序的进一步理解,对标定的原理和意义有了更多的想法。同样,由于博文的关系,仍有一些朋友会常常询问标定的程序问题。本人的2010-05-17OpenCV标定程序的问题也多次被朋友询问,由于当时对标定的认识还不够系统,因此现在认为该文对标定的意义和原理有很多误解,并在此推荐一些较好的博文拱大家学习: 双目测距与三维重建的OpenCV实现问题集锦(一)图像获取与单目标定; 双目测距与三维重建的OpenCV实现问题集锦(二)双目标定与双目校正; 双摄像头测距的OpenCV实现; 分享一些OpenCV实现立体视觉的经验; 下面结合本人的毕业论文及一年半来对机器视觉的学习,对相机标定的意义和原理进行叙述。 1.单目相机模型 单目相机模型中的三种坐标系关系如图1所示,相机坐标系即是以光轴中心O为原点的坐标系,其z轴满足右手法则,成像原点 f O所代表平面即为像平面坐标系(实际应用中,均以图像左上角为坐标系原点),实际物体坐标系即为世界坐标系。 光轴中心O 图1 单目相机模型的三坐标系统关系 其中,P在世界坐标系的值为() W W W X,Y,Z,P u 是P在像平面坐标系的投影点,其相机 坐标系的值为(X,Y,Z) u u u 。θ是相机坐标系Z轴与像平面夹角,一般情况下Z轴与像平面垂直,θ值为90 。且相机坐标系x y O与像平面 f f f x y O平行,f为相机的焦距。

标签摄像机标定

标签:摄像机标定 opencv标定程序的代码(完全测试好的) 这个是我在win32 平台下写的程序,测试完全通过: 不过要注意下面的问题: (1)opencv库是1.0的,我在vc6.0的平台使用 (2)软件的设置要正确 (3)图片载入的时候,使用的是批处理文件(其实就是建一个txt文件,里面写的和dos下面的操作代码一样的输入) (4)里面现在还有个问题没有解决:在得到角点坐标的时候,cvFind CornerSubPix里面的搜索区域还不明白 (05)下面是我在网上搜的别人的代:测试通过的: ===================== 下面是我的代码: /*标定的过程: 图片的加载 角点的检测 提取角点精确坐标 参数求解 利用参数对图像进行矫正 */

#include #include"cv.h" #include"highgui.h" #include //函数声明 void PrintMat(CvMat *matrix,BOOL save_or_show,FILE *fp); int main(int argc,char **argv) { int i=1; char k=0; int CurrentImage = 0; int CurrentRow = 0; //行 int CurrentColumn = 0; //列 int findcorner_result=0; FILE *fp; //文件指针 int ChessBoardSize_w =6; //角点个数 int ChessBoardSize_h =7; int width_pixel =1280; //像素 int high_pixel =1024; float SquareSize=10; //棋盘大小 int NImages=16; CvSize ChessBoardSize; CvSize image_pixel; int NPoints=0; int *corner_counter; float *temppoints; //这里可以使用内存动态存储管理。。。 CvPoint2D32f *corners; //存储角点坐标的数组

张氏标定法原理及其改进1

张正友算法原理及其改进 由于世界坐标系的位置可以任意选取,我们可以假定世界坐标系和摄像机坐标系重合,故定义模板平面落在世界坐标系的0W Z =平面上。用i r 表示R 的每一列向量,那么对平面上的每一点,有: [][]12312 0111W W W W X u X Y s v A r r r t A r r t Y ?? ?? ?? ?? ??????==?????????????? ?? ?? 这样,在模板平面上的点和它的像点之间建立了一个单应性映射H ,又称单应性矩阵或投影矩阵。如果已知模板点的空间坐标和图像坐标,那么就已知m 和M ,可以求解单应性矩阵H 。)1,,(w w Y X )1,,(v u 因为11W W u X s v H Y ????????=????????????,其中11 121321222331 32 1h h h H h h h h h ?? ??=?????? ,可推出: 111213 21222331321 W W W W W W su h X h Y h sv h X h Y h s h X h Y =++?? =++??=++? 故, 1112133132212223313211W W W W W W W W h X h Y h u h X h Y h X h Y h v h X h Y ++?=?++? ? ++?=?++? 将分母乘到等式左边,即有 3132111213 31 32212223W W W W W W W W uX h uY h u h X h Y h vX h vY h v h X h Y h ++=++??++=++? 又令[]T h h h h h h h h h 3231232221131211 =',则 1 00000 01W W W W W W W W X Y uX uY u h X Y vX vY v --???? '=????--??? ? 多个对应点的方程叠加起来可以看成Sh d '=。利用最小二乘法求解该方程,即1()T T h S S S d -'=,进而得到H 。 摄像机内部参数求解 在求取单应性矩阵后,我们进一步要求得摄像机的内参数。首先令i h 表示H 的每一列向量,需要注意到上述方法求得的H 和真正的单应性矩阵之间可能相差一个比例因子,则H 可写成: [][]1 2 312h h h A r r t λ=

基于OpenCV的摄像机标定

万方数据

K,乙)变换为摄像机坐标系中的坐标值只(疋,K,乙)如下 ㈧…=㈠M㈤(2)将坐标值只(冠,K,zc)在针孔模型中进行规范化投影,得 只=[妻甜引∽(3)引入透镜的畸变,畸变后的规范化坐标值可以用雎如砌 阱Xdc,峨‰叫州黝;篙]㈤ 将Pd(xa,ya)转换为图像上像素坐标系上的坐标值B(“,访 f吲:时‰(4) 够可=f/.劬sx/咖(5)像素之间的有效距离(mm/pixel);dpy为计算机图像在垂直方向 换)方法计算出摄像机的内部参数和外部参数的初值Ⅲ。该步虑透镜畸变的影响,得到的参数值并不准确。不过作为下一 数据拟合目标函数““如式6所示。既要将图像上Ⅳ个角点的坐标值(U,K)(f=1,…朋拾取出来,还要利用上述畸变模型计算出这Ⅳ个标志点的坐标值(‰vJ)(f=1,…朋,然后利用式6进行数 转化为求解非线性最小二乘的问题,通过非线性优化算法“”多次迭代,最后得到使目标函数的值最小的参数值,降低了求解难度。迭代的初值由第①步的DLT方法算出,DLT方法不 2基于OpenCV的摄像机标定 基于OpenCV的摄像机标定采用平面棋盘格标定模板,一198一 为了提高角点提取的成功率,在标定方块的外围,还要求保留一个方块宽的白色空白区域,如图1所示。摄像机只需在不同的角度抓取几张平面标定模板的图片,就可以实现对摄像机的标定。显然,由于采用最小二乘法,抓得图越多,标定的结果就越精确。 图1平面棋盘格标定模板 虽然OpenCV中自动寻找角点函数提取角点的成功率很高,但是若碰到光线被遮挡等情况,使得标定模板上的标定块在图像上不清晰或提取的角点数目与设定的数目不相符的状况,就会导致角点提取失败,如图2所示:因此OpenCV并不保证能够提取所有图像上的角点。所以在设计标定算法时必须要考虑角点不能被提取的情况:一方面,如果角点提取成功的图过少,则标定出来的结果就不一定能满足精度的要求,需要重新采图;另一方面,由于摄像机外部参数的个数与标定图像的个数相关联,所以在最后计算标定结果时,应将提取角点失败的图像舍弃,再根据剩下图像的数目,动态地分配参数在内存中的储存空间,如果没有这么一个筛选的过程,盲目得在内存中分配参数的储存空间,则在提取角点失败的图像上,不能找到与角点在世界坐标系中的坐标值相对应的像素坐标系上的坐标值,在这种情况下强行计算的话,很容易出现程序报错,得不到标定结果的情况。因此,本文提出以下摄像机标定算法: (1)读取一组标定用图像数据; (2)用cvFindChessboardComers()筛选图像;将读入的一组图像数据分别代入cvFindChessboardComers0函数,如果返回值是1,则表示在该幅图像上提取的角点数目和设定的相同,提取角点成功;若为0,则表示角点提取失败,该幅图要抛弃; (3)如果可用的标定图的数目满足设定的最少标定用图的数目,继续步骤(4);否则,则应重新采图,返回步骤(1); (4)根据筛选剩下图像的数目用cvCreateMat0为摄像机的内外部参数、角点在世界坐标系的坐标值以及在图像坐标系中的坐标值分配内存存储空间; (5)将筛选剩下的图像代入cvFindChessboardComers0,得到角点在图像像素坐标系中坐标值;再将图像和得到的图像像素坐标系中坐标值代入FindComerSubPix()函数,进一步精 (a)角点提取失败(b)角点提取成功 图2角点提取图像  万方数据

摄像机标定程序中用到的OpenCV函数

摄像机标定程序中用到的OpenCV函数 FindChessboardCorners 寻找棋盘图的内角点位置 int cvFindChessboardCorners( const void*image, CvSize pattern_size, CvPoint2D32f* corners,int* corner_count=NULL, int flags=CV_CALIB_CB_ADAPTIVE_THRESH ); image 输入的棋盘图,必须是8位的灰度或者彩色图像。 pattern_size 棋盘图中每行和每列角点的个数。 corners 检测到的角点 corner_count 输出,角点的个数。如果不是NULL,函数将检测到的角点的个数存储于此变量。 flags 各种操作标志,可以是0或者下面值的组合: CV_CALIB_CB_ADAPTIVE_THRESH - 使用自适应阈值(通过平均图像亮度计算得到)将图像转换为黑白图,而不是一个固定的阈值。 CV_CALIB_CB_NORMALIZE_IMAGE - 在利用固定阈值或者自适应的阈值进行二值化之前,先使用cvNormalizeHist来均衡化图像亮度。 CV_CALIB_CB_FILTER_QUADS - 使用其他的准则(如轮廓面积,周长,方形形状)来去除在轮廓检测阶段检测到的错误方块。 函数cvFindChessboardCorners试图确定输入图像是否是棋盘模式,并确定角点的位置。如果所有角点都被检测到切它们都被以一定顺序排布(一行一行地,每行从左到右),函数返回非零值,否则在函数不能发现所有角点或者记录它们地情况下,函数返回0。例如一个正常地棋盘图右8x8个方块和7x7个内角点,内角点是黑色方块相互联通地位置。这个函数检测到地坐标只是一个大约地值,如果要精确地确定它们的位置,可以使用函数cvFindCornerSubPix。

摄像机标定方法综述

摄像机标定方法综述 李 鹏 王军宁 (西安电子科技大学,陕西西安710071) 摘 要:首先介绍了摄像机标定的基本原理以及对摄像机标定方法的分类。通过对最优化标定法、双平面标定法、两步法等传统摄像机方法的具体分析,给出了各种方法的优劣对比;同时对多种自标定方法的研究现状、发展情况以及存在问题进行了探讨。最后给出了发展传统摄像机标定方向、提高摄像机自标定精度的一些参考建议。 关键词:摄像机标定;传统标定;自标定;优化算法;成像模型 中图分类号:T N948.41 文献标识码:A 0 引言 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为摄像机标定[1]。无论是在图像测量或者机器视觉应用中,摄像机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响摄像机工作产生结果的准确性。因此,做好摄像机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。 1 标定分类 摄像机标定的目的是利用给定物体的参考点坐标(x, y,z)和它的图像坐标(u,v)来确定摄像机内部的几何和光学特性(内部参数)以及摄像机在三维世界中的坐标关系(外部参数)。内部参数包括镜头焦距f,镜头畸变系数(k、s、p),坐标扭曲因子s,图像坐标原点(u0,v0)等参数。外部参数包括摄像机坐标系相对于世界坐标系得旋转矩阵R和平移向量T等参数。 传统摄像机标定的基本方法是,在一定的摄像机模型下,基于特定的实验条件如形状、尺寸已知的参照物,经过对其进行图像处理,利用一系列数学变换和计算方法,求取摄像机模型内部参数和外部参数。另外,由于许多情况下存在经常性调整摄像机的需求,而且设置已知的参照物也不现实,这时就需要一种不依赖参照物的所谓摄像机自标定方法。这种摄像机自标定法是利用了摄像机本身参数之间的约束关系来标定的,与场景和摄像机的运动无关,所以相比较下更为灵活。 总的来说,摄像机标定可以分为两个大类:传统的摄像机标定方法和摄像机自标定法。2 传统的摄像机标定方法 传统的摄像机标定方法按照其算法思路可以分成若干类,包括了利用最优化算法的标定方法,利用摄像机变换矩阵的标定方法,进一步考虑畸变补偿的两步法,双平面方法,改进的张正友标定法以及其他的一些方法等。 2.1 利用最优化算法的标定方法 这一类摄像机标定方法的优点是可以假设摄像机的光学成像模型非常复杂。然而由此带来的问题是:1)摄像机标定的结果取决于摄像机的初始给定值,如果初始值给得不恰当,很难通过优化程序得到正确的结果;2)优化程序非常费时,无法实时地得到结果。 根据参数模型的选取不同,这一类的方法主要以下两种: 1)摄影测量学中的传统方法:Faig在文[2]中提出的方法是这一类技术的典型代表。分析F aig给出的方法,可以看到在他的标定方法中,利用了针孔摄像机模型的共面约束条件,假设摄像机的光学成像模型非常复杂,考虑了摄像机成像过程中的各种因素,精心设计了摄像机成像模型,对于每一幅图像,利用了至少17个参数来描述其与三维物体空间的约束关系,计算量非常大。 2)直接线形变换法:直接线性变换方法是A bde-l A ziz 和Karara首先于1971年提出的[3]。通过求解线性方程的手段就可以求得摄像机模型的参数,这是直接线性变换方法有吸引力之处。然而这种方法完全没有考虑摄像机过程中的非线性畸变问题,为了提高精度,直接线性变换方法进而改进扩充到能包括这些非线性因素,并使用非线性的手段求解。 2.2 利用透视变换矩阵的摄像机标定方法[4] 从摄影测量学中的传统方法可以看出,刻划三维空间坐标系与二维图像坐标系关系的方程一般说来是摄像机内部参数和外部参数的非线性方程。如果忽略摄像机镜头的非 山西电子技术 2007年第4期 综 述 收稿日期:2006-12-18 第一作者 李鹏 男 28岁 硕士研究生

opencv标定模板

竭诚为您提供优质文档/双击可除 opencv标定模板 篇一:摄像机标定原理及源码 计算机视觉摄像机标定实验报告 [实验名称]基于opencV的摄像机标定 [实验项目] 1、学会使用opencV 2、利用opencV进行摄像机标定,编程实现,给出实验结果及其分析。 [实验仪器设备]电脑 +Visualstudio20xx+opencV.2.4.8。 [实验原理] 1、理论知识 如图,(u、v)表示以像素为单位的图像坐标系的坐标,(x、y)表示以mm为单位的图像坐标系的坐标,在x、y坐标系中,原点o1定义在摄像机光轴与图像平面的交点,该点一般位于图像中心,但是由于制造原因,很多情况下会有偏移,若o1在u、V坐标系中坐标为(u0,v0),每一个像素在x轴与y轴方向上的无力尺寸为dx、dy,则图像任意一

个像素在两个坐标系下的坐标有如下关系: 如图, oc点为摄像机光心,xc轴和yc轴与图像的x轴与y轴平行,zc轴为摄像机光轴,它与图像平面垂直。光轴与图像平面的交点,极为图像坐标系的原点,由点oc与xc、yc、zc轴组成的直角坐标系称为摄像机坐标系,ooc为摄像机焦距: 由于摄像机可以安放在环境中任意位置,所以在环境中选择一个基准坐标系来描述摄像机位置,并用它描述环境中任何物体的位置,该坐标系为世界坐标系。它有xw、yw和zw轴组成,摄像机坐标系与世界坐标系之间的关系可以用旋转矩阵与平移向量t来描述。 总体来说,世界坐标系到图像坐标系的关系可总结如下:摄像头成像几何关系,其中oc点称为摄像头(透镜) 的光心,xc轴和yc轴与图像的x轴和y轴平行,zc轴为摄像头的光轴,它与图像平面垂直。光轴与图像平面的交点o1,即为图像坐标系的原点。由点oc与xc、yc、zc轴组成的坐标系称为摄像头坐标系,oco1的距离为摄像头焦距,用f表示。 又称为线性摄像机模型,任何空间点m在图像中的投影位置m,为光心oc与m的连线ocm与图像平面的交点。此时有比例关系如下:

实验报告:摄像机标定

北京联合大学 实验报告 摄像机标定 班级:14级软件工程学号:140803502 姓名:郑永荣 2015年 6 月 28 日

1 实验任务 (原始任务)使用个人摄像机拍摄一组标定图片,完成对拍摄设备进行标定的任务。 为了更加便捷方便,开发一个程序实现自动开启摄像机,并且自动拍摄标定图片以及完成摄像机标定,得到摄像机的内外参数,均需XML文件保存。 2 实验原理 2.1 摄像机内外参数定义(或说明) 摄像机内参数:主点(图像帧存的中心点)、实际焦距、镜头畸变(径向镜头畸变和切向镜头畸变)以及系统计算误差参数等。 摄像机外参数:将给出摄像机坐标相对于世界坐标系的位置和方向,即摄像机相对于外部世界坐标的方位。如旋转参数和平移参数。 2.2 摄像机标定原理 2.2.1 摄像机光学成像过程的四个步骤:

2.2.2坐标系 2.2.2.1 世界坐标系--摄像机坐标系 世界坐标系 摄像机坐标系 世界坐标系与摄像机坐标系的转换关系为: R和T分别为从世界坐标到摄像机坐标系的旋转变换系数和平移变换

系数,反映的是摄像机坐标系与世界坐标系之间的位置关系,因此称为外参数。 摄像机将三维空间点P 经过摄像机中心C 投影到像平面上为点p ,其中点p 为摄像机中心O C 和三维空间点P 的连线与图像平面的交点。 其中,),,(C C C Z Y X 是点P 在摄像机坐标系中的三维坐标, ),(u u y x 是针孔摄像机模型下p 点的物理图像坐标,单位为mm 。 2.2.2.2 物理坐标系--像素坐标系 令p 为归一化的理想物理坐标,相当于摄像机的焦距f 为1。 像素坐标系 图像物理坐标与像素坐标之间的关系如下:

相关文档
最新文档