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 三个轴上的误差)。
相关推荐
陈文锦丫4 小时前
MQ的学习
java·开发语言
liwulin05064 小时前
【PYTHON-YOLOV8N】如何自定义数据集
开发语言·python·yolo
青蛙大侠公主5 小时前
Thread及其相关类
java·开发语言
爱吃大芒果5 小时前
Flutter 主题与深色模式:全局样式统一与动态切换
开发语言·javascript·flutter·ecmascript·gitcode
云栖梦泽5 小时前
易语言数据库操作:结构化数据管理的核心
开发语言
电子硬件笔记5 小时前
Python语言编程导论第七章 数据结构
开发语言·数据结构·python
南棱笑笑生6 小时前
20251217给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-5.10】后调通ov5645【只能预览】
linux·c语言·开发语言·rockchip
ulias2126 小时前
C++ 的容器适配器——从stack/queue看
开发语言·c++
Amewin6 小时前
window 11 安装pyenv-win管理不同的版本的python
开发语言·python
lionliu05196 小时前
WebAssembly (Wasm)
java·开发语言·wasm