相机标定个人总结Word格式.docx
- 文档编号:20520553
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:18
- 大小:1.31MB
相机标定个人总结Word格式.docx
《相机标定个人总结Word格式.docx》由会员分享,可在线阅读,更多相关《相机标定个人总结Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
根据小孔模型下投影变换原理,像平而的物理坐标(儿y)对应的相机坐标系满足式
(2)
'
=丿Z“sin&
其对应的矩阵形式为式(3):
联立式
(1)和式(3),得到式(4)即为相机坐标系与像平而坐标系变换的矩阵。
摄像机坐标系
:
£
・/&
即为相机的6个内参数,其组成的矩阵即为内参数矩阵。
对于从相机坐标系到世界坐标系的变换,是通过旋转矩阵R和平移矩阵T完成的,如图
P.(\.YrZ.)
图2相机坐标系与世界坐标系的变换关系
英中,平移矩阵T是三维列向虽:
,旋转矩阵R是坐标轴依次绕和z轴旋转角度04
(5)
和『所形成的三个矩阵农(肖)尺@)冬(厂)的总乘积。
它们的定义如式(5):
f\
Rv(^)=
0cos©
sin©
0・sin0
COS0,
cos00
■sin©
R,@)=
1
sin(p0
cos(p,
cosrsinr0
R.(r)=・sinrcosr0
001,
则矩阵R的计算公式如式(6):
因此,从相机坐标系到世界坐标系的变换如式(7),其中,Qi表示(000),R®
(8):
/\u
(sj
一/cosSJ
o'
/
\
xj
=
/sin"
J0cv
Rg
Yw
z
[丿y
oT
Zw
w
01
[
其中,
Mg即为透视投影矩阵,表示空间中三维点坐标与图像平而二维坐标之间的线性关
系,(“v1/表示匕的像平而齐次坐标值,(X*YwZw1)T表示P的世界坐标系齐次坐
标值。
基于以上几何原理和相机模型得到的图像信息和三维信息之间的关系,存在不可逆性,即可以通过已知世界坐标系的坐标值求得二维坐标值,如果要进行二维坐标到三维坐标的反求还需要其他的数学模型辅助求解。
2.Matlab标定工具箱应用
1)制作标泄板,标左板尺寸为324(nun)X252(mm),即7行9列63个36mm的正方形方格组成,如图3所示。
2)将水平平行的左右相机同时采集标圧板的不同位姿图像,共计12组位姿(对于采集的
图像,位姿越多,标左结果也会越精确,建议在10组到20组之间)如图4,5所示。
图4左相机的标立图像
图5右相机的标立图像
3)在工具箱中通过Extractgridcorners提取每幅标泄图像的特征点(即黑方格与白方格的交点)。
4)进行单目标立,得到左右相机的内外参数以及畸变系数,并将参数保存到
Cal让_Results_left和Calib_Results_right两个mat格式的文件中。
3.Matlab标定结果与OpenCV标左结果的比较与分析
Matlab标定结果:
通过上节的步骤
(1)-(4),可以得到如图6和7所示的左右相机的内参数、畸
变系数结果。
Calibrationresults(vrithunceftcdrrties):
FocalLciuth:
fc=[B54.32776B58.B0255]?
〔57.3377257.8^4301
Principalpoint:
cc=[29L15519236.24060]?
[11.554396.33Q77]
Skev:
alpha_c=[0.00000][0.QOOOQ]=>
anglea£
pixelaxes=90.00000^0.00000degrees
Distortion:
kc=[0.08416-0.22269-0.001360.0015】0.00000]?
C0.027470.1^4000.002260.002950.00000]
Pixelerroi:
:
err=[0.331510.2362B]
图6左相机的内参数和畸变系数
Calibrationresults(uriihuncertamtiex):
FocalLength:
Principalpoint:
fc=[321.T1021824.98870]?
[56.0310056.06327]
cc=[311.147G1244.35410J?
[7.995936.8^832]
Skeur:
PlxgIerror:
alpha^c=[0.00000][0.00000]=>
auxgleofpLxelaxes=90.00000^0.00000degrees
kc=[0.027920.04452-0.001270.002760.000001X0.034H0.2705b0.001930.003440.00000]
err=[0.313-390.26350]
图7右相机的内参数和畸变系数
对于左右相机山于透镜畸变造成的误差使用工具箱中的visualize_distortions功能进行分析,可以得到左相机的畸变图,如8、9、10所示,相应的右相机畸变图,如11、12、13所示。
CompleteDistortionModel
0100200300
400
5006.00
Pixelerror
=[0.3315,0.28&
2]
FocalLength
=(854328,858.803)
♦/-[57.34,57.84]
PrincipalPoint
=(291.15%236,241)
+/-[H-55>
6.835]
Sk«
=0
+/-0
Radialcoefficients
=(0.08416,-02227^0)
+/"
[0.02747,0.144^0]
Tangentialcoefficients
=(-0.001357^0.00151)
-*•/-[0.002255,0.0029471
图8左相机镜头畸变图
RadialComponentoftheDistortionModel
o
50
100
150
200
250
300
350
450
100200300
500600
=[0.3315,0.2863]
Foc^lLength
=(854.328,858.803)
+/-[57.34z57.84]
=(291.155,236.241)
4-/-[11.55?
G.835]
Skew
叶Q
=(0.0841E.,-0.2227.0)
+/-[0.02747,0.144,0]
Tnnqentialcoefficients
=(-0.001357;
0.00151)
*•/-[0.002255,0.002947]
图9左相机径向畸变图
TangentialComponentoftheDistortionModel
图像在此则不易受畸变因素影响造成线条的弯曲;
图9左相机径向畸变模型中,
100200?
00
=[03135,0.2635]
=(821.7b824•弼)
+/■[56.03,56.06.]
=(311.14$,244.354)
+/-[7.996,6.848]
*•0
Radialcoeflficients
=(0.02792,0.04452『0)
+/-[0.03411,0.2706,0]
=(-0.001265,0.002762)
+/•[0.00193b0.002442]
图12右相机径向畸变图
Pixelerror=[0.5135,0.2635]
FociLength=(821.7b824・98勺)叶[56.03,56.06]
PrincipalPoint=(311.145,244.354)+卜[7.^6.S4S]
Skew=0+/■0
Radialcoefficients=(0.02732,0.0445乙0)+/-[0.03411?
0.2706-,0]
Tangentialcoefficients=(-0.00126-5.0.002762)+/-[0.001331,0.002442]
图13右相机切向畸变图
对于图□到13,图中的0点与左相机相同,即为右相机光学中心,图中的箭头显示相机图像的畸变方向。
图□右相机整体畸变模型中,该相机的中间及偏左侧畸变不明显,若物体的图像在此则不易受畸变因素影响造成线条的弯曲;
图12右相机径向畸变模型中,该相机的畸变系数III中心向外增大,但右相机比左相机在光轴中心附近有更大的区域畸变很小,因此位于右侧相机光学中心的图像,其线条因受畸变造成的弯曲很小;
图13右相机切向畸变模型中,箭头方向显示该相机切向畸变的增大方向,在相机的左侧其切向畸变与径向畸变的方向相反,使得整体畸变模型中,位于右相机图像左侧的线条受畸变影响较小。
OpenCV标左结果:
在此列举的OpenCV标左结果是我双目视觉标泄且优化后的结果,与Matlab的会有差异。
左侧相机的内参数矩阵:
‘837.62931
301.0371、
840.95381
238.93799
(9)
1」
右侧相机的内参数矩阵:
该式(9)-(10)与式
(1)相对应。
而Matlab中的cc对应于式
(1)中的相机光轴中心在图像平而的投影坐标,fc即为式
(1)中的H和片。
至此,讲解完了OpenCV与Matlab所对应的相机标立内参数矩阵的含义。
OpenCV与Matlab标定中的差异:
OpenCV的标左参数中,对于镜头畸变采用的方法是Brown博士在71年发表的文章中提到的:
而Matlab中的镜头畸变参数采用基于Heikkil提岀的方法,将非线性干扰因素
引入到内外参数的求解过程。
Heikkil采用5x1的矩阵(/k2从p2他)来表示以上的两种畸变系数。
根据Brown的非线性模型,込和心表示镜头的径向畸变系数,通常只使用心,込两项,妇只是针对即便较大的镜头(例如鱼眼镜头,英余情况下该系数值为0),而厲和$表示切向畸变系数,由式(11)和式(12)求解该矩阵,本文的畸变系数求解伴随在相机标泄过程中。
也冋=・工(1+£
]尸+k2r'
+V6)
,(11)畑cm(1+M2+3*+❻"
)
tangential『+血(^+"
)]
(12)
其中,(忑刃是像平而上的任一点坐标值,(兀说斶)是进行径向畸变娇正后的坐标值,r2,r\r6是r作为光学中心畸变为0的点进行泰勒级数展开后得到的。
J(angenlia]=y+[A”+2尸)+2时]
其中,(忑刃是像平面上的任一点坐标值,(沧现计治小诟J是进行切向畸变矫正后的坐标值,r2,r4,r6如式(11)的進义相同。
4.外参数的作用及其在相机标定中的意义
外参数左义了如图2所示的图像平而到世界坐标系的变换关系匚而标宦就是通过相机寻找图像平面中如图3所示的标左板的特征点位置,所以得到的外参数是图像平而与标怎板所处平而的线性变换关系。
在我的2010-06-14基于血tlab的双目视觉左位问题研究中,通过Matlab标定工具箱产生的图4与图5就可以表达上述含义。
图3图4图5
因此,对于不同的棋盘格标左板空间位宜,必然对应于不同的外参数矩阵。
同样的,在视觉伺服中.雅可比矩阵也有同样的数学意义。
对于视觉伺服•个人认为可以看些徐徳的论文入门。
5.OpenCV标左程序说明
用于寻找图像中的棋盘格标怎板的特征点:
CvSizeboard.sz=cvSize(board_w,board_h);
Ipllmage*imgLcft=cvCrcateImage(cvSize(iingL->
width.iingL->
height),imgL->
depth.iingL->
nChannels);
Ipllmage♦imgRight=cvCreateImage(cvSize(imgR->
widthjmgR->
hcight)jmgR->
depth,imgR->
CvPoint2D32f*cornersLeft=newCvPoint2D32f[board_n];
CvPoint2D32f*cornersRight=newCvPoint2D32f[board_n];
intcomer_countLcft,corner_countRight;
cvResize(imgL,imgLeft,CV_INTER_LINEAR);
cvResize(imgRJmgRight,CVJNTER_LINEAR);
if(frame++%board_dt==0){
//Findchessboardcorners:
intfoundLeft=cvFindChessboardCorners(
imgLeft,board_sz.cornersLeft・&
comer_countLeft,
CVCALIBCBADAPTIVETHRESHICVCALIBCBFILTERQUADS);
intfoundRight=cvFindChessboardCorners(
imgRight,board_sz,cornersRight,&
corner_countRight,
//GetSubpixelaccuracyonthosecorners
cvCvtColor(imgLeft,grayLeft,CV_BGR2GRAY);
//ifinputiscolorfulthenusethiscvCvtColor(imgRight,grayRight,CV_BGR2GRAY);
//cvCopy(image1.grayJmage1);
//cvCopy(image2,grayjmage2);
cvFindCornerSubPix(grayLeft,cornersLeft,corner_countLeft,cvSize(lLll)xvSize(-1r1),
cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRITJTER,30.0.1));
//寻找棋盘格标定板的特征点
cvFindCornerSubPix(grayRight,cornersRight,corner^countRight,cvSize(l1J1),cvSize(-1厂1),
cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRITJTER.30,0.1));
〃寻找棋盘格标定板的特征点
〃画出找到的特征点cvDrawChessboardCorncrs(imgLeft,board_sz,cornersLeft,corner_countLeft,foundLeft);
cvDrawChessboardCorners(imgRight,board_sz,cornersRight,corner_countRight,foundRight);
if(corner_countLeft>
=board_n&
&
foundLeft&
corner-countRight>
foundRight)
{〃保存特征点在图像坐标中的坐标值,用于Calibrate2和StcrcoCalibralion的调用step=success*board_n;
for(inti=step,j=0;
j<
board_n;
++i,++j){
CV_MAT_ELEM(*image_pointsLcft,float,i90)=cornersLeft[j].x;
CV_MAT_ELEM(*image_pointsLeft,float,i,l)=comersLeft[j].y;
CV_MAT_ELEM(*image_pointsRight,float,i,0)=cornersRight[j].x;
CV_MAT_ELEM(*image_pointsRight,floatJJ)=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?
float42)=O.Of;
}
CV_MAT_ELEM(*point_counts,int,success,0)=board_n;
随后调用cvCal让ateCame:
ra2和cvStereoCalibate函数进行相机的标左。
标定的例程可以参考Learning0penCV«
以下推荐两本OpenCV的参考书:
学习OpenCV(中文版)于仕琪译淸华大学出版社,2009:
(OpenCV2・0库)
基于OpenCV的计算机视觉技术实现陈胜勇,刘盛编著科学岀版社,2008:
(OpenCV1.0库)opencv・org・cn中文论坛
希望这篇总结对于各位有所帮助。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 相机 标定 个人 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)