k_means实现图像压缩

本文深入探讨了K-means聚类算法的原理及应用,强调其作为无监督学习方法的速度与简易性,同时也指出了选取K值的挑战与发现特定形状簇的局限性。通过实例展示K-means在图像压缩上的应用,使用Python的sklearn库进行操作,最终压缩图像并保持主要特征。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习了k-means,k-means实现聚类是无监督算法,k-means的优点是:速度快,简单,适合常规数据集。

缺点是:k的选取,复杂度和样本呈线性关系,很难发现任意形状的簇。

附上一个k-means可视化的链接:

https://www.naftaliharris.com/blog/visualizing-k-means-clustering/

 

选择样本数据,这里我选择一个smiley face数据,分成4类,效果如下:

感兴趣的可以自己试一试。下面是k-means实现图像压缩:

from skimage import io
from sklearn.cluster import KMeans
import numpy as np
image=io.imread('timg.jpg')
io.imshow(image)
io.show()

rows=image.shape[0]
cols=image.shape[1]

image=image.reshape(image.shape[0]*image.shape[1],3) #3通道
kmeans=KMeans(n_clusters=128,n_init=10,max_iter=200) #像素的取值范围限制在0-128
kmeans.fit(image)

clusters=np.asarray(kmeans.cluster_centers_,dtype=np.uint8)
labels=np.asarray(kmeans.labels_,dtype=np.uint8)
labels=labels.reshape(rows,cols)

print(clusters.shape)
np.save('codebook_tiger.npy',clusters)
io.imsave('compressed_timg.jpg',labels)

我使用的图片是一只老虎

 显示压缩后的老虎:

image=io.imread('compressed_timg.jpg')
io.imshow(image)
io.show()

 

可以看出老虎的大体轮廓 。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值