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 三个轴上的误差)。
相关推荐
Pniubi2 小时前
HashMap的扩容和树化边界
java·开发语言
gCode Teacher 格码致知3 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工4 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留4 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu4 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
益莱储中国5 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
benchmark_cc6 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu7 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog7 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
CoderYanger7 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc