主要内容

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

undistortFisheyeImage

校正鱼眼镜头图像以消除镜头畸变

说明

J = undistortFisheyeImage(I,intrinsics) 对图像 I 进行镜头畸变校正,并将结果作为图像 J 返回。

示例

[J,camIntrinsics] = undistortFisheyeImage(I,intrinsics) 还会返回一个 cameraIntrinsics 对象,该对象对应于一台虚拟针孔相机。

[___] = undistortFisheyeImage(___,interp) 采用上述语法指定插值方法 interp

[___] = undistortFisheyeImage(___,Name=Value) 支持上述语法中的任何参量组合,且可使用一个或多个名称-值参量指定选项。例如,"ScaleFactor"=2 会将相机视图的缩放倍数增加 2 倍。

示例

示例

全部折叠

通过检测棋盘格标定图案并对相机进行标定,消除鱼眼镜头图像中的畸变。然后,显示结果。

收集一组棋盘格标定图像。

images = imageDatastore('calibrationImages');

从图像中检测标定图案。'PartialDetections' 名称-值参量默认设置为 true,从而允许检测不完整的棋盘格图案。

[imagePoints,patternDims] = detectCheckerboardPoints(images.Files, 'HighDistortion', true);

生成棋盘格各角点的世界坐标。

squareSize = 20; % millimeters
worldPoints = patternWorldPoints('checkerboard',patternDims,squareSize);

根据图像和世界坐标点,估算鱼眼镜头标定参数。使用第一个图像获取图像尺寸。

I = readimage(images,10); 
imageSize = [size(I,1) size(I,2)];
params = estimateFisheyeParameters(imagePoints,worldPoints,imageSize);

对第一个图像 I 进行镜头畸变校正,并显示结果。

J1 = undistortFisheyeImage(I,params.Intrinsics);
figure
imshowpair(I,J1,'montage')
title('Original Image (left) vs. Corrected Image (right)')

Figure contains an axes object. The hidden axes object with title Original Image (left) vs. Corrected Image (right) contains an object of type image.

J2 = undistortFisheyeImage(I,params.Intrinsics,'OutputView','same', 'ScaleFactor', 0.2);
figure
imshow(J2)
title('Output View with low Scale Factor')

Figure contains an axes object. The hidden axes object with title Output View with low Scale Factor contains an object of type image.

输入参数

全部折叠

输入图像,指定为 M×N×3 的真彩色图像或 M×N 的二维灰度图像。输入图像必须为非稀疏实矩阵。

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

鱼眼镜头内参数,指定为一个 fisheyeIntrinsics 对象。

对输入图像使用的插值方法,指定为 'bilinear''nearest''cubic'

名称-值参数

全部折叠

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

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: "ScaleFactor"=2 将相机视图的缩放倍数增加到原来的 2 倍

输出图像的大小,指定为 "same""full""valid" 之一。

"full" 的输出图像尺寸不适用于使用广角镜头(包括能生成球面图像的猫眼镜头)拍摄的鱼眼镜头图像。

虚拟相机透视法中焦距的缩放因子(以像素为单位),指定为标量或 [sx sy] 向量。指定一个向量,以分别缩放 xy 轴。调整缩放比例以放大相机视角。

输出像素填充值,指定为由 'FillValues' 和标量或 3 元素向量组成的、以逗号分隔的元组。当输入图像中对应的逆变换位置完全位于输入图像边界之外时,应使用填充值作为输出像素的值。当使用二维灰度输入图像时,FillValues 必须是标量。当使用真彩色图像时,FillValues 可以是标量,也可以是包含 RGB 值的 3 个元素向量。

输出参量

全部折叠

去畸变后的图像,以 M×N×3 真彩色或 M×N 二维灰度图像的形式返回。

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

虚拟相机的未去畸变内参,以 cameraIntrinsics 对象的形式返回。camIntrinsics 对象表示一个虚拟针孔相机。您可以将此对象与针孔模型标定工作流函数配合使用。这些内参适用于能够生成去畸变图像的相机。

提示

  • Computer Vision Toolbox™ 标定算法采用了 Scaramuzza [1] 提出的鱼眼镜头模型。

参考

[1] Scaramuzza, D., A. Martinelli, and R. Siegwart. "A Toolbox for Easy Calibrating Omnidirectional Cameras." Proceedings to IEEE International Conference on Intelligent Robots and Systems, (IROS). Beijing, China, October 7–15, 2006.

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2017b 中推出

全部展开