数字图像处理——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聚类分割后的影像');

运行结果

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐