当前位置:文档之家› Matlab摄像机标定工具箱的使用说明

Matlab摄像机标定工具箱的使用说明

Matlab摄像机标定工具箱的使用说明
Matlab摄像机标定工具箱的使用说明

摄像机标定工具箱

Matlab 摄像机标定工具箱

工具箱下载:说明文档:安装:将下载的工具箱文件解压缩,将目录toolbox_calib 拷贝到Matlab 的目录下。

采集图像:采集的图像统一命名后,拷贝到toolbox_calib 目录中。命名规则为基本名和编号,基本名在前,后面直接跟着数字编号。编号最多为3位十进制数字。

1.1.1 标定模型

内参数标定采用的模型如式(1-1)所示,Brown 畸变模型式(1-2)所示。

????

??????=????????????????????=??????????11//100011100c c in c c c c y

s x y x M z y z x v k u k k v u (1-1) 式中:(u , v )是特征点的图像坐标,(x c , y c , z c )是特征点在摄像机坐标系的坐标,k x 、k y 是焦距归一化成像平面上的成像点坐标到图像坐标的放大系数,k s 是对应于图像坐标u 、v 的摄像机的x 、y 轴之间不垂直带来的耦合放大系数,(u 0, v 0)是光轴中心点的图像坐标即主点坐标,(x c 1, y c 1)是焦距归一化成像平面上的成像点坐标。k s =

c k x ,c 是摄像机的实际y

轴与理想y 轴之间的夹角,单位为弧度。

?????++++++=++++++=1142123654221112124113654221112)2()1()2(2)1(c c c c c c c c c d c c c c c c c c c c d c y x k y r k r k r k r k y y x r k y x k r k r k r k x x (1-2) 式中:(x c 1d , y c 1d )是焦距归一化成像平面上的成像点畸变后的坐标,k c 1是2阶径向畸变系数,k c 2是4阶径向畸变系数,k c 5是6阶径向畸变系数,k c 3、k c 4是切向畸变系数,r 为成像点到摄像机坐标系原点的距离,r 2= x c 12 + y c 12

。 1.1.2 操作界面

将Matlab 的当前目录设定为含有标定工具箱的目录,即toolbox_calib 目录。在Matlab

命令窗口运行calib_gui指令,弹出图1所示选择窗口。

图1 内存使用方式窗口

图1窗口中,具有两个选项,分别是“Standard”和“Memory efficient”。如果点击选择“Standard”,则将目录中的所有图像读入内存中,所需内存较大。如果点击选择“Memory efficient”,则将目录中的图像按照需要每次一幅图像读入内存中,所需内存较小。在选择了内存使用方式后,弹出标定工具箱操作面板。图2是选择“Standard”后弹出的标定工具箱操作面板。

图2 标定工具箱操作面板

图2所示的标定工具箱操作面板具有16个操作命令键,其功能如下:

(1) “Image names”键:指定图像的基本名(Basename)和图像格式,并将相应的图像读入内存。

(2) “Read names”键:将指定基本名和格式的图像读入内存。

(3) “Extract grid corners”键:提取网格角点。

(4) “Calibration”键:内参数标定。

(5) “Show Extrinsic”键:以图形方式显示摄像机与标定靶标之间的关系。

(6) “Project on images”键:按照摄像机的内参数以及摄像机的外参数(即靶标坐标系相对于摄像机坐标系的变换关系),根据网格点的笛卡尔空间坐标,将网格角点反投影到图像空间。

(7) “Analyse error”键:图像空间的误差分析

(8) “Recomp. corners”键:重新提取网格角点。

(9) “Add/Suppress images”键:增加/删除图像。

(10) “Save”键:保存标定结果。将内参数标定结果以及摄像机与靶标之间的外参数保存为m文件,存放于toolbox_calib目录中。

(11) “Load”键:读入标定结果。从存放于toolbox_calib目录中的标定结果文件读入。

(12) “Exit”键:退出标定。

(13) “Comp. Extrinsic”键:计算外参数。

(14) “Undistort image”键:生成消除畸变后的图像并保存。

(15) “Export calib data”键:输出标定数据。分别以靶标坐标系中的平面坐标和图像中的图像坐标,将每一幅靶标图像的角点保存为两个tex文件。

(16) “Show calib results”键:显示标定结果。

1.1.3 内参数标定

预先将命名为Image1~Image20的tif格式的20幅靶标图像保存在toolbox_calib目录中。当然,采集的靶标图像也可以采用不同的格式,如bmp格式、jpg格式等。但应注意,用于标定的靶标图像需要采用相同的图像格式。摄像机的内参数标定过程,如下所述。

(1) 指定图像基本名与图像格式

在图2所示的标定工具箱操作面板点击“Image names”键,在Matlab命令窗口分别输入基本名Image和图像格式t,出现下述对话内容:

Basename camera calibration images (without number nor suffix): Image

Image format: ([]='r'='ras', 'b'='bmp', 't'='tif', 'p'='pgm', 'j'='jpg', 'm'='ppm') t

Loading 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所示。

图3 靶标图像

(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) =”输入行中输入角点提取

区域的窗口半宽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表示自动计算棋盘格靶标选定区域内的

方格行数和列数,选择值1表示人工计算并输入棋盘格靶标选定区域内的方格行数

和列数。

到显示所选择靶标图像的图形窗口,利用鼠标点击设定棋盘格靶标的选定区域。点

击的第一个角点作为靶标坐标系的原点,顺序点击4个角点形成四边形。注意,所

形成的四边形的边应与棋盘格靶标的网格线基本平行。否则,影响角点提取精度,

甚至导致角点提取错误。

在Matlab命令窗口出现“Size dX of each square along the X direction ([]=100mm) = ”和“Size dY of each square along the Y direction ([]=100mm) = ”时,

分别输入方格长度和宽度,单位为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时,角点提取区域的窗口尺寸为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)与归一化成像平面内的成像点坐标(x c1, y c1)解耦,k s=0,内参数采用4参数模型。数组est_dist(1:5)是畸变系数kc(1:5)是否标定的标志,只对标志取值为1的畸变系数标定,标志取值为0的畸变系数不标定。

(a)

(b)

图5 错误的靶标选定区域与角点提取结果,(a) 靶标选定区域,(b) 角点提取结果

内参数标定给出初始化后的标定结果和优化后的标定结果。其中,对内参数的优化采用L-M梯度下降法。优化后的结果中给出的参数不确定性,是3倍的标准方差。fc中的两个数据分别是k x和k y,即焦距归一化成像平面上的成像点坐标到图像坐标的放大系数。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 为畸变系数k c1~k c5,kc(1)为二阶径向畸变系数k c1,kc(2)为4阶径向畸变系数k c2,kc(5)为6阶径向畸变系数k c5,kc(3)为图像坐标u对应于xy项的切向畸变系数k c3,kc(4)为图像坐标v对应于xy项的切向畸变系数k c4。err为将网格角点反投影到图像空间的误差的标准方差,单位为像素。在优化后的结果中,不确定性的数值越小,说明标定的精度越高。如果不确定性项的数值与结果值相比所占比例较大,则需要重新标定。

初始化后的标定结果:

Focal Length: fc = [ ]

Principal point: cc = [ ]

Skew: lpha_c = [ ] => angle of pixel = degrees

Distortion: kc = [ ]

优化后的标定结果:

Focal Length: fc = [ ] ±[ ]

Principal point: cc = [ ] ±[ ]

Skew: alpha_c = [ ]±[ ] => angle of pixel axes = ± degrees

Distortion: kc = [ ] ±[ ]

Pixel error: err = [ ]

(4) 显示摄像机与标定靶标之间的关系

完成内参数标定后,在标定工具箱操作面板点击“Show Extrinsic”键,即可在新的图形窗口显示摄像机与标定靶标之间的关系,如图6所示。图6(a)为假设摄像机固定时摄像

机与靶标之间的关系,图6(b)为假设靶标固定时摄像机与靶标之间的关系。

(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): ,

Pixel error = ,

Window size: (wintx,winty) = (6, 6)

(6) 反投影到图像空间

完成内参数标定后,在标定工具箱操作面板点击“Project on image”键,在Matlab 命令窗口出现“Number(s) of image(s) to process ([] = all images) =”时,输入要进行反投影的靶标图像的编号并回车。直接回车表示选用缺省值。选择缺省值式,对用于标定的所有靶标图像进行反投影。选择图像后,在新的图形窗口显示反投影结果,并在命令窗口输出用于标定的所有靶标图像的角点反投影的图像误差的标准方差。Image6反投影的结果如图8所示,其中“+”为角点的图像坐标位置,“o”为角点反投影的图像坐标位置。

点击“Project on image”键后,在命令窗口显示的信息如下:

Number(s) of image(s) to show ([] = all images) = 6

Pixel error: err = [ ] (all active images)

图7 反投影到图像空间的角点图像坐标误差

图8 Image6的角点反投影结果

(7) 图像畸变校正

完成内参数标定后,在标定工具箱操作面板点击“Undistort image”键,则按照畸变系数对读入的所有靶标图像进行处理,生成消除畸变后的图像并保存在toolbox_calib目录中。生成的消除畸变后的图像,以原图像的文件名在基本名和编号之间插入_rect作为其文件名。图9所示为Image6的原始图像和消除畸变后的图像。

(8) 增加/删除图像

在标定工具箱操作面板点击“Add/Suppress image”键,在命令窗口输入代表增加图像、删除图像的数字,然后输入图像编号,可以增加/删除标定使用的图像。

(9) 重新提取网格角点

完成内参数标定后,在标定工具箱操作面板点击“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

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 = [ ]

Rotation vector: omc_ext = [ ]

Rotation matrix: Rc_ext = [

]

Pixel error: 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) “Load left and right calibration files”键:读入左、右摄像机的标定结果,并对左摄像机相对于右摄像机的位姿进行初步标定。

在图10所示操作面板点击“Load left and right calibration files”键,在Matlab 的命令窗口输入左摄像机的标定结果文件名和右摄像机的标定结果文件名,则在命令窗口显示下述内容:

Intrinsic parameters of left camera:

Focal Length: fc_left = [ ] ±[ ]

Principal point: cc_left = [ ] ±[ ]

Skew: alpha_c_left =[] ±[ ] => angle of pixel axes = ± degrees

Distortion: kc_left = [ ] ±[ ]

Intrinsic parameters of right camera:

Focal Length: fc_right = [ ] ±[ ]

Principal point: cc_right = [ ] ±[ ]

Skew: alpha_c_right = [] ±[] => angle of pixel axes = ± degrees

Distortion: kc_right = [ ] ±[ ]

Extrinsic parameters (position of right camera wrt left camera):

Rotation vector: om = [ ]

Translation vector: 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) “Run stereo calibration”键:计算优化后的外参数。

在图10所示操作面板点击“Run stereo calibration”键,则在Matlab的命令窗口输出左、右摄像机的内参数和优化后的外参数。输出结果如下所示:

Intrinsic parameters of left camera:

Focal Length: fc_left = [ ] ±[ ]

Principal point: cc_left = [ ] ±[ ]

Skew: alpha_c_left = [] ±[ ] => angle of pixel axes = ? degrees

Distortion: kc_left = [ ] ±[ ]

Intrinsic parameters of right camera:

Focal Length: fc_right = [ ] ±[ ]

Principal point: cc_right = [ ] ±[ ]

Skew: alpha_c_right = [] ±[ ] => angle of pixel axes = + degrees

Distortion: kc_right = [ ] ±[ ]

Extrinsic parameters (position of right camera wrt left camera):

Rotation vector: om = [ ] ±[ ]

Translation vector: T = [ ] ±[ ]

(3) “Show Extrinsics of stereo rig”键:显示靶标相对于摄像机的位姿,如图11所示。

(4) “Show Intrinsic parameters”键:在Matlab的命令窗口显示左、右摄像机的内参数和优化后的外参数。

(5) “Save stereo calib results”键:将标定结果保存为文件,存放于toolbox_calib 目录中。

(6) “Load stereo calib results”键:读入标定结果。从存放于toolbox_calib目录中的标定结果文件读入。

(7) “Rectify the calibration images”键:按照畸变系数对左、右摄像机采集的所有靶标图像进行处理,生成消除畸变后的图像并保存在toolbox_calib目录中。生成的消除畸变后的图像,以原图像的文件名在基本名和编号之间插入_rectified作为其文件名。

(8) “Exit”键:退出立体视觉标定。

图11 靶标相对于摄像机的位姿

1.1.6 标定注意事项

在采用Matlab工具箱的摄像机标定中,内参数标定是进行其它参数标定的基础。首先需要完成内参数标定,才能进行外参数标定或者立体视觉标定、手眼标定等。因此,内参数标定过程中需要注意的问题,在其它所有的标定中都应注意。

(1) 内参数标定需要注意的问题

制作棋盘格靶标时应特别注意,黑色方格与白色方格尺寸需要相同,而且所有方格

的尺寸必须严格一致。靶标的方格数量不宜太小,行数和列数以大于10为宜。方

格的尺寸不宜太大或太小,采集的整幅靶标图像中方格的边长尺寸不小于20像素。

采集靶标图像时应特别注意,需要在不同的角度不同的位置采集靶标的多幅图像。

采集到的图像必须清晰,靶标图像尺寸以占整幅图像尺寸的1/3~3/4为宜。靶标

图像最好在整幅图像的不同位置都有分布,不宜过于集中于同一区域。靶标放置位

置与摄像机之间的距离最好为视觉系统的主要工作距离。靶标相对于摄像机的角度

应有较大范围的变化,应包含绕三个轴较大角度的旋转,最好不小于30度。采集

的靶标图像数量不应太少,建议以10~20幅靶标图像为宜。

采集图像过程中,摄像机的焦距不能调整。因为焦距属于摄像机的内参数,不同焦

距下采集的图像隐含了不同的内参数,这些图像放在一起进行标定不能得到正确的

结果。

采集的靶标图像统一命名,由基本名和编号构成,如Image1~Image15。靶标图像

的数据格式必须相同。

将靶标图像拷贝到toolbox_calib目录中。

提取角点时,在图形窗口利用鼠标点击设定棋盘格靶标的选定区域。点击的第一个

角点作为靶标坐标系的原点,顺序点击4个角点形成四边形。相邻两次点击的角点

应在同一条网格线上,使得所形成的四边形的边应与棋盘格靶标的网格线基本平

行。为提高点击的角点的精度,建议将显示靶标图像的图像窗口放大到最大,利用鼠标的十字标线尽可能准确的点击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],即对畸变系数k c1~k c4进行标定,对k c5不进行标定,k c5=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个旋转变换的相乘顺序可以查阅机器人说明书,或者通过特定的末端位姿进行验证。

OpenCV 摄像机标定工具箱

OpenCV 网站说明文档:

2.3.2中文网站摄像头标定:摄像头标定

张正友标定算法:本文完整的程序代码(运行环境VS2008+opencv2.3.1):1.2.1 标定模型

OpenCV 内参数标定采用的模型如式(1-3)所示,Brown 畸变模型如式(1-4)所示。

????

??????=????????????????????=??????????11//1000011100c c in c c c c y

x y x M z y z x v k u k v u (1-3) 式中:(u , v )是特征点的图像坐标,(x c , y c , z c )是特征点在摄像机坐标系的坐标,k x 、k y

是焦距归一化成像平面上的成像点坐标到图像坐标的放大系数,(u 0, v 0)是光轴中心点的图像坐标即主点坐标,(x c 1, y c 1)是焦距归一化成像平面上的成像点坐标。k y =ak x ,a 是纵横比系数。

?????++++++='++++++='d d d d d

d d d d d v u p v r p r k r k r k v v u r p v u p r k r k r k u u 222163422122216342212)2()1()2(2)1( (1-4) 式中:(u d , v d )是具有畸变相对于主点的图像坐标,(u d , v d )= (u , v )- (u 0, v 0),(u d , v d )是消除畸变后相对于主点的图像坐标,(u d , v d )= (u , v )- (u 0, v 0),(u , v )是消除畸变后的图像坐标,k 1是2阶径向畸变系数,k 2是4阶径向畸变系数,k 3是6阶径向畸变系数,p 1、p 2是切向畸变系数,r 为图像点到主点的距离,r 2= u d 2 + v d 2

标定结果给出的畸变系数为[k 1, k 2, p 1, p 2, k 3]。由于k 3主要针对与畸变较大的镜头,例如鱼眼镜头,所以一般情况下该值取0。 1.2.2 内参数标定

(1) 首先加载多幅棋盘格靶标图像并设置棋盘格靶标的内角点参数。标定过程中,需要不同视角下拍摄的棋盘格靶标的图像,如图12所示。其中,内角点是指黑色方块相互联通位置的角点,图12所示棋盘格靶标的内角点数量为9×6。

//设置棋盘格X 方向上的角点个数

= 9;

//设置棋盘格Y 方向上的角点个数

= 6;

//设置棋盘格子的边长,单位为mm

float SquareWidth = 30;

//利用cvLoadImage 函数加载图像

chessBoard_Img=cvLoadImage( filename, 1 );

(a) (b)

图12 不同视角下拍摄的棋盘格图像

(2) 对棋盘格靶标图像进行特征点提取。选用cvFindChessboardCorners函数提取一幅靶标图像的角点特征。当一幅靶标图像的角点正确提取后,再调用函数cvFindCornerSubPix 可以进行亚像素图像特征的提取。依次对每一幅靶标图像进行角点特征提取。然后,调用cvDrawChessboardCorners函数,可以在棋盘格靶标图形上绘制出检测到的角点。绘制的图像如图13所示。

//获取棋盘格靶标中的角点,如果所有角点都被检测到且它们都被以一定顺序排布(一行一行地,每行从左到右),函数返回非零值,否则在函数不能发现或者记录所有角点的情况下,函数返回0。

find_corners_result=cvFindChessboardCorners(current_frame_gray,//棋盘格

的灰度图像,将chessBoard_Img进行转换得到

ChessBoardSize,//棋盘格每行角点的个数和每列角点的个数

&corners[captured_frames*NPoints],// 检测到的角点坐标

&corner_count[captured_frames],//检测到的角点的个数 CV_CALIB_CB_ADAPTIVE_THRESH );//使用自适应阈值

//通过迭代方法求取具有子象素精度的角点位置

cvFindCornerSubPix( current_frame_gray, //棋盘格靶标的灰度图像

&corners[captured_frames*NPoints],//检测到的角点坐标

NPoints, //单幅图像中角点的个数

cvSize(5,5),cvSize(-1,-1), //不忽略corner临近的像素进行精确估计,

cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,

30, //最大迭代次数(iteration)

); //最小精度(epsilon)

//在棋盘格靶标图像上绘制检测到的角点

cvDrawChessboardCorners(current_frame_rgb, //显示绘制结果的图像

ChessBoardSize, //棋盘格靶标中每行和每列角点的个数(9×6) &corners[captured_frames*NPoints], //检测到的角点坐标

NPoints, //单幅图像角点的个数

find_corners_result);//角点检测成功标志

图13 将角点绘制在棋盘格上的效果图

(3) 求取角点的三维世界坐标。每一幅图像检测的角点对应于相同的世界坐标系,世界坐标系以最左上方的角点为原点。例如图13中,最左上方的角点世界坐标为(0,0,0),其右边相邻角点的世界坐标为(30,0,0),其下方相邻角点的世界坐标为(0,30,0)。依次类推,可以得到所有角点的世界坐标。注意所有角点的Z坐标为0,这是因为棋盘格靶标位于Z=0的平面上。

(4) 计算摄像机内参数。运行cvCalibrateCamera2函数实现摄像机内参数的标定。实际标定时,采集10~20幅棋盘格靶标图像可以很好地实现摄像机的参数标定。应当注意,多幅靶标图像必须在不同距离不同视角下进行采集。

//摄像机标定

cvCalibrateCamera2( object_points,//角点的三维世界坐标

image_points,//角点的图像坐标,由corners[]转换得到

point_counts,//角点的数目,由corner_count[]转换得到

cvSize(image_width,image_height),//图像尺寸

intrinsics,//输出的摄像机内参数

distortion_coeff,//输出的摄像机畸变系数

rotation_vectors,//摄像机外参数中的旋转向量

translation_vectors,// 摄像机外参数中的平移向量

0); //额外选项

利用图12所示的10幅不同角度和位置的靶标图像进行了内参数标定,结果为:

1887.14100756.021901896.0780618.7198001??????????

畸变系数为:

[ ]

(5) 图像重投影。获得摄像机的内参数、畸变系数和变换矩阵后,利用函数cvProjectPoints2可以实现笛卡尔空间点到图像的重投影,从而在图像空间分析误差。

//投影三维点到图像平面

cvProjectPoints2(object_matrix,// 物体点的坐标,为3xN 或者Nx3的矩阵,

这里N 是单幅图中的所有角点的数目。

rotation_matrix,// 旋转向量,1x3或者3x1

translation_matrix,// 平移向量,1x3或者3x1。

intrinsics,// 摄像机的内参数矩阵

distortion_coeff,//畸变系数向量,4x1或者1x4,为[k 1, k 2, p 1, p 2]。如

果是NULL ,所有畸变系数都设为0。

image_matrix,// 输出重投影后的图像坐标数组

0,0,0,0,0);

//计算误差

err=cvNorm(image_matrix,//重投影后图像坐标数组

project_image_matrix, //角点的图像坐标数组

CV_L2,// 欧几里德距离

0);

(6) 获取消除畸变后的图像。经过摄像机标定,获得了摄像机的内参数和畸变参数。利用摄像机的内参数和畸变参数,运行cvUndistort2函数,可以获得消除畸变后的图像。棋盘格模板的原始图像与消除畸变后的图像如图14所示。

//消除畸变

cvUndistort2(grayimage,//棋盘格靶标的灰度图像

result_image,//消除畸变后的图像

intrinsics,//摄像机内参数矩阵

distortion_coeff);// 畸变系数向量

(a) (b)

图14 棋盘格模板图像,(a) 原始图像,(b) 消除畸变后图像

1.2.3 外参数标定

在内参数标定中,通过cvCalibrateCamera2能够得到旋转向量和平移向量。其中,平移向量的单位与输入的角点间的距离单位相同。利用罗德里格斯(Rodrigues)变换进行转换,可以将旋转向量转换为旋转矩阵,OpenCV 提供了Rodrigues 变换函数为cvRodrigues2。

//罗德里格斯(Rodrigues)变换

cvRodrigues2(&pr_vec, //输入的旋转向量

&pR_matrix, //输出的旋转矩阵

0);

上例中得到相对于其中一幅靶标图像的旋转向量为[ ],平移向量为[ ],平移向量的单位为mm 。经过罗德里格斯(Rodrigues)变换后得到对应于该图像的靶标坐标系相对于摄像机坐标系的变换矩阵,即摄像机的外参数矩阵,如下所示:

0.02400.00050.999793.31220.0005 1.00000.000544.80240.99970.00050.0240599.37730001-????-????????

此外,若已知摄像机内参数和靶标上的角点坐标,利用cvFindExtrinsicCameraParams2函数可以求取摄像机相对于靶标的外参数。函数cvFindExtrinsicCameraParams2说明如下:

void cvFindExtrinsicCameraParams2( const CvMat* object_points,// 靶标角

摄像机标定方法综述

摄像机标定方法综述 摘要:首先根据不同的分类方法对对摄像机标定方法进行分类,并对传统摄像机标定方法、摄像机自标定方法等各种方法进行了优缺点对比,最后就如何提高摄像机标定精度提出几种可行性方法。 关键字:摄像机标定,传统标定法,自标定法,主动视觉 引言 计算机视觉的研究目标是使计算机能通过二维图像认知三维环境,并从中获取需要的信息用于重建和识别物体。摄像机便是3D 空间和2D 图像之间的一种映射,其中两空间之间的相互关系是由摄像机的几何模型决定的,即通常所称的摄像机参数,是表征摄像机映射的具体性质的矩阵。求解这些参数的过程被称为摄像机标定[1]。近20 多年,摄像机标定已成为计算机视觉领域的研究热点之一,目前已广泛应用于三维测量、三维物体重建、机器导航、视觉监控、物体识别、工业检测、生物医学等诸多领域。 从定义上看,摄像机标定实质上是确定摄像机内外参数的一个过程,其中内部参数的标定是指确定摄像机固有的、与位置参数无关的内部几何与光学参数,包括图像中心坐标、焦距、比例因子和镜头畸变等;而外部参数的标定是指确定摄像机坐标系相对于某一世界坐标系的三维位置和方向关系,可用3 ×3 的旋转矩阵R 和一个平移向量t 来表示。 摄像机标定起源于早前摄影测量中的镜头校正,对镜头校正的研究在十九世纪就已出现,二战后镜头校正成为研究的热点问题,一是因为二战中使用大量飞机,在作战考察中要进行大量的地图测绘和航空摄影,二是为满足三维测量需要立体测绘仪器开始出现,为了保证测量结果的精度足够高,就必须首先对校正相机镜头。在这期间,一些镜头像差的表达式陆续提出并被普遍认同和采用,建立起了较多的镜头像差模型,D.C.Brown等对此作出了较大贡献,包括推导了近焦距情况下给定位置处径向畸变的表达式及证明了近焦距情况下测得镜头两个位置处的径向畸变情况就可求得任意位置的径向畸变等[2]。这些径向与切向像差表达式正是后来各种摄像机标定非线性模型的基础。随着CCD器件的发展,现有的数码摄像机逐渐代替原有的照相机,同时随着像素等数字化概念的出现,在实际应用中,在参数表达式上采用这样的相对量单位会显得更加方便,摄像机标定一词也就代替了最初的镜头校正。

matlab工具箱

至于工具箱的安装说明参见: https://www.doczj.com/doc/9d2904513.html,/viewthread.php?tid=120&page=1&fromuid=4481#p id123 Maplesoft《Maple Toolbox for MATLAB》 https://www.doczj.com/doc/9d2904513.html,/thread-236-1-1.html Sergiy Iglin《Graph Theory Toolbox》(图论工具 箱)https://www.doczj.com/doc/9d2904513.html,/thread-295-1-1.html Koert Kuipers《Branch And Bound toolbox 2.0》(BNB20分支定界工具 箱)https://www.doczj.com/doc/9d2904513.html,/thread-226-1-1.html Howard Wilson《Numerical Integration Toolbox》(NIT数值积分工具 箱)https://www.doczj.com/doc/9d2904513.html,/thread-225-1-1.html Anton Zaicenco《FEM toolbox for solid mechanics》(固体力学有限元工具箱)https://www.doczj.com/doc/9d2904513.html,/thread-219-1-1.html Nicholas J. Higham《The Matrix Computation Toolbox》(矩阵计算工具箱) https://www.doczj.com/doc/9d2904513.html,/thread-422-1-1.html Paolo Di Prodi《robotic toolbox》(机器人工具 箱)https://www.doczj.com/doc/9d2904513.html,/thread-274-1-1.html Moein Mehrtash《GPS Navigation Toolbox 》(GPS导航工具箱) https://www.doczj.com/doc/9d2904513.html,/thread-228-1-1.html J.Divahar 《Airfoil_Analyzer_toolbox》(翼型分析工具箱) https://www.doczj.com/doc/9d2904513.html,/thread-218-1-1.html Rasmus Anthin《Multivariable Calculus Toolbox 》(多变量微积分工具 箱)https://www.doczj.com/doc/9d2904513.html,/thread-251-1-1.html 《Time frequency analysis toolbox》(时频分析工具 箱)https://www.doczj.com/doc/9d2904513.html,/thread-439-1-1.html

matlab工具箱如何安装

matlab工具箱如何安装 在matlab的file下面的set path把它加上,把路径加进去后在: file→Preferences→General的Toolbox Path Caching里点击update Toolbox Path Cache更新一下。 以下是我在别的地方看到的,转过来你参考一下吧。 首先说说添加到matlab搜索路径好处:1 对n——你只需要存储一个副本,就可以在其他地方使用。具体来说,假设你在数据盘D上新建了两个目录abc和def,这两个工程(每个目录下的所有程序相应地称为一个工程)都需要调用同一个(些)函数(简称工具箱),这时候,如果你没有把该工具箱添加到matlab 的搜索路径下,则需要分别把工具箱中所有用到的文件都复制到目录abc和def下才能正确运行。这显然浪费空间,所以,matlab提供了一个搜索路径(默认在matlab安装目录下的toolbox中),只要把工具箱对应的整个文件夹复制到搜索路径对应的目录下,并且通知matlab一声(把该路径正确添加到搜索路径中),就可以在abc和def中使用这个工具箱了(即无论你的工程文件在哪个目录(有效的目录)下都可以访问这个工具箱中的函数)。下面就以matlab安装目录下的toolbox目录作为默认的添加路径进行详细说明。 1. 如何添加工具箱? 以下是添加工具箱的方法: 如果是Matlab安装光盘上的工具箱,重新执行安装程序,选中即可。如果是单独下载的工具箱,则需要把新的工具箱(以下假设工具箱名字为svm)解压到toolbox目录下,然后用addpath或者pathtool 把该工具箱的路径添加到matlab的搜索路径中,最后用which newtoolbox_command.m来检验是否可以访问。如果能够显示新设置的路径,则表明该工具箱可以使用了。具体请看工具箱自己代的README 文件。 1.1 举例: 要添加的工具箱为svm,则解压后,里边有一个目录svm,假设matlab安装在D:\MATLAB6p5,将svm目录拷贝至D:\MATLAB6p5\toolbox,然后运行matlab,在命令窗口输入addpath D:\MATLAB6p5\toolbox\svm回车,来添加路径。然后在svm目录下,任意找一个m文件,以svcinfo.m 为例,在命令窗口中输入which svcinfo.m。如果显示出该文件路径,如D:\MATLAB6p5\toolbox\svm\svcinfo.m,则安装成功,当然也可以在命令窗口输入path来查看。 上面的说明和例子基本上介绍了在matlab中如何添加工具箱,下面是其他补充: 1.2 添加方式总结: 事实上,有两种添加工具箱到matlab搜索路径的方法:其一是用代码,其二是用界面。其实无论用哪种方法,都是修改pathdef.m这个文件,阁下如果是高手,可以直接打开该文件修改,呵呵,对此这里不作讨论。 1.2.1 代码方式: 适用于添加下载的工具箱(别人的): 在命令窗口输入addpath D:\MATLAB6p5\toolbox\svm 或者addpath(‘D:\MATLAB6p5\toolbox\svm’); 但是这种方法只能添加svm目录,如果该目录下有其他子文件夹,并且运行时候“隐式”调用到这些子文件夹(例如假设svm目录下存在子文件夹matdata,该子文件夹下有logo.mat这个文件,且在m文件代码中使用了诸如load logo 这样的句子,即没有显式给出logo.mat的具体路径,则称为“隐式”),则不能正确访问。因此,有必要在添加时使用以下语句把svm目录下所有文件夹都添加到搜索路径中:500){this.resized=true;;}"> 程序代码 addpath(genpath(D:\MATLAB6p5\toolbox\svm)); 另外,如果只使用以上代码,则退出matlab后,新添加的路径不会被保存下来,下次重新启动matlab

最新matlab优化工具箱介绍

m a t l a b优化工具箱介 绍

matlab优化工具箱介绍 分类: Matlab2007-11-03 20:27 6405人阅读评论(0) 收藏举报在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容: 1)建立数学模型即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解数学模型建好以后,选择合理的最优化方法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 9.1 概述 利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问

5.大型方法的演示函数

9.1.3 参数设置 利用optimset函数,可以创建和编辑参数结构;利用optimget函数,可以获得options优化参数。 ● optimget函数 功能:获得options优化参数。 语法: val = optimget(options,'param') val = optimget(options,'param',default) 描述: val = optimget(options,'param') 返回优化参数options中指定的参数的 值。只需要用参数开头的字母来定义参数就行了。 val = optimget(options,'param',default) 若options结构参数中没有定义 指定参数,则返回缺省值。注意,这种形式的函数主要用于其它优化 函数。 举例:

基于靶标平面相机参数动态标定Matlab程序

基于靶标平面相机参数动态标定Matlab程序 ★注意:直接运行bd.m文件即可进行动态标定,附录Ⅲ中的其它函数文件均会被bd.m文件调用;坐标数据由实验获取。 bd .m %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % M为靶标角点的世界坐标数据,m1—m5为5组图像像素坐标数据;本函数为主函数,它将数据赋值给函数Dtbd(M,m)实现相机动态标定。 clc; clear; M=load('Model.txt'); %Model.txt中为靶标角点的世界坐标,由实验测得 m1=load('data1.txt'); m2=load('data2.txt'); m3=load('data3.txt'); m4=load('data4.txt'); %data1.txt—data5.txt中为不同视角所对应的角点图像坐 %标,可用附录Ⅱ中的程序测得 m5=load('data5.txt');%Model.txt为靶标的世界坐标 M=[M(:,1:2) ; M(:,3:4) ; M(:,5:6) ; M(:,7:8)]; m1=[m1(:,1:2) ; m1(:,3:4) ; m1(:,5:6) ; m1(:,7:8)]; m2=[m2(:,1:2) ; m2(:,3:4) ; m2(:,5:6) ; m2(:,7:8)]; m3=[m3(:,1:2) ; m3(:,3:4) ; m3(:,5:6) ; m3(:,7:8)]; m4=[m4(:,1:2) ; m4(:,3:4) ; m4(:,5:6) ; m4(:,7:8)]; m5=[m5(:,1:2) ; m5(:,3:4) ; m5(:,5:6) ; m5(:,7:8)]; M=M'; % 将靶标平面上角点的世界坐标写入矩阵M中,M为2维矩阵m(:,:,1)=m1'; m(:,:,2)=m2'; m(:,:,3)=m3'; m(:,:,4)=m4'; m(:,:,5)=m5'; % 将5个视角对应的图像像素坐标写入矩阵m中,m为3维矩阵Dtbd(M,m) % 调用Dtbd .m文件进行动态标定%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Dtbd .m %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Dtbd(M,m)函数实现的功能正是本论文中第4章所讲述的动态标定技术,它引入了径向畸变和切向畸变,具体标定过程可参照本论文。 function Dtbd(M,m) [rows,npts]=size(M); matrixone=ones(1,npts); M=[M;matrixone]; num=size(m,3); for i=1:num

matlab中SVM工具箱的使用方法资料

包已经解压到文件夹F:\R2009b\toolbox\svm matlab中SVM工具箱的使用方法 1,下载SVM工具箱:https://www.doczj.com/doc/9d2904513.html,/faculty/chzheng/bishe/indexfiles/indexl.htm 2,安装到matlab文件夹中 1)将下载的SVM工具箱的文件夹放在\matlab71\toolbox\下 2)打开matlab->File->Set Path中添加SVM工具箱的文件夹 现在,就成功的添加成功了. 可以测试一下:在matlab中输入which svcoutput 回车,如果可以正确显示路径,就证明添加成功了,例如: C:\Program Files\MATLAB71\toolbox\svm\svcoutput.m 3,用SVM做分类的使用方法 1)在matlab中输入必要的参数:X,Y,ker,C,p1,p2 我做的测试中取的数据为: N = 50; n=2*N; randn('state',6); x1 = randn(2,N) y1 = ones(1,N); x2 = 5+randn(2,N); y2 = -ones(1,N); figure; plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.'); axis([-3 8 -3 8]); title('C-SVC') hold on; X1 = [x1,x2]; Y1 = [y1,y2]; X=X1'; Y=Y1'; 其中,X是100*2的矩阵,Y是100*1的矩阵 C=Inf;

ker='linear'; global p1 p2 p1=3; p2=1; 然后,在matlab中输入:[nsv alpha bias] = svc(X,Y,ker,C),回车之后,会显示: Support Vector Classification _____________________________ Constructing ... Optimising ... Execution time: 1.9 seconds Status : OPTIMAL_SOLUTION |w0|^2 : 0.418414 Margin : 3.091912 Sum alpha : 0.418414 Support Vectors : 3 (3.0%) nsv = 3 alpha = 0.0000 0.0000 0.0000 0.0000 0.0000 2)输入预测函数,可以得到与预想的分类结果进行比较. 输入:predictedY = svcoutput(X,Y,X,ker,alpha,bias),回车后得到: predictedY = 1 1 1 1 1 1 1

摄像机参数标定步骤

1、系统需求 该工具箱可以在 Windows、Linux和Unix系统下的Matlab 5.x, Matlab 6.x and Matlab 7.x 版本下使用,而且不需要任何特定的 Matlab 工具箱(例如:不需要最优化工具箱)。 注意:我最近收到了在 Matlab 2007b 平台下关于 GUI 相关的 bug 报告。当修复工作完成时我会将其上传。请将你在使用过程中遇到的问题通知给我以帮助维护这个工具箱。请在邮件里写清楚 bug 的类型,并复制完整的错误信息。谢谢!! 2、开始 ◆转到下载页面,获取最新版本的完整的摄像机标定 Matlab 工具箱。 ◆将解压出的所有文件(.m 文件)放入一个文件夹中(默认的文件夹名称是 TOOLBOX_calib)。 ◆运行 Matlab,并将 TOOLBOX_calib 文件夹添加到 matlab path 环境中。该步骤可以让你在任何地方调用 matlab 工具箱里的任何函数。在 Windows 系统下,该操作可以方便的通过 path 编辑菜单进行。在 Linux 和 Unix 系统下,你可以使用 path 或者 addpath 命令(使用 help 命令查看相关的帮助说明)。 ◆运行matlab标定主函数 calib_gui(或calib)。 屏幕上将出现如下的模式界面 该选择窗口提示你在工具箱的两种操作模式中选择其一:标准模式和内存节省模式。在标准模式下,所有标定时需要的图像一次性装入内存,之后不再进行磁盘的读取。这大大减小了磁盘访问的开销,加速了图像处理和图形显示函数执行的速度。然而,如果图片过大,或图片过多,将会出现 OUT OF MEMORY 错误。因此,可以使用新的内存节省模式。在内存节省模式下,每次只读取一幅图片,并且不在内存中存储。 如果选择运行标准模式,当遇到 OUT OF MEMORY 错误时,可以该选用内存节省模式。两种模式的操作是完全兼容的(输入与输出),内部进行转换。 因为两种模式的用户界面完全一样,在本文中我们选择了标准界面。点击屏幕上方的标准界面按钮,将出现工具箱的标定主窗口(取代模式选择窗口)如下: 模式选择的步骤可以通过执行 calib_gui(0) (使用标准模式)或执行 calib_gui(1) (使用内存节省模式)跳过(键入 help calib_gui 查看更多信息)。 ◆现在你可以使用工具箱进行标定了。 3、标定实例

摄像机标定程序使用方法

一、材料准备 1 准备靶标: 根据摄像头的工作距离,设计靶标大小。使靶标在规定距离范围里,尽量全屏显示在摄像头图像内。 注意:靶标设计、打印要清晰。 2图像采集: 将靶标摆放成各种不同姿态,使用左摄像头采集N幅图像。尽量保存到程序的debug->data文件夹内,便于集中处理。 二、角点处理(Process菜单) 1 准备工作: 在程序debug文件夹下,建立data,left,right文件夹,将角探测器模板文件target.txt 复制到data文件夹下,便于后续处理。 2 调入图像: File->Open 打开靶标图像 3 选取角点,保存角点: 点击Process->Prepare Extrcor ,点击鼠标左键进行四个角点的选取,要求四个角点在最外侧,且能围成一个正方形区域。每点击一个角点,跳出一个显示角点坐标的提示框。当点击完第四个角点时,跳出显示四个定位点坐标的提示框。 点击Process->Extract Corners ,对该幅图的角点数据进行保存,最好保存到debug->data-> left文件夹下。命名时,最好命名为cornerdata*.txt,*代表编号。 对其余N-1幅图像进行角点处理,保存在相同文件夹下。这样在left文件夹会出现N 个角点txt文件。 三、计算内部参数(Calibration菜单) 1 准备工作: 在left文件夹中挑出5个靶标姿态差异较大的角点数据txt,将其归为一组。将该组数据复制到data文件夹下,重新顺序编号,此时,文件名必须为cornerdata*,因为计算参数时,只识别该类文件名。 2 参数计算: 点击Calibration->Cameral Calibrating,跳出该组图像算得的摄像机内部参数alpha、beta、gama、u0、v0、k1、k2七个内部参数和两组靶标姿态矩阵,且程序默认保存为文件CameraCalibrateResult.txt。 3 处理其余角点数据文件 在原来N个角点数据文件中重新取出靶标姿态较大的5个数据文档,重复步骤1和2;反复取上M组数据,保存各组数据。 注意:在对下一组图像进行计算时,需要将上一组在data文件夹下的5个数据删除。 四、数据精选 1 将各组内部参数计算结果进行列表统计,要求|gama|<2,且gama为负,删掉不符合条件的数据。 2 挑出出现次数最高的一组数据。

matlab工具箱的安装方法 ROBOT工具箱精解

robotic toolbox for matlab工具箱下载地址: https://www.doczj.com/doc/9d2904513.html,/source/940770 1. PUMA560的MATLAB仿真 要建立PUMA560的机器人对象,首先我们要了解PUMA560的D-H参数,之后我们可以利用Robotics Toolbox工具箱中的link和robot函数来建立 PUMA560的机器人对象。 其中link函数的调用格式: L = LINK([alpha A theta D]) L =LINK([alpha A theta D sigma]) L =LINK([alpha A theta D sigma offset]) L =LINK([alpha A theta D], CONVENTION) L =LINK([alpha A theta D sigma], CONVENTION) L =LINK([alpha A theta D sigma offset], CONVENTION) 参数CONVENTION可以取‘standard’和‘modified’,其中‘standard’代表采用标准的D-H参数,‘modified’代表采用改进的D-H参数。参数‘alpha’代表扭转角,参数‘A’代表杆件长度,参数‘theta’代表关节角,参数‘D’代表横距,参数‘sigma’代表关节类型:0代表旋转关节,非0代表移动关节。另外LINK还有一些数据域: LINK.alpha %返回扭转角 LINK.A %返回杆件长度 LINK.theta %返回关节角 LINK.D %返回横距 LINK.sigma %返回关节类型 LINK.RP %返回‘R’(旋转)或‘P’(移动) LINK.mdh %若为标准D-H参数返回0,否则返回1 LINK.offset %返回关节变量偏移 LINK.qlim %返回关节变量的上下限[min max] LINK.islimit(q) %如果关节变量超限,返回-1, 0, +1 LINK.I %返回一个3×3 对称惯性矩阵

实验三 MATLAB图像处理基本操作及摄像机标定(DLT)

实验三 MATLAB图像处理基本操作及摄像机标定(DLT) 实验三 Matlab图像处理基本操作及摄像机标定(DLT) (DLT)1、实验目的 通过应用Matlab的图像处理基本函数,学习图像处理中的一些基础操作和处理。 理解摄像机标定(DLT)方法的原理,并利用程序实现摄像机内参数和外参数的估计。。 2、实验内容: 1) 读取一幅图像并显示。 2) 检查内存(数组)中的图像。 3) 实现图像直方图均衡化。 4) 读取图像中像素点的坐标值。 5) 保存图像。 6) 检查新生成文件的信息。 7) 使用阈值操作将图像转换为二值图像。 8) 根据RGB图像创建一幅灰度图像。 9) 调节图像的对比度。 10) 在同一个窗口内显示两幅图像。 11) 掌握matlab命令及函数,获取标定块图像的特征点坐标。 12) 根据摄像机标定(DLT)方法原理,编写Matlab程序,估计摄像机内参数和12) 外参数。 3、实验要求: 1) 选取一幅图像,根据实验内容1)—10)给出结果。

2) 根据给定的标定块图像及实验内容11),12)进行编程实验。 3) 书写实验报告 4、实验设备 1) 微机。 2) Matlab软件。 5、实验原理 DLT变换: Abdal-Aziz和Karara于70年代初提出了直接线性变换像机定标的方法,他们从摄影测量学的角度深入的研究了像机图像和环境物体之间的关系,建立了像机成像几何的线性模型,这种线性模型参数的估计完全可以由线性方程的求解来实现。 直接线性变换是将像点和物点的成像几何关系在齐次坐标下写成透视投影矩阵的形式: X,,wu,,,, Y,,w,,,svP 3,4,,,,Zw ,,1,,,,1,, 为图像坐标系下的点的齐次坐标,为世界坐标系下的空其中,,,, u,v,1X,Y,Zwww 间点的欧氏坐标, P为3*4的透视投影矩阵,为未知尺度因子。 消去S,可以得到方程组: pX,pY,pZ,p,puX,puY,puZ,pu,011w12w13w1431w32w33w34 pX,pY,pZ,p,puX,puY,puZ,pu,021w22w23w1431w32w33w34 当已知N个空间点和对应的图像上的点时,可以得到一个含有2*N个方程的方程组: AL,0 其中A为(2N*12)的矩阵, L为透视投影矩阵元素组成的向量: T ,,p,p,p,p,p,p,p,p,p,p,p,p111213142122232431323334 ||AL||像机定标的任务就是寻找合适的L,使得为最小,即 min || AL || L

基于MATLAB对相机标定的研究

基于MATLAB对相机标定的研究 相机标定是对相机成像的逆过程求解,是建立二维图像坐标和三维世界坐标之间的对应关系,是机器视觉的重要组成部分。文章对针孔相机成像原理进行分析,考虑相机成像过程的径向畸变和偏心畸变。利用棋盘格标定原理,基于MATLAB对相机进行标定。 标签:相机标定;MATLAB;二值化 随着科技的迅猛发展,机器视觉越来越多的被运用到工业生产。相机的标定是机器视觉的重要组成部分,是对由三维世界坐标到二维图像坐标的映射求解。并廣泛运用于逆向工程、空间测距、图像识别、3D电影、游戏等工程。 相机的标定方法分为两大类,分别为传统标定方法和自标定方法。传统标定方法利用标定块的角点坐标和对应的图像坐标,计算出相机的内外参数,这种标定方法可以标定任意相机模型,标定过程复杂但是结果精确。包括利用最优化算法的标定、考虑畸变补偿的两步法、张正友标定法。自标定法是利用Krupp方程为相机建立绝对二次曲线曲面方程进行求解。这种方法灵活性强,但是鲁棒性和标定结果相对较差。 1 相机的标定原理 对相机进行标定首先需要建立相机的成像模型,首先利用针孔模型对相机的成像原理进行分析,然后考虑实际相机的畸变模型,利用张正友标定方法求解。 1.1 线性模型分析 相机标定的针孔模型是利用小孔成像的原理来描述相机的成像模型。针孔相机模型如下图1。 要描述针孔相机模型,需要介绍四种坐标以及这四种的坐标的相互关系。如图1所示,世界坐标系(OW-XWYWZW)表示世界的绝对坐标,能描述相机及其物理的空间位置。相机坐标(OC-XCYCZC)以相机的光心为坐标的原点,光轴为ZC轴,而XC、YC轴分别平行于图像坐标系的X,Y轴。图像坐标(o-xy)是以光轴与图像平面的交点为原点,描述的成像的平面坐标。图像像素坐标(o-uv)是图像的存储坐标,以图像左上端点为原点,以像素为单位描述图像其u、v轴分别平行于图像坐标的x、y轴。 其中fx=f/dx,dx表示像素在x轴方向的物理尺寸,f为相机的焦距。A是相机的内部参数矩阵,表示针孔模型下相机坐标到像素坐标的转换关系。点(u0,v0)为图像的主点。R是旋转矩阵,t是平移量,M为外部参数矩阵,表示由世界坐标系经过旋转和平移到相机坐标系的转换。

matlab新工具箱安装

至于Matlab工具箱安装中涉及到了Matlab的搜索路径、工作目录、当前路径、用户路径等好多术语,我这里不想多说什么 感兴趣的网友,可以直接查看Matlab的帮助系统,在那里你可以得到最直接的答复,但是你需要一定的英文基础哦 添加工具箱的方法很多,所有方法都是为了达到同一个目的,将工具箱的所在路径添加到Matlab的搜索路径下就可以了 下面介绍一种最简单的操作吧,下面以安装mathmodl(数学建模工具箱)为例进行说明 a、将你所需要安装的工具箱解压到$MatlabRoot\toolbox中(其实任意路径都是可以的,但是为了方便管理,我们一般都安装在这里),$MatlabRoot是你的Matlab安装路径,你可以在Matlab中输入matlabroot命令获取 (1)在Matlab输入如下内容(当然你可以直接使用资源管理器进入toolbox目录) 1.>> matlabroot 2. 3.ans = 4. 5.D:\Program Files\MATLAB\R2008a 6. 7.>> winopen(ans) 复制代码 (2)此时会自动跳到Matlab的安装目录下,双击打开目录下的toolbox文件夹 (3)将mathmodl工具箱复制到toolbox中

b.将刚才mathmodl的路径添加到Matlab搜索路径下(可以使用Matlab命令行,也可是用Matlab菜单操作,为了简便我们这里使用第二种) (1)在Matlab中如下操作,File——>Set Path...——>点击Add with subfolders... (2)在浏览文件中,选择刚才的安装路径$MatlabRoot/toolbox/mathmodl后,点击确定

matlab工具箱安装教程

1.1 如果是Matlab安装光盘上的工具箱,重新执行安装程序,选中即可; 1.2 如果是单独下载的工具箱,一般情况下仅需要把新的工具箱解压到某个目录。 2 在matlab的file下面的set path把它加上。 3 把路径加进去后在file→Preferences→General的Toolbox Path Caching里点击update Toolbox Path Cache更新一下。 4 用which newtoolbox_command.m来检验是否可以访问。如果能够显示新设置的路径,则表明该工具箱可以使用了。 把你的工具箱文件夹放到安装目录中“toolbox”文件夹中,然后单击“file”菜单中的“setpath”命令,打开“setpath”对话框,单击左边的“ADDFolder”命令,然后选择你的那个文件夹,最后单击“SAVE”命令就OK了。 MATLAB Toolboxes ============================================

https://www.doczj.com/doc/9d2904513.html,/zsmcode.html Binaural-modeling software for MATLAB/Windows https://www.doczj.com/doc/9d2904513.html,/home/Michael_Akeroyd/download2.html Statistical Parametric Mapping (SPM) https://www.doczj.com/doc/9d2904513.html,/spm/ext/ BOOTSTRAP MATLAB TOOLBOX https://www.doczj.com/doc/9d2904513.html,.au/downloads/bootstrap_toolbox.html The DSS package for MATLAB DSS Matlab package contains algorithms for performing linear, deflation and symmetric DSS. http://www.cis.hut.fi/projects/dss/package/ Psychtoolbox https://www.doczj.com/doc/9d2904513.html,/download.html Multisurface Method Tree with MATLAB https://www.doczj.com/doc/9d2904513.html,/~olvi/uwmp/msmt.html A Matlab Toolbox for every single topic ! https://www.doczj.com/doc/9d2904513.html,/~baum/toolboxes.html eg. BrainStorm - MEG and EEG data visualization and processing CLAWPACK is a software package designed to compute numerical solutions to hyperbolic partial differential equations using a wave propagation approach https://www.doczj.com/doc/9d2904513.html,/~claw/ DIPimage - Image Processing Toolbox PRTools - Pattern Recognition Toolbox (+ Neural Networks) NetLab - Neural Network Toolbox FSTB - Fuzzy Systems Toolbox Fusetool - Image Fusion Toolbox http://www.metapix.de/toolbox.htm

Matlab命令行安装CRP工具箱

CRP Matlab工具箱的安装方法 在下载安装网页:http://tocsy.pik-potsdam.de/CRPtoolbox/中,只有两句话:Start Matlab and change into the folder, where the downloaded files are located. Call the command install from the Matlab command line; the toolbox will be automatically added to the startup.m file. 意思是需要在Matlab命令行中安装,怎么做呢? 看了它说的安装方法是:在Matlab 命令窗口直接输入:install,但是我的Matlab2010b没反应,提示信息是没有这个变量或者.m文件。经过查询及摸索,安装步骤如下: 第一步,打开Matlab,在File->Set path中添加install.m的路径 第二步:打开cmd 输入:matlab -nodesktop -nosplash -r install 首次安装会提示出错: MATLAB Toolbox Path Cache is out of date and is not being used. 通过help toolbox_path_cache就可以知道原因了,如果没有设置好,要按照提示更改设置。 第三步,在cmd 中国再次输入:matlab -nodesktop -nosplash -r install 就可以看到开始安装,中间会有几个选择项,一个是问是否永远安装,一个是问是否删除安装文件,这个自己选择; 第四步:安装成功,界面如下: Creating private\logo.mat Creating workspace\.metadata\.log > Delete installation file? Y/N [Y]: N Installation finished! ---------------------------- The printable manual is crp_man.pdf. For an overview type: helpwin crptool 第五步:使用时,在命令窗口调用工具箱函数;若重新运行cmd,输入matlab,

matlab中SVM工具箱的使用方法

matlab 中SVM工具箱的使用方法 井幷享 标签:2008-03-18 14:43 1, 下载SVM工具箱: 2, 安装到matlab 文件夹中 1) 将下载的SVM工具箱的文件夹放在下 2) 打开matlab->File->Set Path 中添加SVM工具箱的文件夹 现在,就成功的添加成功了. 可以测试一下:在matlab 中输入which svcoutput 回车,如果可以正确显示路径成功 ,就证明添加了,例如: C:\Program Files\MATLAB71\toolbox\svm\svcoutput.m 3, 用SVM做分类的使用方法 1)在matlab 中输入必要的参数:X,Y,ker,C,p1,p2 我做的测试中取的数据为: N = 50; n=2*N; randn ('state',6); x1 = randn( 2,N) y1 = on es(1,N); x2 = 5+ra ndn (2,N); y2 = -on es(1,N); figure; plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),k'); axis([-3 8 -3 8]); title('C-SVC') hold on; X1 = [x1,x2]; Y1 = [y1,y2]; X=X1'; Y=Y1';

其中,X 是100*2 的矩阵,Y 是100*1 的矩阵 C=Inf; ker='linear'; global p1 p2 p1=3; p2=1; 然后,在matlab 中输入:[nsv alpha bias] = svc(X,Y,ker,C), 回车之后,会显示Support Vector Classification Constructing ... Optimising ... Execution time: 1.9 seconds Status : OPTIMAL_SOLUTION |w0|A2 : 0.418414 Margin : 3.091912 Sum alpha : 0.418414 Support Vectors : 3 (3.0%) nsv = 3 alpha = 0.0000 0.0000 0.0000 0.0000 0.0000 2) 输入预测函数, 可以得到与预想的分类结果进行比较 输入:predictedY = svcoutput(X,Y,X,ker,alpha,bias),回车后得到

Matlab摄像机标定工具箱的使用说明

摄像机标定工具箱 1.1 Matlab 摄像机标定工具箱 工具箱下载:https://www.doczj.com/doc/9d2904513.html,/bouguetj/calib_doc/download/index.html 说明文档:https://www.doczj.com/doc/9d2904513.html,/bouguetj/calib_doc/ 安装:将下载的工具箱文件toolbox_calib.zip 解压缩,将目录toolbox_calib 拷贝到Matlab 的目录下。 采集图像:采集的图像统一命名后,拷贝到toolbox_calib 目录中。命名规则为基本名和编号,基本名在前,后面直接跟着数字编号。编号最多为3位十进制数字。 1.1.1 标定模型 内参数标定采用的模型如式(1-1)所示,Brown 畸变模型式(1-2)所示。 ???? ??????=????????????????????=??????????11//100011100c c in c c c c y s x y x M z y z x v k u k k v u (1-1) 式中:(u , v )是特征点的图像坐标,(x c , y c , z c )是特征点在摄像机坐标系的坐标,k x 、k y 是焦距归一化成像平面上的成像点坐标到图像坐标的放大系数,k s 是对应于图像坐标u 、v 的摄像机的x 、y 轴之间不垂直带来的耦合放大系数,(u 0, v 0)是光轴中心点的图像坐标即主点坐标,(x c 1, y c 1)是焦距归一化成像平面上的成像点坐标。k s =αc k x ,αc 是摄像机的实际y 轴与理想y 轴之间的夹角,单位为弧度。 ?????++++++=++++++=1 142123654221112124113654221112)2()1()2(2)1(c c c c c c c c c d c c c c c c c c c c d c y x k y r k r k r k r k y y x r k y x k r k r k r k x x (1-2) 式中:(x c 1d , y c 1d )是焦距归一化成像平面上的成像点畸变后的坐标,k c 1是2阶径向畸变系数,k c 2是4阶径向畸变系数,k c 5是6阶径向畸变系数,k c 3、k c 4是切向畸变系数,r 为成像点到摄像机坐标系原点的距离,r 2= x c 12 + y c 12。 1.1.2 操作界面 将Matlab 的当前目录设定为含有标定工具箱的目录,即toolbox_calib 目录。在Matlab 命令窗口运行calib_gui 指令,弹出图1所示选择窗口。 图1 内存使用方式窗口 图1窗口中,具有两个选项,分别是“Standard ”和“Memory efficient ”。如果点击选择“Standard ”,则将目录中的所有图像读入内存中,所需内存较大。如果点击选择“Memory efficient ”,则将目录中的图像按照需要每次一幅图像读入内存中,所需内存较小。在选择了

matlab工具箱安装方法

Matlab工具箱安装中涉及到了Matlab的搜索路径、工作目录、当前路径、用户路径等好多术语。感兴趣的网友,可以直接查看Matlab的帮助系统,在那里你可以得到最直接的答复。 添加工具箱的方法很多,所有方法都是为了达到同一个目的,将工具箱的所在路径添加到Matlab的搜索路径下就可以了 下面介绍一种最简单的操作吧,下面以安装mathmodl(数学建模工具箱)为例进行说明 a、将你所需要安装的工具箱解压到$MatlabRoot\toolbox中(其实任意路径都是可以的,但是为了方便管理,我们一般都安装在这里),$MatlabRoot是你的Matlab安装路径,你可以在Matlab中输入matlabroot命令获取 (1)在Matlab输入如下内容(当然你可以直接使用资源管理器进入toolbox目录) 1. >> matlabroot 2. 3. ans = 4. 5. D:\Program Files\MATLAB\R2008a 6. 7. >> winopen(ans) 复制代码 (2)此时会自动跳到Matlab的安装目录下,双击打开目录下的toolbox文件夹 (3)将mathmodl工具箱复制到toolbox中 b.将刚才mathmodl的路径添加到Matlab搜索路径下(可以使用Matlab命令行,也可以用Matlab菜单操作,为了简便我们这里使用第二种) (1)在Matlab中如下操作,File——>Set Path...——>点击Add with subfolders... (2)在浏览文件中,选择刚才的安装路径$MatlabRoot/toolbox/mathmodl后,点击确定 (3)此时返回到Set Path对话框,点击左下角的保存按钮(记住一定要保存),此时工具箱彻底安装完毕,点击Close关闭对话框 c.测试下新安装工具箱是可以使用,在Matlab中输入如下内容 1. >>help mathmodl%输入工具箱名称,此时一般会返回该工具箱的说明,也就是mathmodl路径下content.m中的内容 2. %在命令行中输入如下,此时会返回mathmodl路径下所有的文件 3. >>what mathmodl 4. %再到mathmodl中随便找一个不与Matlab中重名的函数,比如DYNPROG.M,在命令行中输入 5. >>which DYNPROG.M 6. 7. D:\My Documents\MATLAB\DYNPROG.M 复制代码 d.工具箱更新缓存,否则每次Matlab启动的时候会给出警告 (1)File——>Preferences——>General——>选中enable toolbox path cache——>点击updata toolbox path cache (2)完成上面的就可以关闭Preferences对话框了 (3)此时一个工具箱彻底安装完毕 (4)如果以后启动Matlab的时候警告说toolbox path cache失效,那么重复第一步操作就万事OK了

相关主题
文本预览
相关文档 最新文档