K-means聚类和矢量量化算法

K-means 是常见的聚类算法,主要思想是在集合中找到 K 个中心,以中心为基础把集合分为 k 个部分。

矢量量化算法可以看作基于 K-means 算法找出的 K 个中心点,把中心点周围的点的值用中心的值取代。

实现

用 Python 提供的库很容易可以将一副图像进行矢量量化。

#!/usr/bin/env python
from pylab import imread, imshow, figure, show, subplot
from numpy import reshape, uint8, flipud
from scipy.cluster.vq import kmeans,vq
from scipy import misc
import Image

quantization_layer = 16
img = imread('jet.jpg')
print img.shape
pixel = img

# performing the clustering
centroids,_ = kmeans(pixel, quantization_layer) # six colors will be found

# quantization
qnt,_ = vq(pixel,centroids)

centers_idx = qnt
clustered = centroids[centers_idx]

# display images
figure(1)
subplot(211)
imshow(img)
subplot(212)
imshow(clustered)
show()

参考

http://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.vq.kmeans.html

http://blog.sina.com.cn/s/blog_49b5f5080101bfwa.html

http://blog.csdn.net/superdont/article/details/46399041

转载于:https://my.oschina.net/lvyi/blog/521730

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
K-means是一种经典的聚类算法,可以将数据集分成不同的簇。在图像处理中,K-means可以用于将图像中的颜色聚类成不同的簇,从而实现图片的矢量量化操作。 具体来说,我们可以将每个像素的RGB值看作一个三维向量,然后使用K-means算法将这些向量聚类成不同的簇。聚类完成后,我们可以将每个簇的中心作为该簇的代表颜色,然后将图片中的像素替换为最近的簇中心颜色,从而实现矢量量化。 以下是使用Python实现K-means进行图片的矢量量化的示例代码: ```python import numpy as np import cv2 # 读取图片 img = cv2.imread('test.jpg') # 将图片像素转换为向量 pixels = np.float32(img.reshape(-1, 3)) # 定义K-means模型 kmeans = cv2.Kmeans(nclusters=16, init='kmeans++') # 训练K-means模型 kmeans.fit(pixels) # 获取簇中心 centers = np.uint8(kmeans.cluster_centers_) # 将像素替换为最近的簇中心颜色 quantized = centers[kmeans.labels_] # 将量化后的像素转换回图片格式 result = quantized.reshape(img.shape) # 显示原图和量化后的图片 cv2.imshow('Original', img) cv2.imshow('Quantized', result) cv2.waitKey() cv2.destroyAllWindows() ``` 在上面的代码中,我们首先将图片像素转换为向量,然后使用K-means训练模型并获取簇中心。接着,我们将每个像素替换为最近的簇中心颜色,最后将量化后的像素转换回图片格式并显示原图和量化后的图片。 注意,K-means算法聚类结果可能会受到初始聚类中心的影响,因此我们可以尝试不同的初始化方法来得到更好的结果。另外,选择合适的簇数也是一个需要考虑的问题,如果簇数太少,可能会导致量化后的图片失真;如果簇数太多,可能会导致量化后的图片过于细节化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值