《MATLAB图像处理实例详解》:学习第六天(2022.10.09)

4.2.3 图像的缩放

        MATLAB 图像处理工具箱中提供了函数imresize( )进行图像的缩放操作,其具体的调用格式如下:

  • B=imresize(A, m):该函数返回缩放后的图像B;A为要进行缩放操作的原始图像,可以是灰度图像、彩色图像或者二值图像;m为缩放的尺寸,当m的取值大于0小于1时,A图像被缩小,当m取值大于1后,A图像被放大。
  • B=imresize(A,[mrows ncols]):该函数返回缩放后的图像B;A为要进行缩放操作的原始图像,可以是灰度图像、彩色图像或者二值图像;数组[mrows ncols]说明缩放后B图像的行和列,mrows 或者ncols取值为NaN,则函数会按照输入图像A的纵横比生成ncols 或mrows的数。
  • [B newmap]=imresize(A, map, m):该函数对索引图像A进行缩放;m是缩放比例,它的取值可以是一个数值,也可以是数组[mrows ncols];默认条件下,该函数返回一个新的、最优的、缩放后图像B的颜色映射数组newmap。
  • [...]=imresize(...,method):该函数返回采用method( )方法对索引图像进行缩放的结果。Method取值可选为以下两种:
            说明插值方法的类型: 'ncarest'(默认值)最近邻插值、'bilinear'双线性插值、'bicubic'双三次插值。
            说明选择插值的核函数: 'box'Box型的核函数、'triangle'三角型核函数(bilinear相同)、'Cubic'立方体核函数(bicubic相同)、'lanczos2'Lanczos-2核函和'lanczos3'Lanczos-3核函数。
  • [...]=imresize(...., parameter,value,....):该函数通过设置paramter 的值value,控制图
    像的缩放特性。parameter和 value取值说明如下表所示。
Parameter 说明 Value
'Antialiasing' 对缩放图像进行边缘柔和,取值为布尔型 取值依赖于插值方法,如果插值方法采用'nearest'。默认取值false,对于其他插值方法,默认取值true。
'Colormap' 颜色映射,取值为字符串 取'original',输出图像颜色映射与原图像相同;取'optimized',输出图像颜色映射为最优
'Dither' 颜色抖动,取值为布尔型 是否执行颜色抖动处理,仅对索引图像,默认取值'true'
'Method' 插值方法 同[..]=imresize( ..., method)中的method取值
'OutputSize' 输出图像尺寸 是一个两元素数组[mrows ncols],如mrows或ncols中有取值为 NaN,则根据原输入图像纵横比计算其取值
'Scale' 缩放比例 可以是数值也可以是两元素数组[mrows ncols]


4.2.4 图像的转置

编写图像转置函数 transp.m

%I表示输入的原始图像
%J表示经过转置以后的图像
function J=transp(I)
[M,N,G]=size(I);       %获取输入图像I的大小
I=im2double(I);         %将图像数据类型转换成双精度
J=ones (N, M,G);        %初始化新图像矩阵全为1,大小与输入图像相同
for i=1:M
    for j=1:N
      J(j,i,:)=I(i,j,:) ;       %进行图像转置
    end
end

注:不是简单的旋转


4.2.5 图像的旋转

        图像的旋转变换属于图像的位置变换,通常是以图像的中心为原点,将图像上的所有像素都旋转一个相同的角度。旋转后,图像的大小一般会改变。
        在 MATLAB图像处理工具箱中提供了函数 imrotate( )进行图像的旋转操作,其具体的调用格式如下:

  • B=imrotate(A, angle):该函数是将图像A按照 angle角度以其原点为中心旋转。angle取值大于0,按照逆时针方向旋转;angle 取值小于0,按照顺时针方向旋转。该函数利用'nearest'方法进行邻域插值,能够证生成完整旋转图像B。
  • B=imrotate(A,angle,method):该函数是将图像A按照 angle角度以其原点为中心旋转。旋转时采用method的方法进行插值,method 取值为'nearcst'(默认值)最近邻插值、'bilinear'双线性插值和'bicubic'双三次插值。
  • B=imrotate(A, angle, method, bbox):该函数是将图像A按照 angle 角度以其原点为中心进行旋转,采用method进行插值;bbox说明返回图像的大小,其取值可以是'crop'或者"loose',其中'crop'表示输出图像大小和输入图像大小相等,对旋转后的图像进行裁剪; 'loose'表示使输出的图像足够大包括完整的旋转图像。



4.2.6 图像的剪切

        在MATLAB图像处理工具箱中提供了函数imcrop( )进行图像的剪切操作,其具体的调用格式如下。

  • I2=imcrop(I,rect):该函数是按照四元素数组rect剪切图像I, rect的具体形式为[xmin ymin width height]说明剪切矩形区域大小。
  • [I2,rect]=imcrop(...):该函数是执行后首先显示原图像,然后利用鼠标选择剪切区域,并将剪切区域图像返回给2,将剪切区域的范围大小返回给rect。【要加上显示图像函数才会出现截切区域,如imshow (I2)】
  • X2=imcrop(X, map):该函数是执行后首先按照map 的颜色映射显示图像X,并创建剪切工具与X关联。
  • [X,Y,I2,rect]=imcrop(...):该函数是执行后首先显示原图像,然后利用鼠标选择剪切区域,返回当前剪切区域图像的像素点x和y坐标给X和Y,并将剪切区域的范围大小返回给rect。

4.2.7 图像的空间变换

        在4.2.5节和4.2.6节介绍的图像变换都可归结为图像的空间变换,在 MATLAB 的图像处理工具箱中提供了一个专门的函数intransform( ),可以定义参数实现多种类型的空间变换,包括放射变换(如平移、缩放、旋转、剪切)、投影变换等

  • B=imtransform(A,TFORM):该函数中A是待变换的图像矩阵;TFORM表示为执行空间变换的所有参数的结构体,它是通过函数 maketform( )返回的;B为按照TFORM参数变换后的图像矩阵。
  • B=imtransform(A,TFORM,INTERP):该函数中参数INTERP说明图像空间变换时的进行插值类型,它的取值可以是'nearest'最近邻插值、'bilinear'双线性插值(默认值)和'bicubic'双三次插值;其他参数与B=imtransform(A,TFORM)调用方式相同。
  • [B,XDATA,YDATA]=imtransform(...,.param1,val1,param2,val2...):该函数中用户可以自己制定空间变换的各个参数,paraml 和 param2表示参数名称,val1和 val2为对应参数的取值,这些参数的名称及其取值如下表所示。返回结果中除了变换后的图像B,同时还返回图像B在X-Y空间中的位置XDATA和YDATA。XDATA返回图像B中从第一列到最后一列在工轴的坐标,YDATA返回是图像B从第一行到最后一行在y轴的坐标。
函数imtransform( )中的Parameter和Value
Parameter 取值说明Value
'UData' 说明图像A在UV坐标的空间位置。UData是两元素向量,相应给出图像A从第一列和最后一列在水平轴(U轴)的坐标,默认值 [1 size(A,2)]
'VData’ 说明图像A在UV坐标的空间位置。VData是两元素向量,相应给出图像A从第一行和最后一行的在垂直轴(V轴)的坐标,默认值 [1 size(A,1)]
‘XData' 说明变换后图像B在XY坐标的空间位置。XData是两元素向量,相应给出变换后的图像B从第一列和最后一列在水平轴(X轴)的坐标
'YData' 说明变换后图像B在XY坐标的空间位置。YData是两元素向量,相应给出变换后图像B从第一行和最后一行在垂直轴(Y轴)的坐标
'XYScale" XYScale是一个实数或两元素向量。如果是向量,那么第一个元素说明在XY空间里每个像素的宽度,第二个元素说明在XY空间中每个像素的高度;如果是一个实数,则说明在XY空间中每个像素的高度和宽度相等
'Size' 两元素非负整数向量。说明输出图像B的行和列,如果输入图像A是RGB图像即维数k大于2,则输出图像B的高维与输入相等,即 size(B,k)=size(A,k)
'Fill Values' 对一个矩阵填充1个或几个值。如果输入图像A是二维图像,'FillValues'的取值为实数,如果输入图像A是RGB图像,则'FillValues'的取值应该是三元素向量


        在MATLAB中利用函数intransform( )实现图像的空间变换时,都需要先定义空间变换的参数。对于空间变换参数的定义,MATLAB也提供了相应的函数 maketform( ),它的作用是创建进行空间变换的参数结构体。

  • T=maketform('affine',A):该函数中返回一个N维的放射性变换参数结构体T,输入参数A是一个(N+1)*(N+1)或者(N+1)*N的矩阵。如果A是(N+1)*(N+1)的矩阵,A的最后一列为[zcros(N,1);1]。
  • T=maketform('affine',U,X):该函数中返回的是一个二维放射性变换参数结构体T,输入U的每一行映射X的每一行,U和X都是3×2的矩阵,其中U是输入三解形三个角的空间坐标矩阵,X是映射得到三角形的三个角的空间坐标矩阵。
  • T=maketform('projective',A):该函数返回一个N维投影变换结构体参数T,A是一个(N+1)*(N+1)的非奇异矩阵,A(N+1,N+1)不能为0。
  • T=maketform('projective',U,X):该函数返回一个二维投影变换结构体参数T,输入U的每一行映射X的每一行,U和X都是4×2的矩阵,其中U是输入四边形顶角的空间坐标矩阵,X是映射得到四边形四个顶点的空间坐标矩阵。
  • T= maketform('custom',NDIMS_IN,NDIMS_OUT,FORWARD_FCN,INVERSE_
  • FCN,TDATA):该调用格式中返回一个用户自定义变换的参数结构体T。NDIMS_IN 和 NDIMS_OUT说明的是输入和输出的维数,FORWARD_FCN 和INVERSE_FCN分别表示正向变换函数和逆向变换函数的句柄。

《MATLAB图像处理实例详解》P155——例4-26,利用函数imtransform( ),实现图像的平移、缩放、旋转和剪切,代码如下

close all; clear all; clc;
[I, map] =imread ('R.jpg');                                %读入图像
Ta = maketform ( 'affine', ...
    [cosd(30) sind(30) 0; -sind(30) cosd(30) 0;0 0 1]);    %创建旋转参数结构体
Ia=imtransform(I,Ta) ;                                      % 实现图像旋转
Tb = maketform ( 'affine', [5 0 0;0 10.5 0;0 0 1]');        %创建缩放参数结构体工
Ib =imtransform(I,Tb);                                      % 实现图像缩放
xform= [1 0 55; 0 1 115;0 0 1]';                            % 创建图像平移参数结构体
Tc=maketform('affine',xform);
Ic= imtransform (I,Tc,'XData', ...
    [1 (size(I,2)+xform(3,1))], 'YData', ...
    [1 (size(I,1)+xform (3,2))],'FillValues',255 );         %进行图像平移
Td=maketform('affine',[1 4 0;2 1 0;0 0 1]');            % 创建图像整体切变的参数结构体
Id =imtransform(I, Td, 'Fillvalues',255);                   %实现图像整体切变
figure,
subplot (121) ,imshow(Ia) ,axis on;
subplot(122),imshow (Ib) ,axis on;
figure,
subplot(121),imshow(Ic) ,axis on;
subplot(122) ,imshow (Id) ,axis on;

放射性变换参数结构体T的矩阵形式为

\begin{bmatrix} a_{0} & a_{1} &a_{2} \\ b_{0} & b_{1} &b_{2} \\ 1& 1 &1 \end{bmatrix}

详情看书《MATLAB图像处理实例详解》P155

《MATLAB图像处理实例详解》:学习第六天(2022.10.09)_第1张图片

你可能感兴趣的:(MATLAB图像处理实例详解,matlab,图像处理,学习)