matlab课程实践报告Word文档格式.docx
《matlab课程实践报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《matlab课程实践报告Word文档格式.docx(39页珍藏版)》请在冰豆网上搜索。
3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。
4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存,比较几种插值的效果。
5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的效果。
6)为图像添加边框特效,并保存。
除了完成以上基本功能之外,还可以根据自己的需要对图像进行其他方面的处理,如:
①对图像进行旋转处理;
②分析图像的能量分布时,可以对图像进行频谱处理;
③观察图像的细节成分时,可以对图像进行锐化处理;
④当图像含有噪声较模糊时,可以对图像进行平滑滤波处理;
⑤对图像的颜色分量进行统计,方便对图像的亮度、色度等的处理。
3、总体设计
根据以上分析,将软件的功能模块划分为9个模块,分别为:
1)图像文件的打开、保存、退出;
2)图像的编辑,包括:
亮度调节,灰度变换,对比度调节等;
3)图像的翻转;
4)图像的直方图统计;
5)图像感兴趣部分的放大与缩小;
6)图像加噪处理;
7)图像锐化处理(边缘检测);
8)图像去噪处理(滤波平滑);
9)图像处理应用实例的演示、常用简单的图像处理。
软件的总体设计框架图:
4、具体设计(各功能模块的设计实现)
4.1图像的文件
4.1.1读取图像
(1)因要选取图片,所以通过对话框的形式来选择文件,函数uigetfile可以实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,供选择图片使用,然后再通过函数imread实现对图像的读取。
(2)函数uigetfile和imread的调用格式如下:
[filename,pathname]=uigetfile({'
*.jpg'
;
'
*.bmp'
*.tif'
*.*'
},'
读取图像'
);
file=[pathname,filename];
x=imread(file);
(3)在GUI界面使用一个按钮控件回调函数实现,通过运行结果如下:
(读取图片,显示在原图所指的坐标下)
4.1.2图像的保存
(1)和读取图像一样,保存图像也采用对话框的形式,用函数uiputfile实现,uiputfile函数显示一个保存文件对话框,该对话框自动列出当前路径下的目录和文件,供保存图片使用,然后再通过函数imwrite实现对图像的保存。
(2)函数uiputfile和imwrite的调用格式如下:
[sfilename,sfilepath]=uiputfile({'
保存图像'
baocuntuxiang=[sfilepath,sfilename];
t=getimage;
%获取处理后图像(axes2中)数据保存到t中。
imwrite(t,baocuntuxiang);
(如下图,将灰度图像进行保存)
4.1.3图像的退出
设置一个按钮,回调函数为close(gcf);
clc;
clear;
即可实现图像处理的退出。
4.2图像的编辑
4.2.1图像亮度调节
(1)通过函数y=imadjust(x,p1,p2,p3)来实现亮度的调节,函数含有三个参数,p1,p2分别对应原图和处理后的亮度选择范围,p3是一个映射性质的参数,默认时为1,表示线性关系映射,所以可以使用一个对话框来实现对参数的调节,对话框实现命令如下:
prompt={'
原图范围'
'
新值范围'
关系'
};
defans={'
[01]'
[00.5]'
1'
%默认值
p=inputdlg(prompt,'
参数调整'
1,defans);
再使用函数imshow(y);
将处理后的图像显示出来。
(2)图像亮度调节的结果如下:
4.2.2图像灰度变换
(1)使用函数y=rgb2gray(x);
来实现图像灰度变换,如果读取的图像文件已是灰度图像,则使用一个输出消息对话框msgbox,显示‘已是灰度图像,无须转换’,格式为:
msgbox('
已是灰度图像,无须转换'
错误操作'
)。
对于如何判断读取的是否是彩色图像,可使用函数isrgb进行判断,格式为:
ifisrgb(x)。
(2)图像灰度变换的结果如下:
4.2.3图像对比度调节
(1)使用函数y=immultiply(x,p1);
实现图像的对比度调节,函数含有一个参数p1,同样使用一个对话框来实现参数的调节,对话框实现命令如下:
prompt={'
关系系数'
defans={'
2'
%默认值
p=inputdlg(prompt,'
(2)图像对比度调节的结果如下:
4.2.4图像感兴趣部分截图
(1)使用函数y=imcrop(x);
实现图像的截图,该函数很简单,只需读取图像,然后用鼠标选取感兴趣部分,拖动鼠标右键cropimage即可将截图显示在对应坐标下。
(2)图像感兴趣部分截图结果如下:
4.2.5图像的直方图均衡
(1)使用函数histeq实现图像的直方图均衡处理,但是这个函数只对灰度图像方可进行处理,所以依旧要使用函数isrgb判断是否为彩色图像,若是,则要对彩色图像进行按维的直方图均衡处理,具体程命令如下:
a=histeq(x(:
:
1));
b=histeq(x(:
2));
c=histeq(x(:
3));
y(:
1)=a;
y(:
2)=b;
3)=c;
imshow(y);
若不是,则可以直接对图像进行均衡处理,命令为y=histeq(x);
(2)图像直方图均衡处理结果如下:
注:
这是彩色图像处理。
注:
这是灰度图像处理。
4.3图像的翻转
4.3.1上下
(1)使用函数flipud实现图像的上下翻转,和均衡处理一样,上下翻转也要判断图像是否是彩色图像,若是,则要按维进行上下翻转处理,具体命令如下:
fork=1:
1:
3
y(:
k)=flipud(x(:
k));
end
imshow(y);
若不是,则直接利用命令y=flipud(x);
即可。
(2)图像上下翻转的结果如下:
注:
这是灰度图像处理
4.3.2左右
(1)使用函数fliplr实现图像的左右翻转,同样需要进行彩色图像的判断,若为彩色图像,则按维进行处理,具体命令如下:
y(:
k)=fliplr(x(:
end
若不是,则直接利用命令y=fliplr(x);
imshow(y);
(2)图像左右翻转的结果如下:
4.3.3任意角度
(1)使用函数y=imrotate(x,p1,'
crop'
实现图像的任意角度翻转,该函数不需要对彩色图像进行判断,但是含有两个参数,其中参数p1同样使用一个对话框来进行参数的调整,具体命令格式如下:
prompt={'
输入角度'
defans={'
60'
p=inputdlg(prompt,'
另一个参数'
表示取图像的中心部分。
(2)图像任意角度翻转的结果如下:
(选取60度和30度)
4.4图像的直方图统计
4.4.1R分量的统计
(1)利用函数x=imhist(x(:
实现对图像R分量的统计,然后再用函数bar(x1,y1);
画出柱状直方图即可(其中x1为横坐标,y1为纵坐标(显示R分量统计的具体值,可以选取一部分))。
(2)图像R分量的统计的结果如下:
4.4.2G分量的统计
(1)同样利用函数x=imhist(x(:
实现对图像G分量的统计,然后再用函数bar(x1,y1);
画出柱状直方图即可。
(2)图像G分量的统计结果如下:
4.4.3B分量的统计
实现对图像B分量的统计,然后再用函数bar(x1,y1);
(2)图像B分量的统计结果如下:
4.4.4灰度直方图统计
(1)当图像是灰度图像时,可以直接利用函数x=imhist(x);
对图像进行直方图统计。
(2)灰度直方图统计结果如下:
4.5图像感兴趣部分的放大与缩小
4.5.1双线性插值法
(1)先使用y=imcrop(x);
选取感兴趣的部分,然后再用函数y=imresize(y,p1,'
bilinear'
实现对选取图像的最近邻插值放大或缩小,参数'
表示采用双线性插值方法,参数p1同样用一个对话框实现,方便放大和缩小参数的调节,具体命令如下:
prompt={'
输入参数'
0.2'
(2)放大结果如下:
缩小结果如下:
4.5.2最近邻插值法
(1)做法同双线性插值一样,先使用y=imcrop(x);
选取感兴趣的部分,然后再用函数y=imresize(y,p1,‘nearest'
只需将原先的参数'
改成参数'
nearest'
4.6图像加噪处理
(1)使用函数y=imnoise(x,'
salt&
pepper'
p1);
对图像进行加噪处理,根据不同的噪声,只需将'
参数改为不同性质的噪声即可。
(2)A、椒盐噪声处理结果如下:
B、高斯噪声处理结果如下:
C、乘性噪声处理结果如下:
D、泊松噪声处理结果如下:
4.7图像锐化处理(边缘检测)
(1)因为锐化处理是针对灰度图像进行的一种操作,所以如果图像是彩色图像,则使用函数y=edge(rgb2gray(x),'
sobel'
,若不是则直接用函数y=edge(x,'
就好,对于不同的锐化方法,只需改变参数'
的类型就可以了。
(2)sobel处理结果如下:
prewitt处理结果如下:
canny处理结果如下:
4.8图像去噪处理(滤波平滑)
4.8.1中值滤波
(1)由于中值滤波只针对灰度图像进行处理,所以当读取图像时,需对是否为彩色图像进行判断(利用函数isrgb),若是,则具体实现命令如下:
k)=medfilt2(x(:
end
如不是,直接使用函数y=medfilt2(x);
(2)中值滤波处理结果如下:
这是彩色图像处理结果。
这是灰度图像处理结果。
4.8.2均值滤波
(1)因为均值滤波的模板较多,在这里采用下拉菜单,当单选选中均值滤波时,就显示出可以选择模板点数,方便用户的选择,再通过选中具体的点数实现均值滤波,函数为imfilter,若是彩色图像,则需按维进行处理,具体命令如下:
y(:
k)=imfilter(x(:
k),h);
end
其中,h=ones(4,4)/16;
根据不同的点数,可以设置不同的h值。
若不是彩色图像,则直接使用函数y=imfilter(x,h);
(2)均值滤波处理结果如下:
这是彩色图像处理结果,点数为9点。
这是灰度图像处理结果,点数为4点。
4.9图像处理应用实例的演示、常用简单的图像处理
4.9.1应用实例(运动模糊的处理)
(1)首先先对图像进行运动模糊处理,函数为y=imfilter(x,PSF,'
circular'
conv'
其中,参数PSF=fspecial('
motion'
LEN,THETA);
根据设定的莱恩像素LEN和角度THETA产生一个预定义的滤波器,参数'
和'
表明采用循环卷积的方式对图像进行处理,这样将得到一个运动模糊的图像;
紧接着再对模糊的图像进行去模糊处理,函数为y=deconvwnr(y,PSF);
。
(2)运动模糊处理结果如下:
去运动模糊的结果如下:
4.9.2常用简单处理
(1)所谓常用,即分析处理图像时需要用到的一些操作,分别为图像二值化、彩色模型转换、频谱显示、伪彩色处理,现针对每一项进行描述。
A、图像二值化
图像为彩色图像时,需先将其转为灰度图像,再利用函数y=im2bw(rgb2gray(x));
实现,否则直接使用函数y=im2bw(x);
二值化结果如下:
彩色图像的二值化
灰度图像的二值化
B、彩色模型转换
图像为彩色时,使用函数y=rgb2hsv(x);
处理,若不是则弹出一个对话框提示,具体命令如下:
灰度图像不能转换'
转换失败'
彩色模型转换运行结果如下:
灰度图像运行结果如下:
C、频谱显示
要得到图像的频谱图,需对图像先进行傅里叶变换,由于一般图像的频谱分量是在四个角落,所以要对图像的能量进行集中处理,具体命令如下:
m=fft2(x(:
%彩色图像
y=fftshift(m);
或m=fft2(x);
%灰度图像
y=fftshift(m);
频谱显示结果如下:
彩色图像(上)、灰度图像(下)
D、伪彩色处理
针对彩色图像,函数为y=imadjust(rgb2gray(x),[01],[10],2);
灰度图像为:
y=imadjust(x,[01],[10],2);
伪彩色处理结果如下:
5、结果分析
软件测试结果基本可以,但普遍存在一个问题,就是有些函数只对灰度图像处理成立,而对彩色图像不能处理,或者说彩色图像需降维处理,针对这个问题,我想是因为对MATLAB软件函数的不了解所造的,经过学习和询问,学会了在每次操作之前,先对图像是否为RGB进行判断(函数isrgb),对于无法进行的操作,可以使用消息框或错误提示框,否则用户无法知道操作是否运行了,还是出错了。
还有一个比较困惑的问题是每次的操作都比较独立,无法在处理后的图像上进行再次处理,如:
加噪之后想直接利用滤波平滑对其去噪处理,没办法实现,这样效果不明显。
于是我选择将处理后的图像先保存,下次处理时读取前次处理的图片,但是这种做法不够便捷,其实可以将之前处理后的图片设置为全局变量,之后直接使用这个变量就好了。
6、心得体会
《数字图象处理》是一门实践性较强又比较难的课程,其中程序的编写更是复杂,通过使用MATLAB软件可以较方便快捷的实现和《数字图象处理》一样的功能。
通过这次课程设计,我明白了理论与实践相结合的重要性,虽然之前学过matlab的课程,成绩也不错,但那只是停留在理论上的学习,所以当我第一次课听老师讲课设时,觉得无从下手,不懂得课设的目的是什么,也不明白课设要的结果是什么,后来在老师和同学的指点下渐渐地懂得了课设要求、目的以及效果。
根据我选的课题:
基于MATLAB的图像处理课程设计——制作自己的Photoshop,本次课设重点是GUI界面的创建和使用、图像句柄的使用、以及matlab中相关图像处理函数的使用。
首先,通过复习matlab教材,上网搜索相关资料,以及老师的指点,把需要的基本操作和编程应用学到手,为课设做了较好的准备。
不过在课设的时候还是遇到了不少问题,如:
有些函数使用的较少,难以找到,或者有些函数的参数很多,不懂得该如何去设置它的值,还有就是有些功能要求可以渐进的看见效果图,针对这些问题,我查阅了相关资料,终于将它们一一解决了,比如渐进的问题,可以采用一个参数调整对话框,想得到怎样的效果,就将参数设置为相应的值,总之我学到了更多有关matlab函数和GUI界面对话框的使用。
综上,这次课程设计让我学会了很多matlab和数字图像处理有关的函数,编程能力也提高了不少,对matlab的学习也不再是停留在表面上。
不过在课设的过程中,会发现程序的编写和调试着实让人头疼,需要有足够的耐心,同时也要学会通过matlab的运行框自己检查错误在哪,并及时修改,反正这次课设,不单单只是一次简单的课设,从中可以让我学到很多的知识,受益匪浅。
7、参考书目:
1《MATLAB实用教程》郑阿奇电子工业出版社
2《数字图像处理MATLAB版》冈莎雷斯电子工业出版社
8、附录:
%文件打开
functionpushbutton1_Callback(hObject,eventdata,handles)
ifisequal(filename,0)||isequal(pathname,0)
errordlg('
没有选中文件'
出错'
return;
else
file=[pathname,filename];
globalS%设置一个全局变量,保存原始图像,供后面使用
S=file;
x=imread(file);
set(handles.axes1,'
HandleVisibility'
ON'
axes(handles.axes1);
imshow(x);
OFF'
handles.img=x;
guidata(hObject,handles);
end
%文件保存
functionpushbutton3_Callback(hObject,eventdata,handles)[sfilename,sfilepath]=uiputfile({'
保存图像文件'
%文件退出
functionpushbutton2_Callback(hObject,eventdata,handles)
close(gcf);
%亮度调节
functionpushbutton4_Callback(hObject,eventdata,handles)
globalS
x=imread(S);
axes(handles.axes2);
原值范围'
p1=str2num(p{1});
p2=str2num(p{2});
p3=str2num(p{3});
y=imadjust(x,p1,p2,p3);
%亮度调节
handles.img=y;
%灰度变换
functionpushbutton7_Callback(hObject,eventdata,handles)
x=imread(S);
ifisrgb(x)
y=rgb2gray(x);
%灰度变换
axes(handles.axes2);
elsemsgbox('
已是灰度图像,无需转换'
)
%对比度调节
functionpushbutton5_Callback(hObject,eventdata,handles)
defans={'
p=inputdlg(prompt,'
y=immultiply(x,p1);
%对比度调节
%感兴趣截图
functionpushbutton6_Callback(hObject,eventdata,handles)
axes(handles.axes1);
y=imcrop(x);
%截图
%直方图均衡
functionpushbutton9_Callback(hObject,eventdata,handles)
axes(handles.axe