资源预览内容
第1页 / 共39页
第2页 / 共39页
第3页 / 共39页
第4页 / 共39页
第5页 / 共39页
第6页 / 共39页
第7页 / 共39页
第8页 / 共39页
第9页 / 共39页
第10页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
MATLAB 实践 课程设计学生姓名: 学 号: 专业班级: 指导教师: 二一 年 月 日目 录1、 设计目的32、 题目分析33、 总体设计34、 具体设计45、 结果分析286、 心得体会297、 参考文献308、 附录31基于MATLAB的图像处理制作自己的Photoshop 1、设计目的综合运用MATLAB工具箱实现图像处理的GUI程序设计。2、题目分析 该实验中,我将学习MATLAB GUI程序设计,利用MATLAB图像处理工具箱,设计和实现自己的Photoshop 。按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照我自己拟定的功能要求进行程序设计和调试。 以下列出我设计的程序功能:1)图像的读取、保存和退出。2)创建图像的预览模式,可以在同一文件夹内对图像进行读取上一张、下一张的操作。3)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。4)设计图形用户界面,让用户能够用鼠标截取图像感兴趣区域,显示和保存该选择区域。5)编写程序将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存。6)对图像进行直方图处理,加噪处理,平滑处理,锐化处理,阈值处理,对彩色图像进行灰度处理等。7)为用户界面提供可更换背景模式。8)为图像添加水印特效,并保存。9)进行不同图片的叠加,并保存。10)为图像添加相框特效,并保存。3、总体设计这次的总体设计思路是在实现图像处理必备的一些基本功能的同时,也实现一些有创新性的功能模块。其中阈值分割、图片叠加、更换背景、添加水印、添加相框及图片预览上一张、下一张的功能是相对比较有创新性的。菜单的图像处理必备的基本功能,是比较容易实现的,关键是要注意它的使用语法和支持的图像类型。注:整个设计都是基于Matlab 2010b版本。具体的菜单功能设计如下图所示: 具体的软件界面设计如下图所示:4、具体设计4.1、打开为了实现该GUI设计的其余功能,第一件事情就是打开图像。我选择用uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件。Uigetfile函数的调用格式为name,path=yigetfile(), 在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“name”和“path”中。通过imread函数读出图像数据,把图像数据赋值给全局变量im,这里得到的im要声明为全局变量,为后面每个功能所使用。同时预留初始变量r,用以操作还原。4.2.1、上一张为了可以选择喜欢处理的图片而无需每次的打开图片,设计了上一张和下一张功能。该功能实现的主要思想是,先获取已经显示图片的路径,然后从第一张图片的路径开始与正在显示的图片路径做比较,当二者相同时,记下i,然后执行i=i-1,得到上一张图片路径,最后显示出来。具体实现的关键语句如下:for i=3:max d1 = files(i).name; d2 = strcat(directoryname1,d1); %文件夹内每张图片路径 if strcmp(d2,str) i=i-1;break; %与正在显示的图片路径做比较,看是否相同 else end end 当显示第一张图片时,再执行上一张,提示:这是第一张图片。if i=2 msgbox(this is the first img);4.2.2、下一张 下一站和上一张思路一样,只是在得到显示图片路径以后,执行i=i+1。另外我还加了一个功能,就是当现实到最后一张图片是,如果再下一张就提示:这是最后一张图片。if i=max+1 msgbox(this is the last img);4.3、还原利用一开始打开文件时预留的变量r进行还原。axes(handles.axes2); global r;imshow(r);handles.img=r;4.4、保存对于图像保存,可以用imwrite函数,把数据i存到指定的文件夹中。这里仍然要用到uigetfile函数来实现,用它获得将要保存的路径。可以指定文件保存的格式,如:imwrite(i,file,jpg);,其中i为从坐标轴中获取的图像信息:i=getimage(gca);4.11、退出清除所有变量和坐标轴中的内容。clc;clear all;cla reset;close(gcf) 4.5、放大在MATLAB中,用函数imresize来实现对图像的放大或缩小。插值方法可选用三种方法,最近邻插值,双线性插值,双三次插值。该函数的调用格式如下:Bimresize(A,m,method)其中:参数method用于指定插值的方法,可选的值为“nearest”(最近邻法),“bilinear”(双线性插值)、“bicubic”(双三次插值),缺省值为“nearest”。在实现放大后,显示图像并不能清晰地看出来图像有什么具体的变化,但是通过查询图像属性后可以发现,图像放大了。 4.6、缩小缩小的原理和放大原理是一样的,就是对Bimresizee(Am,method)中参数m进行修改,当 m小于1时实际上是缩小;同放大一样,如果原图质量较好,尺寸较大,由于限制了坐标轴大小的缘故,在功能现实时我们看不出变化,而实际上是有变化的。通过查看图片属性可以看到: 我们可以看到,缩小后像素明显变低了。4.7、顺时针旋转90度当初在设计顺,逆时针旋转90度的时候就在想,能不能实现连续的旋转,而不是每次运行都转到同一个位置,后来发现只要把每次转完的数据保存,然后以此作为下一次旋转的源数据就可以,于是这个功能叶完成了。具体实现如下:y=imrotate(r,90); r=y;%把每次处理完的数据保存下来,作为下一次处理的源数据4.8、逆时针旋转90度逆时针旋转和顺时针旋转的思路一样,只是我们要把每次处理完的数据做为全局变量,这样以来顺时针和逆时针选择功能都可以处理它,所以在按钮的回调函数前加上要加上global r ,其中r是每次旋转后的图像矩阵。4.9、翻转4.10、任意角度旋转用函数imrotate来实现对图像的插值旋转。该函数的调用格式如下: Bimrotate(A,angle,method,crop) 4.11、以鼠标点击为中心放大当在做截图功能的时候,我突然想到,既然截图可以自由选择要放大的范围,那么多次的截图就可以实现对某部分不断地放大,所以想到了基于截图的以鼠标点击为中心放大的功能。但首先要实现获得鼠标点击坐标的功能,在查阅过程中发现了x,y=ginput(1);以十字坐标形式,当鼠标左键点击下,返回点击点的X,Y坐标。然后就是要实现以点击一定范围放大,也就是每次实现以鼠标点击点位中心的正方形大小截图,通过一个循环多次截图就可以实现这个功能了。具体设计的函数如下:for n=1:2 %循环次数x,y=ginput(1); %获得点击点坐标z=imcrop(z1,x-400/n,y-400/n,800/n,800/n); %每次以一定大小截图imshow(z); z1=z;%为下一次截图的源数据end这个设计是执行放大三次,如果想要提前结束可按下回车键。4.12、截图在MATLAB中,用函数imcrop实现对图像的剪切操作。该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。Imcrop函数的调用格式如下:y=imcrop(im);imshow(y);截图的效果如下:4.13、灰度由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维,可以只取其中的二维数据,实现方法程序为:global im yim(:,:,1);imshow(y); 我们也可以通过调用图像类型转化函数来实现:global im yrgb2gray(im);imshow(y); 这个程序只能用于RGB图像转换灰度图像,当原始图像本来就是灰度图像时,运行该程序时就会出错,但是使用者在使用时有时并不知道这些,为了使该程序更加完善,应该在使用者原先图像时灰度图像时使用该功能时,应该要显示提示类信息。所以在开始时应该要有一个RGB图像或是灰度图像的判断过程。完整的程序如下: if isrgb(im) %判断是否为灰度图像y=rgb2gray(im); imshow(y);else msgbox(error,this is already a gray Img);end如果原图是RGB,执行该操作的结果如下图:如果原图是灰度图像,则提示出错。 4.14、亮度用imadjust函数,其调用格式如下: g=imadust(f,low_in high_in,low_out high_out),gamma)gamma 表示映射性质,默认值是1 表示线性映射。由于该函数有五个参数需要输入,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给low_in high_in,low_out high_out,gamma这五个参数,如下一组命令建立了如图所示的输入对话框:prompt= input argument 1,input argument2,imput gamma;defans=0 0.5,0 1,1;p=inputdlg(prompt, input argument ,1,defans); %这里得到的都是字符最后我们还要把得到的字符转换为数值:p1=str2num(p1);p2=str2num(p2);p3=str2num(p3);但是,这种方法并不能很好的让用户能够对图像进行任意的亮度和对比度变化调整,有时并不事先知道参数的值要多少,也不关心,而是任意调节的,直到满意为止。所以应该用滑动条来调节图像的亮度和对比度,这样更适合用户的使用习惯。由于imadjust函数有五个参数,所以原则上需要设计五个滑动条来调节对比度,这对用户来说显然比较麻烦,因此在设计的时候固定其中的三个参数,通过调节两个参数的值
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号