1摄像机标定工具箱1.1Matlab摄像机标定工具箱工具箱下载:说明文档:安装:将下载的工具箱文件toolbox_calib.zip解压缩,将目录toolbox_calib拷贝到Matlab的目录下。采集图像:采集的图像统一命名后,拷贝到toolbox_calib目录中。命名规则为基本名和编号,基本名在前,后面直接跟着数字编号。编号最多为3位十进制数字。1.1.1标定模型内参数标定采用的模型如式(1-1)所示,Brown畸变模型式(1-2)所示。11//100011100ccinccccysxyxMzyzxvkukkvu(1-1)式中:(u,v)是特征点的图像坐标,(xc,yc,zc)是特征点在摄像机坐标系的坐标,kx、ky是焦距归一化成像平面上的成像点坐标到图像坐标的放大系数,ks是对应于图像坐标u、v的摄像机的x、y轴之间不垂直带来的耦合放大系数,(u0,v0)是光轴中心点的图像坐标即主点坐标,(xc1,yc1)是焦距归一化成像平面上的成像点坐标。ks=ckx,c是摄像机的实际y轴与理想y轴之间的夹角,单位为弧度。1142123654221112124113654221112)2()1()2(2)1(cccccccccdccccccccccdcyxkyrkrkrkrkyyxrkyxkrkrkrkxx(1-2)式中:(xc1d,yc1d)是焦距归一化成像平面上的成像点畸变后的坐标,kc1是2阶径向畸变系数,kc2是4阶径向畸变系数,kc5是6阶径向畸变系数,kc3、kc4是切向畸变系数,r为成像点到摄像机坐标系原点的距离,r2=xc12+yc12。1.1.2操作界面将Matlab的当前目录设定为含有标定工具箱的目录,即toolbox_calib目录。在Matlab命令窗口运行calib_gui指令,弹出图1所示选择窗口。图1内存使用方式窗口图1窗口中,具有两个选项,分别是“Standard”和“Memoryefficient”。如果点击选择“Standard”,则将目录中的所有图像读入内存中,所需内存较大。如果点击选择“Memoryefficient”,则将目录中的图像按照需要每次一幅图像读入内存中,所需内存较小。在选择了2内存使用方式后,弹出标定工具箱操作面板。图2是选择“Standard”后弹出的标定工具箱操作面板。图2标定工具箱操作面板图2所示的标定工具箱操作面板具有16个操作命令键,其功能如下:(1)“Imagenames”键:指定图像的基本名(Basename)和图像格式,并将相应的图像读入内存。(2)“Readnames”键:将指定基本名和格式的图像读入内存。(3)“Extractgridcorners”键:提取网格角点。(4)“Calibration”键:内参数标定。(5)“ShowExtrinsic”键:以图形方式显示摄像机与标定靶标之间的关系。(6)“Projectonimages”键:按照摄像机的内参数以及摄像机的外参数(即靶标坐标系相对于摄像机坐标系的变换关系),根据网格点的笛卡尔空间坐标,将网格角点反投影到图像空间。(7)“Analyseerror”键:图像空间的误差分析(8)“Recomp.corners”键:重新提取网格角点。(9)“Add/Suppressimages”键:增加/删除图像。(10)“Save”键:保存标定结果。将内参数标定结果以及摄像机与靶标之间的外参数保存为m文件Calib_results.m,存放于toolbox_calib目录中。(11)“Load”键:读入标定结果。从存放于toolbox_calib目录中的标定结果文件Calib_results.mat读入。(12)“Exit”键:退出标定。(13)“Comp.Extrinsic”键:计算外参数。(14)“Undistortimage”键:生成消除畸变后的图像并保存。(15)“Exportcalibdata”键:输出标定数据。分别以靶标坐标系中的平面坐标和图像中的图像坐标,将每一幅靶标图像的角点保存为两个tex文件。(16)“Showcalibresults”键:显示标定结果。1.1.3内参数标定预先将命名为Image1~Image20的tif格式的20幅靶标图像保存在toolbox_calib目录中。当然,采集的靶标图像也可以采用不同的格式,如bmp格式、jpg格式等。但应注意,用于标定的靶标图像需要采用相同的图像格式。摄像机的内参数标定过程,如下所述。(1)指定图像基本名与图像格式在图2所示的标定工具箱操作面板点击“Imagenames”键,在Matlab命令窗口分别输入基本名Image和图像格式t,出现下述对话内容:Basenamecameracalibrationimages(withoutnumbernorsuffix):ImageImageformat:([]='r'='ras','b'='bmp','t'='tif','p'='pgm','j'='jpg','m'='ppm')tLoadingimage1...2...3...4...5...6...7...8...9...10...11...12...13...14...15...16...17...18...19...20...done同时,在Matlab的图形窗口显示出20幅靶标图像,如图3所示。3Calibrationimages图3靶标图像(2)提取角点在图2所示的标定工具箱操作面板点击“Extractgridcorners”键。在Matlab命令窗口出现“Number(s)ofimage(s)toprocess([]=allimages)=”时,输入要进行角点提取的靶标图像的编号并回车。直接回车表示选用缺省值。选择缺省值式,对读入的所有的靶标图像进行角点提取。在Matlab命令窗口出现“Windowsizeforcornerfinder(wintxandwinty):”时,分别在“wintx([]=5)=”和“winty([]=5)=”输入行中输入角点提取区域的窗口半宽m和半高n。m和n为正整数,单位为像素,缺省值为5个像素。选定m和n后,命令窗口显示角点提取区域的窗口尺寸(2n+1)x(2m+1)。例如,选择缺省时角点提取区域的窗口尺寸为11x11像素。在Matlab命令窗口出现“Doyouwanttousetheautomaticsquarecountingmechanism(0=[]=default)ordoyoualwayswanttoenterthenumberofsquaresmanually(1,other)?”时,选择缺省值0表示自动计算棋盘格靶标选定区域内的方格行数和列数,选择值1表示人工计算并输入棋盘格靶标选定区域内的方格行数和列数。到显示所选择靶标图像的图形窗口,利用鼠标点击设定棋盘格靶标的选定区域。点击的第一个角点作为靶标坐标系的原点,顺序点击4个角点形成四边形。注意,所形成的四边形的边应与棋盘格靶标的网格线基本平行。否则,影响角点提取精度,甚至导致角点提取错误。在Matlab命令窗口出现“SizedXofeachsquarealongtheXdirection([]=100mm)=”和“SizedYofeachsquarealongtheYdirection([]=100mm)=”时,分别输入方格长度和宽度,单位为mm。方格长度和宽度的缺省值均为100mm。在Matlab命令窗口出现“Needofaninitialguessfordistortion?([]=no,other=yes)”时,如果选择no则不输入畸变初始值,如果选择yes则输入畸变初始值。输入的畸变初始值,将同时赋值给需要估计的5个畸变系数,即径向畸变系数kc(1)、kc(2)、kc(5)和切向畸变系数kc(3)、kc(4)。如果不估计6阶径向畸变系数kc(5),则kc(5)被赋值为0。按照上述步骤,对用于标定的每一幅靶标图像进行角点提取。例如,m=5,n=5时,角点提取区域的窗口尺寸为11x11像素,未输入畸变初始值,此时图像Image6的角点提取结果如图4所示。图4(a)只标出了待提取角点的位置,图4(b)标出了角点提取区域窗口和提取出的角点。从图4中可以发现,图4(a)中的十字标记位置与角点具有明显偏差,但在角点附4近;图4(b)中的每个角点提取区域窗口包含了角点,表示角点提取结果的十字标记位置与角点位置具有很好的吻合度。同样在m=5,n=5时,未输入畸变初始值,但通过鼠标点击设定棋盘格靶标的选定区域时,所形成的四边形的边与棋盘格靶标的网格线成较大夹角,此时图像Image1的角点提取结果如图5所示。从图5中可以发现,图5(a)中的十字标记位置与角点具有明显偏差,部分十字标记远离角点;图5(b)中的很多角点提取区域窗口没有包含角点,表示角点提取结果的十字标记位置并不在角点位置,说明角点提取存在错误。XYOTheredcrossesshouldbeclosetotheimagecorners10020030040050060050100150200250300350400450(a)OdXdYXc(incameraframe)Yc(incameraframe)Extractedcorners10020030040050060050100150200250300350400450(b)图4合适的靶标选定区域与角点提取结果,(a)靶标选定区域,(b)角点提取结果(3)内参数标定对用于标定的每一幅靶标图像进行角点提取后,在图2所示的标定工具箱操作面板点击“Calibration”键,即可完成摄像机的内参数标定。内参数标定时,Matlab工具箱首先进行初始化,即将图像中心点坐标作为主点坐标的初始值,采用平面靶标网格的消失点估计出摄像机的内参数作为内参数的初始值,畸变初始值设为0。镜头畸变采用包括径向畸变和切向畸变的Brown畸变模型,并假设6阶径向畸变系数kc(5)=0。假设摄像机的x轴与y轴严格垂直,即图像坐标(u,v)与归一化成像平面内的成像点坐标(xc1,yc1)解耦,ks=0,内参数采用4参数模型。数组est_dist(1:5)是畸变系数kc(1:5)是否标定的标志,只对标志取值为1的畸变系数标定,标志取值为0的畸变系数不标定。5XYOTheredcrossesshouldbeclosetotheimagecorners10020030040050060050100150200250300350400450(a)OdXdYXc(incameraframe)Yc(incameraframe)Extractedcorners10020030040050060050100150200250300350400450(b)图5错误的靶标选定区域与角点提取结果,(a)靶标选定区域,(b)角点提取结果内参数标定给出初始化后的标定结果和优化后的标定结果。其中,对内参数的优化采用L-M梯度下降法。优化后的结果中给出的参数不确定性,是3倍的标准方差。fc中的两个数据分别是kx和ky,即焦距归一化成像平面上的成像点坐标到图像坐标的放大系数。cc为光轴中心点的图像坐标(u0,v0),又称为主点坐标,单位为像素。alpha_c是对应于图像坐标v的摄像机的实际y轴与理想y轴之间的夹角c,单位为弧度,默认值为0弧度。后续给出的图像轴之间的夹角为对应于图像坐标u、v的摄像机的x、y轴之间的夹角,默认值为90。est_alpha是alpha_c是否标定的标志位,只有est_alpha=1时对alpha_