基于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结果展示

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值