实验三 图像分割

实验目的

(1)了解图像分割的基本原理,并利用图像分割算法进行图像分割处理;

(2)掌握数学形态学的基本运算。

实验内容

(1)利用类间方差阈值算法实现图像的分割处理;

(2)利用形态学处理进行处理结果修正。

实验要求

(1)实验用图如下所示;

img

图 3 原始图像

(2)对输入图像进行平滑处理,以减小噪声对分割处理的影响,比较中值滤波范围取不同值时对图像滤波的效果;

(3)利用类间方差阈值算法对滤波处理后图像进行分割处理,获取分割图像;

(4)利用数学形态学中的腐蚀和膨胀运算处理,剔除分割处理结果中的一些细小的残余误分割点,在进行腐蚀和膨胀运算时可采用半径为r的圆形结构元素,注意比较选取不同r值时的处理结果(r分别取1、3、5)。

实验原理

图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像素赋予相同的编号。

实验结果与分析

实验结果:

(一)对输入图像进行平滑处理,中值滤波范围为1,结果如下:

img

中值滤波范围为3,结果如下:

img

中值滤波范围为5,结果如下:

img

(二)利用类间方差阈值算法对滤波处理后图像进行分割处理,获取分割图像

img

(三)利用数学形态学中的腐蚀和膨胀运算处理,剔除分割处理结果中的一些细小的残余误分割点,r = 1时的处理结果:

img

r = 3时的处理结果:

img

r = 5时的处理结果:

img

实验分析:

由实验结果可以看出,中值滤波效果抑制了图像中大部分噪声,而图像也被一定程度地模糊;经过图像分割之后,目标的轮廓被提取出来。

腐蚀运算时,目标轮廓缩小,r 越大,蚕食部分越大;

膨胀运算时,目标轮廓扩大,r 越大,扩大部分越大。

主要代码

主程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
clc
clear all
thr=imread('thr.bmp');
thr = rgb2gray(thr);

%中值滤波
z=3;
thr2=medfilt2(thr,[z z]);
t=third1(thr2);

%利用类间方差阈值算法对滤波处理后图像进行分割处理
thr3=thr2;
thr3(thr3<t)=0;
thr3(thr3>=t)=255;
imwrite(thr2,'thr_mid.bmp')
imwrite(thr3,'thr_er.bmp')

r=3;
ele=strel('disk',r,8);
thr4=imdilate(thr3,ele);
imwrite(thr4,'thr_pz.bmp')

ele=strel('disk',r,8);
thr5=imerode(thr3,ele);
imwrite(thr5,'thr_fs.bmp')

类间方差阈值求最佳阈值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function best = third1 ( I )
%用类间方差阈值求最佳阈值 best
% 输入 8 位灰度图,输出最佳阈值(灰度值)
s=prod(size(I));
N=zeros(256,1);
T=zeros(256,1);
for k=0:255
num=size(find(I==k),1);
N(k+1,1)=num;
end
for t=1:256
a0=0; a1=0; b0=0; b1=0;
% 一部分图像
for m=1:t
a0=a0+N(m,1);
b0=b0+(m-1)*N(m,1);
end
% 另一部分图像
for m=t+1:256
a1=a1+N(m,1);
b1=b1+(m-1)*N(m,1);
end
w0=a0/s;
w1=a1/s;
% u0 u1
u0=0; u1=0;
for m=1:t
u0=u0+(m-1)*N(m,1)/s;
end
for m=t+1:256
u1=u1+(m-1)*N(m,1)/s;
end
u0=u0/w0;
u1=u1/w1;

T(t,1)=w0*w1*(u0-u1)*(u0-u1);
end
best=find(T==max(max(T)))-1;
end