• 大小: 221KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-25
  • 语言: 其他
  • 标签: kmeans  聚类  

资源简介

利用kmeans算法对图像聚类的一个小程序,里面包含图片和对应的主函数和调用函数,可以直接运行。

资源截图

代码片段和文件信息

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
%通过k均值算法对图像进行聚类运算,获得聚类图像
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 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 图像转成一个向量
mi=min(ima);      % deal with negative 求图像中的最小灰度值
ima=ima-mi+1;     % and zero values 图像所有值向下浮动至最小值为1

s=length(ima);    % 计算向量总元素数

% create image histogram

m=max(ima)+1;    %取最大像素值
h=zeros(1m);    %聚类前图像向量中各灰度出现的次数统计
hc=zeros(1m);   %聚类后图像向量所属类编号

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);    %找到图像向量中所有出现次数非0的值
hl=length(ind); %图像向量中所有非0值的个数

% initiate centroids
mu=(1:k)*m/(k+1);%确定初始聚类中心(k个)

% start process

while(true)
  
  oldmu=mu; %记录上一次的聚类中心
  
  % current classification  
 
  for i=1:hl
      c=abs(ind(i)-mu);     %计算图像向量中每一个分量与所有聚类中心的距离
      cc=find(c==min(c));   %找到图像向量中每一个分量与聚类中心距离中最短的那一个聚类中心
      hc(ind(i))=cc(1);     %记录图像向量中每一个分量所属的类号
  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
  
  %聚类中心不再变化,说明聚类结束,退出
  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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           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

评论

共有 条评论