matlab 图像处理报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《 MATLAB 实践》
For personal use only in study and research; not for commercial
use
课程设计
学生姓名:
学号:
专业班级:
指导教师:
二○○九年三月十三日
1.设计目的…………………………………………………第 3页
2.题目分析…………………………………………………第3 页
3.总体设计…………………………………………………第4 页
4.具体设计…………………………………………………第 6页
5.结果分析…………………………………………………第 20页
6.心得体会…………………………………………………第 20页
7.参考书目…………………………………………………第 20页
1 课程设计的目的:
综合运用MATLAB工具箱实现图像处理的GUI程序设计。
2、题目分析
课程设计的基本要求
1)熟悉和掌握MATLAB 程序设计方法
2)掌握MATLAB GUI 程序设计
3)学习和熟悉MATLAB图像处理工具箱
4)学会运用MATLAB工具箱对图像进行处理和分析
课程设计的内容
学习MATLAB GUI程序设计,利用MATLAB图像处理工具箱,设计和实现自己的Photoshop 。
要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。
然后按照自己拟定的功能要求进行程序设计和调试。
以下几点是程序必须实现的功能。
1)图像的读取和保存。
2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。
3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。
4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存,比较几种插值的效果。
5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的效果。
6)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。
比较去噪效果。
3、总体设计
本软件工具栏主要有文件,工具、图像等一些基本功能,如文件选项中包括打开、保存以及退出程序,操作选项卡中包含一些常用功能,对图像的处理通过对工具
栏的操作来完成,下面将就具体功能逐个说明。
每一小段程序将在%后说明
4、具体设计
a.文件→打开
[name,path]=uigetfile('*.*','');
file=[path,name];
axes(handles.axes1);
x=imread(file); %读取图像
handles.img=x;
guidata(hObject, handles);
imshow(x); %显示图像
title('打开')
b.文件→保存
global BW % 定义全局变量
[filename,pathname]= uiputfile({'*.*'},'save picture'); x=[pathname,filename];
imwrite(BW,x); %保存图像
c.文件→退出
clc;
close all;
close(gcf);
(2)工具中的加入噪声
a.工具→噪声→高斯噪声:
global BW
axes(handles.axes2);
prompt={'输入参数1:','输入参数2:'};
defans={'0','0.02'};
p=inputdlg(prompt,'输入参数',1,defans);
p1=str2num(p{1});
p2=str2num(p{2});
y=imnoise(handles.img,'gaussian',p1,p2); %生成高斯噪声imshow(y);
imwrite(y,'gaussian.jpg'); %自动生成处理过的图像title('高斯噪声');
BW=y;
b.工具→噪声→乘性噪声
global BW
axes(handles.axes2);
prompt={'输入参数1:'};
defans={'0.02'};
p=inputdlg(prompt,'输入参数',1,defans);
p1=str2num(p{1});
y=imnoise(handles.img,'speckle',p1); %生成乘性噪声
imshow(y);
imwrite(y,'speckle.jpg'); %自动生成处理过的图像title('乘性噪声');
BW=y;
c.工具→噪声→椒盐噪声
global BW
axes(handles.axes2);
prompt={'输入参数1:'};
defans={'0.02'};
p=inputdlg(prompt,'输入参数',1,defans);
p1=str2num(p{1});
y=imnoise(handles.img,'salt & pepper',p1); %生成椒盐噪声imshow(y);
imwrite(y,'salt.jpg'); %自动生成处理过的图像title('椒盐噪声');
BW=y;
工具→去噪
加入高斯噪声后的滤波
a.工具→去噪→自适应滤波
global BW
axes(handles.axes2);
y=wiener2(handles.img); %自适应滤波imshow(y);
imwrite(y,'wiener.jpg');
title('自适应滤波');
BW=y;
b.工具→去噪→线性滤波
global BW
axes(handles.axes2);
h=[1 1 1;1 1 1;1 1 1];
H=h/9;
i=double(handles.img);
k=conv2(i,h); %线性滤波imshow(k,[]);
title('线性滤波');
BW=y;
c.工具→去噪→中值滤波
global BW
axes(handles.axes2);
x=(handles.img);
prompt={'输入参数1:','输入参数2:'};
defans={'5','5'};
p=inputdlg(prompt,'输入参数',1,defans);
p1=str2num(p{1});
p2=str2num(p{2});
z=medfilt2(x,[p1,p2],'symmetric'); %中值滤波imshow(y);
imwrite(y,'medfilt.jpg');
title('中值滤波');
BW=y;
工具→缩放(主要对文件的尺寸进行修改)
a.工具→缩放→最近邻插值
global BW
axes(handles.axes2);
prompt={'缩放倍数'};
defans={'2'};
p=inputdlg(prompt,'输入参数',1,defans);
p1=str2num(p{1});
x=imresize(handles.img,p1,'nearest'); %最近邻插值法缩放imshow(x);
imwrite(x,'near .jpg')
title(' 最近邻插值法缩放');
BW=x;
把新图像保存为114(原图像为113)
新图像大小为原来的0.5*0.5倍
b.工具→缩放→双线性插值
global BW
axes(handles.axes2);
prompt={'缩放倍数'};
defans={'2'};
p=inputdlg(prompt,'输入参数',1,defans);
p1=str2num(p{1});
x=imresize(handles.img,p1,'bilinear'); %双线性插值法缩放imshow(x);
imwrite(x,'double.jpg');
title('•双线性插值');
BW=x;
把新图像保存为115(原图像为113)
新图像大小为原来的2*2倍
global BW
axes(handles.axes2);
x=imcrop(handles.img); %截图
imshow(x);
imwrite(x,'cut.jpg'); %保存图像
title('截图');
BW=x;
工具→频谱
axes(handles.axes2);
x=(handles.img);
J2=fft2(x); %傅立叶变换
K2=fftshift(J2); %转换数据矩阵
y=imshow(log(abs(K2)),[8,10]); %显示频谱图title('频谱图');
global BW
axes(handles.axes2);
x=(handles.img);
prompt={'旋转角度'};
defans={'60'};
p=inputdlg(prompt,'输入参数',1,defans);
p1=str2num(p{1});
y=imrotate(x,p1,'bilinear','crop'); %旋转角度imshow(y); %显示旋转效果BW=y;
图像→对比度调节
global BW
axes(handles.axes2);
x=(handles.img);
prompt={'下限0.00','上限1.00','r'};
defans={'0.15','0.85','0.5'};
p=inputdlg(prompt,'输入参数',1,defans);
p1=str2num(p{1});
p2=str2num(p{2});
p3=str2num(p{3});
y=imadjust(x,[p1,p2], [0.15,0.85],p3); %对比度调节imshow(y);
title('对比度调节');
BW=y;
图像→亮度调节
global BW
axes(handles.axes2);
x=(handles.img);
prompt={'下限0.00','上限1.00'};
defans={'0.15 ','0.85'};
p=inputdlg(prompt,'输入参数',1,defans);
p1=str2num(p{1});
p2=str2num(p{2});
y=imadjust(x,[0 1], [p1 ,p2]); %亮度调节
imshow(y);
title('亮度调节');
BW=y;
图像→灰度图像
global BW
axes(handles.axes2);
x=rgb2gray(handles.img); %RGB图像转换为灰度图像imshow(x);
imwrite(x ,'huidu.jpg')
title(' 灰度');
BW=x;
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
x=imhist(handles.img); %直方图统计x1=x(1:10:256);
horz=1:10:256;
bar(horz,x1);
%axis([0 255 0 150000]);
set(handles.axes2,'xtick',0:50:255);
%set(handles.axes2,'ytick',0:2000:15000);
set(handles.axes2,'HandleVisibility','OFF');
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
h=histeq(handles.img); %直方图均衡imshow(h);
%set(handles.axes2,'ytick',0:2000:15000);
set(handles.axes2,'HandleVisibility','OFF');
关于
msgbox('这是一个关于图像处理GUI程序','关于');
5、结果分析
经过调试,修改之后所设计的功能均可以实现,其具体功能在其字面已很明显,这里就不再赘述。
6、心得体会
GUI就是通过窗口、选单、按钮、文字说明等对象构成的一个美观的界面,提供用户利用鼠标和键盘方便的实现操作。
通过此次课程设计熟悉了GUI程序设计的基本步骤及方法。
在编程的过程中遇到很多的问题,如关于保存的问题,每次保存的结果都是未处理的图像,因此一直在寻找axes2的句柄,最后在同学的帮助下终于解决了问题。
遇到问题不能盲目的相信自己,同学、老师都能提供巨大的帮助。
参考书目:
[1]《MATLAB实用教程》郑阿奇电子工业出版社
[ 2 ] 《应用MATLAB实现信号分析和处理》张明照等科学出版社
仅供个人参考
仅供个人用于学习、研究;不得用于商业用途。
For personal use only in study and research; not for commercial use.
Nur für den persönlichen für Studien, Forschung, zu kommerziellen Zwecken verwendet werden.
Pour l 'étude et la recherche uniquement à des fins personnelles; pas à des fins commerciales.
толькодля людей, которые используются для обучения, исследований и не должны использоваться в коммерческих целях.
以下无正文
不得用于商业用途。