Matlab数字图像处理——图像的空间变换

Matlab空间变换函数 imtransform

Matlab空间变换函数 imtransform 可以实现图像仿射变换(如 平移、旋转、剪切、缩放)、投影变换, 该函数可与 maketform 配合使用。不过官网目前更推荐使用 imwarp

用法说明:

  • B = imtransform(A,tform)
    根据 tform 定义的二维空间变换来变换图像 A,并返回变换后的图像 B。如果 A 是彩色图像,则 imtransform 会对每个颜色通道应用相同的二维变换。类似地,如果 A 是三维体或具有三个或更多维度的图像序列,则 imtransform 将相同的二维变换应用于沿更高维度的所有二维平面。对于任意维度的数组变换,请使用 tformarray。
  • B = imtransform(A,tform,interp)
    指定要使用的插值形式。
  • B = imtransform(___,Name,Value)
    使用名称-值对组来控制空间变换的各个方面。
  • [B,xdata,ydata] = imtransform(___)
    还返回输出图像 B 在输出 X-Y 空间中的范围。默认情况下,imtransform 会自动计算 xdata 和 ydata,使得 B 包含整个变换后的图像 A。但是,您可以通过为 XData 和 YData 名称-值对组输入参数指定值来覆盖此自动计算。

变换的原理:

(x’, y’) = T(x, y)

x' = a 0x + a 1y + a 2
y' = b 0x + b 1y + b 2

矩阵形式:
Matlab数字图像处理——图像的空间变换_第1张图片
我们通过控制 a0, a1, a2, b0, b1, b0 来达到图像变换的目的

以下表格为具体变换数值:

放射性变换类型 a0 a1 a2 b0 b1 b0
平移Δx, Δy 1 0 Δx 0 1 Δy
缩放[Sx, Sy] Sx 0 0 0 Sy 0
逆时针旋转角度 cosθ sinθ 0 -sinθ cosθ 0
水平切变shx 1 0 0 shx 1 0
垂直切变shy 1 shy 0 0 1 0
整体切变[shx, shy] 1 shy 0 shx 1 0

以下代码演示图像旋转、缩放、平移、整体切变:

I = imread('火影2.jpg');

%实现图像旋转
Ia = maketform('affine', [cosd(30) -sind(30) 0; sind(30) cosd(30) 0; 0 0 1]); 
Ia = imtransform(I, Ia);

%实现图像缩放
Ib = maketform('affine', [5 0 0; 0 10.5 0; 0 0 1]); 
Ib = imtransform(I, Ib);

%实现图像平移
xform = [1 0 55; 0 1 115; 0 0 1]';
Ic = maketform('affine', xform); 
Ic = imtransform(I, Ic, 'XData', ...
    [1 (size(I, 2) + xform(3, 1))], 'YData', ...
    [1 (size(I, 1) + xform(3, 2))], 'FillValues', 255);

%实现图像整体切变
Id = maketform('affine', [1 4 0; 2 1 0; 0 0 1]); 
Id = imtransform(I, Id, 'FillValues', 255);

figure;
subplot(231);imshow(I);	 %显示原图像
subplot(232);imshow(Ia); %旋转
subplot(233);imshow(Ib); %缩放
subplot(234);imshow(Ic); %平移
subplot(235);imshow(Id); %整体切变

结果演示:
Matlab数字图像处理——图像的空间变换_第2张图片

完整目录

Matlab数字图像处理——图像处理工具箱Image Processing Toolbox
Matlab数字图像处理——图像类型的转换
Matlab数字图像处理——图像文件的读取
Matlab数字图像处理——图像文件的显示
Matlab数字图像处理——视频文件的读写
Matlab数字图像处理——图像的像素运算(灰度变换)
Matlab数字图像处理——图像的空间变换
Matlab数字图像处理——图像的平移、邻域操作、区域选取
Matlab数字图像处理——图像增强
Matlab数字图像处理——图像复原

你可能感兴趣的:(Matlab)