图像处理实验 图像增强和图像分割
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像处理实验
图像增强和图像分割
一、实验目的:
掌握用空间滤波进行图像增强的基本方法,掌握图像分割的基本方法。
二、实验要求:
1、测试图像1中同时含有均值为零的均匀分布噪声和椒盐噪声。用大小为5×5的
算术均值滤波器和中值滤波器对图像进行处理,在不同窗口中显示原图像及各处理结果图像,并分析哪一种滤波器去噪效果好?
2、对测试图像2进行图像分割,求出分割测试图像2的最佳阈值。分别显示原图、
原图的直方图(标出阈值)、和分割后的二值图。
实验容:
1.实验原理
1)图像增强:流程图:
图像增强可以通过滤波的方式来完成,即消除一部分的噪声。滤波又可以分为均值滤波和中值滤波。
1. 中值滤波原理:中值滤波就是选用一个含有奇数个像素的滑动窗口,将该窗口
在图像上扫描,把其中所含像素点按灰度级的升(或降)序排列,取位于中间
的灰度值来代替窗口中心点的灰度值。
对于一维序列{
N f }: 21,},...,,...,{-=∈=+-m u N i f f f Med y u i i u i i 对于二维序列{ij F }:为滤波窗口W y ij F Med W
ij }{=
2. 均值滤波原理:对于含噪声的原始图像g(s,t)的每一个像素点去一个领
域N ,用N 中所包含的相速的灰度平均值,作为领域平均处理后的图像f(x,y)
的像素值,即:
∑∈=xy
S t s t s g mn y x f ),(),(1),(ˆ 2) 图像分割:
图像分割:依据图像的灰度、颜色等特征,将一幅图像分为若干个互不重叠的、具有某
种同质特征的区域。
本实验中我们是根据灰度值,将灰度值大于阈值T的像素统一置为255,小于的则置为0。如何求出最合适的分割阈值,则需要用到迭代算法。
迭代法算法步骤:
(1) 初始化阈值T (一般为原图像所有像素平均值)。
(2) 用T分割图像成两个集合:G1 和G2,其中G1包含所有灰度值小于T的像素,G2包含所有灰度值大于T的像素。
(3) 计算G1中像素的平均值m1及G2中像素的平均值m2。
(4) 计算新的阈值:T =(m1+m2)/2 。
(5)如果新阈值跟原阈值之间的差值小于一个预先设定的围,停止循环,否则继续(2)-(4)步。
2.程序代码与分析:
1)图像增强:
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(:)));