1

我很难理解scipy.cluster.vq真正的作用!

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

那么
谁能给我看一些关于使用scipy.cluster.vq图像的简单例子吗?

4

2 回答 2

3

所执行的聚类类型scipy.cluster.vq肯定是后者(相似图像组)的种类。

唯一实现的聚类算法scipy.cluster.vqK-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将包含五个示例中每个示例的最佳匹配质心的整数索引。

这是一个玩具示例,除非您正在处理的图像中感兴趣的对象都居中,否则不会产生很好的结果。由于感兴趣的对象可能出现在较大图像中的任何位置,因此通常为较小的图像“补丁”学习质心,然后将它们与较大的图像进行卷积(在许多不同位置进行比较)以提高平移不变性。

于 2012-10-09T21:57:46.110 回答
0

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

例如,在处理单个图像时,它可以应用于颜色。这是减少图像中颜色数量的一种非常好的方法。如果您按颜色和像素坐标进行聚类,您还可以将其用于图像分割,因为它将具有相似颜色彼此接近的像素分组。但这是集群的一个应用领域,而不是纯粹的集群。

于 2012-10-09T23:50:51.997 回答