1. 程式人生 > >作業:K-means算法應用:圖片壓縮

作業:K-means算法應用:圖片壓縮

準備 中心 res 出了 讀取 原來 show mod sets

from sklearn.datasets import load_sample_image
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
 
#讀取一張示例圖片或自己準備的圖片,觀察圖片存放數據特點
china = load_sample_image("china.jpg")
plt.imshow(china)
plt.show()
print(china.shape)

  技術分享圖片

#根據圖片的分辨率,適當降低分辨率
image = china[::3,::3]  #行列分別按step為3的距離取
x = image.reshape(-1,3) #生成行數自填充,列數為3的二維數組
plt.imshow(image)
plt.show()
print(image.shape,x.shape)
 
 
#用k均值聚類算法,將圖片中所有顏色值做聚類。
n_color = 64
model = KMeans(n_color)
labels = model.fit_predict(x) #每個點的顏色分類
color = model.cluster_centers_ #64個聚類中心,顏色值
 
 
#用聚類中心的顏色代替原來顏色,形成新圖片
color[labels]
images = image.reshape(143, 214, 3)
print(images.shape)
plt.imshow(images)
plt.show()

  技術分享圖片

技術分享圖片

2.貝葉斯

  • M桶:7紅3黃
  • N桶:1紅9黃
  • 現在:拿出了一個紅球
  • 試問:這個紅球是M、N桶拿出來的概率分別是多少?

解: 設:事件A為拿到一個紅球,事件M是在M桶中拿到紅球;事件N為在N桶裏拿到紅球。

1) P(M|B) = P(B|M) · P(M) /P(B) = (7/10 · 1/2)/ (8/20) = 7/8

2) P(N|B) = 1 - P(M|B) = 1/8

作業:K-means算法應用:圖片壓縮