我很难理解scipy.cluster.vq
到底在做什么!!
在维基百科上,它说Clustering
可以用于将数字图像划分为不同的区域,用于边界检测或物体识别。
在其他网站和书籍上,它说我们可以使用clustering
方法对图像进行聚类,从而找到一组相似的图像。
因为我对图像处理很感兴趣,所以我真的需要完全理解clustering
是什么。
所以
谁能给我展示一下使用scipy.cluster.vq
处理图片的简单例子??
发布于 2012-10-10 05:57:46
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
将包含五个示例中每一个的最佳匹配质心的整数索引。
这是一种玩具示例,除非您正在处理的图像中感兴趣的对象都居中,否则不会产生很好的结果。由于感兴趣的对象可能出现在较大图像中的任何位置,因此通常需要学习较小图像“块”的质心,然后将它们与较大图像卷积(在许多不同位置进行比较),以提高平移不变性。
发布于 2012-10-10 07:50:52
第二个是什么是集群:对与有些相似的对象进行分组(可能是图像)。聚类不是一种纯粹的成像技术。
当处理单个图像时,它可以例如应用于颜色。这是减少图像中颜色数量的一个很好的方法。如果按颜色和像素坐标进行聚类,则还可以将其用于图像分割,因为它将对具有相似颜色且彼此接近的像素进行分组。但这是集群的应用程序域,而不是纯粹的集群。
https://stackoverflow.com/questions/12808050
复制相似问题