Matlab图形界面图像的旋转平移和缩放.docx

上传人:b****3 文档编号:5309997 上传时间:2022-12-15 格式:DOCX 页数:21 大小:3.16MB
下载 相关 举报
Matlab图形界面图像的旋转平移和缩放.docx_第1页
第1页 / 共21页
Matlab图形界面图像的旋转平移和缩放.docx_第2页
第2页 / 共21页
Matlab图形界面图像的旋转平移和缩放.docx_第3页
第3页 / 共21页
Matlab图形界面图像的旋转平移和缩放.docx_第4页
第4页 / 共21页
Matlab图形界面图像的旋转平移和缩放.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

Matlab图形界面图像的旋转平移和缩放.docx

《Matlab图形界面图像的旋转平移和缩放.docx》由会员分享,可在线阅读,更多相关《Matlab图形界面图像的旋转平移和缩放.docx(21页珍藏版)》请在冰豆网上搜索。

Matlab图形界面图像的旋转平移和缩放.docx

Matlab图形界面图像的旋转平移和缩放

 

Matlab图形界面图像的旋转、平移和缩放

 

姓名:

班级:

学号:

 

 

Matlab图形界面操作

------图像的旋转、平移和缩放

问题描述

期末运用学习的matlab知识通过图形用户界面对图片进行操作,实现如下功能。

●能够查找和读取计算机中存储图像。

●实现图像的旋转、平移、缩放等几何变换。

●通过matlab界面功能实现界面的完美布局。

●编写代码和回调函数实现上述功能。

 

摘要

本次任务旨在完成以下几个任务:

●整体分为四大模块:

原图、旋转、平移和缩放。

●利用数字图像处理技术,以MATLAB为平台,建立一个实现设计主题的简易处理系统。

●能显示输入图像、输出图像。

●程序代码要有注释说明,调用MATLAB函数要清楚并理解函数的功能、使用范围,在设计说明书中要写清楚函数的功能和参数意义。

●完成自己课程设计说明书。

正文

1、界面设计

(1)在MATLAB命令窗口中输入“guide”,确定后,弹出GUI窗口。

(2)本次设计中,包含两个坐标轴(axes1、axes2),分别显示原图和处理后的图像。

包含六个按钮(PushButton),分别实现“打开图片、保存处理后的图片、旋转、平移、放大、缩小以及退出功能”。

(3)旋转功能同时可以实现选择0—360度任意的度数,当选择不同的度数后,axes2位置就会显示不同选择角度的图片。

如果需要保存该图片可以单击保存按钮进行保存。

(4)平移功能的实现,当单击平移按钮,可以有一个默认的平移位置。

在设计中预设了几个固定位置,可以选择,分别是X单位Y单位方向都可以选择。

达到平移的目的。

(5)放大和缩小功能类似,在界面上表现为选择不同的数据,反映出来不同大小的图片。

(6)操作完成后,点击退出功能,将询问是否退出,如果退出则点击“是”,不退出点击“我还要看看”。

2、打开图片功能

进入程序界面后,要实现几何操作,需要先打开一张图片。

单击打开图片按钮,可以选择图片路径,从存储图片的地址任意旋转一张图片,图片就会显示在axes1的位置。

效果如2-1所示:

图2-1

如果想再打开一张图片进行操作,可以再次单击“打开图片”按钮进行操作,效果如图2-2所示:

图2-2

3、实现图片的任意角度的旋转

该功能回调函数使用的是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)表示图像不变,进行[YX]方向的平移,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】RafaelC.Gonzalez.数字图像处理(第三版).电子工业出版社,2011

【7】杨丹,赵海滨,龙哲.MATLAB图像处理实例详解.清华大学出版社,2013

2、源代码:

(1)打开图片

try

isLoad=getappdata(handles.figure1,'isLoad');

ifisLoad==0,

[fileName,filePath,filterIndex]=uigetfile(...

{'*.*','Allfiles';},...

'选择图像文件','MultiSelect','off');

ifisequal(fileName,0)||isequal(filePath,0),

return;

else

setappdata(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);

iflength(sizeI)==3,

I=rgb2gray(I);

elseiflength(sizeI)==2,

I=I;

else

errordlg('ErrorHappened.','Error');

end

setappdata(handles.figure1,'loadImage',I);

imshow(I);

end

else

btnName=questdlg('您已经打开一个文件,确定打开另一个?

将覆盖当前的文件?

','提示',...

'OK','Cancel','Cancel');

switchbtnName,

case'OK',

setappdata(handles.figure1,'isLoad',0);

feval(@pushbutton1_Callback,handles.pushbutton1,eventdata,handles);

case'Cancel',

return;

end

end

catch

errordlg('YoumustopenaBMPfile.','Error');

end

(1)旋转:

value=get(handles.slider1,'Value');

loadImage=getappdata(handles.figure1,'loadImage');

axes(handles.axes2);

I0=imrotate(loadImage,value);

imshow(I0);

(2)平移:

try

x=get(handles.popupmenu3,'Value');

y=get(handles.popupmenu4,'Value');

loadImage=getappdata(handles.figure1,'loadImage');

switchx,

case1,

switchy,

case1,

se=translate(strel

(1),[-100-100]);

saveImage=imdilate(loadImage,se);

case2,

se=translate(strel

(1),[-50-100]);

saveImage=imdilate(loadImage,se);

case3,

se=translate(strel

(1),[0-100]);

saveImage=imdilate(loadImage,se);

case4,

se=translate(strel

(1),[50-100]);

saveImage=imdilate(loadImage,se);

case5,

se=translate(strel

(1),[100-100]);

saveImage=imdilate(loadImage,se);

end

case2,

switchy,

case1,

se=translate(strel

(1),[-100-50]);

saveImage=imdilate(loadImage,se);

case2,

se=translate(strel

(1),[-50-50]);

saveImage=imdilate(loadImage,se);

case3,

se=translate(strel

(1),[0-50]);

saveImage=imdilate(loadImage,se);

case4,

se=translate(strel

(1),[50-50]);

saveImage=imdilate(loadImage,se);

case5,

se=translate(strel

(1),[100-50]);

saveImage=imdilate(loadImage,se);

end

case3,

switchy,

case1,

se=translate(strel

(1),[-1000]);

saveImage=imdilate(loadImage,se);

case2,

se=translate(strel

(1),[-500]);

saveImage=imdilate(loadImage,se);

case3,

se=translate(strel

(1),[00]);

saveImage=imdilate(loadImage,se);

case4,

se=translate(strel

(1),[500]);

saveImage=imdilate(loadImage,se);

case5,

se=translate(strel

(1),[1000]);

saveImage=imdilate(loadImage,se);

end

case4,%LoG

switchy,

case1,

se=translate(strel

(1),[-10050]);

saveImage=imdilate(loadImage,se);

case2,%vertical

se=translate(strel

(1),[-5050]);

saveImage=imdilate(loadImage,se);

case3,%Both

se=translate(strel

(1),[050]);

saveImage=imdilate(loadImage,se);

case4,%Both

se=translate(strel

(1),[5050]);

saveImage=imdilate(loadImage,se);

case5,%Both

se=translate(strel

(1),[10050]);

saveImage=imdilate(loadImage,se);

end

case5,%Zerocross

switchy,

case1,

se=translate(strel

(1),[-100100]);

saveImage=imdilate(loadImage,se);

case2,%vertical

se=translate(strel

(1),[-50100]);

saveImage=imdilate(loadImage,se);

case3,%Both

se=translate(strel

(1),[0100]);

saveImage=imdilate(loadImage,se);

case4,%Both

se=translate(strel

(1),[50100]);

saveImage=imdilate(loadImage,se);

case5,%Both

se=translate(strel

(1),[100100]);

saveImage=imdilate(loadImage,se);

end

end

setappdata(handles.figure1,'saveImage',saveImage);

axes(handles.axes2);

imshow(saveImage);

catch

errordlg('ErrorHappened.','Error');

end

(4)放大

value2=get(handles.slider2,'Value');

loadImage=getappdata(handles.figure1,'loadImage');

axes(handles.axes2);

I0=imresize(loadImage,value2);

figure,imshow(I0);

(5)缩小

functionpushbutton6_Callback(hObject,eventdata,handles)

value3=get(handles.slider3,'Value');

loadImage=getappdata(handles.figure1,'loadImage');

axes(handles.axes2);

I0=imresize(loadImage,value3);

figure,imshow(I0);

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1