Click on 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) = 100 Size dY of each square along the Y direction ([]=30mm) = 100 Corner extraction...
外参数标定结果如下:
Translation vector: Tc_ext = [ -531.674715 400.142025 1999.135937 ] Rotation vector: omc_ext = [ 2.258838 -0.002845 0.157413 ] Rotation matrix: Rc_ext = [ 0.992075 -0.055515 0.112716 0.051405 -0.639246 -0.767282 0.114649 0.766996 -0.631327 ] Pixel error: err = [ 0.14406 0.10000 ] 在外参数标定结果中,Tc_ext为靶标坐标系原点在摄像机坐标系中的位移向量,单位为mm;omc_ext为对应于姿态矩阵的rodrigues旋转向量;Rc_ext为旋转矩阵;err为将网格角点反投影到图像空间的误差的标准方差,单位为像素。
1.1.5 立体视觉标定
在进行立体视觉标定之前,按照1.1.2节方法分别标定立体视觉系统的左、右摄像机的内参数。左摄像机采集的图像与右摄像机采集的图像分别命名,左摄像机采集的图像命名为left1~left14,右摄像机采集的图像命名为right1~right14。左摄像机内参数的标定结果保存后的Calib_results.mat文件重命名为Calib_Results_left.mat,右摄像机的标定结果保存后的Calib_results.mat文件重命名为Calib_Results_right.mat。
在Matlab命令窗口运行stereo_gui指令,弹出图10所示立体视觉标定工具箱窗口。
图10 立体视觉标定工具箱操作面板
图10所示的标定工具箱操作面板具有8个操作命令键,其功能如下:
(1) “Load left and right calibration files”键:读入左、右摄像机的标定结果,并对左摄像机相对于右摄像机的位姿进行初步标定。
在图10所示操作面板点击“Load left and right calibration files”键,在Matlab的命令窗口输入左摄像机的标定结果文件名和右摄像机的标定结果文件名,则在命令窗口显示下述内容:
Intrinsic 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 degrees Distortion: kc_left = [ -0.28947 0.10326 0.00103 -0.00029 0.00000 ] ±[ 0.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 ]
9
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 degrees Distortion: 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是左摄像机的放大系数,即焦距归一化成像平面上的成像点坐标到图像坐标的放大系数。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) = [0.999983631582173 0.003519746065755 0.004510870798495
-0.003489484865457 0.999971473651176 -0.006698908811843 -0.004534320577757 0.006683058545923 0.999967387800907]
(2) “Run stereo calibration”键:计算优化后的外参数。 在图10所示操作面板点击“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 = 90.00000 ?0.00000 degrees Distortion: 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: alpha_c_right = [0.00000] ±[ 0.00000] => angle of pixel axes = 90.00000 +0.00000 degrees Distortion: 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的命令窗口显示左、右摄像机的内参数和优化后的外参数。
(5) “Save stereo calib results”键:将标定结果保存为文件Calib_Results_stereo.mat,存放于toolbox_calib目录中。
10
(6) “Load stereo calib results”键:读入标定结果。从存放于toolbox_calib目录中的标定结果文件Calib_Results_stereo.mat读入。
(7) “Rectify the calibration images”键:按照畸变系数对左、右摄像机采集的所有靶标图像进行处理,生成消除畸变后的图像并保存在toolbox_calib目录中。生成的消除畸变后的图像,以原图像的文件名在基本名和编号之间插入_rectified作为其文件名。
(8) “Exit”键:退出立体视觉标定。
Extrinsic parameters100500-50-100-150-1001781235491114132106ZLeft CameraZXRight CameraXYY01002000100300400500200
图11 靶标相对于摄像机的位姿
1.1.6 标定注意事项
在采用Matlab工具箱的摄像机标定中,内参数标定是进行其它参数标定的基础。首先需要完成内参数标定,才能进行外参数标定或者立体视觉标定、手眼标定等。因此,内参数标定过程中需要注意的问题,在其它所有的标定中都应注意。
(1) 内参数标定需要注意的问题
? 制作棋盘格靶标时应特别注意,黑色方格与白色方格尺寸需要相同,而且所有方格
的尺寸必须严格一致。靶标的方格数量不宜太小,行数和列数以大于10为宜。方格的尺寸不宜太大或太小,采集的整幅靶标图像中方格的边长尺寸不小于20像素。 ? 采集靶标图像时应特别注意,需要在不同的角度不同的位置采集靶标的多幅图像。
采集到的图像必须清晰,靶标图像尺寸以占整幅图像尺寸的1/3~3/4为宜。靶标图像最好在整幅图像的不同位置都有分布,不宜过于集中于同一区域。靶标放置位置与摄像机之间的距离最好为视觉系统的主要工作距离。靶标相对于摄像机的角度应有较大范围的变化,应包含绕三个轴较大角度的旋转,最好不小于30度。采集的靶标图像数量不应太少,建议以10~20幅靶标图像为宜。
? 采集图像过程中,摄像机的焦距不能调整。因为焦距属于摄像机的内参数,不同焦
距下采集的图像隐含了不同的内参数,这些图像放在一起进行标定不能得到正确的结果。
? 采集的靶标图像统一命名,由基本名和编号构成,如Image1~Image15。靶标图像
的数据格式必须相同。
? 将靶标图像拷贝到toolbox_calib目录中。 ? 提取角点时,在图形窗口利用鼠标点击设定棋盘格靶标的选定区域。点击的第一个
角点作为靶标坐标系的原点,顺序点击4个角点形成四边形。相邻两次点击的角点
11
应在同一条网格线上,使得所形成的四边形的边应与棋盘格靶标的网格线基本平行。为提高点击的角点的精度,建议将显示靶标图像的图像窗口放大到最大,利用鼠标的十字标线尽可能准确的点击4个角点。
? 摄像机的实际y轴与理想y轴之间的夹角?c是否标定,由est_alpha标志位设定。
est_alpha=1时对alpha_c进行标定,est_alpha=0时不对alpha_c进行标定。
? 数组est_dist(1:5)是畸变系数kc(1:5)是否标定的标志,只对标志取值为1的畸变系
数标定,标志取值为0的畸变系数不标定。默认值为est_dist(1:5)=[1 1 1 1 0],即对畸变系数kc1~kc4进行标定,对kc5不进行标定,kc5=0。 ? 运行calib_gui指令后,Matlab处于busy状态,Matlab命令窗口不再响应其它命令。
只有在点击标定工具箱的“Exit”键退出标定后,Matlab命令窗口才能恢复响应其它命令。 (2) 外参数标定需要注意的问题 ? 方格尺寸必须输入实际尺寸。 ? 提取角点时,在图形窗口利用鼠标点击的第一个角点作为靶标坐标系的原点,得到
的外参数是靶标坐标系在摄像机坐标系中的位姿。
? rodrigues旋转向量omc_ext与姿态矩阵Rc_ext可以利用rodrigues函数进行转换。
omc_ext=rodrigues(Rc_ext),Rc_ext=rodrigues(omc_ext)。 (3) 立体视觉标定需要注意的问题 ? 提取角点时,在图形窗口利用鼠标点击的第一个角点作为靶标坐标系的原点,左右
摄像机对应的靶标图像对需要选择相同的第一个角点作为原点。其他的3个角点在左右摄像机的靶标图像中也应相同。 ? 左右摄像机采集的图像数量必须相同。相同的编号的左右摄像机采集的图像是靶标
在同一位姿时左右摄像机采集的图像,构成一组立体视觉的靶标图像对。 ? 得到的外参数是左摄像机相对于右摄像机的位姿,即左摄像机坐标系在右摄像机坐
标系中的位姿。
? 运行stereo_gui指令后,Matlab命令窗口可以响应其它命令。
(4) 手眼标定(Eye-in-Hand)需要注意的问题
? 首先进行摄像机的内参数标定。在摄像机内参数标定时,机器人可以不运动,通过
改变靶标的位置和姿态采集10~20幅靶标图像。角点提取时,不需要具有相同的靶标坐标系原点。
? 然后进行外参数标定。靶标固定不动,较大幅度的改变机器人的位姿,采集5~10
幅靶标图像。角点提取时,对采用的5~10幅靶标图像必须选择相同的靶标坐标系原点,并具有相同的靶标坐标轴方向。得到的外参数为靶标坐标系在摄像机坐标系中的位姿。
? 利用摄像机的内参数、机器人的末端位姿(或工具坐标系位姿)、对应于机器人位姿
的靶标坐标系相对于摄像机坐标系的位姿,计算出摄像机坐标系相对于机器人末端坐标系(或工具坐标系)的位姿。具体计算方法可以利用最小二乘法。
? 机器人的位姿从机器人控制器中读取,一般为6维向量。其姿态部分一般为绕X、
Y、Z轴的旋转角度,对应的3个旋转变换的相乘顺序可以查阅机器人说明书,或者通过特定的末端位姿进行验证。
12