K-means实现图像聚类

1.实验准备

进行实验的前提是将实验数据和需要的实验工具准备齐全。

首先去网站http://www.cs.toronto.edu/~kriz/cifar.html中下载CIFAR-10数据集,这里选用的是matlab版本的数据。

                                                                                 图1 matlab版本数据的下载

该数据集中包含5个data_batch和1个test_batch文件,均为mat文件。每个文件中包含10000条数据,data是图像数据,labels是相应的分类标签。总共有10个类别,labels中用0-9共十个数字进行标识,分别代表'airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck'。data图像数据是用一个10000×3072的uint8类型矩阵来表示的。这里10000代表数据总量,每一行数据代表一幅图像。这里的图像均为32×32的彩色图像,因此在每一幅图像中,前1024个数据为R分量,中间1024个数据为G分量,最后1024个数据为B分量。图像数据是按照行优先顺序存储的,因此可以理解每行数据最初32个数据为图像的R通道的第一行的像素值。

                                                               

                                                                        图2 data_batch_1中数据的存储样式

其次检验已有的matlab版本中是否具有Statistic and Machine Learning Toolbox。通过在命令窗口输入ver命令,检查是否有该工具箱。

                                                                            图3 matlab中工具的检验结果

运行结果表明本版本中是含有该工具箱的。

 

 

2.读取数据并显示相应的图像

具体实现代码中的主要函数如下:

function RGBImageShow(RGBImageVector)
%输入一个按行优先排列的彩色图像展开的1*3072的向量,将其显示为彩色图像
%   输入参数:1*3072的向量,前1024为R通道,中间1024为G通道,最后1024为B通道,每一个通道像素值按行优先排列
%   输出:显示一张32*32的彩色图像
R = RGBImageVector(1:1024); % 拆分出R通道分量
G = RGBImageVector(1025:2048); % 拆分出G通道分量
B = RGBImageVector(2049:3072); % 拆分出B通道分量

%% 将R,G,B三通道数据整合成图像大小,并连接成彩色图像
R = reshape(R,32,32);
% R = permute(R,[2 1]);
R=R';
G = reshape(G,32,32);
% G = permute(G,[2 1]);
G=G';
B = reshape(B,32,32);
% B = permute(B,[2 1]);
B=B';
% Images = cat(3,R,G,B);
Images(:,:,1) = R;
Images(:,:,2) = G;
Images(:,:,3) = B;

imshow(Images);% 显示图像

end

3.简介K-means

K-means算法属于无监督学习的一种聚类算法,其目的为:在不知数据所属类别及类别数量的前提下,依据数据自身所暗含的特点对数据进行聚类。K-means算法是最常用的一种聚类算法。算法的输入是一个样本集(或者称点集),通过该算法可以将样本进行聚类,具有相似特征的样本聚为一类。

K-means算法以数据间的距离作为数据对象相似性度量的标准,因此选择计算数据间距离的计算方式对最后的聚类效果有显著的影响,常用的计算距离的方式有:余弦距离、欧氏距离、曼哈顿距离等。

根据距离的远近进行聚类成指定的类别数K。对每一类中的数据初步选取类中心,选取的方式有多种,如该类所有数据的均值,随机选取K个数据为类中心,选取距离最远的K个点作为类中心等。以上所有方法均需要对初步的类中心进行迭代,当类中心变化缓慢时便可认为收敛,此时该点便为最终的类型中心处。

4.matlab自带kmeans函数以及evalclusters介绍

kmeans函数:

使用方法有:

1)idx = kmeans(X,k)

执行k-means聚类,将n×p数据矩阵X的观测划分为k个聚类,并返回一个包含每个观测的聚类索引的n×1向量(idx)。X的行对应于点,列对应于变量。

默认情况下,kmeans利用的距离计算公式是平方欧式距离,也就是L2范数。L1范数应该选用“cityblock”函数。

2)idx = kmeans(X,k,Name,Value)

返回集群索引以及由一个或多个名称、值对参数指定的附加选项。

例如,指定余弦距离、使用新的初始值或使用并行计算重复集群的次数。

3)[idx, C]=kmeans(_)

返回k乘p矩阵C,代表k个聚类中心的向量。

4)[idx, c, sumd]=kmeans(_)

返回k乘1向量sumd,代表每个类别中点到质心距离的簇内和。

5)[idx,c,sumd,d]=kmeans(_)

返回n×k矩阵D,代表每个点到每个质心的距离。

evalclusters函数:

使用方法有:

1)eva = evalclusters(x,clust,criterion)

创建一个集群评估对象,其中包含用于评估最优数据集群数量的数据。输入是n×p矩阵。Clust是使用的聚类方法。Criterion是评估方法的类型。本实验用“DaviesBouldin”指数,该指数数值越小,聚类的效果越好。

2)eva = evalclusters(x,clust,criterion,Name,Value)

使用由一个或多个名称-值对参数指定的附加选项创建集群评估对象。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于MATLAB GUI的K-means算法图像聚类是一种常用的图像处理技术,旨在将图像中的像素点按照相似性进行分组。以下是一个300字的中文回答: K-means算法是一种无监督的机器学习算法,常用于图像聚类任务。MATLAB是一种强大的数学计算软件,提供了图形用户界面(GUI)工具包,使得编写和运行K-means算法更加简单便捷。 要在MATLAB GUI中实现K-means图像聚类,可以按照以下步骤进行: 1. 数据准备:将要处理的图像加载到MATLAB环境中,并将其转换为数字矩阵形式表示。可以使用imread函数读取图像,并用rgb2gray函数将其转换为灰度图像。 2. 初始化:选择要聚类的像素点数量,即确定聚类中心的数量。在GUI中,可以设置一个滑动条或者编辑框来动态调整聚类中心的数量。 3. 初始化聚类中心:使用随机或者其他策略选择初始聚类中心。可以使用randperm函数图像中随机选取K个像素点作为初始聚类中心。 4. 迭代计算:根据K-means算法的原理,对每个像素点计算其与每个聚类中心的距离,并将其分配到距离最近的聚类中心。然后,根据新的聚类结果重新计算聚类中心。 5. 结果展示:将聚类结果可视化展示出来。可以在GUI中添加一个图像显示框,将不同聚类的像素点用不同颜色标记,形成聚类分割的效果。 在MATLAB GUI中实现K-means图像聚类,可以方便地调整参数和观察结果,提供了更好的交互性和可视化效果。通过这种方式,我们可以更好地理解和分析图像数据,提取出图像中的特定模式和信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值