Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

affine2d

二维仿射几何变换

说明

affine2d 对象存储有关二维仿射几何变换的信息,并支持正向变换和逆变换。

创建对象

您可以使用以下方法创建 affine2d 对象:

  • imregtform - 使用相似性优化来估计将运动图像映射到固定图像的几何变换。

  • imregcorr - 使用相位相关性来估计将运动图像映射到固定图像的几何变换。

  • fitgeotrans - 估计在两个图像之间映射成对控制点的几何变换。

  • randomAffine2d - 创建随机二维仿射变换。

  • 此处介绍的 affine2d 函数。

说明

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

示例

tform = affine2d(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 transformation is rigid transformation
isSimilarityDetermine if transformation is similarity transformation
isTranslationDetermine if 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

Figure contains an axes. The axes contains 2 objects of type line.

读取并显示图像。

I = imread('kobi.png');
imshow(I)

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

创建一个旋转图像的 affine2d 变换对象。randomAffine2d 函数从区间 [35, 55] 度内的一个连续均匀分布中随机选取一个旋转角度。

tform1 = randomAffine2d('Rotation',[35 55]);

旋转图像并显示结果。

J = imwarp(I,tform1);
imshow(J)

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

变换对象 tform1 将所有图像旋转相同的量。要按随机选择的另一个量旋转图像,请创建一个新的 affine2d 变换对象。

tform2 = randomAffine2d('Rotation',[-10 10]);
J2 = imwarp(I,tform2);
imshow(J2)

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

此示例说明如何创建可用于对齐两个图像的几何变换。

创建棋盘图像,并将其旋转以创建未对齐的图像。

I = checkerboard(40);
J = imrotate(I,30);
imshowpair(I,J,'montage')

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

在固定图像(棋盘)和运动图像(旋转后的棋盘)上定义一些匹配的控制点。您可以使用 Control Point Selection 工具以交互方式定义点。

fixedPoints = [41 41; 281 161];
movingPoints = [56 175; 324 160];

创建可用于对齐两个图像的几何变换,以 affine2d 几何变换对象形式返回。

tform = fitgeotrans(movingPoints,fixedPoints,'NonreflectiveSimilarity')
tform = 
  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

使用 tform 估计值对旋转后的图像重采样,将其与固定图像配准。假彩色叠加图像中的着色区域(绿色和品红色)表示配准错误。错误的原因是控制点之间缺乏精确的对应关系。

Jregistered = imwarp(J,tform,'OutputView',imref2d(size(I)));
figure
imshowpair(I,Jregistered)

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

检查平行于 x 轴的单位向量的旋转和拉伸情况,以还原变换的角度和缩放。

u = [0 1]; 
v = [0 0]; 
[x, y] = transformPointsForward(tform, u, v); 
dx = x(2) - x(1); 
dy = y(2) - y(1); 
angle = (180/pi) * atan2(dy, dx) 
angle = 29.7686
scale = 1 / sqrt(dx^2 + dy^2)
scale = 1.0003

扩展功能

在 R2013a 中推出