图像的几何变换maketform imtransform imresize imcrop

背景

几何变换是将图像像素从一个位置映射到另一个位置。 几何变换有五种常见类型:剪切变换、平移变换、缩放变换、旋转变换和投影变换。 它们如图4.1所示。 在该图中,原始图像显示在(A)中,而变换后的图像显示在(B)到(F)中。
 几何变换可以表示为原始像素位置和新像素位置之间的矩阵方程。
 设f是输入图像。
 设g是对图像f应用几何变换时产生的输出图像。
 设(w,z)是输入图像f中的像素位置,该位置的像素值表示为f(w,z)。
 设(x,y)是输出图像g中对应的像素位置,该位置的像素值表示为g(x,y)。

矩阵形式的常见几何变换

MATLAB中的几何变换MATLAB图像处理工具箱提供了两个可用于对图像执行几何变换的函数:maketform和imtransform。 通常,需要两个主要步骤。

步骤1:使用功能maketform创建所需变换的描述。
  步骤2:使用函数imtransform将在步骤1中找到的变换应用于输入图像。

这两个函数的基本语法如下:

tform = maketform(transform_type,T)

g = imtransform(f,tform)

其中T是如表4.1中所述的3×3矩阵,transform_type可以是一个 在“仿射”,“投影”,“框”,“复合”或“自定义”这五个字符串中,f是输入图像,g是输出图像。

4.3.1执行单个仿射变换

a)例如,当图像Lena.bmp顺时针旋转30o时,我们将计算输出图像。
   运行此程序并研究其步骤。
   修改程序以计算和显示90o,135o和-45o旋转角度的输出图像。

f = imread('Lena.bmp'); % read an image 
%% Step 1: Create a description of the desired transform % Create 3-by-3 transformation matrix  
alpha = pi/6;  
T = [cos(alpha) sin(alpha) 0; -sin(alpha) cos(alpha) 0; 0 0 1] ;
 % Create TFORM structure  tform = maketform('affine', T); 
%% Step 2: Apply the transform on the input image
 g = imtransform(f, tform); imshow(g);

问题1:

基于4.1并使用Lena.bmp作为输入图像,编写一个MATLAB程序来执行以下几何转换并显示输出图像。
   将输入图像在水平方向上缩放1.5倍,在垂直方向上缩放2倍。 输出图像的大小是多少?
   在水平方向上将输入图像剪切0.2倍。
   将输入图像在水平方向上平移50个像素,在垂直方向上平移100个像素。

实现: 

 

%q1.1
close all;clear all;clc 
f = imread('Lena.bmp');
sx=1.5;
sy=2;
T=[sx 0 0
    0 sy 0
    0 0 1];
t1 = maketform('affine',T); 
g = imtransform(f,t1);
figure;
subplot(1,2,1), imshow(f), title('original image');
subplot(1,2,2), imshow(g), title('scale image');
[x,y]=size(g); fprintf('the size of scale image is %.0f, %.0f\n',x,y)
%%
%q1.2
close all;clear all;clc 
f = imread('Lena.bmp');
Ts = maketform('affine',[1 0 0; 0.2 1 0; 0 0 1]);
g2 = imtransform(f,Ts); 
imshow(g2), title('shear image');
%% 
%q1.3
close all;clear all;clc  
f = imread('Lena.bmp'); 
t=[1 0 0;0 1 0;50 100 1];
T = maketform('affine',t);
g3=imtransform(f,T, 'XData', [1 (size(f,2)+t(3,1))], 'YData', [1 (size(f,1)+t(3,2))],'FillValues', 255 );
%图像平移,size(f,2)表示原始图像列数,t(3,1)表示第三行第一列
%g3 = imtransform(f,T);  
imshow(g3), title('transformer image');axis on;

对于上述每个变换,编写相应的3×3变换矩阵。
   4.3.2组合多个仿射变换多个仿射变换的组合也是仿射变换。 例如,让T1,T2和T3为代表三个不同几何变换的3×3矩阵。 在输入图像上连续应用三个变换等效于应用一个合成变换T,由T=T1*T2*T3

a)对于以下给出的三个几何变换,确定变换类型:旋转,缩放,平移,剪切还是投影?


 b)当我们在输入图像Lena.bmp上应用三个转换(首先是T1,然后是T2,最后是T3)时,计算并显示输出图像。
 c)计算T1,T2和T3的乘积T。 当将T给出的几何变换应用于输入图像Lena.bmp时,计算输出图像。
  d)比较(b)和(c)部分的输出图像。 对结果发表评论。

4.3.3投影变换投影变换由八个参数控制:t11,t12,t13,t21,t22,t23,t31和t32。 如果我们知道输入图像中的四个点和输出图像中的对应的四个点,则可以确定这些参数。
   例如,我们将实现一个投影变换,将输入图像中的四个点映射到输出图像中的四个点(图4.3)。 这些点的坐标在表4.2中给出。 

4.2中显示了实现此转换的程序。
   程序使用“图像处理工具箱”中的一个名为cp2tform的函数来查找用于转换的适当参数。
   程序使用imtransform函数将变换应用于输入图像。 在此示例中,我们通过参数“ XData”和“ YData”指定输出图像的大小。
   a)运行清单4.2中的程序并研究其输出。
   b)为四个输出点输入不同的坐标集,并观察输出图像。

4.4用于几何图像操作的其他MATLAB函数除了MATLAB函数maketform和imtransform之外,MATLAB还提供用于简单几何变换的函数。 为了完整起见,在本节中,我们将研究三个这样的命令

imresize:用于调整图像大小

imrotate:用于旋转图像

imcrop:用于裁剪图像或截取图像的矩形区域。
   4.4.1调整图像大小要更改图像大小,请使用imresize功能。 下面的示例说明了调用此函数的不同方法。 

f = imread('Lena.bmp'); % read an image

g = imresize(f, 1.25); % enlarge image 1.25 times

g = imresize(f, 0.5); % reduce image by a half

g = imresize(f, [300 600]);% resize image to 300-by-600 pixels

4.4.2旋转图像要旋转图像,请使用旋转功能。 以下示例显示如何使用此功能。 

f = imrotate(f, 45); % 逆时针选择45度 

f = imrotate(f, -100); % 逆时针%-100度 

4.4.3裁切图像要提取图像的矩形区域,请使用裁切功能。 它的语法为

g = imcrop(f,[min_col min_row region_width region_height])

例如,以下命令提取一个区域,其中左列= 40,顶行= 50,宽度= 300,高度= 200:

g = imcrop  (f,[40 50 300 200]); imshow(g) 

E3。 图像旋转无需使用MATLAB内置函数进行旋转或不变形,就可以编写MATLAB函数以使图像绕其中心顺时针旋转角度为。 该函数的语法为g = rotation_image(f,theta)

提示:假设输入图像(w,z)中的一个点是已知的,那么输出图像中的对应点(x,y)是什么? 用(w,z)来写(x,y)的矩阵方程。
   假设输出图像(x,y)中的点是已知的,那么输入图像中的对应点(w,z)是什么? 用(x,y)来写(w,z)的矩阵方程。
   步骤1:通过计算四个图像角的新坐标来确定输出图像的大小。
   步骤2:针对输出图像中的每个像素位置(x,y)进行循环:o在输入图像中找到对应的点(w,z),o将像素值从输入图像复制到输出图像g(x,  y)= f(w,z)。
   o如果需要,使用最近邻像素插值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值