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 名称-值对组输入参数指定值来覆盖此自动计算。
变换的原理:
矩阵形式:
我们通过控制 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数字图像处理——图像处理工具箱Image Processing Toolbox
Matlab数字图像处理——图像类型的转换
Matlab数字图像处理——图像文件的读取
Matlab数字图像处理——图像文件的显示
Matlab数字图像处理——视频文件的读写
Matlab数字图像处理——图像的像素运算(灰度变换)
Matlab数字图像处理——图像的空间变换
Matlab数字图像处理——图像的平移、邻域操作、区域选取
Matlab数字图像处理——图像增强
Matlab数字图像处理——图像复原