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:Mfor j=1:NJ(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的矩阵形式为

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

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

  1. 《MATLAB图像处理实例详解》:学习第七天(2022.10.10)

    4.3 图像的领域和快操作 4.3.1 图像的领域操作 图像的邻域操作是指输出图像的像素点取值决定于输入图像的某个像素点及其邻域内的像素,通常像素点的邻域是一个远小于图像自身尺寸.形状规则的像素块,如 ...

  2. 《MATLAB图像处理实例详解》:CH_7(图像分割技术)

    图像分割技术 ①提取线段 close all;clear all;clc; I=imread('E:\Matlab_exercise\图片素材\xianduan.jpg'); I=rgb2gray(I ...

  3. 用python编写nao机器人舞蹈_python控制nao机器人身体动作实例详解

    python控制nao机器人身体动作实例详解 发布时间:2020-10-23 09:18:22 来源:脚本之家 阅读:89 本文实例为大家分享了python控制nao机器人身体动作的具体代码,供大家参 ...

  4. java 控制jsp_JSP学习之Java Web中的安全控制实例详解

    普通用户界面 修改登录的Servlet,修改后的代码如下: LoginProcess.java代码: package servlet; import javabean.User; import jav ...

  5. expect学习笔记及实例详解【转】

    1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示: 1.1 首行加上/usr/bin/expect 1.2 spawn: 后面加上需要执行的shell命令,比如说 ...

  6. java学习 类变量 类方法_这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下类变量(...

    这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类变量(static) 类变量是该类的所有对象共 ...

  7. mysql数据库select语句用法_mysql学习笔记之完整的select语句用法实例详解

    本文实例讲述了mysql学习笔记之完整的select语句用法.分享给大家供大家参考,具体如下: 本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order ...

  8. 官网实例详解-目录和实例简介-keras学习笔记四

    https://github.com/keras-team/keras/tree/master/examples Keras examples directory Keras实例目录 (点击跳转) 官 ...

  9. matlab 0106,MATLAB控制系统仿真与实例详解.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab MATLAB控制系统仿真与实例详解.pdf6页 本 ...

最新文章

  1. Rust 语言风靡学术界
  2. Vue Router webpack
  3. BCH区块链上的预言机项目——Oracles
  4. USB hub(221)
  5. Surface Computing
  6. SpringMVC处理静态资源
  7. php 如何实现关键字查找,php中如何通过关键字查找文件中包含该关键字的所有行内容呢...
  8. 漫画算法:找出缺失的整数
  9. 德云斗笑社何九华为什么没参加_狗狗的身体卡在了门上,女主人低头一看忍不住笑了:这是膨胀了...
  10. 7-290 鸡兔同笼 (10 分)
  11. android uses-permission 配置详解
  12. vue引用阿里云iconfont使用icon图标(elementUI图标太少)
  13. 【软件分析/静态程序分析学习笔记】1.静态程序分析(Static Program Analysis)介绍
  14. 日历表(点击每一日获得当日日期)
  15. Vj程序设计作业H5
  16. fafa什么意思_fafafafafa 什么意思
  17. 记录第一次使用nvidia tao训练模型的过程
  18. 用Ultra-Light-Fast-Generic-Face-Detector-1MB寻找人眼
  19. 操作指南丨利用IPFS相关技术/工具托管网站
  20. 邻居表项的ucast_solicit数量

热门文章

  1. 如何将CAD转换为WMF格式图片?
  2. 第二章 ArcGIS数据和地理数据库
  3. libtorch模型推理例程
  4. python爬取豆瓣电影信息_Python|简单爬取豆瓣网电影信息
  5. 【前端UI框架推荐】六个前端[web端]精致UI框架
  6. 院士王坚:进入空气稀薄地带
  7. 两复数乘积C语言,C语言程序(两复数矩阵相乘)改错求助
  8. 数据库+算法+职业操守
  9. ricequant量化跟别的量化平台有什么不同?
  10. 智能聊天功能——天气情况篇