imwarp
对图像应用几何变换
语法
说明
[___] = imwarp(___,
指定要使用的插值的类型。interp
)
[___] = imwarp(___,
指定名称-值参量来控制几何变换的各个方面。 Name=Value
)
提示
如果输入变换 tform
未定义正向变换,则使用 OutputView
名称-值参量来加速变换。
示例
对图像应用水平剪切
读取并显示灰度图像。
I = imread('cameraman.tif');
imshow(I)
创建一个二维仿射变换。
A = [1 0.5 0; 0 1 0; 0 0 1]; tform = affinetform2d(A);
对图像应用变换。
J = imwarp(I,tform); imshow(J)
对三维 MRI 数据集应用旋转变换
加载并显示一个三维 MRI 数据体图像。
load("mri");
mriVolume = squeeze(D);
volshow(mriVolume);
创建一个围绕 y 轴旋转图像的三维刚性变换对象。
theta = [0 22.5 0]; transl = [0 0 0]; tform = rigidtform3d(theta,transl);
对该图像应用变换并显示结果。
mriVolumeRotated = imwarp(mriVolume,tform); volshow(mriVolumeRotated);
使用不同输出视图样式使图像发生畸变
读取并显示图像。要查看图像的空间范围,请使坐标区可见。
A = imread("kobi.png"); A = imresize(A,0.25); iptsetpref("ImshowAxesVisible","on") imshow(A)
创建一个二维仿射变换。此示例创建一个随机变换,该变换包括按 [1.2, 2.4] 范围内的因子缩放、按 [-45, 45] 度范围内的角度旋转以及按 [100, 200] 像素范围内的距离水平平移。
tform = randomAffine2d("Scale",[1.2,2.4],"XTranslation",[100 200],"Rotation",[-45,45]);
为图像和变换创建三个不同输出视图。
centerOutput = affineOutputView(size(A),tform,"BoundsStyle","CenterOutput"); followOutput = affineOutputView(size(A),tform,"BoundsStyle","FollowOutput"); sameAsInput = affineOutputView(size(A),tform,"BoundsStyle","SameAsInput");
使用每种不同输出视图样式将变换应用于输入图像。
BCenterOutput = imwarp(A,tform,"OutputView",centerOutput); BFollowOutput = imwarp(A,tform,"OutputView",followOutput); BSameAsInput = imwarp(A,tform,"OutputView",sameAsInput);
显示生成的图像。
imshow(BCenterOutput)
title("CenterOutput Bounds Style");
imshow(BFollowOutput)
title("FollowOutput Bounds Style");
imshow(BSameAsInput)
title("SameAsInput Bounds Style");
iptsetpref("ImshowAxesVisible","off")
输入参数
A
— 要变换的图像
数值数组 | 逻辑数组 | 分类数组
要变换的图像,指定为任意维度的数值、逻辑或分类数组。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| categorical
tform
— 几何变换
几何变换对象
几何变换,指定为表中列出的几何变换对象。
几何变换对象 | 描述 |
---|---|
二维线性几何变换 | |
transltform2d | 平移变换 |
rigidtform2d | 刚性变换:平移和旋转 |
simtform2d | 相似变换:平移、旋转和各向同性缩放 |
affinetform2d | 仿射变换:平移、旋转、各向异性缩放、翻转和剪切 |
projtform2d | 投影变换 |
三维线性几何变换 | |
transltform3d | 平移变换 |
rigidtform3d | 刚性变换:平移和旋转 |
simtform3d | 相似变换:平移、旋转和各向同性缩放 |
affinetform3d | 仿射变换:平移、旋转、各向异性缩放、翻转和剪切 |
非线性几何变换 | |
geometricTransform2d | 二维几何变换 |
geometricTransform3d | 三维几何变换 |
PolynomialTransformation2D | 多项式变换 |
PiecewiseLinearTransformation2D | 分段线性变换 |
LocalWeightedMeanTransformation2D | 局部加权均值变换 |
如果
tform
为二维并且A
有两个以上的维度(例如对于 RGB 图像),则imwarp
会将相同的二维变换应用于沿更高维度的所有二维平面。如果
tform
为三维,则A
必须为三维图像体。
D
— 位移场
数值数组
位移场,指定为数值数组。位移场定义输出图像的网格大小和位置。位移值以像素为单位。imwarp
假设 D
参照默认的内部坐标系。要估计位移场,请使用 imregdemons
。
如果
A
是大小为 m×n 的二维灰度图像,则将位移场指定为 m×n×2 数组。D(:,:,1)
包含沿 x 轴的位移。imwarp
将这些值添加到D
中的列和行位置,以在A
中生成重新映射的位置。同样,D(:,:,2)
包含沿 y 轴的位移。如果
A
是大小为 m×n×c 的二维 RGB 或多光谱图像,并且您将D
指定为 m×n×2 数组,则imwarp
会独立地对每个二维颜色通道执行运算。D(:,:,1)
包含所有颜色通道沿 x 轴的位移。同样,D(:,:,2)
包含沿 y 轴的位移。如果
A
是大小为 m×n×p 的三维灰度图像,则请将位移场数组指定为 m×n×p×3 数组。D(:,:,:,1)
包含沿 x 轴的位移。imwarp
将这些值添加到D
中的列、行和深度位置,以在A
中生成重新映射的位置。同样,D(:,:,:,2)
和D(:,:,:,3)
包含沿 y 和 z 轴的位移。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
interp
— 使用的插值的类型
"nearest"
| "linear"
| "cubic"
使用的插值的类型,指定为下列值之一。
插值方法 | 描述 |
---|---|
"nearest" | 最近邻点插值。赋给输出像素的值就是输入点所在像素的值。不考虑其他像素。 最近邻点插值是分类图像支持的唯一方法,也是此类型的图像的默认方法。 |
"linear" | 线性插值。线性插值是数值和逻辑图像的默认插值方法。 |
"cubic" | 三次插值 |
数据类型: char
| string
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量后,但对各个参量对组的顺序没有要求。
示例: B = imwarp(A,tform,FillValues=255)
使用填充值 255
如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: B = imwarp(A,tform,"FillValues",255)
使用填充值 255
OutputView
— 输出图像的大小和位置
imref2d
对象 | imref3d
对象
输出图像在世界坐标系中的大小和位置,指定为 imref2d
或 imref3d
空间参照对象。对象具有定义输出图像大小和输出图像在世界坐标系中位置的属性。
您可以使用 affineOutputView
函数创建输出视图。要复制由 imwarp
计算的默认输出视图,请使用 affineOutputView
的默认边界样式 ("CenterOutput"
)。
在指定了输入位移场 D
时,将无法指定 OutputView
。
FillValues
— 填充值
数值标量 | 数值数组 | 字符串标量 | 字符向量 | missing
当输出图像落在输入图像之外时的填充值,指定为表中的值之一。如果输出像素对应的位置经逆变换后完全处于输入图像边界之外,imwarp
将对该输出像素使用填充值。
数值和逻辑图像的默认填充值为 0
。分类图像的默认填充值为 missing
,对应于 <undefined>
类别。
图像类型 | 变换维度 | 填充值的格式 |
---|---|---|
二维灰度或逻辑图像 | 二维 |
|
二维彩色图像或二维多光谱图像 | 二维 |
|
包含 p 个二维图像的序列 | 二维 |
|
N 维图像 | 二维 |
|
三维灰度或逻辑图像 | 二维 |
|
分类图像 | 二维或三维 |
|
示例: 255
表示用白色像素填充 uint8
图像
示例: 1
表示用白色像素填充 double
图像
示例: [0 1 0]
表示用绿色像素填充 double
彩色图像
示例: 对于一个包含两个 double
彩色图像的序列,[0 1 0; 0 1 1]'
表示用绿色像素填充第一个图像,用青色像素填充第二个图像
示例: "vehicle"
表示用 "vehicle" 类别填充分类图像
SmoothEdges
— 填充图像以创建平滑边缘
false
(默认) | true
填充图像以创建平滑边缘,指定为 true
或 false
。当设置为 true
时,imwarp
通过用 FillValues
指定的值填充输入图像,在输出图像中创建更平滑的边缘。当设置为 false
时,imwarp
不会填充图像。对输入图像选择 false
(不填充)会使输出图像的边缘更加锐利。当并排配准两个图像时,这种更锐利的边缘可能有助于最小化接缝失真。
输出参量
算法
imwarp
通过将输出图像中的位置映射到输入图像中的对应位置来确定输出图像中的像素值(逆映射)。当输出图像中的像素中心没有映射到输入图像中的像素中心时,imwarp
会在输入图像中进行插值,以计算输出像素值。
该图说明棋盘图像的平移变换,其中每个方块均为 10×10 像素。按照惯例,输入空间中的坐标轴标记为 u 和 v,输出空间中的坐标轴标记为 x 和 y。使用逆变换,将输出坐标空间中具有 (x,y) 坐标 (25,35) 的像素映射到输入坐标空间中的 (u,v) 坐标 (5,5)。
imwarp
使用世界坐标执行映射。有关详细信息,请参阅图像坐标系。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
imwarp
支持 C 代码生成(需要 MATLAB® Coder™)。请注意,如果您选择通用的MATLAB Host Computer
目标平台,imwarp
生成的代码将使用平台特定的预编译共享库。使用共享库可保留性能上的优化,但适用范围仅限于生成的代码所适用的目标平台。有关详细信息,请参阅Image Processing Toolbox 中代码生成支持的类型。不支持
categorical
数据类型的输入图像。几何变换对象输入
tform
,必须表示二维或三维线性几何变换。插值方法和可选参数名称必须为编译时常量。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
不支持分类数据类型的输入图像。
几何变换对象输入
tform
必须表示二维几何变换对象。插值方法和可选参数名称必须为常量。
不支持空间参照信息输出
RB
。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
版本历史记录
在 R2013a 中推出R2024a: 为三维线性变换生成 C 代码
当 tform
为三维线性几何变换时,您现在可以生成 C 代码。
R2022b: 支持新几何变换对象
从 R2022b 开始,大多数 Image Processing Toolbox™ 函数都使用前乘约定来创建和执行几何变换。因此,您现在可以将 tform
指定为使用前乘约定的几何变换对象,例如 affinetform2d
对象。
尽管您仍可以将 tform
指定为使用后乘约定的几何变换对象,如 affine2d
对象,但不推荐使用这些对象。通过切换到新的前乘几何变换对象,可以简化几何变换工作流。有关详细信息,请参阅Migrate Geometric Transformations to Premultiply Convention。
R2021b: 支持基于线程的环境
imwarp
现在支持基于线程的环境。
R2021a: 增强了对 GPU 加速的支持
imwarp
函数已支持 GPU 加速,现在又扩展了支持,可以使用位移场。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)