任何人都可以为我提供一些聚类示例吗?

时间:2012-10-09 20:39:24

标签: python scipy cluster-analysis

我很难理解scipy.cluster.vq真正做到了什么!!

在维基百科上,它说Clustering可用于将数字图像划分为不同的区域以进​​行边界检测或物体识别。
在其他网站和书籍上,我们可以使用clustering方法聚类图像以查找相似图像组 由于我对图像处理感兴趣,我真的需要完全理解clustering是什么。

因此
任何人都可以向我展示关于将scipy.cluster.vq与图像一起使用的简单示例吗?

2 个答案:

答案 0 :(得分:3)

scipy.cluster.vq执行的聚类类型肯定是后者(类似图像组)的多样性。

scipy.cluster.vq中实现的唯一聚类算法是K-Means算法,它通常将输入数据视为n维欧几里德空间中的点,并尝试划分该空间,以便新的传入数据可以总结为“示例x最像质心y”。质心可以被认为是输入数据的原型示例。矢量量化导致简洁或压缩表示,因为我们不会记住我们看到的每个新图像的所有100个像素,而是记住一个整数,它指向新图像最喜欢的原型示例。

如果您有许多小灰度图像:

>>> import numpy as np
>>> images = np.random.random_sample((100,10,10))

所以,我们有100个10x10像素的图像。让我们假设它们已经具有相似的亮度和对比度。 scipy kmeans实现期望平面向量:

>>> images = images.reshape((100,100))
>>> images.shape
(100,100)

现在,让我们训练K-Means算法,以便可以将任何新的传入图像分配给10个群集中的一个:

>>> from scipy.cluster.vq import kmeans, vq
>>> codebook,distortion = kmeans(images,10)

最后,假设我们有五个新图像要分配给十个集群中的一个:

>>> newimages = np.random.random_samples((5,10,10))
>>> clusters = vq(newimages.reshape((5,100)),codebook)

clusters将包含五个示例中每个示例的最佳匹配质心的整数索引。

这是一个玩具示例,除非您正在使用的图像中的感兴趣对象全部居中,否则不会产生很好的效果。由于感兴趣的物体可能出现在较大的图像中的任何地方,因此通常学习较小的图像“斑块”的质心,然后将它们(在许多不同的位置比较它们)与较大的图像进行卷积以促进平移不变性。

答案 1 :(得分:0)

第二个是聚类:有些相似的组对象(可能是图像)。聚类不是纯粹的成像技术。

处理单个图像时,可以将其应用于颜色。这是一种减少图像颜色数量的好方法。如果按颜色和像素坐标进行聚类,则还可以将其用于图像分割,因为它会将具有相似颜色的像素组合在一起。但这是群集的应用程序域,而不是纯粹的群集。