一、实验题目:
基于聚类的图像分割方法
二、实验目的:
采用聚类算法提取出图像中的真实目标,以便后续图像理解需要。
三、实验内容:
给定一幅灰度图像的图片,采用均值聚类算法将图像中的目标提取出来,以便后续目标识别和图像理解的需要。
四、预备知识:
图像处理概论、均值聚类算法原理。
五、实验原理:
图像分割的本质是将图像分割成相互不相交的区域,有的区域表示图像目标信息,有的区域表示图像背景信息。图像分割方法众多,在实际应用中得到广泛应用的是阈值法和聚类分割法。本实验采用均值聚类算法实现图像分割,其聚类算法如下:
C-均值聚类算法: 1.条件及约定
设待分类的模式特征矢量集为x1,x2,,xN,类的数目c是事先确定的。 2.基本思路
设方法取定c类和选取c个初始聚类中心,按最小距离原则将各模式分配到
c类中的某一类,之后不断地计算类心和调整个模式的类别,最终使各模式到其判属类别中心的距离平方之和最小。
3.算法步骤
(0)(0)(0)(1)任选c个模式特征矢量作为初始聚类中心:z1,令k0。 ,z2,,zc(2)将待分类的模式特征矢量集{xi}(i1,2,,N)中的模式逐个按最小距离原则分划给c类中的某一类,即
(k)(k),i1,2,,N,存在一个l1,2,,c。 mindij 如果 dilj 则判定 xil(k1)。
(k)式中dij表示xi和(jk)的中心z(jk)的距离,上角标表示迭代次数。于是产生新的
聚类(jk1)(j1,2,,c)。
(3)计算重新分类后的各类中心 z(jk1)1ni(k1)xi(jk1)jx,j1,2,,c
式中n(jk1)为(jk1)类中所含模式的个数。
因为这一步采取平均的方法计算调整后各类的中心,且定为c类,故称为C-均值法。
(4)如果z(jk1)z(jk)(j1,2,,c),则结束;否则,kk1,转至(2)。 应用C-均值聚类算法实现图像分割:
这里假设图像分割成c个区域,其图像大小为MN的灰度图像,任意位置
(x,y)处的灰度值为g(x,y)(0g(x,y)255)。因此,灰度图像可采用集合方式描述
为Gg(x,y)|x1,2,,M,y1,2,,N。假设灰度图像中最小灰度值为0,最大灰度值为255,其中任意灰度级出现的总个数记为h(i)(i0,1,,255)且满足
h(i)MN,这里MN表示给定灰度图像中所有灰度总个数。采用C-均值
i0255聚类算法分割图像的算法过程如下:
这里强调的该分割算法仅考虑图像任意位置灰度值的大小,而没有考虑任意像素与其周围邻域像素之间的关系。
步骤1:从0至255中任意选取c个不同大小的值作为图像分割成c类的中
(0)(0)(0)心值,即采用0至255的整数初始化z1的值,令k0。 ,z2,,zc步骤2:将图像中所有不同位置像素的灰度值
g(x,y)(x1,2,,M,y1,2,,N)逐个按最小距离原则分划给c类中的某一类,
即
k)k)d((x,2,,M,y1,2,,N,存在一个 如果 d((x,y)lmin,y)j,x1jl1,2,,c。
则判定 g(x,y)l(k1)。
k)(k)2(k)(k)式中d((x表示和的中心g(x,y)(g(x,y)z)z,y)jjjj的距离,上角标表示迭
代次数。于是产生新的聚类(jk1)(j1,2,,c)。
步骤3:计算重新分类后的各类中心 z(jk1)1n(k1)g(x,y)(jk1)jg(x,y),j1,2,,c
式中n(jk1)为(jk1)类中所含模式的个数。
因为这一步采取平均的方法计算调整后各类的中心,且定为c类,故称为C-均值法。
(4)如果z(jk1)z(jk)(j1,2,,c),则结束;否则,kk1,转至步骤2。
六、实验步骤:
(1) 选取一幅将需要加密的图片; (2) 读取图片内容像素值并存储于矩阵; (3) 采用C-均值聚类算法实现图像2类分割;
(4) 将输出中图像中1类区域像素置为0且代表黑色,另一区域像素置为255
且代表白色; (5) 显示分割结果。
七、思考题目:
(1) 考虑像素与其邻域像素存在紧密的图像分割问题; (2) 考虑彩色图像如何分割的问题。
八、实验程序代码:
(1)分割图像为两个区域的聚类分割程序:
clear all
data=imread('e:\\imagebase\\rice.tif'); data=double(data); figure(1) subplot(2,2,1) imshow(uint8(data)); title('原图像');
subplot(2,2,2); imhist(uint8(data)); title('1D直方图'); [M N]=size(data);
[count,x]=imhist(uint8(data)); mima=find(count~=0); V1=zeros(2); V2=zeros(2);
U1=zeros(length(mima),2);
V1(1)=mima(round(rand(1)*(length(mima)/4))+1);
V1(2)=mima(round(length(mima)/2+rand(1)*(length(mima)/4))+1); k=0; while k==0
for j=1:length(mima)
if abs(mima(j)-V1(2)) for j=1:length(mima) tp1=tp1+count(mima(j))*(mima(j)-1)*U1(j,1); tp2=tp2+count(mima(j))*U1(j,1); tp3=tp3+count(mima(j))*(mima(j)-1)*U1(j,2); tp4=tp4+count(mima(j))*U1(j,2); end V2(1)=tp1/tp2; V2(2)=tp3/tp4; if (abs(V2(1)-V1(1))+abs(V2(2)-V1(2)))>0.0001 V1(1)=V2(1); V1(2)=V2(2); else k=1; end end subplot(2,2,3) img1=250.*ones(size(data)); for i=1:M for j=1:N tp=data(i,j); for l=1:length(mima) if tp==mima(l) k=l; end end if U1(k,1)>=U1(k,2) img1(i,j)=0; end end end imshow(uint8(img1)); tt1='聚类分割图像结果'; title(tt1); 九、实验输出结果: 图2.4.1 蹈米图片采用聚类分割获得的结果 图2.4.2 摄影师图片采用聚类分割获得的结果 图2.4.3 细菌图片采用聚类分割获得的结果 图2.4.4 著名Lena图片采用聚类分割获得的结果 (2)分割图像为背景、目标1和目标2三个区域的分割程序: clear all data=imread('e:\\imagebase\\shot1.tif'); data=double(data); figure(1) subplot(2,2,1) imshow(uint8(data)); title('原图像'); subplot(2,2,2); imhist(uint8(data)); title('1D直方图'); [M N]=size(data); [count,x]=imhist(uint8(data)); mima=find(count~=0); V1=zeros(3); V2=zeros(3); U1=zeros(length(mima),3); V1(1)=mima(round(rand(1)*(length(mima)/6))+1); V1(2)=mima(round(length(mima)/2+rand(1)*(length(mima)/6))+1); V1(3)=mima(round(length(mima)*2/3+2*rand(1)*(length(mima)/6))+1); k=0; while k==0 for j=1:length(mima) if abs(mima(j)-V1(2)) if abs(mima(j)-V1(3)) for j=1:length(mima) tp1=tp1+count(mima(j))*(mima(j)-1)*U1(j,1); tp2=tp2+count(mima(j))*U1(j,1); tp3=tp3+count(mima(j))*(mima(j)-1)*U1(j,2); tp4=tp4+count(mima(j))*U1(j,2); tp5=tp5+count(mima(j))*(mima(j)-1)*U1(j,3); tp6=tp6+count(mima(j))*U1(j,3); end V2(1)=tp1/tp2; V2(2)=tp3/tp4; V2(3)=tp5/tp6; if (abs(V2(1)-V1(1))+abs(V2(2)-V1(2))+abs(V2(3)-V1(3)))>0.0001 V1(1)=V2(1); V1(2)=V2(2); V1(3)=V2(3); else k=1; end end subplot(2,2,3) img1=255*ones(size(data)); for i=1:M for j=1:N tp=data(i,j); for l=1:length(mima) if tp==mima(l) k=l; end end if U1(k,1)>U1(k,2) & U1(k,1)>U1(k,3) img1(i,j)=0; else if U1(k,2)>U1(k,1) & U1(k,2)>U1(k,3) img1(i,j)=125; else if U1(k,3)>U1(k,2) & U1(k,3)>U1(k,1) img1(i,j)=255; end end end end end imshow(uint8(img1)); tt1='聚类分割图像结果'; title(tt1); 输出实验结果: 图2.4.5 斑点图片的3区域聚类分割结果 图2.4.6 怀表图片的3区域聚类分割结果 图2.4.7 光照不均匀图片的3区域聚类分割结果 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务