首页 > 编程语言 > 详细

4.K均值算法--应用

时间:2020-04-18 23:06:13      阅读:68      评论:0      收藏:0      [点我收藏+]

1. 应用K-means算法进行图片压缩

读取一张图片

观察图片文件大小,占内存大小,图片数据结构,线性化

用kmeans对图片像素颜色进行聚类

获取每个像素的颜色类别,每个类别的颜色

压缩图片生成:以聚类中收替代原像素颜色,还原为二维

观察压缩图片的文件大小,占内存大小

例题:

‘‘‘
K-Means算法应用:图片压缩(将颜色减少,相似的归为一类)
‘‘‘
from sklearn.datasets import load_sample_image
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np

china = load_sample_image("china.jpg")
# image = china[::3, ::3]
X = china.reshape(-1, 3)
# print(china.shape, image.shape, X.shape)
print(china.shape, X.shape)

n_colors = 64  # (255, 255, 255)
model = KMeans(n_colors)
labels = model.fit_predict(X)
colors = model.cluster_centers_  # 二维(64, 3)
new_image = colors[labels].reshape(china.shape) # (143,214,3)

plt.imshow(china)
plt.show()
plt.imshow(new_image.astype(np.uint8))
plt.show()
plt.imshow(new_image.astype(np.uint8)[::3, ::3])
plt.show()

技术分享图片

 技术分享图片

作业:

 1 ‘‘‘
 2 1. 应用K-means算法进行图片压缩
 3 读取一张图片
 4 观察图片文件大小,占内存大小,图片数据结构,线性化
 5 用kmeans对图片像素颜色进行聚类
 6 获取每个像素的颜色类别,每个类别的颜色
 7 压缩图片生成:以聚类中收替代原像素颜色,还原为二维
 8 观察压缩图片的文件大小,占内存大小
 9 ‘‘‘
10 from sklearn.cluster import KMeans
11 from pylab import mpl
12 import matplotlib.pyplot as plt
13 import matplotlib.image as mpimg
14 import numpy as np
15 import matplotlib.image as img
16 import sys
17 
18 # 解决中文无法显示
19 mpl.rcParams[font.sans-serif] = [SimHei]
20 
21 photo = mpimg.imread("D://小阔爱//大学课程//机器学习//K均值聚类算法//girl.jpg")
22 plt.title("原图")
23 plt.imshow(photo)
24 plt.show()
25 print("============原图片属性============")
26 print("尺寸:", photo.shape)  #显示尺寸
27 print("宽度:", photo.shape[0])  #图片宽度
28 print("高度:", photo.shape[1])  #图片高度 
29 print("通道数:", photo.shape[2])  #图片通道数
30 print("数据结构:", type(photo))  #显示类型
31 print("占用内存大小:",sys.getsizeof(photo))
32 print("总像素个数:", photo.size)   #显示总像素个数
33 print("最大像素值:", photo.max())  #最大像素值
34 print("最小像素值:", photo.min())  #最小像素值
35 print("像素平均值:", photo.mean())  #像素平均值
36 
37 ‘‘‘
38 构建模型
39 ‘‘‘
40 image = photo[::3, ::3]
41 # image.shape
42 x = image.reshape(-1, 3)
43 n_colors = 12  # 颜色类别
44 model = KMeans(n_colors)
45 ‘‘‘
46 模型训练、预测
47 ‘‘‘
48 labels = model.fit_predict(x)
49 colors = model.cluster_centers_  # 模型聚类中心
50 new_photo = colors[labels]  # 以聚类中收代替原像素颜色
51 new_photo = new_photo.reshape(image.shape)  # 还原为二维数组
52 
53 plt.title("压缩图")
54 plt.imshow(new_photo.astype(np.uint8))
55 plt.show()
56 print("============压缩后图片属性============")
57 print("尺寸:", new_photo.shape)  #显示尺寸
58 print("宽度:", new_photo.shape[0])  #图片宽度
59 print("高度:", new_photo.shape[1])  #图片高度 
60 print("通道数:", new_photo.shape[2])  #图片通道数
61 print("数据结构:", type(photo))  #显示类型
62 print("占用内存大小:",sys.getsizeof(new_photo))
63 print("总像素个数:", new_photo.size)   #显示总像素个数
64 print("最大像素值:", new_photo.max())  #最大像素值
65 print("最小像素值:", new_photo.min())  #最小像素值
66 print("像素平均值:", new_photo.mean())  #像素平均值
67 new_photo = new_photo.astype(np.uint8)
68 img.imsave("D://小阔爱//大学课程//机器学习//K均值聚类算法//new_girl.jpg", new_photo)

 技术分享图片技术分享图片

 技术分享图片

2. 观察学习与生活中可以用K均值解决的问题。

从数据-模型训练-测试-预测完整地完成一个应用案例。

这个案例会作为课程成果之一,单独进行评分。

 

  

4.K均值算法--应用

原文:https://www.cnblogs.com/xiaolan-Lin/p/12715411.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!