主要内容

本页采用了机器翻译。点击此处可查看英文原文。

rectifyStereoImages

校正一对立体图像

说明

[J1,J2,reprojectionMatrix] = rectifyStereoImages(I1,I2,stereoParams) 使用存储在 stereoParams 对象中的立体相机系统的立体参数,对 I1I2 输入图像进行去畸变和校正。使用 reconstructScene 函数配合 reprojectionMatrix 函数,将视差图中的 2D 点重新投影到相机 1 的校正相机坐标系中的 三维点上。

立体图像矫正就是将图像投影到一个公共图像平面上,使得对应点具有相同的行坐标。这种图像投影使图像看起来仿佛两台相机是平行的。使用 disparityBMdisparitySGM 函数,根据校正后的图像计算视差图,用于三维场景重建。

示例

[___,camMatrix1,camMatrix2,R1,R2] = rectifyStereoImages(I1,I2,stereoParams) 返回经过校正的相机的 3×4 相机投影矩阵 camMatrix1camMatrix2,以及相应的校正旋转矩阵 R1R2

[J1,J2] = rectifyStereoImages(I1,I2,tform1,tform2) 通过应用投影变换 tform1tform2,返回 I1I2 输入图像的校正版本。

[J1,J2] = rectifyStereoImages(___,interp) 还指定了用于校正后图像的插值方法。您可以将该方法指定为 "nearest""linear""cubic"

示例

[J1,J2] = rectifyStereoImages(___,Name=Value) 支持上述语法中的任何参量组合,且可使用一个或多个名称-值参量指定选项。例如,OutputView="valid"OutputView 参量设置为 "valid"

示例

示例

全部折叠

请指定包含棋盘格图案的图像用于标定。

imageDir = fullfile(toolboxdir("vision"),"visiondata", ...
    "calibration","stereo");
leftImages = imageDatastore(fullfile(imageDir,"left"));
rightImages = imageDatastore(fullfile(imageDir,"right"));

检测棋盘格。

[imagePoints,patternDims] = detectCheckerboardPoints(...
    leftImages.Files,rightImages.Files);

指定棋盘格关键点的世界坐标。

squareSize = 108; % millimeters
worldPoints = patternWorldPoints("checkerboard",patternDims,squareSize);

读取图像。

I1 = readimage(leftImages,1);
I2 = readimage(rightImages,1);
imageSize = [size(I1,1),size(I1,2)];

对立体相机系统进行标定。

stereoParams = estimateCameraParameters(imagePoints,worldPoints,ImageSize=imageSize);

使用“完整”输出视图对图像进行校正。

[J1_full,J2_full] = rectifyStereoImages(I1,I2,stereoParams,OutputView="full");

显示“完整”输出视图的结果。

figure; 
imshow(stereoAnaglyph(J1_full,J2_full));

Figure contains an axes object. The hidden axes object contains an object of type image.

使用“有效”输出视图对图像进行校正。这最适合用于计算视差。

[J1_valid,J2_valid] = rectifyStereoImages(I1,I2,stereoParams,OutputView="valid");

显示“有效”输出视图的结果。

figure; 
imshow(stereoAnaglyph(J1_valid,J2_valid));

Figure contains an axes object. The hidden axes object contains an object of type image.

输入参数

全部折叠

与相机 1 对应的输入图像,指定为 M×N×3 的真彩色图像,或 M×N 的二维灰度数组。输入图像 I1I2 也必须是实数、有限且非稀疏的。输入图像必须属于同一类。

数据类型: uint8 | uint16 | int16 | single | double | logical

与相机 2 对应的输入图像,指定为 M×N×3 的真彩色图像或 M×N 的二维灰度数组。输入图像 I1I2 必须是实数、有限且非稀疏的。输入图像还必须属于同一类。

数据类型: uint8 | uint16 | int16 | single | double | logical

立体相机系统参数,指定为一个 stereoParameters 对象。

数据类型: uint8 | uint16 | int16 | single | double

图像 1 的投影变换,指定为 projtform2d 对象。您可以使用 estimateStereoRectification 函数获取一个 projtform2d 对象。

数据类型: single | double

图像 2 的投影变换,指定为 projtform2d 对象。您可以使用 estimateStereoRectification 函数获取一个 projtform2d 对象。

数据类型: single | double

插值方法,指定为 "linear""nearest""cubic" 之一。

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: OutputView="valid"OutputView 参量设置为 "valid"

校正后图像的大小,指定为 "full""valid"。将此参数设置为 "full" 时,校正后的图像将包含原始图像中的所有像素。将此值设置为 "valid" 时,输出图像将被裁剪为包含有效像素的最大公共矩形尺寸。

当校正后的图像之间没有重叠时,将 OutputView 设置为 "full"

输出像素填充值,指定为数值标量或三个元素的数值向量。当输入图像中对应的逆变换位置完全位于输入图像边界之外时,请使用填充值作为输出像素的值。如果 I1I2 是二维灰度图像,则必须将 FillValues 设置为一个数值标量。如果 I1I2 是真彩色图像,则可以将 FillValues 设置为一个标量或一个包含三个 RGB 值的向量。

输出参量

全部折叠

I1 的去畸变且已校正版本,以 M×N×3 真彩色图像或 M×N 二维灰度图像的形式返回。

立体图像矫正就是将图像投影到一个公共图像平面上,使得对应点具有相同的行坐标。这种图像投影使图像看起来仿佛两台相机是平行的。使用 disparityBMdisparitySGM 函数,根据校正后的图像计算视差图,用于三维场景重建。

I2 的去畸变且已校正版本,以 M×N×3 真彩色图像或 M×N 二维灰度图像的形式返回。

立体图像矫正就是将图像投影到一个公共图像平面上,使得对应点具有相同的行坐标。这种图像投影使图像看起来仿佛两台相机是平行的。使用 disparityBMdisparitySGM 函数,根据校正后的图像计算视差图,用于三维场景重建。

重投影矩阵,以 4×4 矩阵的形式返回,其形式为:

[100cx010cy000f001/b0],

,其中 f 和 [cx,cy] 分别是校正后相机 1 的焦距和主点。b 是虚拟校正立体相机的基线。

使用 reconstructScene 函数配合 reprojectionMatrix 函数,将视差图中的 2D 点重新投影到相机 1 的校正相机坐标系中的 三维点上。

校正后的相机一投影矩阵,以 3×4 矩阵的形式返回。使用 camMatrix1camMatrix2,将相机一坐标系中的三维世界点分别投影到 J1J2 的图像平面上。

使用 camMatrix1 将三维世界坐标系中的点投影到 J1 的图像平面上。

数据类型: single | double

相机二的校正投影矩阵,以 3×4 矩阵的形式返回。使用 camMatrix1camMatrix2,将相机一坐标系中的三维世界点分别投影到 J1J2 的图像平面上。

使用 camMatrix2 将三维世界坐标系中的点投影到校正后的相机二元坐标系中,并投影到 J2 的图像平面上。

数据类型: single | double

与相机 1 的校正投影相关的相机 1 旋转矩阵,以 3×3 矩阵的形式返回。R1 旋转矩阵将未校正相机坐标系中的三维点映射到校正后相机坐标系中的点。

数据类型: single | double

与相机一的校正投影相关的相机二的旋转矩阵,以 3×3 矩阵的形式返回。R2 旋转矩阵将未校正相机二元坐标系中的三维点映射到校正后的相机二元坐标系中的点。

数据类型: single | double

提示

  • Computer Vision Toolbox™ 校正算法要求每幅图像的极点位于图像之外。如果极点位于图像内,可以先按照 Marc Pollefeys、Reinhard Koch 和 Luc Van Gool 提出的校正方法 [2] 所述,将图像转换为极坐标系。

参考

[1] G. Bradski and A. Kaehler, Learning OpenCV : Computer Vision with the OpenCV Library. Sebastopol, CA: O'Reilly, 2008.

扩展功能

全部展开

版本历史记录

在 R2014a 中推出

全部展开