图像处理实验报告
实验一:图像增强
实验目的:掌握用空间滤波进行图像增强的基本方法,掌握图像分割的基本方法。
实验要求:测试图像1中同时含有均值为零的均匀分布噪声和椒盐噪声。
用大小为5×5的算术均值滤波器和中值滤波器对图像进行处理,在不同窗口中显示原图像及各处理结果图像,并分析哪一种滤波器去噪效果好?
算法流程:
程序代码:
clear all;clc;
%读入图像
I1=imread('Fig5.12(b).jpg');
%均值滤波模板
h1=ones(5,'uint8');
%获取分辨率
[a,b]=size(I1);
%创建变量
I2=zeros(a+4,b+4,'uint8');
I3=zeros(a+4,b+4,'uint8');
%复制原始图像
for n=3:a+2
for m=3:b+2
I2(n,m)=I1(n-2,m-2);
I3(n,m)=I1(n-2,m-2);
end
end
%边界值设定
for n=1:a+4
for m=1:b+4
%左上角设定
if n<3&&m<3
I2(n,m)=I2(6-n,6-m);
I3(n,m)=I3(6-n,6-m);
%右下角设定
else if n>a+2&&m>b+2
I2(n,m)=I2(2*a+4-n,2*b+4-m);
I3(n,m)=I3(2*a+4-n,2*b+4-m);
%右上角设定
else if n<3&&m>b+2
I2(n,m)=I2(6-n,2*b+4-m);
I3(n,m)=I3(6-n,2*b+4-m);
%左下角设定
else if m<3&&n>a+2
I2(n,m)=I2(2*a+4-n,6-m);
I3(n,m)=I3(2*a+4-n,6-m);
%上两行设定
else if n<3
I2(n,m)=I2(6-n,m);
I3(n,m)=I3(6-n,m);
%下两行设定
else if n>a+2
I2(n,m)=I2(2*a+4-n,m);
I3(n,m)=I3(2*a+4-n,m);
%左两列设定
else if m<3
I2(n,m)=I2(n,6-m);
I3(n,m)=I3(n,6-m);
%右两列设定
else if m>b+2
I2(n,m)=I2(n,2*b+4-m);
I3(n,m)=I3(n,2*b+4-m);
end
end
end
end
end
end
end
end
end
end
%图像处理
for n=3:a+2
for m=3:b+2
%均值滤波
temp0=I2(n-2:n+2,m-2:m+2);
temp0=temp0.*h1;
temp1=mean(temp0(:));
temp1=uint8(floor(temp1));
I2(n,m)=temp1;
%中值滤波
temp2=I3(n-2:n+2,m-2:m+2);
temp3=median(double(temp2(:)));
temp3=uint8(floor(temp3));
I3(n,m)=temp3;
end
end
%保持分辨率
I4=I2(3:a+2,3:b+2);
I5=I3(3:a+2,3:b+2);
%显示图像
figure(1);imshow(I1);
title('原始图像');
figure(2);imshow(I4);
title('算数均值滤波输出');
figure(3);imshow(I5);
title('中值滤波输出');
输出图像:
见附录图1,2,3
结果分析:
由于测试图像1中同时含有均值为零的均匀分布噪声和椒盐噪声。
鉴于邻域平均法有以下特点:
优点:算法简单,计算速度快。
缺点:在降低噪声的同时容易模糊图像边沿和细节处。
中值滤波有以下特点:
去除图像中的椒盐噪声,平滑效果优于均值滤波,在抑制噪声同时还能保持图像边缘清晰。
单独采用算数均值滤波不能很好地消除椒盐噪声,而中值滤波输出又可以明显的看出有拖影现象而且部分细节丢失。
而采用领域平均可以很好地消除均匀分布噪声,中值滤波法又能很好地消除椒盐噪声,故考虑采用先消除均匀分布噪声,后采用中值滤波消除椒盐噪声。
对于均值滤波采取改进措施:设定阈值,大于该阈值时平滑,小于阈值时保留原值
后续试验尝试了几种不同的阈值,最后选择阈值80,该阈值下图像的均匀分布噪声得以抑制而又不会模糊图像本身,细节也能得以保留。
见附录图4,5,6,7
然后对阈值80的算数均值滤波输出进行中值滤波,得到输出:
见附录图8
可以看到此时绝大部分的噪声都被去除而且图像的细节也得以保留。
图像增强效果优于单独进行均值滤波与中值滤波。
附录:
实验二:图像分割
实验目的:掌握用空间滤波进行图像增强的基本方法,掌握图像分割的基本方法。
实验要求:对测试图像2进行图像分割,求出分割测试图像2的最佳阈值。
分别显示原图、原图的直方图(标出阈值)、和分割后的二值图。
算法流程:
程序代码:
clear all;clc;
%读取图像
I=imread('Fig10.29(a).jpg');
%创建变量
[a,b]=size(I);
J=zeros(a,b);
%设定迭代阈值
T0=1;
%初始化
T1=mean(I(:));
r1=find(I>T1);
r2=find(I<=T1);
T2=(mean(I(r1))+mean(I(r2)))/2;
%迭代求解图像分割阈值
while abs(T2-T1)>=T0
T1=T2;
r1=find(I>T1);
r2=find(I<=T1);
T2=(mean(I(r1))+mean(I(r2)))/2;
end
T2=ceil(T2);
%输出二值图像
for i=1:a*b
J(i)=255*(I(i)>T2)+ 0*(I(i)<=T2);
end
%显示图像
figure(1);imshow(I);
title('原始图像');
figure(2);imhist(I);
title('灰度直方图');
hold on;
plot([T2,T2],[0,6000],'r');%画分割线
str1=num2str(T2);
text(T2+5,2000,'分割阈值');%标注分割阈值
text(T2+5,1800,str1);
hold off;
figure(3);imshow(J);
title('迭代法分割输出');
输出图像:
见附录图1,2,3
结果分析:
迭代法适用于图像灰度直方图中双峰明显的图像,从灰度直方图中我们可以看到该图像满足这一要求。
对比Otsu阈值分割求得阈值125,迭代法求得阈值126,输出图像差别不大,见附录图3,4 考虑到输出图像中部分指纹内部有细小空洞,鉴于闭运算有如下特点:
填充对象内细小空洞
连接邻近对象
在不明显改变面积的前提下,平滑对象边缘
故在迭代法输出的基础上采取闭运算填补内部空洞,对于模板的选取也有一定的要求。
实验中尝试了多种不同形状及大小的模板,发现只能采用结构元素大小为1的模板,否则会导致指纹下部的部分粘连。
处理图像见附录图5
可以看到处理后的图像一部分较小的空洞得以填补,较大的空洞也得以缩小。
附录:
Otsu阈值分割程序代码:clear all;clc;close all;
I=imread('Fig10.29(a).jpg'); I=im2double(I);
T=graythresh(I);
J=im2bw(I,T);
figure(1);
imshow(J);
title('Otsu阈值分割');
增加闭运算处理代码:se=strel('square',2);
K=imopen(J,se);
figure(4);imshow(K);
title('闭运算处理输出');。