Main Content

affine2d

(不推荐)使用后乘约定的二维仿射几何变换

不建议使用 affine2d。请改用 affinetform2d 对象。有关详细信息,请参阅兼容性注意事项

说明

affine2d 对象使用后乘约定存储有关二维仿射几何变换的信息,并支持正变换和逆变换。

创建对象

描述

tform = affine2d 创建一个 affine2d 对象,其默认属性设置对应于恒等变换。

示例

tform = affine2d(t) 将属性 T 设置为指定的二维仿射变换矩阵 t

属性

全部展开

正向二维仿射变换,指定为非奇异矩阵 3×3 数值矩阵。矩阵 T 使用如下约定:

[x y 1] = [u v 1] * T

其中,T 采用以下形式:

 [a b 0;
  c d 0;
  e f 1];

T 的默认值为恒等变换。

数据类型: double | single

此 属性 为只读。

输入点和输出点的几何变换维度,指定为值 2

对象函数

invertInvert geometric transformation
isRigidDetermine if geometric transformation is rigid transformation
isSimilarityDetermine if geometric transformation is similarity transformation
isTranslationDetermine if geometric transformation is pure translation
outputLimitsFind output spatial limits given input spatial limits
transformPointsForwardApply forward geometric transformation
transformPointsInverseApply inverse geometric transformation

示例

全部折叠

创建一个 affine2d 对象,该对象定义围绕原点逆时针方向旋转 30 度。

theta = 30;
tform = affine2d([ ...
    cosd(theta) sind(theta) 0;...
    -sind(theta) cosd(theta) 0; ...
    0 0 1])
tform = 
  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

对点 (10,0) 应用正向几何变换。

[x,y] = transformPointsForward(tform,10,0)
x = 8.6603
y = 5

通过绘制原始点(蓝色)和变换后的点(红色)来验证变换。

plot(10,0,'bo',x,y,'ro')
axis([0 12 0 12])
axis square

将图像读入工作区。

A = imread('pout.tif');

创建一个定义仿射几何变换的 affine2d 对象。此示例同时应用垂直剪切和水平拉伸。

tform = affine2d([2 0.33 0; 0 1 0; 0 0 1])
tform = 
  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

使用 imwarp 对图像应用几何变换。

B = imwarp(A,tform);

显示生成的图像。

figure
imshow(B);
axis on equal;

扩展功能

版本历史记录

在 R2013a 中推出

全部展开

R2022b: 不推荐

从 R2022b 开始,大多数 Image Processing Toolbox™ 函数都使用前乘约定来创建和执行几何变换。因此,不推荐使用 affine2d 对象,因为它使用后乘约定。虽然当前没有删除 affine2d 对象的计划,但您可以通过切换到支持前乘约定的 affinetform2d 对象来简化几何变换工作流。有关详细信息,请参阅Migrate Geometric Transformations to Premultiply Convention

要更新您的代码,请执行以下操作:

  • 将函数名称 affine2d 的实例更改为 affinetform2d

  • 将变换矩阵指定为矩阵 T 的转置矩阵,其中 Taffine2d 对象的 T 属性的值,或用于创建 affine2d 对象的变换矩阵。

不推荐使用推荐的替代项

此示例基于后乘约定中的变换矩阵 T 创建一个 affine2d 对象。

T = [2 0.33 0; 0 1 0; 0 0 1];
tformPost = affine2d(T);

此示例基于变换矩阵 T 的转置创建一个 affinetform2d 对象。

T = [2 0.33 0; 0 1 0; 0 0 1];
tform = affinetform2d(T');

此示例从名为 tformPostaffine2d 对象开始,并基于 tformPostT 属性的转置创建一个 affinetform2d 对象。

T = tformPost.T;
tform = affinetform2d(T');