数字图像处理——K-means聚类

数字图像处理——K-means聚类

一、K-means聚类流程

k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小

Created with Raphaël 2.2.0 开始 输入需要分类的图像 将图像转换到光谱空间中 人为设置分类数 初始化聚类中心 按最短欧氏距离聚类 重新计算聚类中心 聚类中心未发生改变 结束 yes no

二、matlab代码

clear,clc;
Image = double(imread('1.jpg'));
[lines,samples,bands] = size(Image);

%k-means
K = 5;
A = reshape(Image(:,:,:),lines*samples,3);
Center = zeros(K,3);
center = zeros(K,3);
%初始化聚类中心
for k = 1:K
    Center(k,:)= round(255*k/K);
end
Result = zeros(lines*samples,1);
while(Center~=center)
    center = Center;
    %按最短距离聚类
    for i = 1:lines*samples
        for k = 1:K
            Data(k) = sqrt((A(i,1)-Center(k,1))^2+(A(i,2)-Center(k,2))^2+(A(i,3)-Center(k,3))^2);
        end
        [m,index] = min(Data);
        Result(i,1) = index;
    end
    %重新计算聚类中心
    for k = 1:K
        indexx = find(Result == K);
        for j = 1:3
            Center(K,3) = mean(A(indexx,j));  
        end
    end
end
figure(1);
subplot(1,2,1);
imshow(uint8(Image));
title('原始图像');
Image1 = reshape(Result,lines,samples);
subplot(1,2,2);
imshow(label2rgb(Image1));
title('K-means聚类分割后的影像');

运行结果

在这里插入图片描述

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值