主要内容

stereoParametersFromOpenCV

将立体相机参数从OpenCVMATLAB

描述

例子

stereoParams= stereoParametersFromOpenCV (intrinsicMatrix1,distortionCoefficients1,intrinsicMatrix2,distortionCoefficients2,rotationOfCamera2,translationOfCamera2,图象尺寸)转换OpenCV立体声参数,指定的输入参数,MATLAB®stereoParameters对象stereoParams

OpenCV空间坐标系统指定左上方的像素中心(0,0),而MATLAB空间坐标系统指定的像素中心(1,- 1)。的stereoParametersFromOpenCV功能可以弥补这种差异通过添加1到两个xy值转换的主要点。

不能转换为MATLAB OpenCV立体声参数stereoParameters对象时:

  • OpenCV针孔相机模型使用超过五畸变系数。

  • 一个OpenCV鱼眼模型。

在这些情况下,您可以调整立体相机使用立体相机校准器应用程序。

stereoParams= stereoParametersFromOpenCV (___,WorldUnits = WorldUnits)指定一个字符串worldUnits描述世界的单位点除了输入参数从之前的语法。worldUnits指定为一个特征向量或字符串标量。例如,stereoParametersFromOpenCV (___, WorldUnits =“毫米”)描述了世界上所有参数的单位“毫米”。

例子

全部折叠

OpenCV立体声参数从垫文件加载到工作区。

负载openCVStereoParameters.mat

从OpenCV加载立体声参数转换为MATLAB格式。

stereoParams = stereoParametersFromOpenCV (intrinsicMatrix1,distortionCoefficients1、intrinsicMatrix2 distortionCoefficients2,rotationOfCamera2 translationOfCamera2,图象尺寸);

加载图像纠正。

imageDir = fullfile (toolboxdir (“愿景”),“visiondata”,“校准”,“立体”);I1 = imread (fullfile (imageDir“左”,“left01.png”));I2 = imread (fullfile (imageDir“对”,“right01.png”));

显示unrectified图像。

imshow (stereoAnaglyph (I1、I2));

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

纠正图像使用完整的输出视图。

[j - 1, J2] = rectifyStereoImages (I1、I2 stereoParams OutputView =“全部”);

显示结果纠正图像。

imshow (stereoAnaglyph (j - 1, J2));

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

ROS相机标定方案立体相机参数估计使用OpenCV相机校准工具[1]。在ROS校准立体相机之后,您可以导出INI文件使用的相机参数相机标定解析器。使用校准立体相机与计算机视觉工具箱™函数等rectifyStereoImages,你必须阅读相机参数的INI文件并将其转换为一个stereoParameters对象使用stereoParametersFromOpenCV

注意:stereoParametersFromOpenCV函数支持导入立体相金宝app机参数只有那些使用针孔相机模型ROS铅锤变形模型。

从活性氧INI文件读取立体相机参数

读了立体相机参数存储在立体音响Params.ini使用辅助函数helperReadINI

stereoParamsINI = helperReadINI (“stereoParams.ini”);

计算基线立体相机的参数

立体相机的基线参数描述的相对平移和旋转的两个摄像头立体相机。相机的相对旋转和翻译需要2对相机1创建的stereoParameters对象使用stereoParametersFromOpenCV。你可以计算这些整改和投影矩阵从ROS读取INI文件[2]。

提取的两个相机参数stereoParams结构。

cameraParams1 = stereoParamsINI.narrow_stereo_left;cameraParams2 = stereoParamsINI.narrow_stereo_right;

提取相机2相对于相机1的翻译最后一列的投影矩阵。

translationOfCamera2 = cameraParams2.projection(:,结束);

相机的旋转2相对于相机1, R 21 ,来自整流立体的矩阵 R 1 R 2 。整改矩阵调整摄像机坐标系的旋转矩阵是理想的立体图像平面,立体影像是平行的纵向线条。计算相机的旋转2相对于相机1 R 21 = R 2 * R 1 T

rotationOfCamera2 = cameraParams2.rectification * cameraParams1.rectification ';

创建stereoParameters对象使用stereoParametersFromOpenCV

提取内在矩阵和畸变系数的两个摄像头stereoParams结构。

intrinsicMatrix1 = cameraParams1.camera_matrix;intrinsicMatrix2 = cameraParams2.camera_matrix;distortionCoefficients1 = cameraParams1.distortion;distortionCoefficients2 = cameraParams2.distortion;

获得的图像大小图像场的stereoParams结构。

图象尺寸= [stereoParamsINI.image。高度stereoParamsINI.image.width];

使用stereoParametersFromOpenCV创建一个stereoParameters对象从ROS立体相机参数。

stereoParametersObj = stereoParametersFromOpenCV (intrinsicMatrix1,distortionCoefficients1、intrinsicMatrix2 distortionCoefficients2,rotationOfCamera2 translationOfCamera2,图象尺寸);

纠正对立体图像

使用导入的立体参数rectifyStereoImages纠正一个图像对使用校准立体相机拍摄。

%加载图像对。imageDir = fullfile (toolboxdir (“愿景”),“visiondata”,“校准”,“立体”);leftImages = imageDatastore (fullfile (imageDir“左”));rightImages = imageDatastore (fullfile (imageDir“正确”));I1 = readimage (leftImages, 1);I2 = readimage (rightImages, 1);%纠正图像对。[j - 1, J2] = rectifyStereoImages (I1、I2 stereoParametersObj OutputView =“全部”);%显示结果。图J = stereoAnaglyph (J - 1、J2);imshow (J)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

金宝app支持功能

helperReadINI

helperReadINI从其输入函数读取相机参数INI文件已经从ROS出口。

函数cameraParams = helperReadINI(文件名)% helperReadINI读取ROS INI文件,文件名,并返回一个结构%这些字段:形象,< camera_name1 >、< camera_name2 >。图像是一个%结构描述所捕获的图像的高度和宽度%的立体相机。字段< camera_name1 >和< camera_name2 >%是相机的名字命名的结构出现在INI文件,它们包含%这些字段:camera_matrix、失真、rectification_matrix%,projection_matrix。这些字段存储在INI文件的%值放在一个新行他们的名字。f = fopen(文件名,“r”);sectionName =;~ feof (f)%从文件读取一行。行= fgetl (f);%修剪前导和尾随空白。行= strtrim(线);如果isempty(线)| | (1)= =“#”%跳过空行和注释。继续elseif(1)= =“(”& & ()= =“]”%确定部分名称和继续阅读。sectionName =线(2:end-1);sectionName = strrep (sectionName,' / ',“_”);继续结束% blankspaces替换为下划线来创建有效的MATLAB函数%的名字。name =线;名称(name = =' ')=“_”;在即将到来的行%读值数据。值= [];~ feof (f)行= fgetl (f);行= strtrim(线);如果isempty(线)%空行表示的值的数据。打破elseif(1)= =“#”%跳过注释行。继续结束行= str2num(线);% #好吧值=[价值;线);% #好吧结束%保值进行后期处理。如果isempty (sectionName) cameraParams。(名字)=价值;其他的cameraParams。(sectionName)。(名字)=价值;结束结束文件关闭(f);结束

引用

[1]http://wiki.ros.org/camera_calibration

[2]http://docs.ros.org/en/melodic/api/sensor_msgs/html/msg/CameraInfo.html

输入参数

全部折叠

intrinsic矩阵OpenCV的相机1,指定为一个3×3的矩阵形式:

( f x 0 c x 0 f y c y 0 0 1 ]

在哪里外汇财政年度的焦距吗xy的方向,残雪,cy)中指定的主要点OpenCV。

intrinsic矩阵OpenCV的照相机2,指定为一个3×3的矩阵形式:

( f x 0 c x 0 f y c y 0 0 1 ]

在哪里外汇财政年度的焦距吗xy的方向,残雪,cy是指定的主点OpenCV。

相机1径向和切向畸变系数,作为五行返回向量形式(k1k2p1p2k3]。的值k1,k2,k3描述了径向畸变p1p2描述切向畸变,指定OpenCV。

照相机2径向和切向畸变系数,作为五行返回向量形式(k1k2p1p2k3]。的值k1,k2,k3描述了径向畸变p1p2描述切向畸变,指定OpenCV。

旋转相机2相对于相机1从OpenCV,指定为一个3×3的矩阵。

翻译OpenCV的相机2相对于相机1,指定为一个三元素向量。

图像大小,指定为一个双元素向量形式(mrows,ncols]。

输出参数

全部折叠

立体参数,作为一个返回stereoParameters对象。

版本历史

介绍了R2021b