matlab中图像数据集的k_means算法

时间:2013-07-15 21:10:58

标签: matlab k-means

我想编写“VSUMM”文章中提出的代码。

一步有k-means算法。它写在文章中,但没有描述它是如何工作的。根据这篇文章,最初有一个视频。视频将被分割成帧,然后根据某个公式计算k,并开始k_mean算法。

视频帧的数据集是图像。我怎么能在他们身上使用k-means?

到目前为止我做了什么:

  1. 将所有图像放入k组。单元阵列的一行中的每个组是其第一个数据,是平均值。这个值确实是图像的名称。
  2. 计算每个图像与另一个平均值之间的欧几里德距离,并将距离最小的图像放在该组中的前一个键上。
  3. 但现在我陷入了第3步,我不知道该怎么做。

    我在单元格数组中有k组图像,其值只是图像的名称,但根据k-means,新k是组中元素的平均值。但是我理论中的这些元素只是图像的名称。所以我该怎么做?这应该是什么意思?如果我得到图像名称的平均值,这是正确的吗?

1 个答案:

答案 0 :(得分:0)

Wikipedia有一篇关于k-means聚类技术的文章。在程序上,您确定了一组可以表示为矢量的项目 - 在您的情况下,我认为项目是图像帧,矢量组件是帧中所有像素的值(千或百万维矢量)。 K均值聚类找到k组图像帧,这些图像帧在每个组内是相似的,并且在组之间不相似。你决定k是什么:5或10或其他什么。

第一步:在百万维向量空间中随机定义k个点。听起来你就是这么做的。

第二步:对于每个图像帧,使用欧几里德距离找出哪个k点最接近所讨论的帧。听起来并不像你那样,但我不知道。

第三步:对于每个k组,计算组中所有向量的平均值。也就是说,对组中的项目进行矢量求和,并将其除以组中的成员数。为每个小组单独做。

第四步:用你刚刚计算的平均值替换每个k点。

然后迭代这个过程(步骤二),数百或数千次。它将逐渐接近一种解决方案,其中方差在每个群集内最小化并且在群集之间最大化。也就是说,每个组都代表在组内视觉上彼此相似的图像,并且从一个组到另一个组不同。