2026a

# imwarp


对图像应用几何变换

函数库: TyImageProcessing

# 语法

B, = imwarp(A,tform)
B, = imwarp(A,D)
B,RB = imwarp(A,RA,tform)
___ = imwarp(___,interp)
___ = imwarp(___;Name=Value)

# 说明

B, = imwarp(A,tform) 根据几何变换 tform 来变换数值、逻辑或分类图像 A。该函数在 B 中返回变换后的图像。示例


B, = imwarp(A,D) 根据位移场 D 变换图像 A。


B,RB = imwarp(A,RA,tform) 变换由图像数据 A 指定的空间参照图像及其关联的空间参照对象 RA。输出是由图像数据 B 指定的空间参照图像及其关联的空间参照对象 RB。


___ = imwarp(___,interp) 指定要使用的插值的类型。


___ = imwarp(___;Name=Value) 指定名称-值参量来控制几何变换的各个方面。

# 示例

对图像应用水平剪切

读取并显示灰度图像。

using TyImageProcessing

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)

# 输入参数

A — 要变换的图像
数值数组 | 逻辑数组

要变换的图像,指定为任意维度的数值或逻辑数组。

数据类型: Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | UInt8 | UInt16 | UInt32 | UInt64 | Bool

tform — 几何变换
几何变换对象

几何变换,指定为表中列出的几何变换对象。

二维线性几何变换:

几何变换对象 描述
transltform2d 平移变换
rigidtform2d 刚性变换:平移和旋转
simtform2d 相似变换:平移、旋转和各向同性缩放
affinetform2d 仿射变换:平移、旋转、各向异性缩放、翻转和剪切
projtform2d 投影变换
D — 位移场
数值数组

位移场,指定为数值数组。位移场定义输出图像的网格大小和位置。位移值以像素为单位。imwarp 假设 D 参照默认的内部坐标系。

  • 如果 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] 包含沿 yz 轴的位移。

数据类型: Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | UInt8 | UInt16 | UInt32 | UInt64 | Bool

RA — 要变换的图像的空间参照信息
imref2d 对象 | imref3d 对象

要变换的图像的空间参照信息,对于二维变换指定为 imref2d 对象,对于三维变换指定为 imref3d 对象。

interp — 使用的插值的类型
"nearest" | "linear" | "cubic"

使用的插值的类型,指定为下列值之一。

插值方法 描述
"nearest" 最近邻点插值。赋给输出像素的值就是输入点所在像素的值。不考虑其他像素。最近邻点插值是分类图像支持的唯一方法,也是此类型的图像的默认方法。
"linear" 线性插值。线性插值是数值和逻辑图像的默认插值方法。
"cubic" 三次插值

数据类型: String

# 名称-值参数

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

示例: B = imwarp(A,tform;FillValues=255) 使用填充值 255

OutputView — 输出图像的大小和位置
imref2d 对象 | imref3d 对象

输出图像在世界坐标系中的大小和位置,指定为 imref2d 或 imref3d 空间参照对象。对象具有定义输出图像大小和输出图像在世界坐标系中位置的属性。

您可以使用 affineOutputView 函数创建输出视图。要复制由 imwarp 计算的默认输出视图,请使用 affineOutputView 的默认边界样式 ("CenterOutput")。

在指定了输入位移场 D 时,将无法指定 OutputView。

FillValues — 填充值
数值标量 | 数值数组

当输出图像落在输入图像之外时的填充值,指定为表中的值之一。如果输出像素对应的位置经逆变换后完全处于输入图像边界之外,imwarp 将对该输出像素使用填充值。

数值和逻辑图像的默认填充值为 0。

图像类型 变换维度 填充值的格式
二维灰度或逻辑图像 二维 数值标量
二维彩色图像或二维多光谱图像 二维
  • 数值标量
  • 包含 c 个元素的数值向量,为 c 个通道中的每个通道指定一个填充值。对于彩色图像,通道数 c 为 3。
  • 包含 p 个二维图像的序列 二维
  • 数值标量
  • c×p 数值矩阵。对于灰度图像,通道数 c 为 1,对于彩色图像为 3。
  • N 维图像 二维
  • 数值标量
  • 数值数组,其大小与输入图像 A 的维度 3 至 N 相匹配。例如,如果 A 是 200×200×10×3,则 FillValues 可以是 10×3 数组。
  • 三维灰度或逻辑图像 二维 数值标量
    SmoothEdges — 填充图像以创建平滑边缘
    false (默认) | true

    填充图像以创建平滑边缘,指定为 true 或 false。当设置为 true 时,imwarp 通过用 FillValues 指定的值填充输入图像,在输出图像中创建更平滑的边缘。当设置为 false 时,imwarp 不会填充图像。对输入图像选择 false(不填充)会使输出图像的边缘更加锐利。当并排配准两个图像时,这种更锐利的边缘可能有助于最小化接缝失真

    # 输出参数

    B — 变换后的图像
    数值数组 | 逻辑数组

    变换后的图像,以与输入图像 A 具有相同数据类型的数值或逻辑数组形式返回。

    RB — 变换后图像的空间参照信息
    imref2d 对象 | imref3d 对象

    变换后图像的空间参照信息,以 imref2d 或 imref3d 空间参照对象形式返回。

    数据类型: affinetform2d