MATLAB标定ZED双目摄像头

MATLAB标定ZED双目摄像头步骤

Matlab version:2017b

Matlab标定双目摄像头三步走:

  • 图像采集
  • 单目相机标定
  • 双目相机标定

图像采集

利用Matlab对棋盘格进行图像采集,图片数量在15~25之间。采集代码如下:

% 代码功能:每次按下enter键,采集一次棋盘格图片,并将左右相机的图像分离,各自存到事先建好的目录下
clear all;close all;clc;

% Open the ZED
zed = webcam('ZED')
% Set video resolution=720P
zed.Resolution = zed.AvailableResolutions{1};
% Get image size
[height width channels] = size(snapshot(zed))
ok = 1;
i = 0;
% Start loop
while ok
  % get key value
  w = waitforbuttonpress;
  if w
      % Capture the current image
      img = snapshot(zed);

      % Split the side by side image image into two images
      image_left = img(:, 1 : width/2, :);
      image_right = img(:, width/2 +1: width, :);
      % save images
      imwrite(image_left, ['E:\zed\leftImage\',num2str(i),'.jpg']);
      imwrite(image_right, ['E:\zed\rightImage\',num2str(i),'.jpg']);
      % Display the left and right images
      subplot(1,2,1);
      imshow(image_left);
      title('Image Left');
      subplot(1,2,2);
      imshow(image_right);
      title('Image Right');
      drawnow;
      i = i+1;
  end
end

  % close the camera instance
  clear zed

这里插补一下ZED相机在Matlab中的使用方法:
在Matlab命令窗口输入

>> webcamlist

ZED相机被检测到的话,会得到

ans ='ZED'

初次使用这个命令会报错

Error using webcamlist (line 20)
MATLAB Support Package for Webcams has not been installed. Open  Support Package Installer to install the Webcam Support Package.

解决方法:点击错误里面的链接,注册一下Matlab的账号,下载安装一下支持包就可以了。
打开相机,输入

>> cam = webcam

Matlab会返回相机信息

cam =

webcam with properties:

Name: 'ZED'
Resolution: '2560x720'
AvailableResolutions: {1x4 cell}
WhiteBalanceMode: 'auto'
Sharpness: 4
Saturation: 5
Hue: 0
Gain: 4
WhiteBalance: 4600
Contrast: 4
Brightness: 4
Exposure: 2
ExposureMode: 'auto'

运行相机,输入

>> preview(cam)

抓取图片,输入

>> img = snapshot(cam);

关闭相机,输入

>> clear cam

单目相机标定

这里,先标定左相机。标定主要用的是Matlab的标定工具箱插件。插件下载地址:
Camera Calibration Toolbox for Matlab

将下载好的文件夹放在Matlab的toolbox目录下,然后在Matlab命令窗口输入

>> pathtool

在弹出的Set path 窗口中,点击Add Folder,添加toolbox_calib插件目录,点击save。
这里写图片描述
将Matlab当前文件夹切换到包含左相机图片的文件夹下。
这里写图片描述

在Matlab命令窗口输入

>> calib_gui

弹出工具栏窗口
这里写图片描述
选择第一个选项,弹出标定界面
这里写图片描述
点击“Image names”,Matlab命令窗口显示如下
这里写图片描述
这里是要求输入图片命名里除了数字和后缀之外的部分,比如图片命名为“left1.jpg”,这里要输入“left”,因为我的图片命名里只有1,2,3…数字,所以直接回车。
这里写图片描述
Image format是图片的格式,按照实际情况选择。回车。图片加载成功。
这里写图片描述
然后,点击标定界面的Extract grid corners(提取角点),Matlab命令窗口如下
这里写图片描述
一路回车,默认即可。最后会跳出第一幅图棋盘图,然后按顺时针或逆时针旋转棋盘格最外面的四个格子的内角点。
这里写图片描述
之后,Matlab的命令窗口要求输入格子的大小,单位mm,我的是30*30mm,所以输入30。
这里写图片描述
然后,会弹出一个角点提取的图片。
这里写图片描述
如果对角点提取不满意,即红色十字和实际的角点不是很接近,可以通过系数kc调整,如下图
这里写图片描述
注意kc的取值范围在-1~+1之间,一般可以试试-0.1、-0.2、-0.3。调好以后,在Satisfied with distortion? ([]=no, other=yes) 后输入1。之后会进入第二张图片进行角点提取,重复上述过程,直到所有图片的角点提取完成。
这里写图片描述
所有图片的角点提取完成后,Malba命令窗口会显示左相机的内参。
这里写图片描述
标定结束后可以通过标定界面按钮进行可视化的观察,比如误差图的查看,点击Analyse error
这里写图片描述
可以点击误差较大的点,在Matlab命令窗口显示这个点的基本信息。
左相机标定结果出来后,点击标定界面的Save,这时结果文件默认保存在当前文件夹下面,默认文件名为Calib_Results.mat,将其改为Calib_Results_left.mat(双目标定用到)。至此左摄像头标定结束,右摄像头标定过程与左一样,最后保存为Calib_Results_right.mat。

双目相机标定

Matlab命令行输入

>> stereo_gui

弹出立体标定界面,选择第一个Load
这里写图片描述
load左右相机标定结果的.mat文件,如果命名是“Calib_Results_left.mat”和“Calib_Results_right.mat”,直接回车,否则需要输入正确的文件名。
这里写图片描述
回车后,Matlab会显示左右相机的标定结果,点击一下标定界面的run,会显示优化后的标定结果。
这里写图片描述
至此,左、右相机的内参和双目相机的外参都标定好了。标定结束。
如果想将标定结果转换为opencv能用的文件,参考下面的博客。
参考博客

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页