資源簡(jiǎn)介
利用kmeans算法對(duì)圖像聚類的一個(gè)小程序,里面包含圖片和對(duì)應(yīng)的主函數(shù)和調(diào)用函數(shù),可以直接運(yùn)行。

代碼片段和文件信息
function?[mumask]=kmeans1(imak)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%???kmeans?image?segmentation
%
%???Input:
%??????????ima:?grey?color?image
%??????????k:?Number?of?classes
%???Output:
%??????????mu:?vector?of?class?means?
%??????????mask:?clasification?image?mask
%
%???Author:?Jose?Vicente?Manjon?Herrera
%????Email:?jmanjon@fis.upv.es
%?????Date:?27-08-2005
%通過(guò)k均值算法對(duì)圖像進(jìn)行聚類運(yùn)算,獲得聚類圖像
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%?check?image
gpp=size(ima1);
for?i=1:gpp
????for?j=1:gpp
????????ima(ij)=uint16(ima(ij));
????end
end
mask=ima;
ima=double(ima);
copy=ima;?????????%?make?a?copy
ima=ima(:);???????%?vectorize?ima?圖像轉(zhuǎn)成一個(gè)向量
mi=min(ima);??????%?deal?with?negative?求圖像中的最小灰度值
ima=ima-mi+1;?????%?and?zero?values?圖像所有值向下浮動(dòng)至最小值為1
s=length(ima);????%?計(jì)算向量總元素?cái)?shù)
%?create?image?histogram
m=max(ima)+1;????%取最大像素值
h=zeros(1m);????%聚類前圖像向量中各灰度出現(xiàn)的次數(shù)統(tǒng)計(jì)
hc=zeros(1m);???%聚類后圖像向量所屬類編號(hào)
for?i=1:s
??if(ima(i)>0)?
??????%bpp=im2uint16(ima(i));?
??????%h(bpp)=h(bpp)+1;
??????h(ima(i))=h(ima(i))+1;
??end
end
ind=find(h);????%找到圖像向量中所有出現(xiàn)次數(shù)非0的值
hl=length(ind);?%圖像向量中所有非0值的個(gè)數(shù)
%?initiate?centroids
mu=(1:k)*m/(k+1);%確定初始聚類中心(k個(gè))
%?start?process
while(true)
??
??oldmu=mu;?%記錄上一次的聚類中心
??
??%?current?classification??
?
??for?i=1:hl
??????c=abs(ind(i)-mu);?????%計(jì)算圖像向量中每一個(gè)分量與所有聚類中心的距離
??????cc=find(c==min(c));???%找到圖像向量中每一個(gè)分量與聚類中心距離中最短的那一個(gè)聚類中心
??????hc(ind(i))=cc(1);?????%記錄圖像向量中每一個(gè)分量所屬的類號(hào)
??end
??
??%recalculation?of?means??
??%更新聚類中心
??for?i=1:k?
??????a=find(hc==i);????????%找到圖像向量中所有屬于第i類的分量
??????if?sum(h(a))~=0
??????????mu(i)=sum(a.*h(a))/sum(h(a));?%更新第i類的聚類中心
??????end
??end
??
??%聚類中心不再變化,說(shuō)明聚類結(jié)束,退出
??if(mu==oldmu)?
??????break;
??end
??
end
%?calculate?mask
s=size(copy);
mask=zeros(s);
for?i=1:s(1)
????for?j=1:s(2)
????????c=abs(copy(ij)-mu);
????????a=find(c==min(c));??
????????mask(ij)=a(1);
????end
end
mu=mu+mi-1;???%?recover?real?range
mu
mask
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-05-12?10:07??kmeans圖像聚類程序\
?????文件????????2287??2017-05-12?10:05??kmeans圖像聚類程序\kmeans1.m
?????文件??????263222??2015-06-08?17:13??kmeans圖像聚類程序\lena.bmp
?????文件??????????52??2017-05-12?10:11??kmeans圖像聚類程序\main.m
評(píng)論
共有 條評(píng)論