关于 matlab 标定工具箱的使用

来源:互联网 发布:More 查看sql文件乱码 编辑:程序博客网 时间:2024/05/20 02:26

关于 matlab 标定工具箱的使用

在 http://www.vision.caltech.edu/bouguetj/calib_doc/   提供了一个很好的matlab标定工具箱,但在使用中我发现由于原工具箱的目录设置问题,常常在第一步卡住程序无法运行,因此我对程序进行了更改,更改后的标定工具箱使用步骤如下:

1> 读入图像数据

启动matlab并将当前工作目录设置为包含待标定图像的目录(即包含代表顶图像的文件夹)

打开calib_gui.m文件,运行此程序,弹出对话框:让用户选择 change directory还是add to path,

选择“add to path”.然后程序会自动跳转到matlab命令窗口(command window)并显示提示信息:

 Are you sure that the images to be calibrate in current directory? [y]/n :

让用户确认当前目录是否包含待标定图像数据,输入'n'终止程序运行,用户可将当前目录设置为包含待标定图像数据的目录再次运行calib_gui.m。若输入'y'弹出对话框:让用户选择模式,有两种可作选择,一是Standard模式,一是Memory efficient模式.

 

  注意:若当前目录不包含待标定图像数据而用户又输入‘y’,那将导致程序进入死循环,若出现此情况,需重启MATLAB程序!!!

并在命令行窗口显示当前工作目录下的文件列表。Standard模式下所运行的图像数据会驻留在内存里,因而可以减少读取图像的操作,但如果需处理的图像数据过多,可能会造成内存泄露, Memory efficient模式下图像数据在需要的时候才被读入内存。二者选择其一后进入同一个标定工具箱操作界面。

在此界面可完成标定的各个步骤。

首先读取图像数据,点Image names按钮,程序转入命令行窗口等待用户输入待标定图像的basename.

Basename camera calibration images (without number nor suffix)-->

如果当前目录下有图像文件: Image1.tiff Image2.tiff ... Image10.tiff 则应输入Image.

程序继续等待用户输入图像格式:

Image format: ([]='r'='ras', 'b'='bmp', 'f'='tiff', 'p'='pgm', 'j'='jpg', 'm'='ppm')-->

由于我的计算机里图像数据的格式为tiff,故输入 'f'。命令行窗口显示如下结果:

 

Loading image 1...2...3...4...5...6...7...8...9...10...11...12...13...14...15...16...17...18...19...20...
done

 

 

这表明我向内存读入了20副tiff格式的图像数据。

 

由于程序被我更改了,因此后一步 Read images 可略过。

 

2>  角点提取

 

完成图像数据的读入后,在进行标定工作之前我们可以进行的操作就是角点提取。点extract grid corners, 程序转入命令行窗口等待用户输入待处理图像的数量,默认为当前工作目录下的全部图像数据:

 

 

Extraction of the grid corners on the images
Number(s) of image(s) to process ([] = all images) =

 

可直接回车,用用默认值即可。接下来进入设置用于搜索图像中corner 的窗口的大小,默认为5,可直接回车。窗口显示设置结果如下:


Window size for corner finder (wintx and winty):
wintx ([] = 5) = 
winty ([] = 5) = 
Window size = 11x11

 

接下来需要设置的是 选择使用自动计数功能或者人工计数功能(对图像中的标定板的黑白块进行计数),默认为使用自动计数功能。直接回车,选择默认的自动计数功能。

然后程序转入手动选择每一幅图像的四个角点的步骤,若有n副图像,则需要4n次操作。

 

 

-----------------------------------------------------------------------------------------------------

下面简单介绍一下我对原标定工具箱所做的更改。

calib_gui.m文件 开始部分的参数判断代码原为:

 

if nargin < 1,
    
    cell_list = {};
    
    fig_number = 1;
    
    title_figure = 'Camera Calibration Toolbox - Select mode of operation:';
    
    cell_list{1,1} = {'Standard (all the images are stored in memory)','calib_gui_normal;'};
    cell_list{2,1} = {'Memory efficient (the images are loaded one by one)','calib_gui_no_read;'};
    cell_list{3,1} = {'Exit',['disp(''Bye. To run again, type calib_gui.''); close(' num2str(fig_number) ');']};

end

 

更改为

 

if nargin < 1,
    
    cell_list = {};
    
    fig_number = 1;
    
    title_figure = 'Camera Calibration Toolbox - Select mode of operation:';
    
    cell_list{1,1} = {'Standard (all the images are stored in memory)','calib_gui_normal;'};
    cell_list{2,1} = {'Memory efficient (the images are loaded one by one)','calib_gui_no_read;'};
    cell_list{3,1} = {'Exit',['disp(''Bye. To run again, type calib_gui.''); close(' num2str(fig_number) ');']};
    
    sure = input('Are you sure that the images to be calibrate in current directory? [y]/n :','s');
    if lower(sure(1)) == 'y'
       dir;
    else
       disp('please set current directory to the one that the images to be caliberate!');
    return;

end

 

 

data_calib.m、data_calib_no_read.m 两个文件我做了同样的修改:

即注释以下代码:

% l_ras = dir('*ras');
% s_ras = size(l_ras,1);
% l_bmp = dir('*bmp');
% s_bmp = size(l_bmp,1);
% l_tif = dir('*tif');
% s_tif = size(l_tif,1);
% l_tiff = dir('*tiff');
% s_tiff = size(l_tiff,1);
% l_pgm = dir('*pgm');
% s_pgm = size(l_pgm,1);
% l_ppm = dir('*ppm');
% s_ppm = size(l_ppm,1);
% l_jpg = dir('*jpg');
% s_jpg = size(l_jpg,1);

% s_tot = s_ras + s_bmp + s_tif + s_pgm + s_jpg + s_ppm;

% if s_tot < 1,
%    fprintf(1,'No image in this directory in either ras, bmp, tif, pgm, ppm or jpg format. Change directory and try again.\n');
%    break;
% end;

 

 

 

然后需设定的是标定板的黑白方块的长宽,默认为3厘米的正方形。在我操作中都选择默认值。接下来需设置的是是否需要对图像畸变进行校正。畸变的判定标准是看上一步操作结果的图像的角点选择误差是否在允许范围内。

原创粉丝点击