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

第九次作業——K-means演算法應用:圖片壓縮

一.讀取一張示例圖片或自己準備的圖片,觀察圖片存放資料特點。

根據圖片的解析度,可適當降低解析度。

再用k均值聚類演算法,將圖片中所有的顏色值做聚類。

然後用聚類中心的顏色代替原來的顏色值。

形成新的圖片。

觀察原始圖片與新圖片所佔用記憶體的大小。

將原始圖片與新圖片儲存成檔案,觀察檔案的大小。

#讀取一張示例圖片或自己準備的圖片,觀察圖片存放資料特點
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") plt.imshow(china) plt.show() print(china.shape)#觀察圖片存放資料特點 china #根據圖片的解析度,可適當降低解析度 image = china[::3, ::3] X = image .reshape(-1,3) plt.imshow(image) plt.show() print(image.shape,X.shape) #再用k均值聚類演算法,將圖片中所有的顏色值做聚類。 n_colors =64 #(256,256,256)
model = KMeans(n_colors) #每個點的顏色分類,0-63 labels = model.fit_predict(X) #64個聚類中心,顏色值 colors = model.cluster_centers_ #用聚類中心的顏色代替原來的顏色值 new_image=colors[labels] #形成新的照片 new_image=new_image.reshape(image.shape) plt.imshow(new_image.astype(np.uint8)) plt.show() #觀察原始圖片與新圖片所佔用記憶體的大小,將原始圖片與新圖片儲存成檔案,觀察檔案的大小。
import matplotlib.image as img img.imsave('F:\\china.jpg',china) img.imsave('F:\\china_zip.jpg',image)

執行結果

 

 

 

 

二.理解貝葉斯定理:

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