Matlab2025a实现双目相机标定~业余版

目录

1.环境准备

2.流程

[2.1 使用双目相机对准标定板拍大概20张高质量图片(距离角度尽量丰富些)](#2.1 使用双目相机对准标定板拍大概20张高质量图片(距离角度尽量丰富些))

[2.2 分割成左图和右图](#2.2 分割成左图和右图)

[2.3 使用matlab中APP下的Stereo Camera Calibrator,导入图片](#2.3 使用matlab中APP下的Stereo Camera Calibrator,导入图片)

[2.4 导出所有参数](#2.4 导出所有参数)

[2.5 标定参数解释](#2.5 标定参数解释)


1.环境准备

matlab软件、棋盘格标定板、双目相机、笔记本电脑

2.流程

2.1 使用双目相机对准标定板拍大概20张高质量图片(距离角度尽量丰富些)

原理参考链接:OpenCV:使用 OpenCV 进行相机校准

OpenCV:创建校准模式

棋盘格打印:opencv/doc/pattern.png 在 4.x 上 ·opencv/opencv

我的标定板比较业余,整体不是特别平的话会导致误差比较大。

2.2 分割成左图和右图

matlab代码:

Matlab 复制代码
% 设置图像文件夹路径
inputFolder = 'C:\Users\mqli0\Pictures\Camera Roll';  % 输入你存放双目图像的文件夹路径
outputFolderLeft = 'C:\Users\mqli0\Pictures\tem\left';  % 保存左图像的文件夹路径
outputFolderRight = 'C:\Users\mqli0\Pictures\tem\right';  % 保存右图像的文件夹路径

% 创建输出文件夹(如果文件夹不存在的话)
if ~exist(outputFolderLeft, 'dir')
    mkdir(outputFolderLeft);
end
if ~exist(outputFolderRight, 'dir')
    mkdir(outputFolderRight);
end

% 使用 imageDatastore 读取文件夹中的所有图像
imageFiles = imageDatastore(inputFolder, 'FileExtensions', {'.jpg', '.png', '.bmp'});

% 循环遍历每一张图像
for i = 1:numel(imageFiles.Files)
    % 读取当前图像
    stereoImage = imread(imageFiles.Files{i});
    
    % 获取图像的尺寸
    [imageHeight, imageWidth, numChannels] = size(stereoImage);
    
    % 假设左右图像宽度相同
    halfWidth = imageWidth / 2;
    
    % 分割左图和右图
    leftImage = stereoImage(:, 1:halfWidth, :);  % 左图是前半部分
    rightImage = stereoImage(:, halfWidth+1:end, :);  % 右图是后半部分
    
    % 生成文件名并保存左图和右图
    [~, name, ext] = fileparts(imageFiles.Files{i});  % 获取文件名和扩展名
    leftImageFile = fullfile(outputFolderLeft, [name, '_left', ext]);
    rightImageFile = fullfile(outputFolderRight, [name, '_right', ext]);
    
    % 保存分割后的左右图像
    imwrite(leftImage, leftImageFile);
    imwrite(rightImage, rightImageFile);
    
    fprintf('保存了 %s 和 %s\n', leftImageFile, rightImageFile);  % 输出处理信息
end

disp('所有图像已处理完毕!');
2.3 使用matlab中APP下的Stereo Camera Calibrator,导入图片

点开始标定,

2.4 导出所有参数
2.5 标定参数解释
参数 描述 说明
CameraParameters1 第一台相机的内参 包含相机1的焦距、主点、畸变系数等内参。
CameraParameters2 第二台相机的内参 包含相机2的焦距、主点、畸变系数等内参。
PoseCamera2 第二台相机相对于第一台相机的 位置和姿态(外参) 包含旋转矩阵和位移向量,描述相机2相对于相机1的位置和朝向。
FundamentalMatrix 基础矩阵 3x3 矩阵,描述两个相机之间的几何关系。用于图像匹配和重建。
EssentialMatrix 本质矩阵 3x3 矩阵,描述两个相机的相对姿态(旋转和平移)。需要知道相机内参。
MeanReprojectionError 平均重投影误差 衡量标定精度的指标,表示实际测量点与计算点之间的平均误差,单位是像素。
NumPatterns 用于标定的标定图案数量 例如 21 表示使用了 21 个标定图案(棋盘格图案)。
WorldPoints 标定图案在世界坐标系中的点的位置 例如棋盘格的角点在世界坐标系中的实际坐标,单位通常为毫米。
WorldUnits 世界坐标系单位 标定时使用的单位,通常是 "millimeters"(毫米)。
参数 描述 说明
Camera1IntrinsicsErrors 第一台相机的内参估计误差 包含相机1的内参(焦距、主点、畸变系数等)的估计误差。
Camera1ExtrinsicsErrors 第一台相机的外参估计误差 包含相机1的旋转矩阵和位移向量的估计误差。
Camera2IntrinsicsErrors 第二台相机的内参估计误差 包含相机2的内参(焦距、主点、畸变系数等)的估计误差。
RotationOfCamera2Error 第二台相机旋转矩阵的估计误差 表示第二台相机的旋转估计误差,单位是弧度。
TranslationOfCamera2Error 第二台相机位移向量的估计误差 表示第二台相机的位移估计误差,单位是毫米(X, Y, Z 三个轴上的误差)。
相关推荐
波特率1152005 分钟前
const关键字与函数的重载
开发语言·c++·函数重载
FL162386312915 分钟前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#
百锦再20 分钟前
Java 并发编程进阶,从线程池、锁、AQS 到并发容器与性能调优全解析
java·开发语言·jvm·spring·kafka·tomcat·maven
条tiao条29 分钟前
KMP 算法详解:告别暴力匹配,让字符串匹配 “永不回头”
开发语言·算法
干啥啥不行,秃头第一名35 分钟前
C++20概念(Concepts)入门指南
开发语言·c++·算法
2301_807367191 小时前
C++中的解释器模式变体
开发语言·c++·算法
always_TT2 小时前
C语言中的字符与字符串(char数组)
c语言·开发语言
forAllforMe2 小时前
LAN9252 从机寄存器配置--C语言举例
c语言·开发语言
weixin_537590452 小时前
《C程序设计语言》练习答案(练习1-4)
c语言·开发语言
chushiyunen2 小时前
python中的内置属性 todo
开发语言·javascript·python