Matlab摄像机标定工具箱的使用说明.docx
- 文档编号:11881632
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:22
- 大小:1.07MB
Matlab摄像机标定工具箱的使用说明.docx
《Matlab摄像机标定工具箱的使用说明.docx》由会员分享,可在线阅读,更多相关《Matlab摄像机标定工具箱的使用说明.docx(22页珍藏版)》请在冰豆网上搜索。
Matlab摄像机标定工具箱的使用说明
Matlab摄像机标定工具箱的使用说明(总17页)
摄像机标定工具箱
Matlab摄像机标定工具箱
工具箱下载:
说明文档:
安装:
将下载的工具箱文件解压缩,将目录toolbox_calib拷贝到Matlab的目录下。
采集图像:
采集的图像统一命名后,拷贝到toolbox_calib目录中。
命名规则为基本名和编号,基本名在前,后面直接跟着数字编号。
编号最多为3位十进制数字。
1.1.1标定模型
内参数标定采用的模型如式(1-1)所示,Brown畸变模型式(1-2)所示。
(1-1)
式中:
(u,v)是特征点的图像坐标,(xc,yc,zc)是特征点在摄像机坐标系的坐标,kx、ky是焦距归一化成像平面上的成像点坐标到图像坐标的放大系数,ks是对应于图像坐标u、v的摄像机的x、y轴之间不垂直带来的耦合放大系数,(u0,v0)是光轴中心点的图像坐标即主点坐标,(xc1,yc1)是焦距归一化成像平面上的成像点坐标。
ks=ckx,c是摄像机的实际y轴与理想y轴之间的夹角,单位为弧度。
(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是选择“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文件,存放于toolbox_calib目录中。
(11)“Load”键:
读入标定结果。
从存放于toolbox_calib目录中的标定结果文件读入。
(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):
Image
Imageformat:
([]='r'='ras','b'='bmp','t'='tif','p'='pgm','j'='jpg','m'='ppm')t
Loadingimage1...2...3...4...5...6...7...8...9...10...11...12...13...14...15...16...17...18...19...20...
done
同时,在Matlab的图形窗口显示出20幅靶标图像,如图3所示。
图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(b)中的每个角点提取区域窗口包含了角点,表示角点提取结果的十字标记位置与角点位置具有很好的吻合度。
同样在m=5,n=5时,未输入畸变初始值,但通过鼠标点击设定棋盘格靶标的选定区域时,所形成的四边形的边与棋盘格靶标的网格线成较大夹角,此时图像Image1的角点提取结果如图5所示。
从图5中可以发现,图5(a)中的十字标记位置与角点具有明显偏差,部分十字标记远离角点;图5(b)中的很多角点提取区域窗口没有包含角点,表示角点提取结果的十字标记位置并不在角点位置,说明角点提取存在错误。
(a)
(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的畸变系数不标定。
(a)
(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_c进行标定。
kc为畸变系数kc1~kc5,kc
(1)为二阶径向畸变系数kc1,kc
(2)为4阶径向畸变系数kc2,kc(5)为6阶径向畸变系数kc5,kc(3)为图像坐标u对应于xy项的切向畸变系数kc3,kc(4)为图像坐标v对应于xy项的切向畸变系数kc4。
err为将网格角点反投影到图像空间的误差的标准方差,单位为像素。
在优化后的结果中,不确定性的数值越小,说明标定的精度越高。
如果不确定性项的数值与结果值相比所占比例较大,则需要重新标定。
初始化后的标定结果:
FocalLength:
fc=[]
Principalpoint:
cc=[]
Skew:
lpha_c=[]=>angleofpixel=degrees
Distortion:
kc=[]
优化后的标定结果:
FocalLength:
fc=[]±[]
Principalpoint:
cc=[]±[]
Skew:
alpha_c=[]±[]=>angleofpixelaxes=±degrees
Distortion:
kc=[]±[]
Pixelerror:
err=[]
(4)显示摄像机与标定靶标之间的关系
完成内参数标定后,在标定工具箱操作面板点击“ShowExtrinsic”键,即可在新的图形窗口显示摄像机与标定靶标之间的关系,如图6所示。
图6(a)为假设摄像机固定时摄像机与靶标之间的关系,图6(b)为假设靶标固定时摄像机与靶标之间的关系。
(a)(b)
图6摄像机坐标系与靶标之间的关系,(a)摄像机固定,(b)靶标固定
(5)误差分析
完成内参数标定后,在标定工具箱操作面板点击“Analyseerror”键,即可在新的图形窗口显示出标定使用的所有角点反投影到图像空间的图像坐标误差,如图7所示。
在图7所示的图形窗口,利用鼠标移动十字标尺可以选择角点,即可在命令窗口显示出该角点的信息,包括该角点所属图像、索引号、以方格为单位的坐标、图像坐标、反投影后的图像坐标误差、角点提取区域的窗口半宽m和半高n。
选择角点后在命令窗口显示的信息:
Selectedimage:
5
Selectedpointindex:
51
Patterncoordinates(inunitsof(dX,dY)):
(X,Y)=(11,8)
Imagecoordinates(inpixel):
Pixelerror=,
Windowsize:
(wintx,winty)=(6,6)
(6)反投影到图像空间
完成内参数标定后,在标定工具箱操作面板点击“Projectonimage”键,在Matlab命令窗口出现“Number(s)ofimage(s)toprocess([]=allimages)=”时,输入要进行反投影的靶标图像的编号并回车。
直接回车表示选用缺省值。
选择缺省值式,对用于标定的所有靶标图像进行反投影。
选择图像后,在新的图形窗口显示反投影结果,并在命令窗口输出用于标定的所有靶标图像的角点反投影的图像误差的标准方差。
Image6反投影的结果如图8所示,其中“+”为角点的图像坐标位置,“o”为角点反投影的图像坐标位置。
点击“Projectonimage”键后,在命令窗口显示的信息如下:
Number(s)ofimage(s)toshow([]=allimages)=6
Pixelerror:
err=[](allactiveimages)
图7反投影到图像空间的角点图像坐标误差
图8Image6的角点反投影结果
(7)图像畸变校正
完成内参数标定后,在标定工具箱操作面板点击“Undistortimage”键,则按照畸变系数对读入的所有靶标图像进行处理,生成消除畸变后的图像并保存在toolbox_calib目录中。
生成的消除畸变后的图像,以原图像的文件名在基本名和编号之间插入_rect作为其文件名。
图9所示为Image6的原始图像和消除畸变后的图像。
(8)增加/删除图像
在标定工具箱操作面板点击“Add/Suppressimage”键,在命令窗口输入代表增加图像、删除图像的数字,然后输入图像编号,可以增加/删除标定使用的图像。
(9)重新提取网格角点
完成内参数标定后,在标定工具箱操作面板点击“Recomp.corners”键,在命令窗口输入角点提取区域的窗口半宽m和半高n、输入重新提取网格角点的图像编号、选择冲投影方式后,即可对所选图像重新进行角点提取。
重新进行角点提取后,可以再次进行内参数标定。
重新提取网格角点时采用了以前的标定结果,经过重新提取网格角点再次标定后,内参数标定精度会有所提高。
如果初次角点提取的效果较好,则重新进行网格角点提取的作用不大。
点击“Recomp.corners”键后,在命令窗口显示的信息如下:
Re-extractionofthegridcornersontheimages(afterfirstcalibration)
Windowsizeforcornerfinder(wintxandwinty):
wintx([]=5)=
winty([]=5)=
Windowsize=11x11
Number(s)ofimage(s)toprocess([]=allimages)=
Usetheprojectionof3Dgridormanualclick([]=auto,other=manual):
Processingimage1...2...3...4...5...
done
(a)(b)
图9原始图像和校正后图像,(a)原始图像(b)消除畸变后的图像
1.1.4外参数标定
外参数标定是在内参数已知的前提下进行的。
在完成摄像机的内参数标定后,或者在命令窗口输入摄像机的内参数后,可以对棋盘格靶标相对于摄像机的外参数进行标定。
在标定工具箱操作面板点击“Comp.Extrinsic”键,在命令窗口输入靶标图像名称和图像格式,再按照1.1.2节
(2)中的过程提取角点,可实现靶标相对于摄像机的外参数标定。
外参数标定时,在命令窗口显示的信息如下:
Computationoftheextrinsicparametersfromanimageofapattern
Theintrinsiccameraparametersareassumedtobeknown(previouslycomputed)
Imagename(fullnamewithoutextension):
Image1
Imageformat:
([]='r'='ras','b'='bmp','t'='tif','p'='pgm','j'='jpg','m'='ppm')t
Extractionofthegridcornersontheimage
Windowsizeforcornerfinder(wintxandwinty):
wintx([]=5)=
winty([]=5)=
Windowsize=11x11
Clickonthefourextremecornersoftherectangularcompletepattern(thefirstclickedcorneristheorigin)...
SizedXofeachsquarealongtheXdirection([]=30mm)=100
SizedYofeachsquarealongtheYdirection([]=30mm)=100
Cornerextraction...
外参数标定结果如下:
Translationvector:
Tc_ext=[]
Rotationvector:
omc_ext=[]
Rotationmatrix:
Rc_ext=[
]
Pixelerror:
err=[]
在外参数标定结果中,Tc_ext为靶标坐标系原点在摄像机坐标系中的位移向量,单位为mm;omc_ext为对应于姿态矩阵的rodrigues旋转向量;Rc_ext为旋转矩阵;err为将网格角点反投影到图像空间的误差的标准方差,单位为像素。
1.1.5立体视觉标定
在进行立体视觉标定之前,按照1.1.2节方法分别标定立体视觉系统的左、右摄像机的内参数。
左摄像机采集的图像与右摄像机采集的图像分别命名,左摄像机采集的图像命名为left1~left14,右摄像机采集的图像命名为right1~right14。
左摄像机内参数的标定结果保存后的文件重命名为,右摄像机的标定结果保存后的文件重命名为。
在Matlab命令窗口运行stereo_gui指令,弹出图10所示立体视觉标定工具箱窗口。
图10立体视觉标定工具箱操作面板
图10所示的标定工具箱操作面板具有8个操作命令键,其功能如下:
(1)“Loadleftandrightcalibrationfiles”键:
读入左、右摄像机的标定结果,并对左摄像机相对于右摄像机的位姿进行初步标定。
在图10所示操作面板点击“Loadleftandrightcalibrationfiles”键,在Matlab的命令窗口输入左摄像机的标定结果文件名和右摄像机的标定结果文件名,则在命令窗口显示下述内容:
Intrinsicparametersofleftcamera:
FocalLength:
fc_left=[]±[]
Principalpoint:
cc_left=[]±[]
Skew:
alpha_c_left=[]±[]=>angleofpixelaxes=±degrees
Distortion:
kc_left=[]±[]
Intrinsicparametersofrightcamera:
FocalLength:
fc_right=[]±[]
Principalpoint:
cc_right=[]±[]
Skew:
alpha_c_right=[]±[]=>angleofpixelaxes=±degrees
Distortion:
kc_right=[]±[]
Extrinsicparameters(positionofrightcamerawrtleftcamera):
Rotationvector:
om=[]
Translationvector:
T=[]
显示的结果中,fc_left是左摄像机的放大系数,即焦距归一化成像平面上的成像点坐标到图像坐标的放大系数。
cc_left为左摄像机的主点坐标,单位为像素。
alpha_c_left是对应于左摄像机的实际y轴与理想y轴之间的夹角,单位为弧度,默认值为0弧度。
kc_left为左摄像机的畸变系数。
fc_right是右摄像机的放大系数,即焦距归一化成像平面上的成像点坐标到图像坐标的放大系数。
cc_right为右摄像机的主点坐标,单位为像素。
alpha_c_right是对应于右摄像机的实际y轴与理想y轴之间的夹角,单位为弧度,默认为0弧度。
kc_right为右摄像机的畸变系数。
om为左摄像机相对于右摄像机的姿态矩阵的rodrigues旋转向量,利用函数rodrigues可以转换为姿态矩阵。
T为左摄像机相对于右摄像机的位移向量,即左摄像机坐标系原点在右摄像机坐标系中的位移向量,单位mm。
rodrigues(om)=[
]
(2)“Runstereocalibration”键:
计算优化后的外参数。
在图10所示操作面板点击“Runstereocalibration”键,则在Matlab的命令窗口输出左、右摄像机的内参数和优化后的外参数。
输出结果如下所示:
Intrinsicparametersofleftcamera:
FocalLength:
fc_left=[]±[]
Principalpoint:
cc_left=[]±[]
Skew:
alpha_c_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 摄像机 标定 工具箱 使用说明