The red crosses should be close to the image corners50100150200250300350400450100200300400500600YOX (a)
Extracted corners50100150Yc (in camera frame)200250300350400450100200300400Xc (in camera frame)500600dYOdX
(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为将网格角点反投影到图像空间的误差的标准方差,单位为像素。在优化后的结果中,不确定性的数值越小,说明标定的精度越高。如果不确定性项的数值与结果值相比所占比例较大,则需要重新标定。
初始化后的标定结果:
Focal Length: fc = [ 673.45516 673.45516 ] Principal point: cc = [ 319.50000 239.50000 ]
5
Skew: lpha_c = [ 0.00000 ] => angle of pixel = 90.00000 degrees
Distortion: kc = [ 0.00000 0.00000 0.00000 0.00000 0.00000 ] 优化后的标定结果:
Focal Length: 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 degrees Distortion: 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.15205 0.12424 ] (4) 显示摄像机与标定靶标之间的关系
完成内参数标定后,在标定工具箱操作面板点击“Show Extrinsic”键,即可在新的图形窗口显示摄像机与标定靶标之间的关系,如图6所示。图6(a)为假设摄像机固定时摄像机与靶标之间的关系,图6(b)为假设靶标固定时摄像机与靶标之间的关系。
Extrinsic parameters (world-centered)Extrinsic parameters (camera-centered)2315005001545Zworld150020002500OcZcXcYc5000500034121000-500-50005001000005001000Xworld-1000-50005001000Yworld
(a) (b)
图6 摄像机坐标系与靶标之间的关系,(a) 摄像机固定,(b) 靶标固定
(5) 误差分析
完成内参数标定后,在标定工具箱操作面板点击“Analyse error”键,即可在新的图形窗口显示出标定使用的所有角点反投影到图像空间的图像坐标误差,如图7所示。在图7所示的图形窗口,利用鼠标移动十字标尺可以选择角点,即可在命令窗口显示出该角点的信息,包括该角点所属图像、索引号、以方格为单位的坐标、图像坐标、反投影后的图像坐标误差、角点提取区域的窗口半宽m和半高n。
选择角点后在命令窗口显示的信息: Selected image: 5
Selected point index: 51
Pattern 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命令窗口出现“Number(s) of image(s) to process ([] = all images) =”时,输入要进行反投影的靶标图像的编号并回车。直接回车表示选用缺省值。选择缺省值式,对用于标定的所有靶标图
6
像进行反投影。选择图像后,在新的图形窗口显示反投影结果,并在命令窗口输出用于标定的所有靶标图像的角点反投影的图像误差的标准方差。Image6反投影的结果如图8所示,其中“+”为角点的图像坐标位置,“o”为角点反投影的图像坐标位置。
点击“Project on image”键后,在命令窗口显示的信息如下: Number(s) of image(s) to show ([] = all images) = 6
Pixel error: err = [0.66512 0.41428] (all active images)
Reprojection error (in pixel) - To exit: right button0.40.30.20.10y-0.1-0.2-0.3-0.4-0.5-0.6-0.4-0.2x00.20.4
图7 反投影到图像空间的角点图像坐标误差
Image 6 - Image points (+) and reprojected grid points (o)50100150200250300350400450100200YOX300400500600 图8 Image6的角点反投影结果
(7) 图像畸变校正
完成内参数标定后,在标定工具箱操作面板点击“Undistort image”键,则按照畸变系数对读入的所有靶标图像进行处理,生成消除畸变后的图像并保存在toolbox_calib目录中。生成的消除畸变后的图像,以原图像的文件名在基本名和编号之间插入_rect作为其文件名。图9所示为Image6的原始图像和消除畸变后的图像。
(8) 增加/删除图像
在标定工具箱操作面板点击“Add/Suppress image”键,在命令窗口输入代表增加图像、删除图像的数字,然后输入图像编号,可以增加/删除标定使用的图像。
(9) 重新提取网格角点
7
完成内参数标定后,在标定工具箱操作面板点击“Recomp. corners”键,在命令窗口输入角点提取区域的窗口半宽m和半高n、输入重新提取网格角点的图像编号、选择冲投影方式后,即可对所选图像重新进行角点提取。重新进行角点提取后,可以再次进行内参数标定。重新提取网格角点时采用了以前的标定结果,经过重新提取网格角点再次标定后,内参数标定精度会有所提高。如果初次角点提取的效果较好,则重新进行网格角点提取的作用不大。
点击“Recomp. corners”键后,在命令窗口显示的信息如下: Re-extraction of the grid corners on the images (after first calibration) Window size for corner finder (wintx and winty): wintx ([] = 5) = winty ([] = 5) = Window size = 11x11
Number(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) 消除畸变后的图像
1.1.4 外参数标定
外参数标定是在内参数已知的前提下进行的。在完成摄像机的内参数标定后,或者在命令窗口输入摄像机的内参数后,可以对棋盘格靶标相对于摄像机的外参数进行标定。在标定工具箱操作面板点击“Comp. Extrinsic”键,在命令窗口输入靶标图像名称和图像格式,再按照1.1.2节(2)中的过程提取角点,可实现靶标相对于摄像机的外参数标定。
外参数标定时,在命令窗口显示的信息如下:
Computation of the extrinsic parameters from an image of a pattern
The intrinsic camera parameters are assumed to be known (previously computed) Image name (full name without extension): Image1
Image format: ([]='r'='ras', 'b'='bmp', 't'='tif', 'p'='pgm', 'j'='jpg', 'm'='ppm') t Extraction of the grid corners on the image
Window size for corner finder (wintx and winty): wintx ([] = 5) = winty ([] = 5) = Window size = 11x11
8