1、1摄像机标定工具箱1.1 Matlab 摄像机标定工具箱工具箱下载:http:/www.vision.caltech.edu/bouguetj/calib_doc/download/index.html说明文档:http:/www.vision.caltech.edu/bouguetj/calib_doc/安装:将下载的工具箱文件 toolbox_calib.zip 解压缩,将目录 toolbox_calib 拷贝到Matlab 的目录下。采集图像:采集的图像统一命名后,拷贝到 toolbox_calib 目录中。命名规则为基本名和编号,基本名在前,后面直接跟着数字编号。编号最多为 3 位十进
2、制数字。1.1.1 标定模型内参数标定采用的模型如式(1-1)所示,Brown 畸变模型式(1-2)所示。(1-1) 1/101cincysx yxMzxvkuvu式中:(u, v)是特征点的图像坐标,( xc, yc, zc)是特征点在摄像机坐标系的坐标,k x、k y 是焦距归一化成像平面上的成像点坐标到图像坐标的放大系数,k s 是对应于图像坐标 u、v 的摄像机的 x、y 轴之间不垂直带来的耦合放大系数,(u 0, v0)是光轴中心点的图像坐标即主点坐标,(x c1, yc1)是焦距归一化成像平面上的成像点坐标。k s=ckx, c 是摄像机的实际 y 轴与理想 y 轴之间的夹角,单位
3、为弧度。(1-2) 14213654211 2)()( )(ccccccdc yrkrr式中:(x c1d, yc1d)是焦距归一化成像平面上的成像点畸变后的坐标,k c1 是 2 阶径向畸变系数,kc2 是 4 阶径向畸变系数,k c5 是 6 阶径向畸变系数,k c3、k c4 是切向畸变系数,r 为成像点到摄像机坐标系原点的距离,r 2= xc12 + yc12。1.1.2 操作界面将 Matlab 的当前目录设定为含有标定工具箱的目录,即 toolbox_calib 目录。在 Matlab命令窗口运行 calib_gui 指令,弹出图 1 所示选择窗口。图 1 内存使用方式窗口图 1
4、窗口中,具有两个选项,分别是“Standard”和“Memory efficient”。如果点击选择“Standard” ,则将目录中的所有图像读入内存中,所需内存较大。如果点击选择“Memory efficient”,则将目录中的图像按照需要每次一幅图像读入内存中,所需内存较小。2在选择了内存使用方式后,弹出标定工具箱操作面板。图 2 是选择“Standard”后弹出的标定工具箱操作面板。图 2 标定工具箱操作面板图 2 所示的标定工具箱操作面板具有 16 个操作命令键,其功能如下:(1) “Image names”键:指定图像的基本名 (Basename)和图像格式,并将相应的图像读入内存
5、。(2) “Read names”键:将指定基本名和格式的图像读入内存。(3) “Extract grid corners”键:提取网格角点。(4) “Calibration”键:内参数标定。(5) “Show Extrinsic”键:以图形方式显示摄像机与标定靶标之间的关系。(6) “Project on images”键:按照摄像机的内参数以及摄像机的外参数(即靶标坐标系相对于摄像机坐标系的变换关系),根据网格点的笛卡尔空间坐标,将网格角点反投影到图像空间。(7) “Analyse error”键:图像空间的误差分析(8) “Recomp. corners”键:重新提取网格角点。(9) “
6、Add/Suppress images”键:增加/删除图像。(10) “Save”键:保存标定结果。将内参数标定结果以及摄像机与靶标之间的外参数保存为 m 文件 Calib_results.m,存放于 toolbox_calib 目录中。(11) “Load”键:读入标定结果。从存放于 toolbox_calib 目录中的标定结果文件Calib_results.mat 读入。(12) “Exit”键:退出标定。(13) “Comp. Extrinsic”键:计算外参数。(14) “Undistort image”键:生成消除畸变后的图像并保存。(15) “Export calib data”键
7、:输出标定数据。分别以靶标坐标系中的平面坐标和图像中的图像坐标,将每一幅靶标图像的角点保存为两个 tex 文件。(16) “Show calib results”键:显示标定结果。1.1.3 内参数标定预先将命名为 Image1Image20 的 tif 格式的 20 幅靶标图像保存在 toolbox_calib 目录中。当然,采集的靶标图像也可以采用不同的格式,如 bmp 格式、jpg 格式等。但应注意,用于标定的靶标图像需要采用相同的图像格式。摄像机的内参数标定过程,如下所述。(1) 指定图像基本名与图像格式在图 2 所示的标定工具箱操作面板点击“Image names”键,在 Matla
8、b 命令窗口分别输入基本名 Image 和图像格式 t,出现下述对话内容:Basename camera calibration images (without number nor suffix): ImageImage format: (=r=ras, b=bmp, t=tif, p=pgm, j=jpg, m=ppm) tLoading image 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.done同时,在 Matlab 的图形窗口显示出 20 幅靶标图像,如图 3 所示。3Calibration images图 3 靶标图像(
9、2) 提取角点在图 2 所示的标定工具箱操作面板点击“Extract grid corners”键。 在 Matlab 命令窗口出现“Number(s) of image(s) to process ( = all images) =”时,输入要进行角点提取的靶标图像的编号并回车。直接回车表示选用缺省值。选择缺省值式,对读入的所有的靶标图像进行角点提取。 在 Matlab 命令窗口出现“Window size for corner finder (wintx and winty): ”时,分别在“wintx ( = 5) =”和“ winty ( = 5) =”输入行中输入角点提取区域的窗口半
10、宽 m 和半高 n。m 和 n 为正整数,单位为像素,缺省值为 5 个像素。选定 m 和 n后,命令窗口显示角点提取区域的窗口尺寸(2n+1)x(2m+1)。例如,选择缺省时角点提取区域的窗口尺寸为 11x11 像素。 在 Matlab 命令窗口出现“Do you want to use the automatic square counting mechanism (0=default) or do you always want to enter the number of squares manually (1,other)? ”时,选择缺省值 0 表示自动计算棋盘格靶标选定区域内的方格
11、行数和列数,选择值 1 表示人工计算并输入棋盘格靶标选定区域内的方格行数和列数。 到显示所选择靶标图像的图形窗口,利用鼠标点击设定棋盘格靶标的选定区域。点击的第一个角点作为靶标坐标系的原点,顺序点击 4 个角点形成四边形。注意,所形成的四边形的边应与棋盘格靶标的网格线基本平行。否则,影响角点提取精度,甚至导致角点提取错误。 在 Matlab 命令窗口出现“Size dX of each square along the X direction (=100mm) = ”和“Size dY of each square along the Y direction (=100mm) = ”时,分别输
12、入方格长度和宽度,单位为 mm。方格长度和宽度的缺省值均为 100mm。 在 Matlab 命令窗口出现“Need of an initial guess for distortion? (=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 时,
13、角点提取区域的窗口尺寸为 11x11 像素,未输入畸变初始值,此时图像 Image6 的角点提取结果如图 4 所示。图 4(a)只标出了待提取角点的位置,图 4(b)标出了角点提取区域窗口和4提取出的角点。从图 4 中可以发现,图 4(a)中的十字标记位置与角点具有明显偏差,但在角点附近;图 4(b)中的每个角点提取区域窗口包含了角点,表示角点提取结果的十字标记位置与角点位置具有很好的吻合度。同样在 m=5,n=5 时,未输入畸变初始值,但通过鼠标点击设定棋盘格靶标的选定区域时,所形成的四边形的边与棋盘格靶标的网格线成较大夹角,此时图像 Image1 的角点提取结果如图 5 所示。从图 5 中
14、可以发现,图 5(a)中的十字标记位置与角点具有明显偏差,部分十字标记远离角点;图 5(b)中的很多角点提取区域窗口没有包含角点,表示角点提取结果的十字标记位置并不在角点位置,说明角点提取存在错误。XYOThe red crosses should be close to the image corners100 200 300 400 500 60050100150200250300350400450(a)OdXdYXc (in camera frame)Yc (in camera frame)Extracted corners100 200 300 400 500 600501001502
15、00250300350400450(b)图 4 合适的靶标选定区域与角点提取结果,(a) 靶标选定区域,(b) 角点提取结果(3) 内参数标定对用于标定的每一幅靶标图像进行角点提取后,在图 2 所示的标定工具箱操作面板点击“Calibration ”键,即可完成摄像机的内参数标定。内参数标定时,Matlab 工具箱首先进行初始化,即将图像中心点坐标作为主点坐标的初始值,采用平面靶标网格的消失点估计出摄像机的内参数作为内参数的初始值,畸变初始值设为 0。镜头畸变采用包括径向畸变和切向畸变的 Brown 畸变模型,并假设 6 阶径向畸变系数 kc(5)=0。假设摄像机的 x 轴与 y 轴严格垂直,
16、即图像坐标 (u, v)与归一化成像平面内的成像点坐标(x c1, yc1)解耦,k s=0,内参数采用 4 参数模型。数组 est_dist(1:5)是畸变系数5kc(1:5)是否标定的标志,只对标志取值为 1 的畸变系数标定,标志取值为 0 的畸变系数不标定。XYOThe red crosses should be close to the image corners100 200 300 400 500 60050100150200250300350400450(a)OdXdYXc (in camera frame)Yc (in camera frame)Extracted corner
17、s100 200 300 400 500 60050100150200250300350400450(b)图 5 错误的靶标选定区域与角点提取结果,(a) 靶标选定区域,(b) 角点提取结果内参数标定给出初始化后的标定结果和优化后的标定结果。其中,对内参数的优化采用 L-M 梯度下降法。优化后的结果中给出的参数不确定性,是 3 倍的标准方差。fc 中的两个数据分别是 kx 和 ky,即焦距归一化成像平面上的成像点坐标到图像坐标的放大系数。cc为光轴中心点的图像坐标(u 0, v0),又称为主点坐标,单位为像素。 alpha_c 是对应于图像坐标 v 的摄像机的实际 y 轴与理想 y 轴之间的夹
18、角 c,单位为弧度,默认值为 0 弧度。后续给出的图像轴之间的夹角为对应于图像坐标 u、v 的摄像机的 x、y 轴之间的夹角,默认值为 90。 est_alpha 是 alpha_c 是否标定的标志位,只有 est_alpha=1 时对 alpha_c 进行标定。kc 为畸变系数 kc1kc5,kc(1) 为二阶径向畸变系数 kc1,kc(2)为 4 阶径向畸变系数 kc2,kc(5)为 6 阶径向畸变系数 kc5,kc(3) 为图像坐标 u 对应于 xy 项的切向畸变系数 kc3,kc(4)为图像坐标 v 对应于 xy 项的切向畸变系数 kc4。err 为将网格角点反投影到图像空间的误差的标
19、准方差,单位为像素。在优化后的结果中,不确定性的数值越小,说明标定的精度越高。如果不确定性项的数值与结果值相比所占比例较大,则需要重新标定。初始化后的标定结果:6Focal Length: fc = 673.45516 673.45516 Principal point: cc = 319.50000 239.50000 Skew: lpha_c = 0.00000 = angle of pixel = 90.00000 degreesDistortion: kc = 0.00000 0.00000 0.00000 0.00000 0.00000 优化后的标定结果:Focal Length:
20、fc = 657.80887 658.51372 1.86106 1.34683 Principal point: cc = 302.95191 248.06759 1.88046 2.85817 Skew: alpha_c = 0.00000 0.00000 = angle of pixel axes = 90.00000 0.00000 degreesDistortion: kc = -0.25853 0.14834 0.00074 -0.00030 0.00000 0.00784 0.03727 0.00085 0.00042 0.00000 Pixel error: err = 0.1
21、5205 0.12424 (4) 显示摄像机与标定靶标之间的关系完成内参数标定后,在标定工具箱操作面板点击“Show Extrinsic”键,即可在新的图形窗口显示摄像机与标定靶标之间的关系,如图 6 所示。图 6(a)为假设摄像机固定时摄像机与靶标之间的关系,图 6(b)为假设靶标固定时摄像机与靶标之间的关系。-500 0 5000 500 100015002000 2500-5000500Extrinsic parameters (camera-centered)42135XcZcYcOc0 5001000 -1000-500 0500 1000050010001500YworldExtr
22、insic parameters (world-centered)432Xworld15Zworld(a) (b)图 6 摄像机坐标系与靶标之间的关系,(a) 摄像机固定,(b) 靶标固定(5) 误差分析完成内参数标定后,在标定工具箱操作面板点击“Analyse error”键,即可在新的图形窗口显示出标定使用的所有角点反投影到图像空间的图像坐标误差,如图 7 所示。在图 7所示的图形窗口,利用鼠标移动十字标尺可以选择角点,即可在命令窗口显示出该角点的信息,包括该角点所属图像、索引号、以方格为单位的坐标、图像坐标、反投影后的图像坐标误差、角点提取区域的窗口半宽 m 和半高 n。选择角点后在命令
23、窗口显示的信息:Selected image: 5Selected point index: 51Pattern coordinates (in units of (dX, dY): (X,Y)=(11, 8)Image coordinates (in pixel): (426.32, 261.58)Pixel error = (-0.05908, 0.17309)Window size: (wintx,winty) = (6, 6)(6) 反投影到图像空间完成内参数标定后,在标定工具箱操作面板点击“Project on image”键,在 Matlab 命7令窗口出现“Number(s) o
24、f image(s) to process ( = all images) =”时,输入要进行反投影的靶标图像的编号并回车。直接回车表示选用缺省值。选择缺省值式,对用于标定的所有靶标图像进行反投影。选择图像后,在新的图形窗口显示反投影结果,并在命令窗口输出用于标定的所有靶标图像的角点反投影的图像误差的标准方差。Image6 反投影的结果如图 8所示,其中“+”为角点的图像坐标位置, “o”为角点反投影的图像坐标位置。点击“Project on image”键后,在命令窗口显示的信息如下:Number(s) of image(s) to show ( = all images) = 6Pixel
25、 error: err = 0.66512 0.41428 (all active images)-0.6 -0.4 -0.2 0 0.2 0.4-0.5-0.4-0.3-0.2-0.100.10.20.30.4 Reprojection error (in pixel) - To exit: right buttonxy图 7 反投影到图像空间的角点图像坐标误差XYOImage 6 - Image points (+) and reprojected grid points (o)100 200 300 400 500 60050100150200250300350400450图 8 Ima
26、ge6 的角点反投影结果(7) 图像畸变校正完成内参数标定后,在标定工具箱操作面板点击“Undistort image”键,则按照畸变系数对读入的所有靶标图像进行处理,生成消除畸变后的图像并保存在 toolbox_calib 目录中。生成的消除畸变后的图像,以原图像的文件名在基本名和编号之间插入_rect 作为其文件名。图 9 所示为 Image6 的原始图像和消除畸变后的图像。(8) 增加/删除图像在标定工具箱操作面板点击“Add/Suppress image”键,在命令窗口输入代表增加图像、8删除图像的数字,然后输入图像编号,可以增加/删除标定使用的图像。(9) 重新提取网格角点完成内参数
27、标定后,在标定工具箱操作面板点击“Recomp. corners”键,在命令窗口输入角点提取区域的窗口半宽 m 和半高 n、输入重新提取网格角点的图像编号、选择冲投影方式后,即可对所选图像重新进行角点提取。重新进行角点提取后,可以再次进行内参数标定。重新提取网格角点时采用了以前的标定结果,经过重新提取网格角点再次标定后,内参数标定精度会有所提高。如果初次角点提取的效果较好,则重新进行网格角点提取的作用不大。点击“Recomp. corners”键后,在命令窗口显示的信息如下:Re-extraction of the grid corners on the images (after first
28、 calibration)Window size for corner finder (wintx and winty):wintx ( = 5) = winty ( = 5) = Window size = 11x11Number(s) of image(s) to process ( = all images) = Use the projection of 3D grid or manual click (=auto, other=manual): Processing image 1.2.3.4.5.done(a) (b)图 9 原始图像和校正后图像,(a) 原始图像 (b) 消除畸变
29、后的图像1.1.4 外参数标定外参数标定是在内参数已知的前提下进行的。在完成摄像机的内参数标定后,或者在命令窗口输入摄像机的内参数后,可以对棋盘格靶标相对于摄像机的外参数进行标定。在标定工具箱操作面板点击“Comp. Extrinsic”键,在命令窗口输入靶标图像名称和图像格式,再按照 1.1.2 节(2)中的过程提取角点,可实现靶标相对于摄像机的外参数标定。外参数标定时,在命令窗口显示的信息如下:Computation of the extrinsic parameters from an image of a patternThe intrinsic camera parameters a
30、re assumed to be known (previously computed)Image name (full name without extension): Image1Image format: (=r=ras, b=bmp, t=tif, p=pgm, j=jpg, m=ppm) tExtraction of the grid corners on the imageWindow size for corner finder (wintx and winty):9wintx ( = 5) = winty ( = 5) = Window size = 11x11Click on
31、 the four extreme corners of the rectangular complete pattern (the first clicked corner is the origin).Size dX of each square along the X direction (=30mm) = 100Size dY of each square along the Y direction (=30mm) = 100Corner extraction.外参数标定结果如下:Translation vector: Tc_ext = -531.674715 400.142025 1
32、999.135937 Rotation vector: omc_ext = 2.258838 -0.002845 0.157413 Rotation matrix: Rc_ext = 0.992075 -0.055515 0.1127160.051405 -0.639246 -0.7672820.114649 0.766996 -0.631327 Pixel error: err = 0.14406 0.10000 在外参数标定结果中,Tc_ext 为靶标坐标系原点在摄像机坐标系中的位移向量,单位为 mm;omc_ext 为对应于姿态矩阵的 rodrigues 旋转向量;Rc_ext 为旋转矩
33、阵;err 为将网格角点反投影到图像空间的误差的标准方差,单位为像素。1.1.5 立体视觉标定在进行立体视觉标定之前,按照 1.1.2 节方法分别标定立体视觉系统的左、右摄像机的内参数。左摄像机采集的图像与右摄像机采集的图像分别命名,左摄像机采集的图像命名为 left1left14,右摄像机采集的图像命名为 right1right14。左摄像机内参数的标定结果保存后的 Calib_results.mat 文件重命名为 Calib_Results_left.mat,右摄像机的标定结果保存后的 Calib_results.mat 文件重命名为 Calib_Results_right.mat。在 M
34、atlab 命令窗口运行 stereo_gui 指令,弹出图 10 所示立体视觉标定工具箱窗口。图 10 立体视觉标定工具箱操作面板图 10 所示的标定工具箱操作面板具有 8 个操作命令键,其功能如下:(1) “Load left and right calibration files”键:读入左、右摄像机的标定结果,并对左摄像机相对于右摄像机的位姿进行初步标定。在图 10 所示操作面板点击“Load left and right calibration files”键,在 Matlab 的命令窗口输入左摄像机的标定结果文件名和右摄像机的标定结果文件名,则在命令窗口显示下述内容:Intrins
35、ic parameters of left camera:Focal Length: fc_left = 533.00371 533.15260 1.07629 1.10913 Principal point: cc_left = 341.58612 234.25940 1.24041 1.33065 Skew: alpha_c_left =0.00000 0.00000 = angle of pixel axes = 90.00000 0.00000 degreesDistortion: kc_left = -0.28947 0.10326 0.00103 -0.00029 0.00000
36、100.00596 0.02055 0.00030 0.00037 0.00000 Intrinsic parameters of right camera:Focal Length: fc_right = 536.98262 536.56938 1.19786 1.15677 Principal point: cc_right = 326.47209 249.33257 1.36588 1.34252 Skew: alpha_c_right = 0.00000 0.00000 = angle of pixel axes = 90.00000 0.00000 degreesDistortion
37、: kc_right = -0.28936 0.10677 -0.00078 0.00020 0.00000 0.00488 0.00866 0.00027 0.00062 0.00000 Extrinsic parameters (position of right camera wrt left camera):Rotation vector: om = 0.00611 0.00409 -0.00359 Translation vector: T = -99.84929 0.82221 0.43647 显示的结果中,fc_left 是左摄像机的放大系数, 即焦距归一化成像平面上的成像点坐标
38、到图像坐标的放大系数。cc_left 为左摄像机的主点坐标,单位为像素。alpha_c _left 是对应于左摄像机的实际 y 轴与理想 y 轴之间的夹角,单位为弧度,默认值为 0 弧度。kc_left为左摄像机的畸变系数。fc_right 是右摄像机的放大系数,即焦距归一化成像平面上的成像点坐标到图像坐标的放大系数。cc_right 为右摄像机的主点坐标,单位为像素。alpha_c_right 是对应于 右摄像机的实际 y 轴与理想 y 轴之间的夹角,单位为弧度,默认为0 弧度。kc_right 为右摄像机的畸变系数。om 为左摄像机相对于右摄像机的 姿态矩阵的rodrigues 旋转向量,
39、利用函数 rodrigues 可以转换为姿态矩阵。T 为左摄像机相对于右摄像机的位移向量,即左摄像机坐标系原点在右摄像机坐标系中的位移向量,单位 mm。rodrigues(om) = 0.999983631582173 0.003519746065755 0.004510870798495-0.003489484865457 0.999971473651176 -0.006698908811843-0.004534320577757 0.006683058545923 0.999967387800907(2) “Run stereo calibration”键:计算优化后的外参数。在图 10
40、所示操作面板点击“Run stereo calibration”键,则 在 Matlab 的命令窗口输出左、右摄像机的内参数和优化后的外参数。输出结果如下所示:Intrinsic parameters of left camera:Focal Length: fc_left = 533.52331 533.52700 0.83147 0.84055 Principal point: cc_left = 341.60377 235.19287 1.23937 1.20470 Skew: alpha_c_left = 0.00000 0.00000 = angle of pixel axes =
41、90.00000 ?0.00000 degreesDistortion: kc_left = -0.28838 0.09714 0.00109 -0.00030 0.00000 0.00621 0.02155 0.00028 0.00034 0.00000 Intrinsic parameters of right camera:Focal Length: fc_right = 536.81376 536.47649 0.87631 0.86541 Principal point: cc_right = 326.28655 250.10121 1.31444 1.16609 Skew: alp
42、ha_c_right = 0.00000 0.00000 = angle of pixel axes = 90.00000 +0.00000 degreesDistortion: kc_right = -0.28943 0.10690 -0.00059 0.00014 0.00000 0.00486 0.00883 0.00022 0.00055 0.00000 Extrinsic parameters (position of right camera wrt left camera):Rotation vector: om = 0.00669 0.00452 -0.00350 0.00270 0.00308 0.00029 Translation vector: T = -99.80198 1.12443 0.05041 0.14200 0.11352 0.49773 (3) “Show Extrinsics of stereo rig”键:显示靶标相对于摄像机的位姿,如图 11 所示。(4) “Show Intrinsic parameters”键:在 Matlab 的命令窗口显示左、右摄像机的内参数