MATLAB设计实践报告.docx

上传人:b****0 文档编号:10064118 上传时间:2023-05-23 格式:DOCX 页数:43 大小:5.59MB
下载 相关 举报
MATLAB设计实践报告.docx_第1页
第1页 / 共43页
MATLAB设计实践报告.docx_第2页
第2页 / 共43页
MATLAB设计实践报告.docx_第3页
第3页 / 共43页
MATLAB设计实践报告.docx_第4页
第4页 / 共43页
MATLAB设计实践报告.docx_第5页
第5页 / 共43页
MATLAB设计实践报告.docx_第6页
第6页 / 共43页
MATLAB设计实践报告.docx_第7页
第7页 / 共43页
MATLAB设计实践报告.docx_第8页
第8页 / 共43页
MATLAB设计实践报告.docx_第9页
第9页 / 共43页
MATLAB设计实践报告.docx_第10页
第10页 / 共43页
MATLAB设计实践报告.docx_第11页
第11页 / 共43页
MATLAB设计实践报告.docx_第12页
第12页 / 共43页
MATLAB设计实践报告.docx_第13页
第13页 / 共43页
MATLAB设计实践报告.docx_第14页
第14页 / 共43页
MATLAB设计实践报告.docx_第15页
第15页 / 共43页
MATLAB设计实践报告.docx_第16页
第16页 / 共43页
MATLAB设计实践报告.docx_第17页
第17页 / 共43页
MATLAB设计实践报告.docx_第18页
第18页 / 共43页
MATLAB设计实践报告.docx_第19页
第19页 / 共43页
MATLAB设计实践报告.docx_第20页
第20页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MATLAB设计实践报告.docx

《MATLAB设计实践报告.docx》由会员分享,可在线阅读,更多相关《MATLAB设计实践报告.docx(43页珍藏版)》请在冰点文库上搜索。

MATLAB设计实践报告.docx

MATLAB设计实践报告

 

《MATLAB实践》

课程设计

 

学生姓名:

学号:

专业班级:

指导教师:

 

二○一二年六月

 

目录

 

1.设计目的…………………………………………………………3

2.题目分析…………………………………………………………3

2.1课程设计的基本要求………………………………………………3

2.2要求实现功能………………………………………………………3

3、总体设计…………………………………………………………4

3.1总体界面外观………………………………………………………4

3.2菜单栏………………………………………………………………4

4、具体设计…………………………………………………………5

4.1文件…………………………………………………………………5

4.2特殊处理……………………………………………………………6

4.3灰度图像处理………………………………………………………7

4.4图像的常用操作……………………………………………………8

4.5快捷工具……………………………………………………………17

5、结果分析…………………………………………………………19

6、心得体会…………………………………………………………19

7、参考书目…………………………………………………………20

8、附录……………………………………………………………20

 

1、设计目的

综合运用MATLAB工具箱实现图像处理的GUI程序设计,设计和实现自己的Photoshop。

2、题目分析

课程设计的基本要求

1)熟悉和掌握MATLAB程序设计方法

2)掌握MATLABGUI程序设计

3)学习和熟悉MATLAB图像处理工具箱

4)学会运用MATLAB工具箱对图像进行处理和分析

要求实现功能

1)图像的读取和保存。

2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。

3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。

4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存,比较几种插值的效果。

5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的效果。

6)为图像添加边框特效,并保存。

信息化社会中,计算机在各种信息处理中发挥着重要的作用。

我们可以借助计算机,对数字图像进行处理,以达到不同的效果。

根据题目的要求,除了实现要求的功能外,还有很多的功能需要用到。

(1)、将一个RGB图像转换为灰度图像。

(2)、可以对图像做各种变换,如旋转等。

(3)、有时并不需要图像显示其细节部分,只要其轮廓,这时候不要很高的灰度级。

可以把图像转换为二值图像,进行图像腐蚀,或是创建索引图像等。

(4)、分析一个图像的频谱特征,利用傅里叶变换,将图像从空间域变换到频域,然后进行各种处理,经过高通滤波器或是低通滤波器。

(5)、为了科学地定量描述和使用颜色,人们提出了各种颜色模型,按用途可分为三类:

计算颜色模型,视觉颜色模型和工业颜色模型。

有时为了不同的需要,要对颜色模型进行转换。

3、总体设计

总体界面外观:

图2-1界面总体外观

软件的总体设计界面外观如图2-1所示,主要分为两个部分:

显示区域和操作区域。

显示区域分两个板块,分别显示载入的原图及处理后的图像。

操作区域由多个功能模块组成,各种功能模块由多个功能键组成。

通过按键控制实现对图像的处理。

菜单栏

由于要实现的功能并很多,界面无法容纳下所有功能按钮,所以在排版的过程中,把基本功能和部分不常用功能都安排在菜单栏上,整体菜单栏安排如下图所示

4、具体设计

4.1文件

1)打开

通过对话框的形式来选择文件,用uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,GUI程序的操作对象是图像文件,设置后缀名为'*.jpg'或'*.bmp'或'*.gif'。

Uigetfile函数的调用格式为[name,path]=yigetfile(…),在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“name”和“path”中。

如果按下取消按钮或是发生错误,则返回值是0。

根据返回值的情况,如果是0,则弹出提示错误的对话框,否则,通过imread函数读出图像数据,把图像数据赋值给全局变量im。

2)保存

通过对话框的形式来保存图像数据,通过uigetfile函数选择文件名和路径,用getimage(gca)取出变换后的图像数据保存到变量im,最后用imwrite函数,把数据im存到指定的文件。

3)退出

程序实现:

close(gcf);

4.2特殊处理

1)原图:

globala;

globalT;

globalim;

T=im;

axes(handles.axes2);

im=a;

imshow(im);

title('Ôͼ');

通过设置一个全局变量a,保存原始图像路径,在点击“原图”键时,重新读取该全局变量。

并通过imshow(im);,将还原的图像显示,达到还原的效果。

2)撤销:

globalT;

axes(handles.axes2);

imshow(T);

本段程序通过设置一个全局变量T,通过T=im把上一次操作后的图像信息赋予全局变量T。

点击“撤销”键时,通过imshow(T);将图像返回到上一步操作后的状态。

达到撤销的效果。

 

4.3灰度图像处理

1)灰度与对比度调节

用imadjust函数,其调用格式如下:

g=imadust(f,[low_inhigh_in],[low_outhigh_out]),gamma)

gamma表示映射性质,默认值是1表示线性映射。

由于该函数有五个参数需要输入,,通过对话框把五个参数赋值给[low_inhigh_in],[low_outhigh_out],gamma这五个参数,如下一组命令建立了如图所示的输入对话框:

prompt={'输入参数1','输入参数2','输入gamma'};

defans={'[00.7]','[01]','1'};

p=inputdlg(prompt,'输入参数',1,defans);

由于这种方法并不能很好的让用户能够对图像进行任意的亮度和对比度变化调整,有时并不事先知道参数的值要多少,也不关心,而是任意调节的,直到满意为止。

所以应该用滑动条来调节图像的亮度和对比度,这样更适合用户的使用习惯。

设计的时候固定其中的三个参数,通过调节两个参数的值来改变亮度和对比度[0handles.beta],[01],handles.gm,这里的变量handles.beta和handles.gm就通过滑动条得到,滑动条设计如下图:

亮度调整的tag名为ld,取值范围0~1,gamma值的tag名为gamma,取值范围为0~5。

获取滑动条参数的程序如下:

handles.beta=get(handles.ld,'value');

handles.gm=get(handles.gamma,'value');

2)图像二值化

用j=im2bw(x);来对灰度图像到二值图像的转换。

转换结果为:

4.4图像的常用操作

1)旋转

函数imrotate来实现对图像的插值旋转。

该函数的调用格式如下:

B=imrotate(A,angle,method,’crop’)

其中,参数method用于指定插值的方法,可选的值可以有三种,分别为邻近插值,双线性插值,双三次插值,缺省时为邻近插值,参数angle代表旋转的角度。

一般来说,旋转后的图像会比原图大,用户可以指定“crop”参数对旋转后的图像进行剪切(取图像的中间部分),使返回的图像与原图大小相同。

执行结果为:

2)缩放

用函数imresize来实现对图像的放大或缩小。

插值方法可选用三种方法,最近邻插值,双线性插值,双三次插值。

该函数的调用格式如下:

B=imresize(A,m,method)

参数method用于指定插值的方法,可选的值为“nearest”(最近邻法),“bilinear”(双线性插值)、“bicubic”(双三次插值),缺省值为“nearest”。

由于坐标轴限制的原因,处理后看不出放大的效果,如果把处理后的图片保存起来,再把处理后的文件打开,就可以看到比较明显的放大效果。

2)模糊:

可通过

psf=fspecial('motion',len,theta);

im=imfilter(im,psf,'circular','conv')实现运动模糊。

2)图像取反

对图像求反是将原图灰度值翻转,例如对灰度图像取反,则直观效果就是使黑变白,使白变黑。

程序段如下:

globalim;

globalT;

T=im;

axes(handles.axes2);

im=imcomplement(im);

imshow(im);

title('取反后图像');

4.5图像的特殊处理

1)彩色模型

RGB转HSV:

用函数rgb2hsv(im)可实现RGB转HSV:

同理:

转化为ntsc和ycbcr模型,只要改为相应的函数即可。

函数如下:

rgb2ntsc(x);%rgb模型转ntsc模型

rgb2ycbcr(x);%rgb模型转ycbcr模型

2)直方图

直方图统计

用imhist函数对图像数据进行直方图统计,

x=imhist(handles.img(:

:

1));

bar(horz,x);

x矩阵的数据是0~255灰度值的统计个数,如果直接对x矩阵数据进行图形图显示,由于有256个数据,在坐标系中就会很密集,为了更清楚的显示条形图,所以在程序设计时,把x数据进行部分提取,

x1=x(1:

10:

256);

horz=1:

10:

256;

bar(horz,x1);

除了显示数据的直方图统计外,还可以对图像进行均衡处理,所用到的函数是histeq,这两个函数同样只使用于二维数据,所以也要对二维和三维数据分开处理。

直方图均衡化

直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。

直方图均衡化就是对灰度图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。

由于直方图均衡化增加了图像灰度动态范围,所以也增加了图像的对比度,反映在图像上就是图像有较大的反差,许多细节可看得比较清晰了。

3)添加噪声

噪声是最常见的图象退化因素之一,也是图像恢复中重点研究的内容。

噪声形成的原因是多种多样的,其性质也千差万别。

经常用到的噪声有三种,椒盐噪声、高斯噪声和乘性噪声。

可以通过以下三个函数来实现:

y=imnoise(handles.img,'gaussian',p1,p2);%高斯噪声

y=imnoise(x,'salt&pepper',p1);%椒盐噪声

y=imnoise(handles.img,'speckle',p1);%乘性噪声

椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。

椒盐噪声往往由图像切割引起

高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。

乘性噪声一般由信道不理想引起,它们与信号的关系是相乘,乘性随机性看成系统的时变性(如衰落或者多普勒)或者非线性所造成的。

本界面中以斑点噪声为例演示乘性噪声对图像的影响。

斑点噪声是由于信号的衰落引起的,在均匀区域,被斑点噪声污染得越厉害的区域,在图像上表现得越亮,因此,人们设想斑点噪声的模型为乘性的。

4)频谱分析

频谱图

为了得到图像的频谱图,先要对数据进行傅里叶变换,用fft2函数对二维数据进行快速傅里叶变换,同时为了更好的观察频谱图,需要把fft2变换后的数据进行平移,利用fftshift函数,把快速傅里叶变换的DC组件移到光谱中心。

这样图像能量的低频成分将集中到频谱中心,图像上的边缘、线条细节信息等高频成分将分散在图像频谱的边缘。

如下图所示:

5)图像平滑

中值滤波

中值(median)滤波器用模板所覆盖的区域中像素的中间值作为滤波结果

中值滤波的主要功能就是让与周围像素灰度值的差比较大的像素改取与周围像素值接近的值,从而可以消除孤立的噪声点。

可见,中值滤波对消除脉冲噪声有良好效果。

中值滤波可通过k=medfilt2(handles.img);实现对图像进行二维中值过滤。

平滑滤波

用均值代替原图像中的各个像素值,即对待处理的当前像素点

,选择一个模板,该模板由其近邻的若干像素组成(如3*3模板,以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标本身),用模板中所有像素的均值来替换原来的像素值

该滤波器在消除噪声的同时也模糊了图像。

自适应滤波

自适应滤波即根据环境的改变,使用自适应算法来改变滤波器的参数和结构。

本设计使用适应面较广的维纳滤波为例,演示自适应滤波。

维纳(Wiener)滤波器是一种最小均方误差滤波器。

6)图像映射变换

二维投影:

globalim;

globalT;

T=im;

axes(handles.axes2);

im1=imresize(im,[6060]);

A=[1.158100;

-0.42280.6066-0.0074;

4.22794.35661.000];

d=maketform('projective',A);

d1=makeresampler('cubic','circular');

d2=imtransform(im1,d,d1,'size',[400400],'XYScale',1);

imshow(d2);

title('二维投影图像');

 

图像扭曲:

globalim;

globalT;

T=im;

axes(handles.axes2);

d=maketform('affine',[0.500;0.510;001]);

im1=imtransform(im,d);

imshow(im1);

title('扭曲后图像');

快捷工具

1)截图

程序实现:

globalim;

globalT;

T=im;

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

im=imcrop(im);

imshow(im);

title('截图');

handles.Timage=y;

本段程序通过使用imcrop函数来实现对图像的剪切操作。

该操作剪切的是图像中的一个矩形子图,不论handles.img是三维的还是二维的数据,该函数都能进行操作。

可在处理后的图像中继续进行截图,进一步精确截取。

结合保存功能可以实现剪切功能。

3)创建索引图像

用X=grayslice(I,n)函数来实现,

程序实现

globalim;

globalT;

T=im;

axes(handles.axes2);

x=(im);

ifisrgb(x)

msgbox('这是彩色图像,不能创建索引图像','创建失败');

else

y=grayslice(x,4);

axes(handles.axes2);

imshow(y,jet(4));

title('索引图像');

end

转换后得到的图像为:

5、程序调试及结果分析

在程序设计过程中,我碰到很多的问题:

1)一个函数只能对灰度图像处理,不能对RGB图像处理,那么如何才能对RGB图像处理呢?

这主要是因为MATLAB的很多函数是针对二维数据的,而RGB图像的数据是一个三维矩阵,所以处理要与灰度图像不同,可以把三维数据进行降维处理,同样使用二维的函数,只要是同样处理三次即可。

比如,彩色图像的滤波处理,直方图均衡等。

2)同一个操作对灰度图像可以使用,当用户选择的是彩色图像时,该操作就会出错?

这是由于设计程序时,本身程序是有针对性的,有些程序只能对灰度图像有效,有些对彩色图像有效,但是用户并不清楚这些,所以在设计的过程中就要考虑全面,要分开设计。

在本次课程设计中,我均对每个程序的开始时,用ifisrgb(x)进行判断。

3)本次设计存在一个很困扰我的问题,就是每次操作都是独立的,还是叠加的,

我认为应该是整个程序设计过程中对变量的设置是关键,进行叠加操作时应该每次操作后,把处理后的数据保存在一个全局变量,这样还要对处理后的数据进行在处理时,只要把这个全局变量作为原始数据带入就可。

独立操作时则使用局部变量。

6、心得体会

用户界面是用户与计算机进行信息交流的方式,图形用户界面(GUI)是指由窗口、菜单、图标、光标、按键、对话框和文本等各种图形对象组成的用户界面。

它让用户定制用户与Matlab的交互方式,而命令窗口不是唯一与Matlab的交互方式。

用户通过鼠标或键盘选择、激活这些图形对象,使计算机产生某种动作或变化,基本图形对象分为控件对象和用户界面菜单对象,简称控件和菜单。

Matlab中设计图形用户界面的方法有两种:

使用可视化的界面环境和通过编写程序

MATLAB的GUI设计的一般步骤为:

1、启动matlab,打开gui编辑器。

2、在弹出的gui设计器中初步界面。

3、设计一个完整的界面。

4、编写响应代码。

5、运行程序。

6、在命令窗口中查看错误并修改直至程序无误。

在程序调试过程中熟悉使用MATLAB的help功能对程序的调试是有很大帮助的。

通过help我们可以查找不熟悉的函数了解其功能,是我们在程序中正确运用函数,少走弯路。

Help功能不仅在GUI设计中非常有用,在一般的基本矩阵运算中也常常用到。

通过这次实践,我进一步了解了MATLAB软件的强大功能,重温了MATLAB的基本功能、基本使用,在此基础上通过视频学习,查找资料,与同学交流等方法对MATLAB的GUI设计有了一定的了解和掌握,顺利完成了一个简单的photoshop的设计制作。

完成了实践的预期要求,锻炼的设计能力,收益匪浅。

 

参考书目:

[1]………………………………………《MATLAB实用教程》郑阿奇电子工业出版社

[2]……………………………《数字图像处理MATLAB版》冈莎雷斯电子工业出版社

附录:

%文件打开

%---Executesonbuttonpressinpushbutton1.

functionpushbutton1_Callback(hObject,eventdata,handles)

%hObjecthandletopushbutton1(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

globalim;

globala;

%选择路径

[filename,pathname]=...

uigetfile({'*.jpg';'*.bmp';'*.gif'},'打开');

%合成路径+文件名

str=[pathnamefilename];

%读取图片

im=imread(str);

a=imread(str);

%使用第一个axes

axes(handles.axes1);

%显示图片

imshow(im);

title('原图');

%文件保存

%---Executesonbuttonpressinpushbutton2.

functionpushbutton2_Callback(hObject,eventdata,handles)

%hObjecthandletopushbutton2(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

globalim;

%选择路径

[filename,pathname]=...

uiputfile({'*.jpg';'*.bmp';'*.gif'},'保存');

%合成路径+文件名

str=[pathnamefilename];

axes(handles.axes2);

im=getimage(gca);

imwrite(im,str);

%文件退出

%---Executesonbuttonpressinpushbutton3.

functionpushbutton3_Callback(hObject,eventdata,handles)

%hObjecthandletopushbutton3(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

close(gcf);

%原图

%---Executesonbuttonpressinpushbutton4.

functionpushbutton4_Callback(hObject,eventdata,handles)

%hObjecthandletopushbutton4(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

globala;

globalT;

globalim;

T=im;

axes(handles.axes2);

im=a;

imshow(im);

title('原图');

%边缘检测

functionuipanel1_SelectionChangeFcn(hObject,eventdata,handles)

%hObjecthandletouipanel1(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

globalim;

globalT;

T=im;

%拿到所选择按钮的名称

str=get(hObject,'string');

axes(han

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2