使用MATLAB查找细长簇

时间:2013-11-16 20:17:36

标签: matlab image-processing machine-learning cluster-analysis image-segmentation

让我解释一下我要做的事情。 我在RGB空间中绘制了图像的点/像素。 我想要做的是在这个空间找到细长的簇。我对集群技术相当新,也许我没有正确地做事,我正在尝试使用MATLAB内置的k-means聚类进行聚类,但看起来好像这不是最好的方法。

我需要做的是找到“颜色簇”。

这是我在图像上应用K-means后得到的结果。 enter image description here

这应该是这样的:

enter image description here

对于这样的图像:

enter image description here

有人可以告诉我哪里出错了,我能做些什么来改善我的成绩?


注意:对于低分辨率图像,对不起,这些是我最好的。

3 个答案:

答案 0 :(得分:2)

Are you trying to replicate the results of this paper?我会说他们做了他们做的事情。

但是,我会补充,因为目前的答案存在一些问题。

1)是的,你的星团不是球形的 - 这是k-means的假设。 DBSCAN和MeanShift是处理此类数据的两种常用方法,因为它们可以处理非球形数据。但是,您的数据似乎有一个大的中央丛,在几个有限的方向向外扩散。

对于DBSCAN,这意味着它会将所有内容放入一个群集中,或者所有内容都是自己的群集。由于DBSCAN具有均匀密度的假设,并且要求群集以一定的余量分开。

MeanShift可能会遇到困难,因为一切似乎都是来自一个中心肿块 - 因此这将是点将移向的最高密度区域,并汇聚到一个大型聚类。

我的建议是改变色彩空间。 RGB has issues,大多数算法所做的假设可能都不会很好。您应该使用的聚类算法可能会在不同的特征空间中发生变化,但希望它会使问题更容易处理。

答案 1 :(得分:1)

查看density-based聚类算法,例如DBSCAN和MeanShift。如果您要进行分割,可能需要在向量中添加像素坐标。

答案 2 :(得分:1)

k-means基本上假设簇近似为球形。在你的情况下,他们绝对不是。尝试使用非球形协方差矩阵将高斯拟合到每个聚类。 基本上,您将遵循与k-means相同的期望最大化(EM)步骤,唯一的例外是您将对协方差矩阵进行建模和拟合。

以下是算法的概要

  1. init:将每个点随机分配给k个群集中的一个。
  2. 对于每个聚类估计均值和协方差
  3. 对于每个点估计它的可能性属于每个簇
    请注意,这种可能性不仅取决于到中心的距离(平均值),还取决于群集的形状,因为它是由协方差矩阵编码的。
  4. 重复阶段2和3直到收敛或直到超过预定义的迭代次数