将(w,z)坐标系上的图像变换为(x,y)坐标系上的图像,可以表示为: (x,y) = T{(w,z)
比如: (x,y) = T{(w,z)} = (w/2, z/2)
仿射变换
仿射变换是一种常用矩阵变换,它可以表示成矩阵的形式:
在matlab里面实现
wz = [3 4 1];
T = [2 0 0; 0 3 0; 0 0 1];
xy = wz * T;
wz = xy * inv(T);
为了避免归一化参数,我们可以借助maketform函数:
T = [2 0 0; 0 3 0; 0 0 1];
tform = maketform('affine', T);
wz = [1 2; 3 4];
xy = tformfwd(wz, tform);
wz = tforminv(xy, tform);
对图像应用空间变换
有两种方法:正向映射和反向映射
反向映射的过程是:对每一个输出像素,计算它在输入图像上的位置,根据输入图像上该位置附近的像素值决定输出像素的值。
在matlab中,简单的变换可以直接用单个函数实现。图像缩放使用:
g = imresize(f, scale);
g = imresize(f, [ROW COL]);
图像旋转使用:
g = imrotate(f, angle);
图像剪切使用:
g = imcrop(f, [X, Y, WIDTH, HEIGHT]);
在matlab中使用imtransform实现图像的空间变换。语法是
g = imtransform(f, tform, interp);
其中,interp可以是'nearest','bilinear'或者'bicubic'。
比如:
f = chekerboard(50);
s = 0.8;
theta = pi/6;
T = [s*cos(theta) s*sin(theta) 0;-s*sin(theta) s*cos(theta) 0;0 0 1];
tform = maketform('affine', T);
g = imtransform(f, tform);