基于kmeans聚类算法的图像分割

本文介绍了如何使用KMeans聚类算法进行图像分割。针对彩色和灰度图像,分别探讨了处理方法,展示了不同聚类数(N=2, 3, 4)的分割结果。" 130355251,11183300,Matlab PCA分类数据降维与可视化,"['数据降维', '主成分分析', '可视化', 'Matlab', '分类数据']
摘要由CSDN通过智能技术生成

Kmeans之前已经讲过了,其图像分割只不过是把之前的高斯数对换成图像二维像素点,彩色图像每个像素点有rgb三个分量,灰度图像只有一个分量。

1编程实现  

<span style="font-size:14px;">clear;clc;close all;
data=imread('src1.bmp');
imshow(data)
[m,n,c]=size(data);
[mu,pattern]=k_mean_Seg(data,2);
for x=1:m
    for y=1:n
        if pattern(x,y,1)==1
            data(x,y,1)=0;
            data(x,y,2)=0;
            data(x,y,3)=255;
        elseif pattern(x,y,1)==2
            data(x,y,1)=0;
            data(x,y,2)=255;
            data(x,y,3)=0;
        elseif pattern(x,y,1)==3
            data(x,y,1)=255;
            data(x,y,2)=0;
            data(x,y,3)=0;
        else
            data(x,y,1)=255;
            data(x,y,2)=255;
            data(x,y,3)=0;
        end
    end
end
figure;
imshow(data);   
 
function [num,mask]=k_mean_Seg(src,k)
src=double(src);
img=src;        
src=src(:);      
mi=min(src);     
src=src-mi+1;    
L=length(src);
 
m=max(src)+1;
hist=zeros(1,m);
histc=zeros(1,m);
for i=1:L
  if(src(i)>0)
      hist(src(i))=hist(src(i))+1;
  end;
end
ind=find(hist);
hl=length(ind);
num=(1:k)*m/(k+1);
while(true)
  prenum=num;
  for i=1:hl
      c=abs(ind(i)-num);
      cc=find(c==min(c));
      histc(ind(i))=cc(1);
  end
  for i=1:k,
      a=find(histc==i);
      num(i)=sum(a.*hist(a))/sum(hist(a));
  end
  if(num==prenum)
      break;
  end;
 
end
L=size(img);
mask=zeros(L);
for i=1:L(1),
for j=1:L(2),
  c=abs(img(i,j)-num);
  a=find(c==min(c)); 
  mask(i,j)=a(1);
end
end
num=num+mi-1;  </span>

    

 

2结果展示

运用K-means算法进行图像分割, K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为是由距离靠近的对象组成的,因此把得到紧凑且独立的作为最终目标。 k个初始类聚类中心点的选取对聚类结果具有较大的 公式 公式 影响,因为在该算法第一步中是随机的选取任意k个对象作为初始聚类的中心,初始地代表一个。该算法在每次迭代中对数据集中剩余的每个对象,根据其与各个中心的距离将每个对象重新赋给最近的。当考察完所有数据对象后,一次迭代运算完成,新的聚类中心被计算出来。如果在一次迭代前后,J的值没有发生变化,说明算法已经收敛。 算法过程如下: 1)从N个文档随机选取K个文档作为质心 2)对剩余的每个文档测量其到每个质心的距离,并把它归到最近的质心的类 3)重新计算已经得到的各个类的质心 4)迭代2~3步直至新的质心与原质心相等或小于指定阈值,算法结束 具体如下: 输入:k, data[n]; (1) 选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1]; (2) 对于data[0]….data[n],分别与c[0]…c[k-1]比较,假定与c[i]差值最少,就标记为i; (3) 对于所有标记为i点,重新计算c[i]={ 所有标记为i的data[j]之和}/标记为i的个数; (4) 重复(2)(3),直到所有c[i]值的变化小于给定阈值。 折叠工作原理 K-MEANS算法的工作原理及流程 K-MEANS算法 输入:聚类个数k,以及包含 n个数据对象的数据库。 输出:满足方差最小标准的k个聚类。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值