欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MATLAB标定ZED双目摄像头

程序员文章站 2022-04-16 21:21:09
...

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标定ZED双目摄像头
将Matlab当前文件夹切换到包含左相机图片的文件夹下。
MATLAB标定ZED双目摄像头

在Matlab命令窗口输入

>> calib_gui

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

双目相机标定

Matlab命令行输入

>> stereo_gui

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

相关标签: ZED Matlab