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)

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

K-means实现图像聚类相关推荐

  1. 为了联盟还是为了部落 | K means

    1. 问题 人类有个很有趣的现象,一群人在一起,过一段时间就会自发的形成一个个的小团体.好像我们很擅长寻找和自己气质接近的同类.其实不只是人类,数据也有类似情况,这就是聚类(Clustering)的意 ...

  2. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  3. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  4. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  5. 图像聚类-K均值聚类

    最近做的一个东西跟这个相关,本来希望是用深度学习对于没有标签的图像数据进行分类,但是通常情况下,深度学习是对有标签的数据进行学习,目的是用来自动提取特征,代替传统的手工提取特征.因此,比较容易想到,对 ...

  6. 基于K-Means的文本聚类

    何为聚类 "聚类是把相似的对象通过静态分类的方法分成不同的组别或者更多的子集(subset),这样让在同一个子集中的成员对象都有相似的一些属性."                 ...

  7. K means 图片压缩

    k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...

  8. Python计算机视觉编程第六章——图像聚类(K-means聚类,DBSCAN聚类,层次聚类,谱聚类,PCA主成分分析)

    Python计算机视觉编程 图像聚类 (一)K-means 聚类 1.1 SciPy 聚类包 1.2 图像聚类 1.1 在主成分上可视化图像 1.1 像素聚类 (二)层次聚类 (三)谱聚类 图像聚类 ...

  9. 人脸图像聚类实战及TSNE可视化分析

    人脸图像聚类实战及TSNE可视化分析 目录 人脸图像聚类实战及TSNE可视化分析 Kmeans聚类人脸图像数据 获取Kmeans最佳K值

  10. 计算机视觉编程——图像聚类

    文章目录 图像聚类 1 K-means聚类 1.1 SciPy聚类包 1.2 图像聚类 1.3 像素聚类 2 层次聚类 2.1 图像聚类 3 谱聚类 图像聚类 将物理或抽象对象的集合分成由类似的对象组 ...

最新文章

  1. Scrum工具Leangoo产品白皮书
  2. c语言20字节的内存的数据怎么读取_C++编程-内存对齐
  3. POJ2553 强连通出度为0的应用
  4. C语言实现最短路径Bellman-Ford算法(附完整源码)
  5. JS里面的懒加载(lazyload)
  6. hadoop2.8配置_Hadoop2.8.2安装与配置(单机)
  7. Mysql学习总结(21)——MySQL数据库常见面试题
  8. vagrant 的安装与使用
  9. [渝粤教育] 广东-国家-开放大学 21秋期末考试大数据营销10138k2
  10. 调试时遇到 调试源程序时Loaderlock 的解决办法
  11. boost::filesystem使用手册
  12. 种草模式崛起!小红书KOL达人种草成推广热门方向!
  13. java 水波纹_java实现水波纹扩散效果
  14. 旷视科技前端实习生一二面总结
  15. Python2.7爬虫——爬取微信公众号文章
  16. 2nd homework of OS
  17. 蓝桥杯少儿编程2020年8月份C++比赛每日一练
  18. 【原理图】电路中的VCC VDD VSS VEE GND含义 以及STM32电源
  19. 1 3 倍频程谱 c语言,频谱、能谱、功率谱、倍频程谱、1/3 倍频程谱
  20. vue 实现Excel 导出

热门文章

  1. Leetcode:NO.15 三数之和 夹逼
  2. 第六章贪心(三):排序不等式、绝对值不等式
  3. 网络管理系统、网管、network manage system、运维系统
  4. 算法分析与设计期末总结
  5. 最近公共祖先(LCA)Tarjan
  6. JavaScript名字的由来
  7. 如何优雅地关闭SpringBoot应用程序?听我给你讲
  8. 【转载】阿里云服务器忘记了实例密码怎么办
  9. 时光倒流:业务支撑那些事(一)
  10. 大文件分片上传前后端实现