Matlab图形界面图像的旋转、平移和缩放要点
- 格式:doc
- 大小:3.83 MB
- 文档页数:23
实验报告课程名称:数学实验实验名称:平而图形的几何变换指导教师:实验目的、要求:1.了解儿何变换的基本概念。
2.了解平移、伸缩、对称、旋转等变换。
3.学习掌握MATLAB软件冇关的命令。
实验仪器:安装有MATLAB软件的计算机实验步骤:一、实验原理1.几何变换程的基本概念在平面直角坐标系下,点A由坐标(x,y)表示,如果存在两个函数*=£(兀,刃,y'= f2(x,y)将点A(x, y)映射成点A\x,y),则称函数.齐,.%确定了一个平面上的几何变换丁。
如果能从上面的方程组中反解出(x,y):兀=g](*,卩),)'=g2(兀',)') 则称两数®,g2确定了卩的逆变换厂'。
2.几种常见的几何变换常见的平面图形的儿何变换有平移、伸缩、对称、旋转等变换。
平移变换:把函数_y = f(x)变化为y = f(x + a)f可将函数图形向右平移d个单位,把函数),=于(x)变化为y = fM + a),可将函数图形向上平移d个单位,伸缩变换:把函数y = /(兀)变化为y = f(sx),函数图形会压缩或伸长,其作是改变水平轴的刻度单位,因此$称为水平刻度参数,把函数y =/(兀)变化为y = “(x),则可改变垂直轴的刻度单位。
旋转变换:设函数图形以原点为中心,逆吋针旋转。
也,原来的坐标(兀,刃变为新的坐标(X,Y),旋转变换为*X = xcos& — ysin。
VY = xsinO+ ycosd对称变换:把函数y = /(兀)变化为y = -/(-x),函数图形关于原点对称;把函数y = /(X)变化为y = /(-%),函数图形关于y轴对称;把函数y =(兀)变化为y = -f(x), 函数图形关于x轴对称。
3.几何变换的矩阵表示平移变换、缩放变化、旋转变换、对称变换可以写成如下统一的形式:上式可写为如下矩阵表示形式X~a Ha\lb\Y =A yai\。
Matlab图形界面图像的旋转、平移和缩放姓名:班级:学号:目录问题描述 (2)摘要 (2)正文 (3)1、界面设计 (3)2、打开图片功能 (4)3、实现图片的任意角度的旋转 (5)4、图像的平移 (8)5、图像的缩放(放大与缩小) (12)实验心得 (16)附录: (16)Matlab图形界面操作------图像的旋转、平移和缩放问题描述期末运用学习的matlab知识通过图形用户界面对图片进行操作,实现如下功能。
●能够查找和读取计算机中存储图像。
●实现图像的旋转、平移、缩放等几何变换。
●通过matlab界面功能实现界面的完美布局。
●编写代码和回调函数实现上述功能。
摘要本次任务旨在完成以下几个任务:●整体分为四大模块:原图、旋转、平移和缩放。
●利用数字图像处理技术,以MATLAB为平台,建立一个实现设计主题的简易处理系统。
●能显示输入图像、输出图像。
●程序代码要有注释说明,调用MATLAB函数要清楚并理解函数的功能、使用范围,在设计说明书中要写清楚函数的功能和参数意义。
●完成自己课程设计说明书。
正文1、界面设计(1)在MATLAB命令窗口中输入“guide”,确定后,弹出GUI窗口。
(2)本次设计中,包含两个坐标轴(axes1、axes2),分别显示原图和处理后的图像。
包含六个按钮(Push Button),分别实现“打开图片、保存处理后的图片、旋转、平移、放大、缩小以及退出功能”。
(3)旋转功能同时可以实现选择0—360度任意的度数,当选择不同的度数后,axes2位置就会显示不同选择角度的图片。
如果需要保存该图片可以单击保存按钮进行保存。
(4)平移功能的实现,当单击平移按钮,可以有一个默认的平移位置。
在设计中预设了几个固定位置,可以选择,分别是X单位Y单位方向都可以选择。
达到平移的目的。
(5)放大和缩小功能类似,在界面上表现为选择不同的数据,反映出来不同大小的图片。
(6)操作完成后,点击退出功能,将询问是否退出,如果退出则点击“是”,不退出点击“我还要看看”。
MATLAB技术图像旋转实例导言图像处理是计算机科学领域中的一个重要分支,而旋转是图像处理中经常遇到的一个操作。
在本文中,我们将使用MATLAB来演示如何使用该软件进行图像旋转。
一、图像旋转的基本概念在图像处理中,旋转是指将图像绕着一个中心点进行旋转变换,使得图像在平面上发生方向的变化。
旋转操作通常可以通过应用旋转矩阵来实现。
旋转矩阵包含了旋转角度和旋转中心等信息,通过将旋转矩阵应用于图像,我们可以得到旋转后的图像。
二、MATLAB中的图像旋转函数MATLAB提供了多种图像旋转函数,其中最常用的是imrotate函数。
该函数可以实现对图像进行任意角度的旋转操作。
使用imrotate函数的基本用法如下:rotated_image = imrotate(original_image, angle);其中,original_image是待旋转的图像,angle是旋转的角度。
通过该函数,我们可以得到旋转后的图像rotated_image。
三、MATLAB实例:图像旋转操作为了更好地理解MATLAB中的图像旋转函数的使用,我们将通过一个实际的例子来演示。
假设我们有一张名为"lena.jpg"的图像,我们希望将该图像按顺时针方向旋转45度。
首先,我们需要在MATLAB中加载该图像。
可以使用imread函数实现图片的加载:image = imread('lena.jpg');然后,我们使用imrotate函数对图像进行旋转操作:rotated_image = imrotate(image, 45);最后,我们使用imshow函数来显示旋转后的图像:imshow(rotated_image);通过运行上述代码,我们可以在MATLAB的图像窗口中看到旋转后的图像。
如图1所示,旋转后的lena图像呈现出45度旋转的效果。
图1:旋转后的lena图像四、其他图像旋转技术除了imrotate函数,MATLAB还提供了其他的图像旋转技术,如基于仿射变换的图像旋转、基于坐标变换的图像旋转等。
课程设计任务书学生姓名:专业班级:通信1003班指导教师:郭志强工作单位:信息工程学院题目: 通信工程应用技术初始条件:(1)使用matlab软件进行操作(2)选择一个图像进行处理要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)编程实现一幅图像的平移、镜像、旋转、缩小和放大。
(2)给出所用算法的理论依据和必要的推导过程,给出原始图像和处理后的图像。
时间安排:第15周:安排任务,布置题目;第15—18周:设计仿真,撰写报告第19周:完成设计,提交报告,答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)Abstract ........................................................................................................................................................... I I 1 MA TLAB简介 .. (1)1.1 MA TLAB用途 (1)2图像选择及变换 (4)2.1 原始图像选择读取 (4)2.2 图像放大和缩小 (6)2.2.1 图像放大缩小的知识 (6)2.2.2 函数说明及参数选择 (8)2.2.3 源程序及运行结果 (8)2.3 图像任意角度的旋转 (10)2.3.1 函数说明及参数选择 (10)2.3.2 源程序及运行结果 (10)2.4 图像的平移 (12)2.4.1 函数说明及参数选择 (12)2.4.2 源程序及运行结果 (13)2.5 图像经过镜像 (13)3.5.1 函数说明及参数选择 (13)2.5.2 源程序及运行结果 (14)4 感悟体会小结 (17)5 参考文献 (18)附录 (19)全部源程序代码: (19)摘要MATLAB是—套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成—个方便的、界面友好的用户环境。
编程实现⼀幅图像的平移、镜像、旋转、缩⼩和放⼤。
课程设计任务书学⽣姓名: zhh 专业班级:通信1002班指导教师:徐⽂君⼯作单位:信息⼯程学院题⽬: 通信⼯程应⽤技术综合训练与实习初始条件:1.数字图像处理课程相关知识。
2.Matlab软件的软件编程应⽤与仿真。
要求完成的主要任务:任务:编程实现⼀幅图像的平移、镜像、旋转、缩⼩和放⼤。
要求:1.给出所⽤算法的理论依据和必要的推导过程。
2.给出原始图像和处理后的图像。
时间安排:序号设计内容所⽤时间1根据设计任务确定实验⽅案2天2根据实验条件进⾏电路的测试,并对结果进⾏分析7天3撰写课程设计报告1天合计2周指导教师签名: 年⽉⽇系主任签名: 年⽉⽇⽬录摘要..................................................................................I Abstract ............................................................................. II 1 图像的⼏何变换.. (1)1.1图像⼏何变换内容 (1)1.2 Matlab仿真使⽤的主要函数 (1)2图像的平移变换 (3)2.1图像平移变换原理 (3)2.2图像平移变换的matlab实现 (3)3图像的镜像变换 (4)3.1 图像镜像变换原理 (5)3.2 图像镜像变换的matlab实现 (6)4图像的旋转变换 (6)4.1图像旋转变换原理 (7)4.2 图像旋转变换的matlab实现 (8)5图像的⽐例变换 ..................................................... 错误!未定义书签。
5.1 图像⽐例变换原理 (10)5.2 图像⽐例变换的matlab实现 (10)6 ⼼得体会 (14)参考⽂献 (15)附录 (16)摘要图像是对三维实际景物的平⾯投影,图形图像处理主要是通过计算机对图像进⾏处理,从⽽达到预期的效果的技术。
MATLAB是一个包含大量计算算法的集合。
其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。
函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。
在通常情况下,可以用它来代替底层编程语言,如C和C 。
在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。
MATLAB的这些函数集包括从最简单最基本的函数到诸如距阵,特征向量、快速傅立叶变换的复杂函数。
函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。
(4)出色的图形处理功能MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和距阵用图形表现出来,并且可以对图形进行标注和打印。
高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。
可用于科学计算和工程绘图。
新版本的MATLAB 对整个图形处理功能作了很大的改进和完善,使他不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB 同样表现了出色的处理能力。
同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。
另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。
(5)应用广泛的模块集合工具箱MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。
一般来说,他们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。
目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP 与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。
湖南商学院课程_设计目录第一章绪论§ 1非彩色图像在Matlab中的矩阵 (3)§ 2彩色图像在Matlab中的矩阵 (4)第二章图像的镜像变换§ 1图像的水平方向镜像 (5)§ 2图像的垂直方向镜像 (8)第三章图像的旋转变换§ 1图像的旋转变换 (10)第四章图像的转置变换§ 1非彩色图像的转置变换 (13)§ 3彩色图像的转职变换 (13)第五章图像的缩放变换§ 1双线性内插法简介 (15)§ 2图像的缩放 (16)第六章图像的平移变换§ 1图像的平移变换 (19)第一章绪论§ 1非彩色图像在Matlab中的矩阵非彩色图像可以定义为一个二维函数f(x, y),其中x和y是Euclid空间(平面)坐标,任意一个二元组(x,y)处的值f称为该点处的强度或者灰度。
当x,y 和灰度值f是离散的数值时,我们称改图像为数字图像。
每一个非彩色图像在Matlab中都是一个二维矩阵A n m,而我们知道变换是指集合自身到自身的映射,所以对非彩色图像的变换其实质就是对二维矩阵人m 进行变换得到另一个二维矩阵B.m的过程。
例如图像1.1图1.1其在Matlab中的表示:>> A=imread('Fig3.24.jpg');>> size(A)ans = 298 252 %A是一个298行252列的矩阵§ 2彩色图像在Matlab中的矩阵不同于非彩色图像,每一个彩色图像在Maltab中都是三维矩阵A, m s。
例如图像2.1图2.1>> A=imread('Koala.jpg');>> size(A)ans =768 1024 3A是一个三维矩阵,768行1024列3层,3层是RGB三色的数值。
示意图:第二章图像的镜像变换§ 1图像的水平方向镜像1.1对于非彩色图像实现水平镜像操作,我们每次只需提取一列,使其与对称的列交换位置即可:aij a iiI Ia2 j a2i‘: 其中j 1I I I Ia nj」.a ni」原图像经过变换后为:132 152 210例1:对99 172 10进行水平方向镜像。
Func的1 2 3分别对应平移、旋转、缩放功能function []=transition(func,I)if func==1delta_x=str2double(inputdlg('请输入向右平移量', 'INPUT scale factor', 1, {'-60'})); %负数为向左delta_y=str2double(inputdlg('请输入向下平移量', 'INPUT scale factor', 1, {'-89'})); %负数为向上img=imread(I);%读入图像B=size(img); %获取原始图像的高和宽imgn(:,:,:)=zeros(B(1)+abs(delta_y),B(2)+abs(delta_x));%创建平移图像输出矩阵rot=[1 0 0;0 1 0;delta_y delta_x 1]; %寻求新坐标用到的平移矩阵pix1=[1 1 1]*rot; %pix1(1),pix1(2)分别为变换后图像的左上角的y,x,分别为1+delta_y,1+delta_x,这种三维空间坐标被称为齐次坐标表示法pix4=[B(1) B(2) 1]*rot; %pix4(1),pix4(2)分别为变换后图像的右下角的y,x,分别为v+delta_y,u+delta_xfor q=1:3 %为每个通道做相同处理%%向右下方移动if delta_x>=0 && delta_y>=0 %如果两个平移量都为正for y=pix1(1):pix4(1) %新图像纵坐标从最开始到结束处for x=pix1(2):pix4(2) %新图像横坐标从最开始到结束处pix=[y x 1]/rot; %pix矩阵经计算后为[y-delta_y,x-delta_x,1] if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=B(1) && pix(2)<=B(2)%这里是判断是否有像素可进行平移,例如:若y-delta_y<0.5,则说明没有找到可平移的像素坐标imgn(y,x,q)=img(round(pix(1)),round(pix(2)),q); %新的图像(x,y)点的像素值选取(x-delta_x,y-delta_y)处的像素值,则实现了平移endendendend%%向左下方移动if delta_x<0 && delta_y>=0for y=pix1(1):pix4(1)for x=pix1(2):pix4(2)pix=[y x 1]/rot;if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=B(1) && pix(2)<=B(2)imgn(y,x-delta_x,q)=img(round(pix(1)),round(pix(2)),q);endendendend%%向左上方移动if delta_x<0 && delta_y<0for y=pix1(1):pix4(1)for x=pix1(2):pix4(2)pix=[y x 1]/rot;if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=B(1) && pix(2)<=B(2)imgn(y-delta_y,x-delta_x,q)=img(round(pix(1)),round(pix(2)),q);endendendend%%向右上方移动if delta_x>=0 && delta_y<0for y=pix1(1):pix4(1)for x=pix1(2):pix4(2)pix=[y x 1]/rot;if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=B(1) && pix(2)<=B(2)imgn(y-delta_y,x,q)=img(round(pix(1)),round(pix(2)),q);endendendendendimshow(uint8(imgn));title('平移');endif func==2img=imread(I); %读入原图像B=size(img);%获取图像的高度和宽度K1 =str2double(inputdlg('请输入列缩放倍数', 'INPUT scale factor', 1, {'0.5'}));%行默认变为原来的0.5倍K2 =str2double(inputdlg('请输入行缩放倍数', 'INPUT scale factor', 1, {'0.5'}));%列默认变为原来的0.5倍width = K1 * B(1); %缩放后的图像宽度height = K2 * B(2); %缩放后的图像高度for p=1:3imgn(:,:,p) = uint8(zeros(round(width),round(height))); %创建输出图像矩阵,round是进行数值取整endwidthScale = B(1)/width; %列缩放倍数的倒数heightScale = B(2)/height;%行缩放倍数的倒数for q=1:3for x = 5:width - 5 % 5是为了防止矩阵超出边界溢出for y = 5:height - 5oldX = x * widthScale; % oldX,oldY为原坐标,x,y为新坐标oldY = y * heightScale;if(oldX/double(uint16(oldX)) == 1.0) && (oldY/double(uint16(oldY)) == 1.0) %判断oldx,oldy是否为整数imgn(x,y,q) = img(int16(oldX),int16(oldY),q);elsea = double(round(oldX));b = double(round(oldY)); %若不是整数四舍五入后把临近值赋过去imgn(x,y,q) = img(a,b,q);endendendendimshow(imgn);title('最邻近插值缩放');endif func==3H=1; %索引pix中第一个元素,即高度W=2; %索引pix中第二个元素,即宽度angle=str2double(inputdlg('请输入旋转角度', 'INPUT scale factor', 1, {'45'})); %要旋转的角度,旋转方向为顺时针img=imread(I); %这里v为原图像的高度,u为原图像的宽度B=size(img); %读入高度和宽度theta=angle/180*pi; %将角度单位换算成弧度单位rot=[cos(theta) -sin(theta) 0;sin(theta) cos(theta) 0;0 0 1]; %寻求坐标所用到的旋转矩阵pix1=[1 1 1]*rot; %变换后图像左上点的坐标pix2=[1 B(2) 1]*rot; %变换后图像右上点的坐标pix3=[B(1) 1 1]*rot; %变换后图像左下点的坐标pix4=[B(1) B(2) 1]*rot; %变换后图像右下点的坐标height=round(max([abs(pix1(H)-pix4(H))+0.5 abs(pix2(H)-pix3(H))+0.5])); %变换后图像的高度,为避免溢出要加上0.5,相当于进一法width=round(max([abs(pix1(W)-pix4(W))+0.5 abs(pix2(W)-pix3(W))+0.5])); %变换后图像的宽度for p=1:3imgn(:,:,p)=zeros(height,width); %创建图像输出矩阵enddelta_y=abs(min([pix1(H) pix2(H) pix3(H) pix4(H)])); %取得y方向的负轴超出的偏移量(Y轴坐标是向下的)delta_x=abs(min([pix1(W) pix2(W) pix3(W) pix4(W)]));%取得x方向的负轴超出的偏移量for q=1:3for y=1-delta_y:height-delta_yfor x=1-delta_x:width-delta_xpix=[y x 1]/rot;if pix(H)>=0.5 && pix(W)>=0.5 && pix(H)<=B(1) && pix(W)<=B(2)imgn(y+delta_y,x+delta_x,q)=img(round(pix(H)),round(pix(W)),q);endendendendimshow(uint8(imgn));title('最近邻插值旋转');end。
用MATLAB编程实现数字图像旋转摘要:文章论述了用Matlab编程实现数字图像旋转的基本方法,从计算机几何坐标中的图像旋转矩阵表示着手,给出了图像旋转变换的推导过程,用简单综合插值方法,基本解决了数字图像旋转后出现的空洞问题,并通过Matlab编程工具进行实验验证。
关键词:数字图像旋转;移动变换;旋转矩阵变换;简单综合插值。
数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
目前,数字图像处理的信息大多是二维信息。
由于数据量大,因此对计算机的计算速度、存储容量等要求较高。
随着微型计算机性能的提高,原来以大型机、小型机为主机的图像处理系统演变为以微机为主机的结构,其应用也迅速普及,当前图像处理技术在工业自动化、工业检测、遥感探测、军事、航空、生物医学等各个方面都发挥着十分重要的作用。
图像旋转是一种常用的数字图像处理技术,传统的图像旋转都是在二维空间中进行的,由于旋转后图像像素点坐标不再是整数,故旋转后必须对像素点灰度进行一维插值运算或二维插值运算,尤其是当对旋转后的图像质量要求较高时,需要采用高阶插值运算。
文章从通用的图像旋转矩阵着手,给出了图像旋转变及换简单综合插值的推导过程,并用Matlab编程工具进行实验验证图像旋转结果。
1Matlab简介MATLAB是矩阵实验室(Matrix Laboratory)之意。
除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,可视化建模仿真和实时控制等功能。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C、C#等语言来解算相同的事情简捷得多。
2图像旋转矩阵一般图像的旋转是以图像的中心为原点,将图像上所有像素都旋转一个相同角度。
图像的旋转变换后,图像的大小会改变。
在图像旋转变换中既可以把转出显示区域的图像截去,也可以扩大范围(即是移动图像),以显示所有的图像。
设点旋转角后的对应点为,r是点到原点(0,0)的距离,在旋转过程中,r保持不变。
Matlab图形界面图像的旋转、平移和缩放姓名:班级:学号:目录问题描述 (2)摘要 (2)正文 (3)1、界面设计 (3)2、打开图片功能 (4)3、实现图片的任意角度的旋转 (5)4、图像的平移 (8)5、图像的缩放(放大与缩小) (12)实验心得 (16)附录: (16)Matlab图形界面操作------图像的旋转、平移和缩放问题描述期末运用学习的matlab知识通过图形用户界面对图片进行操作,实现如下功能。
●能够查找和读取计算机中存储图像。
●实现图像的旋转、平移、缩放等几何变换。
●通过matlab界面功能实现界面的完美布局。
●编写代码和回调函数实现上述功能。
摘要本次任务旨在完成以下几个任务:●整体分为四大模块:原图、旋转、平移和缩放。
●利用数字图像处理技术,以MATLAB为平台,建立一个实现设计主题的简易处理系统。
●能显示输入图像、输出图像。
●程序代码要有注释说明,调用MATLAB函数要清楚并理解函数的功能、使用范围,在设计说明书中要写清楚函数的功能和参数意义。
●完成自己课程设计说明书。
正文1、界面设计(1)在MATLAB命令窗口中输入“guide”,确定后,弹出GUI窗口。
(2)本次设计中,包含两个坐标轴(axes1、axes2),分别显示原图和处理后的图像。
包含六个按钮(Push Button),分别实现“打开图片、保存处理后的图片、旋转、平移、放大、缩小以及退出功能”。
(3)旋转功能同时可以实现选择0—360度任意的度数,当选择不同的度数后,axes2位置就会显示不同选择角度的图片。
如果需要保存该图片可以单击保存按钮进行保存。
(4)平移功能的实现,当单击平移按钮,可以有一个默认的平移位置。
在设计中预设了几个固定位置,可以选择,分别是X单位Y单位方向都可以选择。
达到平移的目的。
(5)放大和缩小功能类似,在界面上表现为选择不同的数据,反映出来不同大小的图片。
(6)操作完成后,点击退出功能,将询问是否退出,如果退出则点击“是”,不退出点击“我还要看看”。
2、打开图片功能进入程序界面后,要实现几何操作,需要先打开一张图片。
单击打开图片按钮,可以选择图片路径,从存储图片的地址任意旋转一张图片,图片就会显示在axes1的位置。
效果如2-1所示:图2-1如果想再打开一张图片进行操作,可以再次单击“打开图片”按钮进行操作,效果如图2-2所示:图2-23、实现图片的任意角度的旋转该功能回调函数使用的是imrotate函数,其调用格式如下所示:(1)函数说明及参数选择I0=imrotate(loadImage,value);I0是处理后的图片。
loadImage是定义的全局变量,当打开图片后,将新图片的值赋予该变量。
Value值是传递过来的度数值。
(2)问题分析如果value值是一个定值,在实现旋转功能时,仅能在一个位置,通过优化,实现任意角度旋转。
(3)运用的函数和方法旋转功能涉及imrotate以及imshow函数,详细方法参考源代码。
(4)实验结果点击旋转按钮,默认值为180度,效果如图3-1所示:图3-1(旋转180度)拖动滑动条,选择其他角度,实现旋转功能。
旋转72度效果如图3-2所示:图3-2(旋转72度)旋转0度即不进行旋转,效果如图3-3所示:图3-3(旋转0度)通过验证,随意拖动滑动条,均可以正常显示,如图4-4所示:图3-4更换其他图片实现旋转功能,效果图3-5所示:图3-5(5)结果分析:一般图像的旋转是以图像的中心为原点,旋转一定的角度,也就是将图像上的所有像素都旋转一个相同的角度。
旋转后图像的大小一般会改变,即可以把转出显示区域的图像截去,或者扩大图像范围来显示所有的图像。
图像的旋转变换也可以用矩阵变换来表示。
4、图像的平移(1)问题分析:图像平移是将一幅图像中所有的点都按照指定的平移量在水平、垂直方向移动,平移后的图像与原图像相同。
平移后的图像上的每一点都可以在原图像中找到。
(2)实验方法:设(x0,y0)为原图像上的一点,图像水平平移量△X,垂直平移量为△Y,则平移后点(x0,y0)的坐标变为(x1,y1)。
(x0,y0)与(x1,y1)之间的关系为:x1=x0+△x;y1=y0+△y。
该功能可以通过函数translate函数实现。
关键代码se=translate(strel(1),[100 -100]); strel(1)表示图像不变,进行[Y X]方向的平移,se是设置的图像平移的距离。
平移变量的旋转通过switch来判断并进行传递。
(3)实验结果:平移量为(-100,-100)时,效果如图4-1所示:图4-1平移量为(-50,-100)时,效果如图4-2所示:图4-2平移量为(0,-100)时,效果如图4-3所示:图4-3平移量为(-50,-100)时,效果如图4-4所示:图4-4平移量为(100,0)时,效果如图4-5所示:图4-5平移量为(100,100)时,效果如图4-6所示:图4-6更换其他图片进行平移操作,效果如图4-7:图4-7(4)结果分析:在设置的平移变量选项中,负数在X方向上代表向左平移,在Y轴上代表向上平移。
选择不同的平移变量,图片将平移结果显示在对应的地方。
超出显示区域的地方自动截取数据。
5、图像的缩放(放大与缩小)(1)问题分析:图像的放大和缩小是用同一个函数实现的,根据图像比例变换的原理及相应算法可得到。
(2)实验方法:图像的放大和缩小的函数是imresize,核心代码如下:I0=imresize(loadImage,value2);其中的value值代表放缩的倍数。
(3)实验结果:点击放大按钮,默认的放大倍数15倍,如图5-1所示。
图5-1(放大15倍)拖动滑动条,得到新的大小的图片,如图5-2所示:图5-2放大1倍的效果如图5-3所示:图5-3(放大1倍即原图大小)缩小效果图,图5-4所示:图5-4(原图0.5倍)随意拉动拖动条,得到缩小效果图,图5-6所示:图5-6当缩小时的value值调为0时,出现错误,说明,在缩小时,value值设置为0是不合适的,效果如图5-7所示。
图5-7更换图片,改变缩小的变量数值,得到大小不一的图片,如图5-8所示:图5-8(4)结果分析:在放大图片时,当按比例将原图像放大K倍,如果按照最近邻域法则需要将一个像素值添加在新图像的k×k的子块中。
显然,如果放大倍数太大,按照这种方法处理会出现马赛克效应。
最简单的比例缩小时当fx=fy=0.5时,即图像被缩到一半大小,此时缩小后图像中的(0,0)像素对应于原图像中的(0,0)像素;(0,1)像素对应于原图像中的(0,2)像素;(1,0)像素对应于原图像中的(2,0)像素,以此类推。
图像缩小之后,因为承载的数据量小了,所以画布可相应缩小。
此时,只需在原图像基础上,每行隔一个像素取一点,每隔一行进行操作,即取原图的偶奇数行和偶奇数列构成新的图像。
如果图像按任意比例缩小则需要计算选择的行和列。
实验心得本次课程设计使我更深的了解了MATLAB的程序设计及图像处理的内容,复习了有关于图像处理方面的知识,同时也对于MATLAB这一功能强大的软件的使用更加的熟练,也学习到了很多新的知识,积累了一些经验,归结如下:更全面的认识了MATLAB这个软件,并且能够熟练的使用MATLAB的基本功能,掌握了MATLAB的程序设计的基本方式方法和步骤。
学习了图像的处理的各项基本函数的使用,特别对MATLAB的帮助功能有了很深刻的了解,能够独立的完成函数的编写及功能的实现,再也不是什么函数都需要使用网络来询问,学习了图像噪声的使用,让我对专业知识有了更深的了解,对我以后的学习很有方向性。
我对图像几何变换的原理,包括图像的平移变换,图像的旋转,图像的旋转及图像的放大与缩小等原理都有了更清楚的认识,也明白了它们的实现机制。
对于使用MATLAB去实现数字图像的处理也有了更好的认识。
通过这次的课程设计,使我意识到所有的知识都是需要用实践去帮着理解的,所谓理论指导实践,很好的实践能帮助我们更好地去理解知识,对于知识的掌握更加牢靠。
同时在复习以前所学知识的同时其实也实现了温故知新,对于旧知识有了新的理解。
对于工程实践,要想实现预期的效果,必须明白它实现的机制和相应的算法,只有通过相应的理论来指导,我们才能有所创新,有所突破。
附录:1、参考文献:【1】贺兴华等. MATLAB7.x图像处理. 北京:人民邮电出版社,2006【2】陈杰. MATLAB宝典. 北京:电子工业出版社,2007.【3】张德丰. MATLAB数值分析与应用. 北京:国防工业出版社,2009【4】[美]冈萨雷斯.温茨著. 数字图像处理.2版. 北京:电子工业出版社,2002 【5】汪晓银,邹庭荣. 数学软件与数学实验. 武汉:华中农业大学教务处,2007【6】Rafael C.Gonzalez.数字图像处理(第三版).电子工业出版社,2011【7】杨丹,赵海滨,龙哲.MATLAB图像处理实例详解.清华大学出版社,20132、源代码:(1)打开图片tryisLoad=getappdata(handles.figure1,'isLoad');if isLoad==0,[fileName,filePath,filterIndex]=uigetfile(...{'*.*','All files';},...'选择图像文件','MultiSelect','off');if isequal(fileName,0) || isequal(filePath,0),return;elsesetappdata(handles.figure1,'fileName',fileName);setappdata(handles.figure1,'filePath',filePath);setappdata(handles.figure1,'isLoad',1);file=fullfile(filePath,fileName);axes(handles.axes1);I=imread(file);sizeI=size(I);if length(sizeI)==3,I=rgb2gray(I);elseif length(sizeI)==2,I=I;elseerrordlg('Error Happened.','Error');endsetappdata(handles.figure1,'loadImage',I);imshow(I);endelsebtnName=questdlg('您已经打开一个文件,确定打开另一个?将覆盖当前的文件?','提示',...'OK','Cancel','Cancel');switch btnName,case 'OK',setappdata(handles.figure1,'isLoad',0);feval(@pushbutton1_Callback,handles.pushbutton1,eventdata,handles);case 'Cancel',return;endendcatcherrordlg('You must open a BMP file.','Error');end(1)旋转:value=get(handles.slider1,'Value');loadImage=getappdata(handles.figure1,'loadImage');axes(handles.axes2);I0=imrotate(loadImage,value);imshow(I0);(2)平移:tryx=get(handles.popupmenu3,'Value');y=get(handles.popupmenu4,'Value');loadImage=getappdata(handles.figure1,'loadImage');switch x,case 1,switch y,case 1,se=translate(strel(1),[-100 -100]);saveImage=imdilate(loadImage,se);case 2,se=translate(strel(1),[-50 -100]);saveImage=imdilate(loadImage,se);case 3,se=translate(strel(1),[0 -100]);saveImage=imdilate(loadImage,se);case 4,se=translate(strel(1),[50 -100]);saveImage=imdilate(loadImage,se);case 5,se=translate(strel(1),[100 -100]);saveImage=imdilate(loadImage,se);endcase 2,switch y,case 1,se=translate(strel(1),[-100 -50]);case 2,se=translate(strel(1),[-50 -50]);saveImage=imdilate(loadImage,se);case 3,se=translate(strel(1),[0 -50]);saveImage=imdilate(loadImage,se);case 4,se=translate(strel(1),[50 -50]);saveImage=imdilate(loadImage,se);case 5,se=translate(strel(1),[100 -50]);saveImage=imdilate(loadImage,se);endcase 3,switch y,case 1,se=translate(strel(1),[-100 0]);saveImage=imdilate(loadImage,se);case 2,se=translate(strel(1),[-50 0]);saveImage=imdilate(loadImage,se);case 3,se=translate(strel(1),[0 0]);saveImage=imdilate(loadImage,se);case 4,se=translate(strel(1),[50 0]);saveImage=imdilate(loadImage,se);case 5,se=translate(strel(1),[100 0]);endcase 4,%LoGswitch y,case 1,se=translate(strel(1),[-100 50]);saveImage=imdilate(loadImage,se);case 2,%verticalse=translate(strel(1),[-50 50]);saveImage=imdilate(loadImage,se);case 3,%Bothse=translate(strel(1),[0 50]);saveImage=imdilate(loadImage,se);case 4,%Bothse=translate(strel(1),[50 50]);saveImage=imdilate(loadImage,se);case 5,%Bothse=translate(strel(1),[100 50]);saveImage=imdilate(loadImage,se);endcase 5,%Zerocrossswitch y,case 1,se=translate(strel(1),[-100 100]);saveImage=imdilate(loadImage,se);case 2,%verticalse=translate(strel(1),[-50 100]);saveImage=imdilate(loadImage,se);case 3,%Bothse=translate(strel(1),[0 100]);case 4,%Bothse=translate(strel(1),[50 100]);saveImage=imdilate(loadImage,se);case 5,%Bothse=translate(strel(1),[100 100]);saveImage=imdilate(loadImage,se);endendsetappdata(handles.figure1,'saveImage',saveImage);axes(handles.axes2);imshow(saveImage);catcherrordlg('Error Happened.','Error');end(4)放大value2=get(handles.slider2,'Value');loadImage=getappdata(handles.figure1,'loadImage');axes(handles.axes2);I0=imresize(loadImage,value2);figure,imshow(I0);(5)缩小function pushbutton6_Callback(hObject, eventdata, handles) value3=get(handles.slider3,'Value');loadImage=getappdata(handles.figure1,'loadImage');axes(handles.axes2);I0=imresize(loadImage,value3);figure,imshow(I0);。