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

最新-01-30相机标定的原理与意义及opencv、matlab实现差异小结汇总
最新-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):

(2)

其对应的矩阵形式为式(3):

(3)

联立式(1)和式(3),得到式(4)即为相机坐标系与像平面坐标系变换的矩阵。

(4)

其中,即为相机的6个内参数,其组成的矩阵即为内参数矩阵。

对于从相机坐标系到世界坐标系的变换,是通过旋转矩阵R和平移矩阵T完成的,如图2所示。

图2 相机坐标系与世界坐标系的变换关系

其中,平移矩阵T是三维列向量,旋转矩阵R是坐标轴依次绕和轴旋转角度和所形成的三个矩阵的总乘积。它们的定义如式(5):

(5)

则矩阵R的计算公式如式(6):

(6)

因此,从相机坐标系到世界坐标系的变换如式(7),其中,表示,为旋转矩阵,为平移矩阵,该变换矩阵称为外参数矩阵。

(7)

最后,联立式(4)和式(7)求得像平面坐标系与世界坐标系之间的变换关系,如式(8):

(8)

其中,即为透视投影矩阵,表示空间中三维点坐标与图像平面二维坐标之间的线性关系,表示的像平面齐次坐标值,表示的世界坐标系齐次坐标值。基于以上几何原理和相机模型得到的图像信息和三维信息之间的关系,存在不可逆性,即可以通过已知世界坐标系的坐标值求得二维坐标值,如果要进行二维坐标到三维坐标的反求还需要其他的数学模型辅助求解。

2.Matlab标定工具箱应用

1) 制作标定板,标定板尺寸为324(mm)X252(mm),即7行9列63个36mm 的正方形方格组成,如图3所示。

图3 标定方格板

2) 将水平平行的左右相机同时采集标定板的不同位姿图像,共计12组位姿(对于采集的图像,位姿越多,标定结果也会越精确,建议在10组到20组之间)如图4,5所示。

图4 左相机的标定图像

图5 右相机的标定图像

3) 在工具箱中通过Extract grid corners提取每幅标定图像的特征点(即黑方格与白方格的交点)。

4) 进行单目标定,得到左右相机的内外参数以及畸变系数,并将参数保存到Calib_Results_left和Calib_Results_right两个mat格式的文件中。

3.Matlab标定结果与OpenCV标定结果的比较与分析

Matlab标定结果:

通过上节的步骤(1)-(4),可以得到如图6和7所示的左右相机的内参数、畸变系数结果。

图6 左相机的内参数和畸变系数

图7 右相机的内参数和畸变系数

对于左右相机由于透镜畸变造成的误差使用工具箱中的visualize_distortions 功能进行分析,可以得到左相机的畸变图,如8、9、10所示,相应的右相机畸变图,如11、12、13所示。

图8 左相机镜头畸变图

图9 左相机径向畸变图

图10 左相机切向畸变图

对于图8到10,图中的0点即为左相机光学中心,图中的箭头显示相机图像的畸变方向。图8左相机整体畸变模型中,该相机的左侧畸变不明显,若物体的图像在此则不易受畸变因素影响造成线条的弯曲;图9左相机径向畸变模型中,该相机的畸变系数由中心向外增大,即物体的图像越靠近图像边缘,其线条的弯曲程度就越大;图10左相机切向畸变模型中,箭头方向显示该相机切向畸变的增大方向,在相机的左侧其切向畸变与径向畸变的方向相反,使得整体畸变模型中,相机左侧的畸变较小。

图11 右相机镜头畸变图

图12 右相机径向畸变图

图13 右相机切向畸变图

对于图11到13,图中的0点与左相机相同,即为右相机光学中心,图中的箭头显示相机图像的畸变方向。图11右相机整体畸变模型中,该相机的中间及偏左侧畸变不明显,若物体的图像在此则不易受畸变因素影响造成线条的弯曲;图12右相机径向畸变模型中,该相机的畸变系数由中心向外增大,但右相机比左相机在光轴中心附近有更大的区域畸变很小,因此位于右侧相机光学中心的图像,其线条因受畸变造成的弯曲很小;图13右相机切向畸变模型中,箭头方向显示该相机切向畸变的增大方向,在相机的左侧其切向畸变与径向畸变的方向相反,使得整体畸变模型中,位于右相机图像左侧的线条受畸变影响较小。

OpenCV标定结果:

在此列举的OpenCV标定结果是我双目视觉标定且优化后的结果,与Matlab的会有差异。

左侧相机的内参数矩阵:

(9)

右侧相机的内参数矩阵:

(10)

该式(9)-(10)与式(1)相对应。而Matlab中的cc对应于式(1)中的相机光轴中心在图像平面的投影坐标,fc即为式(1)中的和。

至此,讲解完了OpenCV与Matlab所对应的相机标定内参数矩阵的含义。OpenCV与Matlab标定中的差异:

OpenCV的标定参数中,对于镜头畸变采用的方法是Brown博士在71年发表的文章中提到的;而Matlab中的镜头畸变参数采用基于Heikkil博士提出的方法,将非线性干扰因素引入到内外参数的求解过程。

Heikkil采用的矩阵来表示以上的两种畸变系数。根据Brown的非线性模型,和表示镜头的径向畸变系数,通常只使用两项,只是针对即便较大的镜头(例如鱼眼镜头,其余情况下该系数值为0),而和表示切向畸变系数,由式(11)和式(12)求解该矩阵,本文的畸变系数求解伴随在相机标定过程中。

(11)其中,是像平面上的任一点坐标值,是进行径向畸变矫正后的坐标值,是作为光学中心畸变为0的点进行泰勒级数展开后得到的。

(12)

其中,是像平面上的任一点坐标值,是进行切向畸变矫正后的坐标值,如式(11)的定义相同。

4.外参数的作用及其在相机标定中的意义

外参数定义了如图2所示的图像平面到世界坐标系的变换关系。而标定就是通过相机寻找图像平面中如图3所示的标定板的特征点位置,所以得到的外参数是图像平面与标定板所处平面的线性变换关系。在我的2010-06-14基于Matlab的双目视觉定位问题研究中,通过Matlab标定工具箱产生的图4与图5就可以表达上述含义。

因此,对于不同的棋盘格标定板空间位置,必然对应于不同的外参数矩阵。同样的,在视觉伺服中,雅可比矩阵也有同样的数学意义。对于视觉伺服,个人认为可以看些徐德的论文入门。

5.OpenCV标定程序说明

用于寻找图像中的棋盘格标定板的特征点:

CvSize board_sz = cvSize( board_w, board_h );

IplImage* imgLeft=cvCreateImage(cvSize(imgL->width,imgL->height),imgL->depth,imgL->nChannels);

IplImage* imgRight=cvCreateImage(cvSize(imgR->width,imgR->height),imgR->depth,imgR->nChannels);

CvPoint2D32f* cornersLeft = new CvPoint2D32f[ board_n ];

CvPoint2D32f* cornersRight = new CvPoint2D32f[ board_n ];

int corner_countLeft, corner_countRight;

cvResize(imgL,imgLeft,CV_INTER_LINEAR);

cvResize(imgR,imgRight,CV_INTER_LINEAR);

if(frame++ % board_dt == 0) {

//Find chessboard corners:

int foundLeft = cvFindChessboardCorners(

imgLeft, board_sz, cornersLeft, &corner_countLeft,

CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS

);

int foundRight = cvFindChessboardCorners(

imgRight, board_sz, cornersRight, &corner_countRight,

CV_CALIB_CB_ADAPTIVE_THRESH |

CV_CALIB_CB_FILTER_QUADS

);

//Get Subpixel accuracy on those corners

cvCvtColor(imgLeft, grayLeft, CV_BGR2GRAY);//if input is colorful then use this

cvCvtColor(imgRight, grayRight, CV_BGR2GRAY);

cvFindCornerSubPix(grayLeft, cornersLeft, corner_countLeft,

cvSize(11,11),cvSize(-1,-1),

cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 30, 0.1 ));//寻找棋盘格标定板的特征点

cvFindCornerSubPix(grayRight, cornersRight, corner_countRight,

cvSize(11,11),cvSize(-1,-1),

cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 30, 0.1 )); //寻找棋盘格标定板的特征点

//画出找到的特征点

cvDrawChessboardCorners(imgLeft, board_sz, cornersLeft,

corner_countLeft, foundLeft);

cvDrawChessboardCorners(imgRight, board_sz, cornersRight,

corner_countRight, foundRight);

if (corner_countLeft>=board_n && foundLeft &&

corner_countRight>=board_n && foundRight)

{//保存特征点在图像坐标中的坐标值,用于Calibrate2和StereoCalibration 的调用

step = success*board_n;

for( int i=step, j=0; j

CV_MAT_ELEM(*image_pointsLeft, float,i,0) = cornersLeft[j].x;

CV_MAT_ELEM(*image_pointsLeft, float,i,1) = cornersLeft[j].y;

CV_MAT_ELEM(*image_pointsRight, float,i,0) = cornersRight[j].x;

CV_MAT_ELEM(*image_pointsRight, float,i,1) = cornersRight[j].y;

CV_MAT_ELEM(*object_points,float,i,0) = (float)(j/board_w);

CV_MAT_ELEM(*object_points,float,i,1) = (float)(j%board_w);

CV_MAT_ELEM(*object_points,float,i,2) = 0.0f;

}

CV_MAT_ELEM(*point_counts, int,success,0) = board_n;

}

}

随后调用cvCalibateCamera2和cvStereoCalibate函数进行相机的标定。标定的例程可以参考Learning OpenCV。

以下推荐两本OpenCV的参考书:

学习OpenCV(中文版)于仕琪译清华大学出版社,2009;(OpenCV 2.0库) 基于OpenCV的计算机视觉技术实现陈胜勇,刘盛编著科学出版社,2008;(OpenCV 1.0库)

https://www.360docs.net/doc/19969206.html,中文论坛

希望这篇总结对于各位有所帮助。

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

基于靶标平面相机参数动态标定Matlab程序

基于靶标平面相机参数动态标定Matlab程序 ★注意:直接运行bd.m文件即可进行动态标定,附录Ⅲ中的其它函数文件均会被bd.m文件调用;坐标数据由实验获取。 bd .m %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % M为靶标角点的世界坐标数据,m1—m5为5组图像像素坐标数据;本函数为主函数,它将数据赋值给函数Dtbd(M,m)实现相机动态标定。 clc; clear; M=load('Model.txt'); %Model.txt中为靶标角点的世界坐标,由实验测得 m1=load('data1.txt'); m2=load('data2.txt'); m3=load('data3.txt'); m4=load('data4.txt'); %data1.txt—data5.txt中为不同视角所对应的角点图像坐 %标,可用附录Ⅱ中的程序测得 m5=load('data5.txt');%Model.txt为靶标的世界坐标 M=[M(:,1:2) ; M(:,3:4) ; M(:,5:6) ; M(:,7:8)]; m1=[m1(:,1:2) ; m1(:,3:4) ; m1(:,5:6) ; m1(:,7:8)]; m2=[m2(:,1:2) ; m2(:,3:4) ; m2(:,5:6) ; m2(:,7:8)]; m3=[m3(:,1:2) ; m3(:,3:4) ; m3(:,5:6) ; m3(:,7:8)]; m4=[m4(:,1:2) ; m4(:,3:4) ; m4(:,5:6) ; m4(:,7:8)]; m5=[m5(:,1:2) ; m5(:,3:4) ; m5(:,5:6) ; m5(:,7:8)]; M=M'; % 将靶标平面上角点的世界坐标写入矩阵M中,M为2维矩阵m(:,:,1)=m1'; m(:,:,2)=m2'; m(:,:,3)=m3'; m(:,:,4)=m4'; m(:,:,5)=m5'; % 将5个视角对应的图像像素坐标写入矩阵m中,m为3维矩阵Dtbd(M,m) % 调用Dtbd .m文件进行动态标定%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Dtbd .m %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Dtbd(M,m)函数实现的功能正是本论文中第4章所讲述的动态标定技术,它引入了径向畸变和切向畸变,具体标定过程可参照本论文。 function Dtbd(M,m) [rows,npts]=size(M); matrixone=ones(1,npts); M=[M;matrixone]; num=size(m,3); for i=1:num

摄像机标定方法综述

摄像机标定方法综述 摘要:首先根据不同的分类方法对对摄像机标定方法进行分类,并对传统摄像机标定方法、摄像机自标定方法等各种方法进行了优缺点对比,最后就如何提高摄像机标定精度提出几种可行性方法。 关键字:摄像机标定,传统标定法,自标定法,主动视觉 引言 计算机视觉的研究目标是使计算机能通过二维图像认知三维环境,并从中获取需要的信息用于重建和识别物体。摄像机便是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··

摄像机参数标定步骤

1、系统需求 该工具箱可以在 Windows、Linux和Unix系统下的Matlab 5.x, Matlab 6.x and Matlab 7.x 版本下使用,而且不需要任何特定的 Matlab 工具箱(例如:不需要最优化工具箱)。 注意:我最近收到了在 Matlab 2007b 平台下关于 GUI 相关的 bug 报告。当修复工作完成时我会将其上传。请将你在使用过程中遇到的问题通知给我以帮助维护这个工具箱。请在邮件里写清楚 bug 的类型,并复制完整的错误信息。谢谢!! 2、开始 ◆转到下载页面,获取最新版本的完整的摄像机标定 Matlab 工具箱。 ◆将解压出的所有文件(.m 文件)放入一个文件夹中(默认的文件夹名称是 TOOLBOX_calib)。 ◆运行 Matlab,并将 TOOLBOX_calib 文件夹添加到 matlab path 环境中。该步骤可以让你在任何地方调用 matlab 工具箱里的任何函数。在 Windows 系统下,该操作可以方便的通过 path 编辑菜单进行。在 Linux 和 Unix 系统下,你可以使用 path 或者 addpath 命令(使用 help 命令查看相关的帮助说明)。 ◆运行matlab标定主函数 calib_gui(或calib)。 屏幕上将出现如下的模式界面 该选择窗口提示你在工具箱的两种操作模式中选择其一:标准模式和内存节省模式。在标准模式下,所有标定时需要的图像一次性装入内存,之后不再进行磁盘的读取。这大大减小了磁盘访问的开销,加速了图像处理和图形显示函数执行的速度。然而,如果图片过大,或图片过多,将会出现 OUT OF MEMORY 错误。因此,可以使用新的内存节省模式。在内存节省模式下,每次只读取一幅图片,并且不在内存中存储。 如果选择运行标准模式,当遇到 OUT OF MEMORY 错误时,可以该选用内存节省模式。两种模式的操作是完全兼容的(输入与输出),内部进行转换。 因为两种模式的用户界面完全一样,在本文中我们选择了标准界面。点击屏幕上方的标准界面按钮,将出现工具箱的标定主窗口(取代模式选择窗口)如下: 模式选择的步骤可以通过执行 calib_gui(0) (使用标准模式)或执行 calib_gui(1) (使用内存节省模式)跳过(键入 help calib_gui 查看更多信息)。 ◆现在你可以使用工具箱进行标定了。 3、标定实例

最新-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/19969206.html,2005的支持。 1摄像机标定原理 1.1世界、摄像机与图像坐标系 摄像机标定中有3个不同层次的坐标系统:世界坐标系、摄像机坐标系和图像坐标系(图像像素坐标系和图像物理坐标系)。 如图1所示,在图像上定义直角坐标系 开发与应用

【CN110033491A】一种相机标定方法【专利】

(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 201910299209.5 (22)申请日 2019.04.15 (71)申请人 南京工程学院 地址 211167 江苏省南京市江宁科学园弘 景大道1号 (72)发明人 郝飞 王宗荣 史晶晶 王帆  陈德林 胡运涛 汪海洋 张汝祥  (74)专利代理机构 南京纵横知识产权代理有限 公司 32224 代理人 董建林 范青青 (51)Int.Cl. G06T 7/80(2017.01) (54)发明名称一种相机标定方法(57)摘要本发明公开了相机标定技术领域的一种相机标定方法。旨在解决现有技术中基于一维标定杆标定精度较低,基于三维标定模板标定存在自遮挡问题,基于棋盘格形二维标定模板标定需进行角点检测而无法获取更高的标定精度,基于单个圆形图案作为特征的二维标定模板标定存在“原理性误差”。所述方法包括如下步骤:根据预制的标定模板采集标定模板图像;提取标定模板图像中的特征点,求解相机内参数及镜头畸变参数;根据相机内参数和镜头畸变参数构建多维向量;利用镜头畸变参数对所述标定模板图像进行去畸变处理并构建新的多维变量,直至相邻两次多维变量的欧式距离小于设定值,输出最后一次 相机内参数及畸变参数。权利要求书1页 说明书6页 附图5页CN 110033491 A 2019.07.19 C N 110033491 A

权 利 要 求 书1/1页CN 110033491 A 1.一种相机标定方法,其特征在于,所述方法包括如下步骤: 将预制的标定模板置于待标定相机的视场内,采集标定模板图像;所述标定模板为二维标定模板,标定模板上分布有多个圆形,多个圆形以标定模板的中心点为环心围成多个直径不同的环形阵列; 提取标定模板图像中圆形的特征点,求解相机内参数及镜头畸变参数;所述特征点为圆形的圆心; 根据相机内参数和镜头畸变参数构建多维向量; 利用镜头畸变参数对所述标定模板图像进行去畸变处理,重复相机内参数及畸变参数的求解过程,并构建新的多维变量,直至相邻两次多维变量的欧式距离小于设定值,输出最后一次相机内参数及畸变参数。 2.根据权利要求1所述的相机标定方法,其特征在于,所述特征点的提取方法包括: 对标定模板图像中的圆形进行边缘检测,利用最小二乘法拟合圆环透视投影后产生的两个椭圆; 连接两个椭圆圆心的直线与每个椭圆形成两个交点,采用交比不变原理求解特征点像点的像素坐标。 3.根据权利要求2所述的相机标定方法,其特征在于,所述特征点的提取方法还包括:对标定模板图像进行预处理,所述预处理包括灰度化处理和或滤波处理。 4.根据权利要求1所述的相机标定方法,其特征在于,所述相机内参数包括:主点坐标的两个分量、横向和纵向缩放因子; 所述相机内参数的求解方法包括: 在标定模板图像上标定四个圆形的特征点,利用四个特征点之间的几何约束和定量关系建立关于相机内参数的四元方程组,所述方程组为无约束非线性方程组; 求解无约束非线性方程组,得到相机内参数。 5.根据权利要求1所述的相机标定方法,其特征在于,所述求解镜头两个畸变参数包括如下步骤: 标定一组特征,所述特征包括标定模板图像中满足调和共轭的三个特征点和一个无穷远点; 根据调和比建立关于两个畸变参数的超定方程组; 运用最小二乘法求解超定方程组,得到镜头两个畸变参数。 6.根据权利要求1至中5任一项所述的相机标定方法,其特征在于,所述设定值≤10-5。 2

实验三 MATLAB图像处理基本操作及摄像机标定(DLT)

实验三 MATLAB图像处理基本操作及摄像机标定(DLT) 实验三 Matlab图像处理基本操作及摄像机标定(DLT) (DLT)1、实验目的 通过应用Matlab的图像处理基本函数,学习图像处理中的一些基础操作和处理。 理解摄像机标定(DLT)方法的原理,并利用程序实现摄像机内参数和外参数的估计。。 2、实验内容: 1) 读取一幅图像并显示。 2) 检查内存(数组)中的图像。 3) 实现图像直方图均衡化。 4) 读取图像中像素点的坐标值。 5) 保存图像。 6) 检查新生成文件的信息。 7) 使用阈值操作将图像转换为二值图像。 8) 根据RGB图像创建一幅灰度图像。 9) 调节图像的对比度。 10) 在同一个窗口内显示两幅图像。 11) 掌握matlab命令及函数,获取标定块图像的特征点坐标。 12) 根据摄像机标定(DLT)方法原理,编写Matlab程序,估计摄像机内参数和12) 外参数。 3、实验要求: 1) 选取一幅图像,根据实验内容1)—10)给出结果。

2) 根据给定的标定块图像及实验内容11),12)进行编程实验。 3) 书写实验报告 4、实验设备 1) 微机。 2) Matlab软件。 5、实验原理 DLT变换: Abdal-Aziz和Karara于70年代初提出了直接线性变换像机定标的方法,他们从摄影测量学的角度深入的研究了像机图像和环境物体之间的关系,建立了像机成像几何的线性模型,这种线性模型参数的估计完全可以由线性方程的求解来实现。 直接线性变换是将像点和物点的成像几何关系在齐次坐标下写成透视投影矩阵的形式: X,,wu,,,, Y,,w,,,svP 3,4,,,,Zw ,,1,,,,1,, 为图像坐标系下的点的齐次坐标,为世界坐标系下的空其中,,,, u,v,1X,Y,Zwww 间点的欧氏坐标, P为3*4的透视投影矩阵,为未知尺度因子。 消去S,可以得到方程组: pX,pY,pZ,p,puX,puY,puZ,pu,011w12w13w1431w32w33w34 pX,pY,pZ,p,puX,puY,puZ,pu,021w22w23w1431w32w33w34 当已知N个空间点和对应的图像上的点时,可以得到一个含有2*N个方程的方程组: AL,0 其中A为(2N*12)的矩阵, L为透视投影矩阵元素组成的向量: T ,,p,p,p,p,p,p,p,p,p,p,p,p111213142122232431323334 ||AL||像机定标的任务就是寻找合适的L,使得为最小,即 min || AL || L

摄像机标定程序使用方法

一、材料准备 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 挑出出现次数最高的一组数据。

基于MATLAB对相机标定的研究

基于MATLAB对相机标定的研究 相机标定是对相机成像的逆过程求解,是建立二维图像坐标和三维世界坐标之间的对应关系,是机器视觉的重要组成部分。文章对针孔相机成像原理进行分析,考虑相机成像过程的径向畸变和偏心畸变。利用棋盘格标定原理,基于MATLAB对相机进行标定。 标签:相机标定;MATLAB;二值化 随着科技的迅猛发展,机器视觉越来越多的被运用到工业生产。相机的标定是机器视觉的重要组成部分,是对由三维世界坐标到二维图像坐标的映射求解。并廣泛运用于逆向工程、空间测距、图像识别、3D电影、游戏等工程。 相机的标定方法分为两大类,分别为传统标定方法和自标定方法。传统标定方法利用标定块的角点坐标和对应的图像坐标,计算出相机的内外参数,这种标定方法可以标定任意相机模型,标定过程复杂但是结果精确。包括利用最优化算法的标定、考虑畸变补偿的两步法、张正友标定法。自标定法是利用Krupp方程为相机建立绝对二次曲线曲面方程进行求解。这种方法灵活性强,但是鲁棒性和标定结果相对较差。 1 相机的标定原理 对相机进行标定首先需要建立相机的成像模型,首先利用针孔模型对相机的成像原理进行分析,然后考虑实际相机的畸变模型,利用张正友标定方法求解。 1.1 线性模型分析 相机标定的针孔模型是利用小孔成像的原理来描述相机的成像模型。针孔相机模型如下图1。 要描述针孔相机模型,需要介绍四种坐标以及这四种的坐标的相互关系。如图1所示,世界坐标系(OW-XWYWZW)表示世界的绝对坐标,能描述相机及其物理的空间位置。相机坐标(OC-XCYCZC)以相机的光心为坐标的原点,光轴为ZC轴,而XC、YC轴分别平行于图像坐标系的X,Y轴。图像坐标(o-xy)是以光轴与图像平面的交点为原点,描述的成像的平面坐标。图像像素坐标(o-uv)是图像的存储坐标,以图像左上端点为原点,以像素为单位描述图像其u、v轴分别平行于图像坐标的x、y轴。 其中fx=f/dx,dx表示像素在x轴方向的物理尺寸,f为相机的焦距。A是相机的内部参数矩阵,表示针孔模型下相机坐标到像素坐标的转换关系。点(u0,v0)为图像的主点。R是旋转矩阵,t是平移量,M为外部参数矩阵,表示由世界坐标系经过旋转和平移到相机坐标系的转换。

相机标定程序

/*环境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;//图片总数

一种多相机视觉测量系统的全局标定方法

一一第39卷一第5期一吉首大学学报(自然科学版)V o l.39一N o.5一一一一2018年9月J o u r n a l o f J i s h o uU n i v e r s i t y(N a t u r a l S c i e n c eE d i t i o n)S e p t.2018一一 文章编号:10072985(2018)05003808 一种多相机视觉测量系统的全局标定方法? 黄东兆,赵前程 (湖南科技大学机械设备健康维护湖南省重点实验室,湖南湘潭411201) 一一摘一要:提出了一种基于双平面靶标的多相机全局标定方法,要求两靶标之间为刚性联接,绕同一根轴旋转,但它们之间的相对位姿关系可以是未知的.该方法不仅适用于立体视觉测量系统,也适用于基于单目视觉的多相机测量系统,应用于四轮定位仪中多相机相对位姿关系的出厂标定,标定精度满足出厂要求. 关键词:多相机测量系统;全局标定;视觉测量;单目视觉 中图分类号:T P391.7一一一一一一一文献标志码:A D O I:10.13438/j.c n k i.j d z k.2018.05.009 单个相机都受一定的视野范围限制,为了满足高精度二宽视野的工业测量任务,通常需要用多个相机组建一个具有更大视觉空间范围的测量系统.对每个相机进行内参标定,只能在单个相机坐标系下建立视觉测量模型.由于各相机坐标系彼此独立,因此所有相机的测量结果需要统一到其中一个相机坐标系或一个全局坐标系中来表达.统一的过程被称为多相机测量系统位姿关系的全局标定.通常使用 金规校准 (需1个制作精确的标准件作为参考基准)与 银规校准 (需1个经过坐标测量机标定后的标准件作为参考基准)对多相机系统进行全局标定,但在日常搬运中要防止标准件不受损害是相当困难的.因此,张广军[1]提出了使用双电子经纬仪或单电子经纬仪加靶标进行全局标定的方法.该方法精度高,但电子经纬仪价格昂贵,普适性受限.其他一些方法[23]无需贵重仪器,但仅适用于立体视觉测量系统,不能应用于单目视觉系统.多相机测量系统全局标定的本质是确定系统中相机两两之间的相对位姿关系[4],只要任意两相机间的相对位姿关系确定了,就完成了多相机系统的全局标定.笔者提出了一种基于双平面靶标的两相机相对位姿关系的标定方法,在阐述其原理的基础上通过仿真标定与实际标定实验来验证其可行性. 1一基于双平面靶标的两相机间相对位姿关系的标定方法 1.1原理 多相机全局标定装置如图1所示,两靶标之间为刚性联接.两相机的位姿关系的标定如图2所示. 图1一多相机全局标定装置 F i g.1一 G l o b a lM u l t i-C a m e r aC a l i b r a t i o nD e v i c e 图2一两相机间相对位姿关系的标定 F i g.2一T w o-C a m e r aC a l i b r a t i o n f o rR e l a t i v eP o s eR e l a t i o n ?收稿日期:20180322 基金项目:国家自然科学基金资助项目(51345009);湖南省自然科学基金资助项目(13J J4082) 作者简介:黄东兆(1978 ),男,安徽桐城人,湖南科技大学讲师,博士,主要从事机器视觉测量二数控技术等研究.

相机标定方法

摄像机标定的方法和具体的步骤 1.理想的摄像机成像模型 在不考虑畸变的情况下,建立如图所示的摄像机模型。 物体到图像之间的转化,经历了下面四个坐标系的转换: 1.三维世界坐标系 O X Y Z w w w w 这是基于不存在误差的基础上建立的坐标系,是一个理想的模型。这是后两个模型 的参考,可以作为对比的基础。 2.摄像机坐标系Oxyz 该坐标系的原点是摄像机的光心,CCD像平面到原点的距离为f,即理想成像系统 的有效焦距,坐标系的轴与光轴重合。 3.摄像机图像坐标系'O XY O,X轴、该二维坐标系定义在CCD像平面上,其中光轴与像平面的交点定义为原点' Y轴分别平行于x、y轴。 4.计算机像平面坐标系Ouv 在这一坐标系中,原点在图像的左上角。这是一个建立在CCD像平面中的二维坐标 系,u轴和v轴组成坐标系,前者为水平轴,后者为垂直轴,方向向右、向下。 上面我们讨论的四个坐标系中,只有最后一个坐标系的单位是像素。前三者的单位 都是毫米。 一被测点P,其三维坐标为(x,y,z) ,摄像机坐标系为(x,y,z),其经过拍摄后, w w w

在摄像机图像坐标系中的坐标为(X,Y),最后得到计算机像面坐标系的坐标(u,v),这四步的变换过程如下图所示: 一、刚体变换(从世界坐标系到摄像机坐标系) 在刚体变换过程中世界坐标系中的一点到摄像机坐标系中的点,可以由一个旋转矩阵R以及一个平移矩阵t来描述,则存在如下刚体变换公式: 其中R为3X3的旋转矩阵(),t是一个三维平移向量,化为其次坐标形式有:

二、透视投影(相机坐标系到理想图像物理坐标系) 根据针孔模型下透镜成像焦距f,物距u和相距v的关系,以及下图可得:(注意此时的点M是摄像机坐标系的点) y是理想图像物理坐标系坐标)将上面的关系式化成其次坐标式为:(注意:x, u u 三、畸变校正 在上面所有的坐标系公式推导的过程中,我们遵循的是线性摄像机模型,但是实际的摄像机由于镜头制作工艺等原因,使摄像机获取的原始图像是含有畸变的,畸变的图像的像点、投影中心、空间点不存在共线关系,所以如果要想直接运用线性模型来描述三维世界空间的点与像点之间的关系,必须先对畸变的图像进行校正。 畸变模型矫正公式为: y为针孔线性模型计算出来的图像点坐标的理想值,(x,y)是实际的图像点的坐(x,) u u

相关文档
最新文档