搜档网
当前位置:搜档网 › 基于OpenCV摄像机标定研究

基于OpenCV摄像机标定研究

基于OpenCV摄像机标定研究
基于OpenCV摄像机标定研究

基于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实

摄像机标定方法综述

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

基于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— 万方数据

基于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··

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;

三维重建综述

三维重建综述 三维重建方法大致分为两个部分1、基于结构光的(如杨宇师兄做的)2、基于图片的。这里主要对基于图片的三维重建的发展做一下总结。 基于图片的三维重建方法: 基于图片的三维重建方法又分为双目立体视觉;单目立体视觉。 A双目立体视觉: 这种方法使用两台摄像机从两个(通常是左右平行对齐的,也可以是上下竖直对齐的)视点观测同一物体,获取在物体不同视角下的感知图像,通过三角测量的方法将匹配点的视差信息转换为深度,一般的双目视觉方法都是利用对极几何将问题变换到欧式几何条件下,然后再使用三角测量的方法估计深度信息这种方法可以大致分为图像获取、摄像机标定、特征提取与匹配、摄像机校正、立体匹配和三维建模六个步骤。王涛的毕业论文就是做的这方面的工作。双目立体视觉法的优点是方法成熟,能够稳定地获得较好的重建效果,实际应用情况优于其他基于视觉的三维重建方法,也逐渐出现在一部分商业化产品上;不足的是运算量仍然偏大,而且在基线距离较大的情况下重建效果明显降低。 代表文章:AKIMOIO T Automatic creation of3D facial models1993 CHEN C L Visual binocular vison systems to solid model reconstruction 2007 B基于单目视觉的三维重建方法: 单目视觉方法是指使用一台摄像机进行三维重建的方法所使用的图像可以是单视点的单幅或多幅图像,也可以是多视点的多幅图像前者主要通过图像的二维特征推导出深度信息,这些二维特征包括明暗度、纹理、焦点、轮廓等,因此也被统称为恢复形状法(shape from X) 1、明暗度(shape from shading SFS) 通过分析图像中的明暗度信息,运用反射光照模型,恢复出物体表面法向量信息进行三维重建。SFS方法还要基于三个假设a、反射模型为朗伯特模型,即从各个角度观察,同一点的明暗度都相同的;b、光源为无限远处点光源;c、成像关系为正交投影。 提出:Horn shape from shading:a method for obtaining the shape of a smooth opaque object from one view1970(该篇文章被引用了376次) 发展:Vogel2008年提出了非朗伯特的SFS模型。 优势:可以从单幅图片中恢复出较精确的三维模型。 缺点:重建单纯依赖数学运算,由于对光照条件要求比较苛刻,需要精确知道光源的位置及方向等信息,使得明暗度法很难应用在室外场景等光线情况复杂的三维重建上。 2、光度立体视觉(photometric stereo) 该方法通过多个不共线的光源获得物体的多幅图像,再将不同图像的亮度方程联立,求解出物体表面法向量的方向,最终实现物体形状的恢复。 提出:Woodham对SFS进行改进(1980年):photometric method for determining surface orientation from multiple images(该文章被引用了891次) 发展:Noakes:非线性与噪声减除2003年; Horocitz:梯度场合控制点2004年; Tang:可信度传递与马尔科夫随机场2005年; Basri:光源条件未知情况下的三维重建2007年; Sun:非朗伯特2007年; Hernandez:彩色光线进行重建方法2007年;

最新-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):

摄像机标定程序使用方法

摄像机内部参数标定 一、材料准备 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 挑出出现次数最高的一组数据。 摄像机外部参数标定 一、材料准备 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.sodocs.net/doc/a35063240.html,2005的支持。 1摄像机标定原理 1.1世界、摄像机与图像坐标系 摄像机标定中有3个不同层次的坐标系统:世界坐标系、摄像机坐标系和图像坐标系(图像像素坐标系和图像物理坐标系)。 如图1所示,在图像上定义直角坐标系 开发与应用

机器视觉中的摄像机定标方法综述

机器视觉中的摄像机定标方法综述 吴文琪,孙增圻 (清华大学计算机系智能技术与系统国家重点实验室,北京100084) 摘要:回顾了机器视觉中的各种摄像机定标方法,对各种方法进行介绍、分析,并提出了定标方法的发展方向的新思路。 关键词:机器视觉;摄像机定标;三维重建;镜头畸变 中国法分类号:TP387文献标识码:A文章编号:1001-3695(2004)02-0004-03 Overvie w of Camera Calibration Methods for Machine Vision WU Wen-qi,SUN Zeng-qi (State Key L aborato ry o f Intellige nt Tec hnology&Syste ms,Dept.o f Co mpute r Science&Technology,Tsinghua Universit y,Bei jing100084,China) Abstract:In this paper,themethods for camera calibration are reviewed,anal yzed and compared.Furthermore,the develop ment of the camera calibration is discussed. Key w ords:Machine Vision;Camera Calibration;3D Reconstruction;Lens Distortion 1引言 在机器视觉的应用中,如基于地图生成的视觉、移动机器人的自定位、视觉伺服等的应用中,从二维图像信息推知三维世界物体的位姿信息是很重要的。目前已经出现了一些自定标和免定标的方法,这些方法在比较灵活的同时,尚不成熟[1],难以获得可靠的结果。通过摄像机的定标重建目标物三维世界目标物体仍然是重要的方法。 摄像机定标在机器视觉中决定: (1)内部参数给出摄像机的光学和几何学特性% %%焦距,比例因子和镜头畸变。 (2)外部参数给出摄像机坐标相对于世界坐标系的位置和方向,如旋转和平移。 在机器人的视觉应用中,目标物位姿信息获取通常有一定的精度要求,机器人视觉系统的性能很大程度上依赖于定标精度。 随着计算机性能的快速提高,低价位CCD摄像机的大量使用,计算机定标方法也得到了不断的改进。 2摄像机模型 摄像机的投影几何模型可以看作这样一个过程,把三维世界透视投影到一个球面(视球),然后把球面上影像投射到一个平面P,理想情况下,平面P关于光轴中心对称。从图像中心点出发到投射平面点的距离r(A)与光轴夹角A的关系有五种模型,每种都有其自己有用的特性[2]。 其成像简图如图1所示。 图1成像简图 2.1透视模型 透视模型公式为 r(A)=k tan A 理想状况下可以等价为小孔成像。许多最近的算法和判断不同算法的优劣的依据都是基于这个假设。但是,透视投影只是表示了视球的前半部。要是不在光轴的附近,物体的形状和密度都会发生畸变。这种模型符合人的视觉感受,理想情况下,直线投影仍为直线。透视模型在定标方法中被广泛采用,在视角不大的镜头情况下比较符合实际情况。 在视角比较大时,透视模型通过对镜头畸变进行校正来修正模型。根据镜头光学成像原理,畸变的模型为D x (x,y)=k1x(x2+y2)+(p1(3x2+y2)+2p2xy)+s1(x2+y2) D y (x,y)=k2x(x2+y2)+(p2(3x2+y2)+2p1xy)+s2(x2+y2) 式中,D x,D y是非线性畸变值,D x,D y的第一项称为径向畸 # 4 #计算机应用研究2004年 收稿日期:2002-11-18;修返日期:2003-03-22

摄像机标定程序使用方法

一、材料准备 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 λ=

摄像机标定方法综述

摄像机标定方法综述 李 鹏 王军宁 (西安电子科技大学,陕西西安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岁 硕士研究生

相关主题