图像处理matlab文档格式.docx

上传人:b****5 文档编号:20497569 上传时间:2023-01-23 格式:DOCX 页数:19 大小:794.93KB
下载 相关 举报
图像处理matlab文档格式.docx_第1页
第1页 / 共19页
图像处理matlab文档格式.docx_第2页
第2页 / 共19页
图像处理matlab文档格式.docx_第3页
第3页 / 共19页
图像处理matlab文档格式.docx_第4页
第4页 / 共19页
图像处理matlab文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

图像处理matlab文档格式.docx

《图像处理matlab文档格式.docx》由会员分享,可在线阅读,更多相关《图像处理matlab文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

图像处理matlab文档格式.docx

6.2.2、亮度与对比度………………………………………………6

6.2.4、三次内插值算法—放大、缩小……………………………8

6.8、形态学操作……………………………………………………9

6.8.1、膨胀…………………………………………………………10

6.8.2、腐蚀…………………………………………………………10

七、程序调试及结果分析………………………………………10

八、心得体会……………………………………………………16

九、参考文献……………………………………………………17

一十、附录…………………………………………………………18

基于Matlab的图像处理课程设计报告

一、课程设计目的

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

2)掌握MATLABGUI程序设计

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

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

二、课程设计目的方法

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

三、课程设计的内容和要求

要求利用MATLAB或VC设计图形用户界面,并实现以下图像处理功能:

(1)实现图像文件的打开、保存、另存为、打印功能;

(2)用户能对图像进行任意的亮度、对比度的调整,并显示调整前后的两幅图像;

(3)用户能够用鼠标选取图像中感兴趣区域,显示和保存该选择区域;

(4)利用三次内插值法实现图像的放大和缩小操作;

(5)选择某种结构元素,对图像进行膨胀、腐蚀操作(可以利用STREL函数)。

四、程序需求和功能模块分析

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

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

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

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

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

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

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

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

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

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

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

五、总体设计

由于要实现的功能并不是很多,所以在排版的过程中,把各个功能都安排在目录栏上,整体安排如下图所示:

进入后总体的设计界面如下图所示:

六、具体设计

6.1、文件

6.1.1、打开

为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个GUI程序的操作对象是图像文件,所以设置这里的缺省后缀名为“.bmp”。

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

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

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

操作打开得到如下对话框:

6.1.2、保存、另存为

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

操作保存和另存为得到如下图:

6.1.3、退出

退出比较简单,程序如下所示:

delete(handles.figure1);

6.2、图像

6.2.1、裁剪

在MATLAB中,用函数imcrop实现对图像的剪切操作。

该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。

Imcrop函数的调用格式如下:

y=imcrop(original_image);

下图就是对二维图像的截图:

6.2.2、亮度

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

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

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

由于该函数有五个参数需要输入,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给[low_inhigh_in],[low_outhigh_out],gamma这五个参数,如下一组命令建立了如图所示的输入对话框:

prompt={'

inputparameter1'

'

inputparameter2'

inputparametergamma'

};

defans={'

[00.7]'

[01]'

1'

p=inputdlg(prompt,'

inputparameter'

1,defans);

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

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

由于imadjust函数有五个参数,所以原则上需要设计五个滑动条来调节对比度,这对用户来说显然比较麻烦,因此在设计的时候固定其中的三个参数,通过调节两个参数的值来改变亮度和对比度。

[0handles.beta],[01],handles.gm,这里的变量handles.beta和handles.gm就通过滑动条得到,滑动条设计如下图:

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

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

handles.beta=get(handles.Id,'

value'

);

handles.gm=get(handles.gamma,'

执行该操作,调节滑动条到上图所示位置,结果如下图:

6.2.4、缩放

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

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

该函数的调用格式如下:

B=imresize(A,m,method)

其中:

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

B=imresizee(A.m,method)表示返回原图A的m倍放大图像(m小于1时实际上是缩小);

下图就是采用三次内插值法的放大和缩小图像,参数值保持默认设置:

放大后的效果:

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

缩小后的结果如下:

6.3、形态学操作

使用strel函数创建结构元素,其调用格式如下:

structure_element=strel('

rectangle'

[structure_element_length,structure_element_width]);

使用imerode函数进行结构元素对图像的腐蚀处理,其格式如下:

modified_image=imerode(original_image,structure_element);

使用imdilate函数进行结构元素对图像的膨胀处理,其格式如下:

modified_image=imdilate(original_image,structure_element);

为了让用户能够对膨胀或腐蚀的结构元素进行任意的长和宽变化调整,这里给用户提供了使用了文本输入结构元素的长和宽的值,这样更适合用户的使用习惯。

6.3.1腐蚀处理后

6.3.2、膨胀处理后

七、程序调试及结果分析

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

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

这主要是对MATLAB函数的不够清楚,用到的很多函数是针对二维数据的,而RGB图像的数据是一个三维矩阵,所以处理要与灰度图像不同,在开始的时候,我认为应该找一个能够应用于三维矩阵的函数,结果却没找到,后来想到可以把三维数据进行降维处理,同样使用二维的函数,只要是同样处理三次。

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

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

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

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

c)在没有加入噪声的情况下,点击“中值滤波”或是其它滤波,会提示错误?

这是由于在滤波程序设计的过程中,开始用到的变量是handles.noise_img,而这个变量是在加入噪声时候才定义的,所以在没有加入噪声的情况下,点击各个滤波就会弹出变量没有定义的错误,解决方法就是在文件打开的时候就给定义handles.noise_img=x。

d)本次设计存在一个比较大的问题,就是每次操作都是独立的,比如:

要对图像加入噪声,然后在此基础上进行亮度调整,截图,频谱分析等等就不行。

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

八、心得体会

1、我们小组首先要解决的问题是如何开始做,怎样做。

我们开始遇到的问题是应该解决界面问题,先把基本的界面弄出来才能进行下面的设计。

经过讨论,我们根据题目的要求,把所有的功能都一一写出来,再统一意见。

接下来,到图书馆或网上找相关资料,分工好每个人做些功能,遇到问题再讨论。

在整个课程设计的过程中,最难的是,函数的调用问题和变量的定义。

经过不断的调试和查找错误,先做好一个功能菜单,再进行下一个的设计。

函数的调用是很麻烦的,稍微不注意就出错。

每个人做好了自己的功能板块了,再综合起来,这个步骤也是比较难的,因为每个人运用的变量是不一样的,又要重新统一,一一对照。

最终,经过大家的努力,终于完成了所有的设计。

2、在理工科的专业应用背景下,用matlab进行相关计算与仿真编程的优势非常突出。

特定的问题处理算法,我们通常都以M文件的文本形式给定最终的解决方案,自己设计的程序是在MATLAB环境下,用MATLAB语言编写的,这对于有安装MATLAB软件的计算机上运行并不存在什么问题,关键是一般的计算机很少有去安装MATLAB软件的,那么要在这些机子上运行该程序要怎么办呢,难道要先安装MATLAB软件,这显然太麻烦了,对于一个通用的,比较成熟的解决方案,我们当然期望它能应用到更多的场合,而.exe(可执行)文件可运行于所有的通用WINDOWS操作系统,为此,将M文件转换成.exe文件倒是个不错的想法。

通过查找资料,了解到在生成可执行性文件之前,需要进行一系列编译环境方面的配置:

要将用Matlab语言编写的函数文件编译成可独立执行的*.exe文件(即可脱离Matalab环境的执行程序),首先要安装和配置好MatlabCompiler,一般来说,在安装Matlab时就已经安装了相应版本的MatlabCompiler。

只是不同版本的Matlab,其编译器的使用方法有一定的差异,这一点要引起一定的注意。

在确定安装好MatlabCompiler后,还需要对Compiler进行适当的配置,方法是在Matlab命令窗口输入:

Mbuild–setup

然后根据提示执行相应的操作,使用者可根据自己计算机中现有编译器的情况选择合适的编译器,如VC++6.0、VC++7.0、BlandC的编译器等,目前Matlab好象还不支持VC++8.0(我计算机安装的就是VC++2005,Matlab就无法识别)。

当然,如果你的计算机里根本就没有安装其他任何语言的编译器,也可选择Matlab自带的Lcc编译器,其实这个编译器对大多数用户已经够用了(我就是选择的Matlab自带的Lcc编译器)。

配置好编译器后,自然就是对自己编写的M文件进行编译了。

将M文件编译为独立可执行文件的语法是:

>

mcc–mfun1.mfun2.m…..

其中fun1就是最后的可执行文件的名称。

3、通过本次课程设计,使自己对MATLABGUI设计流程有了比较深刻的体会。

在设计过程中碰到了很多的问题,通过这些问题,使自己分析问题,解决问题的能力得到了较大的提高。

部分代码附录:

functionvarargout=DI(varargin)

gui_Singleton=1;

gui_State=struct('

gui_Name'

mfilename,...

'

gui_Singleton'

gui_Singleton,...

gui_OpeningFcn'

@DI_OpeningFcn,...

gui_OutputFcn'

@DI_OutputFcn,...

gui_LayoutFcn'

[],...

gui_Callback'

[]);

get(0,'

screensize'

ifnargin&

&

ischar(varargin{1})

gui_State.gui_Callback=str2func(varargin{1});

end

ifnargout

[varargout{1:

nargout}]=gui_mainfcn(gui_State,varargin{:

});

else

gui_mainfcn(gui_State,varargin{:

-----------------------------------------------------------------

functionopen_menu_item_Callback(hObject,eventdata,handles)

%打开图像

globaloriginal_image

[FileName,PathName]=uigetfile({'

*.jpg;

*.bmp;

*.gif;

*.png;

*.tif;

*.cur;

*.hdf,*.ico;

*.pbm;

*.pcx;

*.pgm;

*.pnm;

*.ppm;

*.ras;

*.xwd'

if~isequal(FileName,0)

Archivo=[PathName,FileName];

original_image=imread(Archivo);

axes(handles.axesl);

imshow(original_image);

set(handles.structure_element,'

Visible'

'

off'

end

-----------------------------------------------------------------functionsave_menu_item_Callback(hObject,eventdata,handles)

%保存图像程序

globalmodified_image

[FileName,PathName]=uiputfile({'

Archivo=[PathName,FileName];

imwrite(modified_image,Archivo);

functionsaveas_menu_item_Callback(hObject,eventdata,handles)

%图片另存为

[filename,pathname]=uiputfile('

*.bmp'

saveas'

_____

ifisequal([filename,pathname],[0,0])

errordlg('

nofilesaved'

error'

return;

file=strcat(pathname,filename);

(handles.axesr);

i=getimage(gca);

imwrite(i,file);

functionprint_menu_item_Callback(hObject,eventdata,handles)

%打印处理

globalfile;

printdlg;

functionclose_menu_item_Callback(hObject,eventdata,handles)

%退出程序

下面是图像菜单:

functioncut_menu_item_Callback(hObject,eventdata,handles)

%截图并保存处理

set(handles.structure_element,'

axes(handles.axesr);

modified_image=imcrop(original_image);

imshow(modified_image);

imwrite(modified_image,'

cut.jpg'

title('

截图并保存'

functionbrightness_menu_item_Callback(hObject,eventdata,handles)

%亮度、对比度处理

set(handles.uipanel3,'

on'

p=inputdlg(prompt,'

p1=str2num(p{1});

p2=str2num(p{2});

p3=str2num(p{3});

gamma=p3;

x=(original_image);

modified_image=imadjust(x,p1,p2,gamma);

axes(handles.axesr);

imshow(modified_image);

亮度、对比度处理'

functionId_Callback(hObject,eventdata,handles)

%亮度滑动处理

x=(original_image);

modified_image=imadjust(x,[0handles.beta],[01],handles.gm);

imshow(modified_image);

title('

亮度、对比度处理后'

functionId_CreateFcn(hObject,eventdata,handles)

usewhitebg=1;

ifusewhitebg

set(hObject,'

BackgroundColor'

[.9.9.9]);

get(0,'

defaultUicontrolBackgroundColor'

));

functiongamma_Callback(hObject,eventdata,handles)

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

当前位置:首页 > 小学教育 > 小学作文

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

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