⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档 (2).txt

📁 关于K聚类的源程序
💻 TXT
字号:
function [mu,mask]=kmeans1(ima,k) 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% 
%   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 
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
% check image 
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(1,m);    %聚类前图像向量中各灰度出现的次数统计 
hc=zeros(1,m);   %聚类后图像向量所属类编号 
 
for i=1:s 
  if(ima(i)>0)  
      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(i,j)-mu); 
        a=find(c==min(c));   
        mask(i,j)=a(1); 
    end 
end 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -