MATLAB上实现仿射变换

一、执行一般的二维空间需要三步:

1. 定义空间变换的参数;

2. 创建变换结构体TFORM,它定义了你所要执行变换的类型;

TFORM结构体包含了执行变换需要的所有参数。你可以定义很多类型的空间变换,包括放射变换affinetransformations(如平移translation,缩放scaling,旋转rotation,剪切shearing)、投影变换projectivetransformations和自定义的变换customtransformations

创建结构体的方法有两种:使用maketform或者使用cp2tform

3.执行变换

通过将要变换的图像和TFORM结构体传递给imtransform函数即可实现。

二、 如何定义空间变换

定义二维的空间变换需要一个3X3的变换矩阵,也可以通过在输入图像和输出图像上指定对应点的方式由maketform自动创建变换矩阵。

1. 定义变换矩阵

eg.

xform = [ 1  0  0; 0;   20 40  1];

tform_translate = maketform('affine', xform);

2.使用对应点方式

in_points = [11 11;21 11; 2121];

out_points = [51 51;61 51;6161];

tform2 = maketform('affine', in_points,out_points);

3.执行变换

[output xdata ydata]= imtransform(input, tform_translate);

三、如何根据已知的放射变换结构体计算前后对应左边点

eg. 将(w,z)坐标系上的图像变换为(x,y)坐标系上的图像,可以表示为:(x,y)= T(w,z);

在matlab里面实现

wz = [3 41];

T = [2 0 0; 0 30; 0 0 1];

xy = wz *T;

wz = xy *inv(T);  

为了避免归一化参数,我们可以借助maketform函数:

T = [2 0 0; 0 30; 0 0 1];

tform =maketform('affine', T);

wz = [1 2; 34];

xy =tformfwd(wz, tform);

wz =tforminv(xy, tform);




你可能感兴趣的:(matlab,图像处理)