Kmeans聚类及图像分割

  Kmeans是最简单的聚类算法之一,应用十分广泛,Kmeans以距离作为相似性的评价指标,其基本思想是按照距离将样本聚成不同的簇,两个点的距离越近,其相似度就越大,以得到紧凑且独立的簇作为聚类目标。本文参考PRML一书,详细讲解Kmeans聚类的原理以及图像分割应用。

1. 基本原理

  给定 D 维欧几里得空间的一组数据{x1,...,xN},我们的任务是将该组数据聚成 K 个簇(聚类和分类的区别在于分类是有监督的,聚类是无监督的,根据任务设定聚类依据,此处假设聚类个数K是已知的)。不考虑问题背景,单纯从欧几里得空间的角度讲,我们应当将距离较近的点聚为一个簇,不同簇的点之间的距离较远。Kmeans聚类方法就是寻找K个聚类中心 μk(k=1,...,K) ,将所有的数据分配到距离最近的聚类中心,使得每个点与其相应的聚类中心距离的平方和最小。
  我们引入二值变量 rnk{0,1} 来表示数据点 xn 对于聚类 k 的归属(其中n=1,...,N, k=1,...,K ),如果数据点 xn 属于第 k 聚类,则rnk=1,否则为 0 。如此,我们便可定义如下损失函数:

J=n=1Nk=1Krnkxnμk2(1)
该问题的目标就是寻找使得损失函数 J 最小的所有数据点的归属值{rnk}和聚类中心 {μk} 。Kmeans算法提供了一种迭代求解方法,在每次迭代中交替优化 rnk μk
  第一步,随机选择聚类中心 μk 的初始值,求取使损失函数 J 最小的数据点的归属值rnk。由 (1) 式容易看出,给定 xn μk 的值,损失函数 J rnk的线性函数,而且,由于 xn 之间是相互独立的,所以对于每一个 n ,我们只需将该点分配到距离最近的聚类中心,即
rnk={10if k=argminjxnμj2otherwise(2)
  第二步,固定已求得的 rnk ,再求取使损失函数 J 最小的聚类中心μk。给定 rnk 的值,损失函数 J μk的二次函数,令 J μk的导数为 0 ,我们有
n=1Nrnk(xnμk)=0(3)
那么 μk 的取值为

μk=nrnkxnnrnk(4)
对于第 k 个聚类,rnk取1的个数就是属于该聚类的点的个数,因此, μk 等于属于该聚类的点均值。
 如此迭代该两阶段优化问题直至收敛,Kmeans的实现过程大致表示如下:
(1) 随机选取K个初始聚类中心;
(2) 计算每个样本到各聚类中心的距离,将每个样本归到其距离最近的聚类中心;
(3) 对每个簇,以所有样本的均值作为该簇新的聚类中心;
(4) 重复第(2)~(3)步,直到聚类中心不再变化或达到设定的迭代次数。
  图1为Kmeans算法的实现过程图示,以二聚类为例,首先随机选择两个聚类中心,根据距离将所有的点聚为两个簇(如图1(2)),然后将两个簇以其均值作为新的聚类中心重新聚类。如此迭代,由图可知,经过4次循环,聚类中心不再变化,便完成对该组数据的聚类。由图1(1)可知,初始聚类中心选在了一个簇中,事实上,如果初始聚类中心选择合适,Kmeans聚类收敛速度会非常快,极端情况是,聚类中心恰巧选在了每个簇的中心,无需迭代该聚类问题就已经完成。

图1 Kmeans聚类过程图示

2. 图像分割应用

  彩色图像中的每一个像素是三维空间中的一个点,三维对应红、绿、蓝三原色的强度,基于Kmeans聚类算法的图像分割以图像的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。如图2所示,不同的聚类簇数呈现不同的色彩特征。


图2 Kmeans用于图像分割

3. Kmeans聚类的缺点

  1) 聚类簇数K没有明确的选取准则,但是在实际应用中K一般不会设置很大,可以通过枚举法,比如令K从2到10。其实很多经典方法的参数都没有明确的选取准则,如PCA的主元个数,可以通过多次实验或者采取一些小技巧来选择,一般都会达到很好的效果。
  2) 从Kmeans算法框架可以看出,该算法的每一次迭代都要遍历所有样本,计算每个样本到所有聚类中心的距离,因此当样本规模非常大时,算法的时间开销是非常大的。
  3) Kmeans算法是基于距离的划分方法,只适用于分布为凸形的数据集,不适合聚类非凸形状的类簇,如图3所示。


图3 Kmeans聚类的缺点

  • 14
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: K-means聚类算法是一种常用的图像分割方法之一。该算法通过对图像中的像素进行聚类,将像素划分为不同的区域,从而实现图像分割的目的。 在Matlab中,可以使用Image Processing Toolbox中的kmeans函数来实现K-means聚类算法图像分割。具体步骤如下: 1.读取图像并转换为灰度图像 2.将图像的像素矩阵转换为一个向量,以便于聚类 3.使用kmeans函数对像素向量进行聚类,并得到每个像素所属的聚类中心 4.根据每个像素所属的聚类中心,将像素分配到不同的区域中 5.将分割后的图像可视化显示出来 需要注意的是,K-means聚类算法图像分割的效果取决于聚类数的选择和初始聚类中心的设置,需要进行一定的调试和优化。 ### 回答2: Kmeans聚类算法是一种常用的数据分析方法,其主要思想是将给定的数据集划分成K个簇,使得簇内的数据相似度最高,而簇间的数据差异尽可能大。在图像分割中,Kmeans算法可以将一幅图像划分成若干个区域,这些区域可以表示图像中不同的对象或者背景。 Matlab是一种常用的科学计算软件,在图像处理领域也有广泛的应用。通过Matlab中的Kmeans算法函数,可以方便地完成图像分割任务。 具体实现过程如下: 1.读入图像数据,将其转化为一维行向量,方便进行计算。 2.设置K值,初始化随机的K个聚类中心。 3.循环进行迭代过程,直到收敛为止。每次迭代包括以下两个步骤: (1)计算每个像素点与K个聚类中心之间的距离,将其归到距离最近的一个聚类中心所在的簇中; (2)根据当前的簇分配结果,重新计算每个簇的聚类中心。 4.根据最终的聚类中心,将图像分割成K个区域,每个像素点归到离其最近的聚类中心所在的簇中。 5.对每个簇进行可视化显示,得到图像分割结果。 需要注意的是,Kmeans算法是一种迭代算法,其运行速度与K值的选择、初始聚类中心的设置等因素有关。运行过程中还需要进行收敛判断,避免出现死循环的情况。 综上所述,Kmeans聚类算法可以用于图像分割任务,而Matlab提供了便利的算法函数和图像处理工具,可用于快速高效地实现图像分割目标。 ### 回答3: Kmeans聚类算法是一种常用的图像分割方法,其主要思想是将一幅图像分成若干个类别,使得同一类别内的像素点具有相似的属性,不同类别之间的像素点则具有不同的属性。这种分割方法具有简单、快速、易于实现的特点,因此在图像分割领域应用广泛。 在matlab中实现kmeans聚类图像分割,首先需要将图像转换成向量形式,即将图像的每一个像素点作为一个向量的元素,这样就能够使用kmeans算法对图像进行聚类分析。然后,我们需要选择一个合适的像素距离度量方式来计算像素之间的距离,这样才能进行聚类分析。常用的像素距离度量方式有欧氏距离、曼哈顿距离等。 接下来,我们在matlab中调用kmeans函数进行图像分割。具体步骤如下: 1. 将图像转换成向量形式,并将其作为kmeans函数的输入。 2. 设置聚类数目k,即将图像分成k个类别。 3. 选择一个合适的像素距离度量方式(如欧氏距离),作为kmeans函数的输入。 4. 运行kmeans函数,获得图像聚类结果。 5. 对于每个类别,将其分配给一种颜色,并将像素点重新赋值为其所属类别的颜色。 6. 最后,将分割后的图像输出,即得到了kmeans聚类图像分割结果。 总之,kmeans聚类算法图像分割matlab的实现步骤较为简单,但需要注意的是像素距离的选择、聚类数目的设置和对聚类结果的处理等方面。正确地应用kmeans聚类算法,可以实现高效、准确的图像分割,具有很广泛的应用前景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值