用k-MEANS进行图片压缩

用k-MEANS进行图片压缩

算法步骤:

1.先从没有标签的元素集合A中随机取k个元素作为k个子集各自的中心
2.分别计算剩下的元素到k个子集中心的距离,将这些元素分别划归到最近的子集
3.根据聚类结果,重新计算中心(子集中所有元素各个维度的算数平均数)
4.将集合A中全部元素按照新的中心然后再重新聚类
重复以上步骤,直到聚类的结果不再发生变化

k值的选择

SSE(累积均方误差)为纵轴,K为横轴,画出曲线,选取拐点对应的k值为类别数

压缩图片

该图片分辨率为512 * 512,三通道为r,g,b(三原色),可将图片转换为512 * 512个样本点的数集,每个样本点可由三原色的数值表示,本案例将512 * 512个样本点压缩为16 类,即进行了图片压缩

#第一步:导入将运用的包
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
from sklearn.cluster import KMeans#进行KMEANS聚类
import numpy as np
#第二步:导入图片,将图片转换为数据集
pixel = mpimg.imread('lena_cor.jpg')
pixel = pixel.reshape((512*512 , 3))
#第三步:进行聚类
kmeans = KMeans(n_clusters=16, random_state=0).fit(pixel)#当然K可以选择其他
#第四部:将数据集转换为图片
newPixel = []
for i in kmeans.labels_:
    newPixel.append(list(kmeans.cluster_centers_[i,:]))
newPixel = np.array(newPixel)
newPixel = newPixel.reshape((512,512,3))
newPixel=newPixel.astype(np.uint8)#样本点值是整型8位
#第五步:保存图片
mpimg.imsave('compressed_lena.jpg',newPixel)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值