资源描述
北京科技大学 计算机与通信工程学院
实 验 报 告
实验名称: 《数字图像处理》课程实验
学生姓名: 徐松松
专 业: 计算机科学与技术
班 级: 计1304
学 号: 41345053
指导教师: 王志明
实验成绩:
实验时间: 2016 年 12 月 15 日
一、实验目的与实验要求
1、实验目的
1. 熟悉图像高斯、脉冲等噪声的特点,以及其对图像的影响;
2. 理解图像去噪算法原理, 并能编程实现基本的图像去噪算法, 达到改善图像质量的效果, 并能对算法性能进行简单的评价。
3. 理解图像分割算法的原理,并能编程实现基本的灰度图像分割算法,并显示图像分割结果。
2、实验要求
1. 对于给定的两幅噪声图像(test1.jpg, test2.jpg), 设计或选择至少两种图像滤波算法对图像进行去噪。
2. 利用给出的参考图像(org1.jpg, org2.jpg), 对不同算法进行性能分析比较。
3. 对于给定的两幅数字图像(test.jpg,test4.jpg),将其转换为灰度图像,设计或
选择至少两种图像分割算法对图像进行分割,用适当的方式显示分割结果,并对不同算法进行性能分析比较。
二、实验设备(环境)及要求
1. Mac/Windows计算机
2. Matlab编程环境。
三、实验内容与步骤
1、实验1
(1)实验内容
1. 对于给定的两幅噪声图像(test1.jpg, test2.jpg), 设计或选择至少两种图像滤波算法对图像进行去噪。
2. 利用给出的参考图像(org1.jpg, org2.jpg), 对不同算法进行性能分析比较。
(2)主要步骤
1. 打开 Matlab 编程环境;
2. 利用’imread’函数读入包含噪声的原始图像数据;
3. 利用’imshow’函数显示所读入的图像数据;
结果显示:
4. 编码实现图像滤波算法,对原始噪声图像进行滤波处理;
分别用均值滤波,中值滤波和维纳滤波如下:
代码:
J=imread('test1.jpg');
%h=ones(4,4)/16;%产生4*4的全1数组
%B=conv2(J,h);%卷积运算
K2=filter2(fspecial('average',4),J)/255; %均值滤波模版尺寸为4
K= medfilt2(J);%采用二维中值滤波函数进行滤波
K1=wiener2(J,[4 4]); %对噪声图像进行二维自适应维纳滤波
subplot(2,2,1);imshow(J);
title('加噪图像');
subplot(2,2,2);imshow(K2);
title('均值滤波后的图像');
subplot(2,2,3);imshow(K);
title('中值滤波后的图像');
subplot(2,2,4);imshow(K1);
title('维纳滤波后的图像');
imwrite(K2,'均值滤波图像.jpg','quality',100);
imwrite(K,'中值滤波图像.jpg','quality',100);
imwrite(K1,'维纳滤波图像.jpg','quality',100);
处理结果如下:
细节如下:
原始图像 均值滤波
中值滤波 维纳滤波:
对图像二的处理结果:
原始图像 均值滤波
中值滤波 维纳滤波
5. 计算滤波后图像与原图的差异(如 PSNR、MSE 等);
J=imread('test1.jpg');
J2=imread('org1.jpg');
%h=ones(4,4)/16;
%B=conv2(J,h);
K2=filter2(fspecial('average',4),J)/255; %均值滤波
K= medfilt2(J);% 采用二维中值滤波函数进行滤波
%计算均值滤波后图像对比对照图像的PMSE和PSNR
diff1=(double(J2)-(K2)).^2;
mse1=mean(diff1(:));
psnr1=double(10*log10(255^2/mse1));
%计算中值滤波后图像对比对照图像的PMSE和PSNR
M=double(K);
diff2=(double(J2)-(M)).^2;
mse2=mean(diff2(:));
psnr2=double(10*log10(255^2/mse2));
结果:
对于test1.jpg
均值滤波:MSE=1.6391e+04,PSNR=5.9848
中值滤波:MSE=251.4171,PSNR=24.1269
对于test2.jpg
均值滤波:MSE=1.7382e+04,PSNR=5.7550
中值滤波:MSE=31.1728,PSNR=33.1931
实验2
(1)实验内容
对图像进行分割并显示。
(2)主要步骤
1. 打开Matlab编程环境。
2. 利用‘imread’函数读入包含噪声的原始图像数据。
>> I=imread('test3.jpg');
3. 利用‘imshow’函数显示所读入的图像数据。
>> imshow(I);
4. 利用’rgb2gray’函数将彩色图像转换为灰度图像;
>> d=rgb2gray(I);
结果为:
5. 编码实现图像分割, 对原始图像进行区域分割, 并得到各个区域的标号;
1. 利用双分法
先给出原图的直方图,再定出阈值(门限)T,一般取两个峰值间的谷值。
代码:
I=imread('test3.jpg');
subplot(1,2,1);
i=rgb2gray(I);
imhist(i);
title('原始图像直方图');
thread=75/255;
subplot(1,2,2);
i3=im2bw(i,thread);
imshow(i3);
title('分隔结果');
从直方图看出两个峰值的谷值大概为75,取作阀值。
分隔结果:
图片二处理:
代码:
I=imread('test4.jpg');
subplot(1,2,1);
i=rgb2gray(I);
imhist(i);
title('原始图像直方图');
thread=50/255;
subplot(1,2,2);
i3=im2bw(i,thread);
imshow(i3);
title('分隔结果');
阀值定为50,处理结果如下:
分隔方法二:分水岭分隔法
基本思想:
1. 把图像看作一个三维拓扑地形图
2. 集水盆:局部极小点及其影响区域
3. 分水岭:集水盆的边界
4. 目标:在图像中找出不同的集水盆和分水岭
代码:
F=imread('test3.jpg');
f=rgb2gray(F);
subplot(2,2,1);
imshow(f);
title('原始灰度图像');
f=double(f);
hv=fspecial('prewitt');
hh=hv.';
gv=abs(imfilter(f,hv,'replicate'));
gh=abs(imfilter(f,hh,'replicate'));
g=sqrt(gv.^2+gh.^2);
L=watershed(g);
wr=L==0;
subplot(2,2,2);
imshow(wr);
title('分水岭');
f(wr)=225;
subplot(2,2,3);
imshow(uint8(f));
title('分隔结果');
rm=imregionalmin(g);
subplot(2,2,4);
imshow(rm);
title('局部极小值');
结果:
四:实验结果与分析
结果符合预期,分隔图像用双分法结果较好。
对于测试图片用中值滤波处理效果较好。
五:结论(讨论)
1、实验结论
了解了数字图像的基本处理方法,掌握了几种分隔图像方法和去噪滤波方法。
2、讨论
对不同的图像需要判断用哪种处理方法为好。
六、教师评审
教师评语
实验成绩
签名:
日期:
展开阅读全文