ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:1.31MB ,
资源ID:7410016      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7410016.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(相机标定个人总结.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

相机标定个人总结.docx

1、相机标定个人总结本文是一篇关于相机标左意义和原理的个人总结,包含了 OpenCV和Matlab中常用的相机 标定函数的注解。相机标左是机器视觉的基础,标龙结果的好坏直接决定了机器视觉的系统精度,作用可见一 斑。在这一年半的时间里,我个人也是随着实验和程序的进一步理解,对标定的原理和意义 有了更多的想法。同样,由于博文的关系,仍有一些朋友会常常询问标立的程序问题。本人 的2020-05-170penCV标足程序的问题也多次被朋友询问,由于当时对标左的认识还不够系 统,因此现在认为该文对标左的意义和原理有很多误解,并在此推荐一些较好的博文拱大家 学习:双目测距与三维重建的0penCV实现问题集锦(

2、一)图像获取与单目标定;双目测距与三维重建的OpenCV实现问题集锦(二)双目标左与双目校正;双摄像头测距的OpenCV实现:分享一些OpenCV实现立体视觉的经验:下而结合本人的毕业论文及一年半来对机器视觉的学习,对相机标左的意义和原理进行叙 述。1.单目相机模型单目相机模型中的三种坐标系关系如图1所示,相机坐标系即是以光轴中心0为原点 的坐标系,其z轴满足右手法则,成像原点O,所代表平而即为像平面坐标系(实际应用中, 均以图像左上角为坐标系原点),实际物体坐标系即为世界坐标系。其中,P在世界坐标系的值为(Xw,Yw.Zw) , P“是P在像平面坐标系的投影点,英相机 坐标系的值为(X“.Y

3、“.乙)。0是相机坐标系Z轴与像平而夹角,一般情况下Z轴与像平而垂 直,0值为。且相机坐标系AOy与像平而yO/丹平行,/为相机的焦距。(1)(2):对于从相机坐标系到像平面坐标系的变换,像平而坐标系是用像素单位来表示的,而相 机坐标系则是以亳米为单位来表示,因此.要完成改变换过程就需要先得到像平而的像素单 位与亳米单位之间的线性关系。在图1中,相机光轴中心Z轴方向上与像平面的交点O称 为投影中心,坐标为(c、,cy),是像素单位,而每个像素在和匕的物理尺寸为s,=ydx和 S, =%、.,单位是像素/亳米,则像平而的像素与亳米间的线性关系如式(1):/ 、11V=f00 L/ Xy丄,00

4、1丿丄根据小孔模型下投影变换原理,像平而的物理坐标(儿y)对应的相机坐标系满足式(2) =丿 Z“sin&其对应的矩阵形式为式(3):联立式(1)和式(3),得到式(4)即为相机坐标系与像平而坐标系变换的矩阵。摄像机坐标系:/&即为相机的6个内参数,其组成的矩阵即为内参数矩阵。对于从相机坐标系到世界坐标系的变换,是通过旋转矩阵R和平移矩阵T完成的,如图P.(.YrZ.)图2相机坐标系与世界坐标系的变换关系英中,平移矩阵T是三维列向虽:,旋转矩阵R是坐标轴依次绕和z轴旋转角度04(5)和所形成的三个矩阵农(肖)尺)冬(厂)的总乘积。它们的定义如式(5):f00Rv() =0 cossin0 si

5、n0COS0,cos0 0sinR,)=010,sin (p 0cos (p ,cos r sin r 0R. (r)=sin r cosr 00 0 1,则矩阵R的计算公式如式(6):因此,从相机坐标系到世界坐标系的变换如式(7),其中,Qi表示(0 0 0), R (8):/ u(sj一/cosS Jo/xjV1= 0/sinJ 0 cv0RgYwz丿 yoT1Zw丄w00 10/1其中,Mg即为透视投影矩阵,表示空间中三维点坐标与图像平而二维坐标之间的线性关系,(“ v 1/表示匕的像平而齐次坐标值,(X* Yw Zw 1)T表示P的世界坐标系齐次坐标值。基于以上几何原理和相机模型得到的

6、图像信息和三维信息之间的关系,存在不可逆性, 即可以通过已知世界坐标系的坐标值求得二维坐标值,如果要进行二维坐标到三维坐标的反 求还需要其他的数学模型辅助求解。2.Mat lab标定工具箱应用1)制作标泄板,标左板尺寸为324 (nun)X252(mm),即7行9列63个36mm的正方形方格组 成,如图3所示。2)将水平平行的左右相机同时采集标圧板的不同位姿图像,共计12组位姿(对于采集的图像,位姿越多,标左结果也会越精确,建议在10组到20组之间)如图4, 5所示。图4左相机的标立图像图5右相机的标立图像3) 在工具箱中通过Extract grid corners提取每幅标泄图像的特征点(即

7、黑方格与白方 格的交点)。4) 进行单目标立,得到左右相机的内外参数以及畸变系数,并将参数保存到Cal让_Results_left 和 Calib_Results_right 两个 mat 格式的文件中。3.Mat lab标定结果与OpenCV标左结果的比较与分析Mat lab标定结果:通过上节的步骤(1)-(4),可以得到如图6和7所示的左右相机的内参数、畸变系数结果。Calibration results (vrith unceftcdrrties):Focal Lciuth: fc = B54.32776 B58. B0255 ? 57.33772 57.8430 1Principal

8、point: cc = 29L 15519 236.24060 ? 11.55439 6.33Q77 Skev: alpha_c = 0.00000 0. QOOOQ = angle a pixel axes = 90.00000 0. 00000 degreesDistortion: kc = 0.08416 -0.22269 -0.00136 0.0015】 0.00000 ?C 0.02747 0.1400 0.00226 0.00295 0.00000 Pixel erroi: err = 0.33151 0. 2362 B 图6左相机的内参数和畸变系数Calibration resu

9、lt s (uriih uncert amt iex):Focal Length: Principal point:fc = 321.T1021 824.98870 ? 56.03100 56. 06327 cc = 311.147G1 244.35410 J ? 7.99593 6.8832 Skeur:Distortion:PlxgI error:alphac = 0. 00000 0. 00000 = auxgle of pLxel axes = 90.00000 0. 00000 degreeskc = 0.02792 0.04452 -0.00127 0.00276 0.00000

10、1 X 0.034H 0.2705b 0.00193 0.00344 0.00000 err = 0.313-39 0.26350 图7右相机的内参数和畸变系数对于左右相机山于透镜畸变造成的误差使用工具箱中的visualize_distortions 功能进行分析,可以得到左相机的畸变图,如8、9、10所示,相应的右相机畸 变图,如11、12、13所示。Complete Distortion Model0 100 200 300400500 6.00Pixel error= 0.3315, 0.28&2Focal Length=(854328, 858.803)/- 57.34, 57.84P

11、rincipal Point=(291.15% 236,241)+/-H-55 6.835Skw=0+/- 0Radial coefficients= (0.08416,-0 2227 0)+/ 0.02747 , 0.1440Tangential coefficients=(-0.001357 0.00151)-*/- 0.002255, 0.0029471图8左相机镜头畸变图Radial Component of the Distortion Modelo501001502002503003504004500100 200 300400500 600Pixel error=0.3315,

12、0.2863Focl Length=(854.328, 858.803)+/- 57.34z 57.84Principal Point= (291.155, 236.241)4-/-11.55?G.835Skew=0叶QRadial coefficients=(0.0841E., -0.2227. 0)+/-0.02747, 0.144, 0Tnnqential coefficients=(-0.001357; 0.00151)*/-0.002255, 0.002947图9左相机径向畸变图Tangential Component of the Distortion Model图像在此则不易受畸

13、变因素影响造成线条的弯曲;图9左相机径向畸变模型中,0100 200 ?00400500 600Pixel error=03135, 0.2635Focal Length=(821.7b 824 弼)+/ 56.03, 56.06.Principal Point=(311.14$, 244.354)+/- 7.996, 6.848Skew=0* 0Radial coeflficients=(0.02792, 0.044520)+/-0.03411, 0.2706, 0Tangential coefficients=(-0.001265,0.002762)+/ 0.00193 b 0.00244

14、2图12右相机径向畸变图Pixel error = 0.5135,0.2635Foci Length = (821.7 b 82498勺) 叶56.03,56.06Principal Point = (311.145, 244.354) +卜7. 6.S4SSkew = 0 +/ 0Radial coefficients =(0.02732, 0.0445乙 0) +/- 0.03411? 0.2706-, 0Tangential coefficients = (-0.00126-5. 0.002762) +/- 0.001331,0.002442图13右相机切向畸变图对于图到13,图中的0点

15、与左相机相同,即为右相机光学中心,图中的 箭头显示相机图像的畸变方向。图右相机整体畸变模型中,该相机的中间及 偏左侧畸变不明显,若物体的图像在此则不易受畸变因素影响造成线条的弯曲; 图12右相机径向畸变模型中,该相机的畸变系数III中心向外增大,但右相机比 左相机在光轴中心附近有更大的区域畸变很小,因此位于右侧相机光学中心的图 像,其线条因受畸变造成的弯曲很小;图13右相机切向畸变模型中,箭头方向 显示该相机切向畸变的增大方向,在相机的左侧其切向畸变与径向畸变的方向相 反,使得整体畸变模型中,位于右相机图像左侧的线条受畸变影响较小。OpenCV标左结果:在此列举的OpenCV标左结果是我双目视

16、觉标泄且优化后的结果,与Matlab的会有差异。左侧相机的内参数矩阵:837.629310301.0371、0840.95381238.93799(9)001 右侧相机的内参数矩阵:该式(9) - (10)与式(1)相对应。而Matlab中的cc对应于式(1)中的相机光轴中心在 图像平而的投影坐标,fc即为式(1)中的H和片。至此,讲解完了 OpenCV与Matlab所对应的相机标立内参数矩阵的含义。OpenCV与Matlab标定中的差异:OpenCV的标左参数中,对于镜头畸变采用的方法是Brown博士在71年发表的文章中提 到的:而Matlab中的镜头畸变参数采用基于Heikkil 提岀的方

17、法,将非线性干扰因素引入到内外参数的求解过程。Heikkil采用5x1的矩阵(/ k2从p2他)来表示以上的两种畸变系数。根据 Brown的非线性模型,込和心表示镜头的径向畸变系数,通常只使用心,込两项,妇只 是针对即便较大的镜头(例如鱼眼镜头,英余情况下该系数值为0),而厲和$表示切向畸 变系数,由式(11)和式(12)求解该矩阵,本文的畸变系数求解伴随在相机标泄过程中。 也冋=工(1+尸+k2r +V6),(11) 畑 cm (1+M2 + 3* + )tangential + 血( + )(12)其中,(忑刃是像平而上的任一点坐标值,(兀说斶)是进行径向畸变娇正后的坐 标值,r2,rr6

18、是r作为光学中心畸变为0的点进行泰勒级数展开后得到的。J(angenlia=y+A ” + 2尸)+ 2时其中,(忑刃是像平面上的任一点坐标值,(沧现计治小诟J是进行切向畸变矫正后的坐标 值,r2,r4,r6如式(11)的進义相同。4.外参数的作用及其在相机标定中的意义外参数左义了如图2所示的图像平而到世界坐标系的变换关系匚而标宦就是通过相机寻找图 像平面中如图3所示的标左板的特征点位置,所以得到的外参数是图像平而与标怎板所处平 而的线性变换关系。在我的2010-06-14基于血tlab的双目视觉左位问题研究中,通过 Mat lab标定工具箱产生的图4与图5就可以表达上述含义。图3图4图5因此

19、,对于不同的棋盘格标左板空间位宜,必然对应于不同的外参数矩阵。同样的,在视觉 伺服中.雅可比矩阵也有同样的数学意义。对于视觉伺服个人认为可以看些徐徳的论文入 门。5.OpenCV标左程序说明用于寻找图像中的棋盘格标怎板的特征点:CvSize board.sz = cvSize( board_w, board_h );Ipllmage* imgLcft=cvCrcateImage(cvSize(iingL-width.iingL-height),imgL-depth.iingL-nChannels);Ipllmage imgRight=cvCreateImage(cvSize(imgR-widt

20、hjmgR-hcight)jmgR-depth,imgR-nChannels);CvPoint2D32f* cornersLeft = new CvPoint2D32f board_n ;CvPoint2D32f* cornersRight = new CvPoint2D32f board_n ;int comer_countLcft, corner_countRight;cvResize(imgL,imgLeft,CV _IN TER_LINEAR); cvResize(imgRJmgRight,CVJN TER_LINEAR);if(frame+ % board_dt = 0) /Find

21、 chessboard corners:int foundLeft = cvFindChessboardCorners(imgLeft, board_sz. cornersLeft &comer_countLeft,CV CALIB CB ADAPTIVE THRESH I CV CALIB CB FILTER QUADS );int foundRight = cvFindChessboardCorners(imgRight, board_sz, cornersRight, &corner_countRight,CV CALIB CB ADAPTIVE THRESH I CV CALIB CB

22、 FILTER QUADS );/Get Subpixel accuracy on those cornerscvCvtColor(imgLeft, grayLeft, CV_BGR2GRAY);/if input is colorful then use this cvCvtColor(imgRight, grayRight, CV_BGR2GRAY);/cvCopy( image 1. gray J mage 1);/cvCopy(image2, grayjmage2);cvFindCornerSubPix(grayLeft, cornersLeft, corner_countLeft,

23、cvSize(lLll )xvSize(-1 r 1),cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRITJTER, 30.0.1 );/寻找棋盘格标定板 的特征点cvFindCornerSubPix(grayRight, cornersRight, cornercountRight, cvSize(l 1J 1),cvSize(-1 厂 1),cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRITJTER. 30,0.1 ); 寻找棋盘格标定板 的特征点画出找到的特征点 cvDrawChessboardCorncrs(imgLe

24、ft, 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和StcrcoCalibralion的调用 step = success*board_n;

25、for( int i=step, j=0; jboard_n; +i,+j) CV_MAT_ELEM(*image_pointsLcft, float,i90) = cornersLeftj.x; CV_MAT_ELEM(*image_pointsLeft, float,i,l) = comersLeftj.y; CV_MAT_ELEM(*image_pointsRight, float,i,0) = cornersRightj.x; CV_MAT_ELEM(*image_pointsRight, floatJJ) = cornersRightj.y; CV_MAT_ELEM(*object_

26、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?float42) = O.Of;CV_MAT_ELEM(*point_counts, int,success,0) = board_n;随后调用cvCal让ateCame:ra2和cvStereoCalibate函数进行相机的标左。标定的例程可以 参考 Learning 0penCV以下推荐两本OpenCV的参考书:学习OpenCV (中文版)于仕琪译 淸华大学出版社,2009: (OpenCV 20库)基于OpenCV的计算机视觉技术实现 陈胜勇,刘盛编著科学岀版社,2008: (OpenCV 1. 0库) opencvorgcn 中 文论坛希望这篇总结对于各位有所帮助。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1