主要内容

OpenCV的立体参数

将立体相机参数从OpenCV转换为MATLAB

描述

实例

立体参数=来自OpenCV的立体参数(内在矩阵1,distortionCoefficients1,内在矩阵2,distortionCoefficients2,旋转摄像机2,翻译摄像机2,图像大小)将OpenCV立体声参数,由输入参数指定,转换到MATLAB中®立体参数对象立体参数.

OpenCV空间坐标系指定位于中心的左上像素(0,0),而MATLAB空间坐标系指定像素中心为(1,1).这个OpenCV的立体参数函数通过向两个xY-转换后的主点的值。

OpenCV立体声参数无法转换为MATLAB立体参数对象时:

  • OpenCV针孔相机模型使用五个以上的畸变系数。

  • 使用OpenCV鱼眼模型。

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

立体参数=来自OpenCV的立体参数(___, WorldUnits = WorldUnits)指定一个字符串世界单位,除了前面语法中的输入参数外,它还描述了世界点的单位。将worldUnits指定为字符向量或字符串标量。例如stereoParametersFromOpenCV (___, WorldUnits =“毫米”)用世界单位“mm”描述所有参数。

例子

全部崩溃

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

负载openCVStereoParameters.mat

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

stereoParams=来自OpenCV的StereoParameters(intrinsicMatrix1,...畸变效率1,内在矩阵2,畸变效率2,...旋转FCAMERA2,平移FCAMERA2,图像大小);

加载要校正的图像。

imageDir=完整文件(toolboxdir(“愿景”),“视觉数据”,“校准”,“立体声”); I1=imread(完整文件(imageDir,“左”,“left01.png”)); I2=imread(完整文件(imageDir,“对”,'right01.png'));

显示未校正的图像。

imshow(立体浮雕(I1,I2));

Figure包含axes对象。axes对象包含image类型的对象。

使用完整输出视图校正图像。

[J1,J2]=整流系统立体图像(I1,I2,立体参数,输出视图=“全部”);

显示校正后的图像。

imshow(立体浮雕(J1,J2));

Figure包含axes对象。axes对象包含image类型的对象。

这个ROS摄像机校准包估计立体相机参数使用OpenCV摄像机校准工具[1] 。在ROS中校准立体摄像机后,可以使用摄像机校准分析器.使用带计算机视觉工具箱的校准立体摄像机™ 功能,例如rectifyStereoImages,必须从INI文件中读取相机参数并将其转换为立体参数对象使用OpenCV的立体参数.

注:这个OpenCV的立体参数功能仅支持为使用的金宝app针孔相机型号导入立体相机参数罗丝铅锤畸变模型。

从ROS INI文件读取立体摄像机参数

读取存储在立体声中的立体声摄像机参数Params.ini使用helper函数helperReadINI.

stereoParamsINI=helperReadINI(“stereoParams.ini”);

立体相机基线参数的计算

立体相机的基线参数描述了立体相机对中两个相机的相对平移和旋转。相机2相对于相机1的相对旋转和平移需要创建立体参数对象使用OpenCV的立体参数。您可以从ROS INI文件[2]中读取的校正矩阵和投影矩阵计算这些值。

从中提取两个摄影机参数立体参数结构

cameraParams1=stereoParamsINI.窄带立体声左;cameraParams2=stereoParamsINI.窄带立体声右;

从投影矩阵的最后一列中提取相机2相对于相机1的平移。

translationOfCamera2=cameraParams2.投影(:,结束);

摄像机2相对于摄像机1的旋转, R 21 ,由立体对的校正矩阵导出 R 1. R 2. 。校正矩阵是将摄像机坐标系与理想立体图像平面对齐的旋转矩阵,以使两个立体图像中的极线平行。计算摄像机2相对于摄像机1的旋转,如下所示: R 21 = R 2. * R 1. T .

rotationOfCamera2=摄像机参数2.校正*摄像机参数1.校正';

创造立体参数对象使用OpenCV的立体参数

从图像中提取两个摄像机的固有矩阵和失真系数立体参数结构

intrinsicMatrix1=cameraParams1.camera_矩阵;intrinsicMatrix2=cameraParams2.camera_矩阵;畸变效率1=cameraParams1.畸变;畸变效率2=cameraParams2.畸变;

从中获取图像大小形象领域立体参数结构

imageSize=[stereoParamsINI.image.height stereoParamsINI.image.width];

使用OpenCV的立体参数创建立体参数对象从ROS立体相机参数。

stereoParametersObj=来自OpenCV的stereoParametersFromOpenCV(intrinsicMatrix1,...畸变效率1,内在矩阵2,畸变效率2,...旋转FCAMERA2,平移FCAMERA2,图像大小);

对立体图像进行校正

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

%加载图像对。imageDir=完整文件(toolboxdir(“愿景”),“视觉数据”,“校准”,“立体声”);leftImages=imageDatastore(完整文件(imageDir,“左”));rightImages=imageDatastore(完整文件(imageDir,“对”));I1=可读图像(leftImages,1);I2=可读图像(rightImages,1);%校正图像对。[J1,J2]=整流器立体图像(I1,I2,立体参数Sobj,OutputView=“全部”);%显示结果。图J=立体浮雕(J1,J2);imshow(J)

Figure包含axes对象。axes对象包含image类型的对象。

金宝app辅助功能

helperReadINI

这个helperReadINI函数从已从ROS导出的输入INI文件中读取相机参数。

作用cameraParams=helperReadINI(文件名)%helperReadINI读取ROS INI文件、文件名,并返回带有%这些字段:image、。image是一个%结构,用于描述由计算机捕获的图像的高度和宽度%立体声对的摄像机。字段%是以INI文件中的摄影机名称命名的结构,并且它们包含%这些字段:camera_matrix,畸变,整流矩阵,%和投影矩阵。这些字段与它们的%值放在一个新行中,后跟它们的名称。f=fopen(文件名,“r”);部门名称='';虽然~feof(f)%从文件中读取行。直线=fgetl(f);%修剪前导空格和尾随空格。line=strtrim(行);如果isempty(线)| | (1)= ='//www.tatmou.com/au/help/vision/ref/#'%跳过空行和注释。持续埃尔塞夫(1) = ='['&&行(完)==']'%确定章节名称并继续阅读。sectionName=行(2:end-1);sectionName=STREP(sectionName,'/','_');持续终止%用下划线替换空格以创建有效的MATLAB变量%名字。name =线;名称(name = =' ') ='_';%读取后面几行中的值数据。值= [];虽然~feof(f)line=fgetl(f);line=strtrim(line);如果isempty(行)%空行表示值结束数据。打破埃尔塞夫第(1)行=='//www.tatmou.com/au/help/vision/ref/#'跳过注释行。持续终止行=str2num(行);%#嗯value=[值;行];%#嗯终止%存储后处理值。如果isempty(sectionName)cameraParams.(名称)=值;其他的cameraParams.(sectionName)。(name)=值;终止终止fclose(f);终止

参考文献

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

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

输入参数

全部崩溃

OpenCV中camera 1的Intrinsics matrix,指定为3 × 3的矩阵形式:

[ F x 0 C x 0 F Y C Y 0 0 1. ]

哪里外汇fy镜头的焦距是多少xY-方向,以及cx,cy)是OpenCV中指定的主点。

OpenCV中camera 2的Intrinsics matrix,指定为3 × 3的矩阵形式:

[ F x 0 C x 0 F Y C Y 0 0 1. ]

哪里外汇fy镜头的焦距是多少xY-方向,以及cx,cy是OpenCV中指定的主点。

摄像机1径向和切向畸变系数,以五元素向量形式返回[k1k2p1p2k3].价值观k1,k2k3描述径向畸变和p1p2描述OpenCV中指定的切向变形。

相机2的径向和切向失真系数,返回为一个五元矢量,形式为[k1k2p1p2k3].价值观k1,k2k3描述径向畸变和p1p2描述OpenCV中指定的切向变形。

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

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

图像大小,指定为表单中的两元素向量[mrows,士官].

输出参数

全部崩溃

立体声参数,返回为立体参数对象

在R2021b中引入