图像处理(1):K-means算法进行色彩压缩

K-means算法的理论网上一大堆,并且理论本身不难,所以直接跳过,注重实战。

首先导入包并且显示原图片:

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import MiniBatchKMeans
image=Image.open("./photo/PA261002.jpg")
m=np.asarray(image)
plt.figure(figsize=(18,24))
plt.imshow(m)

然后利用聚类算法K-means给这一堆像素设定一定数量的clusters,同属一个cluster聚类的像素就使用同一种颜色,从而实现色彩压缩的功能。

这里用到的是MiniBatchKmeans,相关参数详情可看MiniBatchKMeans

data=m/255.0 #把像素的范围变成0-1
data=data.reshape(-1,3)
kmeans=MiniBatchKMeans(16) #压缩成16种颜色

pred=kmeans.fit_predict(data)
new_colors=kmeans.cluster_centers_[pred]

pic_recolored=new_colors.reshape(m.shape)
plt.figure(figsize=(18,24))
plt.imshow(pic_recolored)

在fit_predict操作之后,所有的data都变成了压缩之后的颜色,即只有16种选择,pred表示的是对应的cluster编号(0-15号)

使用cluster_centers使得所有的色彩类别编号转换成对应的色彩像素(0-1)

然后reshape一下变成图片的格式(a,b,c)三维的

显示结果对比:
压缩前:
在这里插入图片描述
压缩后:
在这里插入图片描述
感觉像加了一层滤镜,如果把聚类的个数设的再少一点,图片颜色会越来越单调。比如4个clusters时就成这样了:
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值