MATLAB数字图像实验报告Word格式文档下载.docx
《MATLAB数字图像实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《MATLAB数字图像实验报告Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。
View→M-fileEdit→编写程序;
最后单击
,建立几个便捷按钮,相应的Viewcallbacks与之前同。
程序代码及实现的功能
1)图像的读取和保存。
读取
[name,path]=uigetfile('
*.*'
'
'
);
file=[path,name];
axes(handles.axes1);
x=imread(file);
handles.img=x;
guidata(hObject,handles);
imshow(x);
title(‘打开’);
保存
[sFileNamesFilePath]=uiputfile({'
*.jpg'
JPEG-Files(*.jpg)'
;
...
'
AllFiles(*.*)'
},'
保存图像文件'
untitled.jpg'
if~isequal([sFileName,sFilePath],[0,0])
sFileFullName=[sFilePathsFileName];
imwrite(handles.noise_img,sFileFullName,'
jpg'
else
msgbox('
确定取消保存?
end
退出
clc;
closeall;
close(gcf);
2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。
亮度,对比度
set(handles.axes2,'
HandleVisibility'
ON'
axes(handles.axes2);
prompt={'
亮度low:
亮度high:
对比度:
};
defans={'
0'
1'
p=inputdlg(prompt,'
输入参数'
1,defans);
p1=str2num(p{1});
p2=str2num(p{2});
p3=str2num(p{3});
f=imadjust(handles.img,[p1p2],[01],p3);
imshow(f);
handles.img=f;
guidata(hObject,handles);
OFF'
3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。
截图
x=imcrop(handles.img);
imwrite(x,'
cut.jpg'
title('
截图'
4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存,比较几种插值的效果。
最近邻插值法
x=imresize(handles.img,2,'
nearest'
nearfangda.jpg'
)
最近邻插值法放大'
x=imresize(handles.img,0.5,'
nearsuoxiao.jpg'
最近邻插值法缩小'
双线性插值法
x=imresize(handles.img,5,'
bilinear'
shuangfangda.jpg'
双线性插值法放大'
shuangsuoxiao.jpg'
双线性插值法缩小'
5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的效果。
set(handles.axes2,'
x=imhist(handles.img);
x1=x(1:
10:
256);
horz=1:
256;
bar(horz,x1);
%axis([02550150000]);
xtick'
0:
50:
255);
%set(handles.axes2,'
ytick'
2000:
15000);
统计'
h=histeq(handles.img);
imshow(h);
均衡'
6)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。
比较去噪效果。
噪声
str=get(hObject,'
string'
switchstr
case'
椒盐噪声'
prompt={'
输入参数1:
defans={'
0.02'
p=inputdlg(prompt,'
p1=str2num(p{1});
f=imnoise(handles.img,'
salt&
pepper'
p1);
imshow(f);
handles.noise_img=f;
guidata(hObject,handles);
title('
加椒盐噪声'
高斯噪声'
输入参数2'
p2=str2num(p{2});
gaussian'
p1,p2);
加高斯噪声'
乘性噪声'
speckle'
加乘性噪声'
end
滤波
m1=rgb2gray(handles.noise_img);
k=medfilt2(m1);
imshow(k);
中值滤波'
h=[010;
1-41;
010];
H=h/9;
i=double(m1);
k=conv2(i,h);
线性滤波'
k=wiener2(m1,[5,5]);
imshow(k);
自适应滤波'
7)能对图像进行多次旋转操作
f=imrotate(handles.img,90);
%可以改变旋转角度
guidata(hObject,handles)
8)可以对图像进行锐化
0.1'
y=edge(handles.img,'
roberts'
imshow(y);
9)创建图像的轮廓
imcontour(handles.img,3);
10)将灰度图像转为二进制图像
h=im2bw(handles.img);
11)将灰度图像转为索引图像
I=grayslice(handles.img);
imshow(I,jet(16));
12)将RGB图像转为灰度图像
x=rgb2gray(handles.img);
灰度'
五、调试和结果分析,贴图比较各图像处理的结果,分析。
原图双线性插值缩小最近邻插值缩小
双线性插值放大最近邻插值放大直方图统计
直方图均衡亮度90度旋转
锐化轮廓灰度转索引
灰度转2进制添加乘性噪声添加椒盐噪声
添加高斯噪声乘性噪声中值滤波乘性噪声线性滤波
乘性噪声自适应滤波椒盐噪声中值滤波椒盐噪声线性滤波
椒盐噪声自适应滤波高斯噪声中值滤波高斯噪声线性滤波
高斯噪声自适应滤波
分析
放大缩小图像时使用了两种方法,最近邻插值法比双线性插值法运行时间快;
就效果而言,使用最邻近插值法确实出现了锯齿,但并不明显,而双线性插值则几乎没有什么改变。
在做到加高斯噪声和椒盐噪声时,程序运行较慢,我认为这可能有两方面的原因:
一是程序的问题,二是计算机的反应速度。
通过不同的加噪方法,得到了不同的加噪效果;
不同的滤波方法,得到的滤波效果图也不同。
同一种滤波方法对不同噪声的效果也不尽相同。
对乘性噪声和高斯噪声来说,自适应滤波的效果最佳;
对椒盐噪声,中值滤波效果更好。
相对来说,线性滤波的效果是最不理想的。
中值滤波较自适应滤波运行速度快。
六、体会
通过这次基于MATLAB的图像处理的课程设计,熟悉和掌握了MATLAB程序设计方法、MATLABGUI程序设计和MATLAB图像处理工具箱,了解了图形用户界面的制作的设计原则和一般步骤:
简单性、一致性、习常性、响应要迅速、连续等原则,学会了运用MATLAB工具箱对图像进行处理和分析。
图形用户界面是包含图形对象如窗口、图标、菜单和文本的用户界面。
现阶段,图形界面已在人机交互方式中占主导地位,这主要是由于它给用户带来了操作和控制的方便与灵活性。
在设计一个高效的用户界面时,先选择恰当的图形对象,然后将它们有逻辑地组织起来,使得用户界面容易操作使用。
七、附录
源代码
采用灰度变换的方法增强图像的对比度:
I=imread('
rice.tif'
imshow(I);
figure,imhist(I);
J=imadjust(I,[0.150.9],[01]);
figure,imshow(J);
figure,imhist(J);
模拟图像受高斯白噪声、椒盐噪声和乘性噪声的影响:
eight.tif'
imshow(I);
J1=imnoise(I,'
0,0.02);
%叠加均值为0,方差为0.02的高斯噪声
figure,imshow
(J1);
J2=imnoise(I,'
0.02);
%叠加密度为0.02的椒盐噪声。
figure,imshow(J2);
J3==imnoise(I,'
%叠加密度为0.02的乘性噪声。
figure,imshow(J3);
图像的滤波:
k=medfilt2(I);
%中值滤波
imshow(k);
t=wiener2(I,[5,5]);
%自适应滤波
imshow(t);
截图:
f=imcrop(I);
最近邻插值放大缩小:
f=imresize(I,p1,'
双线性插值放大缩小:
参考书目:
1《MATLAB实用教程》郑阿奇电子工业出版社
2《数字图像处理MATLAB版》冈莎雷斯电子工业出版社
3《MATLAB语言及其在电子信息工程中的应用》王洪元主编
清华大学出版社
4《MATLAB在数字图像处理中的应用》机械工业出版社
程序段:
[filename,pathname]=uigetfile({'
读取图像'
%选择文件对话框且选取读入文件类型不限
ifisequal(filename,0)|isequal(pathname,0)
errordlg('
没有选中图像'
出错'
%如果没有输入,则创建错误对话框
return;
else
img=imread([pathname,filename]);
%读取刚才选择的文件
set(handles.axes1,'
%打开坐标,方便操作
axes(handles.axes1);
%操作在坐标1
imshow(img);
%在坐标1显示原图像
handles.image=img;
guidata(hObject,handles)%储存句柄
%关闭坐标,以免对下面的坐标产生误操作
if~isequal([sFileName,sFilePath],[0,0])
%当有输入不为零时,进行文件名传递
imwrite(handles.noise_image,sFileFullName,'
%表示讲格式化为jpg的图像handles.noise_image(在这里为坐标二的图像)写入文件sFileFullName
您按了取消键'
保存失败'
%当没有输入时,退出
%关闭全部
%退出演示
%讲坐标2的操作可视性打开
%在坐标2操作
x=(handles.image);
%赋予x为第一副图句柄
low_in:
high_in:
low_out'
high_out'
输入参数'
%创建对话框
iflength(p)<
1
您没有输入'
出错'
%当按下取消键时,创建错误对话框
else
%将输入的字符串改成数值
p3=str2num(p{3});
p4=str2num(p{4});
y=imadjust(x,[p1p2],[p3p4]);
%增量图像
imshow(y);
%显示图像增强后的图像
handles.noise_image=y;
%修改坐标2的句柄,以便于保存
亮度增强'
)%改变图像2的标题
%讲坐标2的操作可视性关闭,以免误操作
set(handles.axes1,'
x=imcrop(handles.image);
%没有设定具体坐标,直接由鼠标对原图像进行坐标选定,截图玩后送给x
%在坐标2显示截图后的图像
handles.noise_image=x;
%改变截图后的句柄,以便于保存图像
axes(handles.axes2);
缩小或放大的倍数'