Matlab之图像空间变换(六)

matlab中提供了一个专门的函数imtransform(),可以定义参数来实现多种类型的空间变换,包括放射变换(平移,缩放,旋转,剪切),投影变换等


实际就是与矩阵做运算,而这个矩阵就决定了具体操作类型,下图为一些常用的模板
Matlab之图像空间变换(六)_第1张图片
举个例子:

[I, map] = imread('lena_color_512.tif');
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);

set(0, 'defaultFigurePosition', [100, 100, 1000, 500]);  %修改图像位置的默认设置
set(0, 'defaultFigureColor', [1 1 1]);  %修改图形背景颜色的设置

figure(1)
subplot(121), imshow(Ia), axis on;
subplot(122), imshow(Ib), axis on;

figure(2)
subplot(121), imshow(Ic), axis on;
subplot(122), imshow(Id), axis on;

图一:
旋转操作,逆时针旋转30°,参照模板即可实现
Matlab之图像空间变换(六)_第2张图片
这里也提供另一种方法

I = imread('lena_color_512.tif');
imshow(imrotate(I,30,'nearest')) %旋转30°

图二:
缩放,宽高比5:10.5
Matlab之图像空间变换(六)_第3张图片

图三:
平移,右移55,下移115
Matlab之图像空间变换(六)_第4张图片
图四:
整体切变,实际就是水平偏移和竖直偏移的结合
Matlab之图像空间变换(六)_第5张图片


空间变换知道用哪个矩阵来进行操作就很简单了呢!

你可能感兴趣的:(Matlab,matlab)