1、KMeans演算法
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans, MiniBatchKMeans
import datetime
if __name__ == "__main__":
A = Image.open("photo.jpg", 'r') #請輸入彩色影像檔案
rawimage = np.asarray(A)
h,w=A.size #記錄原始影像的尺寸
plt.imshow(rawimage)
plt.show()
data = rawimage/ 255.0 # 把像素的范圍變成0-1
data = data.reshape(-1, 3)
k=8 #設定顏色聚類的類別個數(我們分別設定8,16,32,64,128進行對比)
cluster = KMeans(n_clusters=k) # 構造聚類器
import time #引入時間
train_start = datetime.datetime.now()
C_Image = cluster.fit_predict(data)
train_end = datetime.datetime.now()
Trainingtime = train_end - train_start
print("訓練總耗時為:%s(s)" % (Trainingtime).seconds)
ClusterImage = C_Image.reshape(h,w, ) #設定為原來的尺寸
plt.imshow(ClusterImage)
plt.show()
plt.imsave(str(k)+'photo'+'_kMeans.png',ClusterImage) #保存顏色壓縮的圖
運行結果:
原圖

8種顏色(耗時26s)

16種顏色(耗時59s)

32種顏色(耗時150s)

64種顏色(耗時288s)

128種顏色(耗時678s)

從上面這幾張圖片顏色壓縮的圖可以看出,顏色越多,使用Kmeans演算法進行顏色壓縮的運行時長越長,時間上跳躍幅度大,并且影像的線條越來越不清晰了,
2、MiniBatchKMeans(小批量處理演算法)
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans, MiniBatchKMeans
import datetime
if __name__ == "__main__":
A = Image.open("photo.jpg", 'r') #請輸入彩色影像檔案
rawimage = np.asarray(A)
h,w=A.size #記錄原始影像的尺寸
plt.imshow(rawimage)
plt.show()
data = rawimage/ 255.0 # 把像素的范圍變成0-1
data = data.reshape(-1, 3)
k=8 #設定顏色聚類的類別個數(我們同樣分別設定8,16,32,64,128進行對比)
cluster =MiniBatchKMeans(n_clusters=k, batch_size = 256, random_state=3) # 構造聚類器
import time #引入時間
train_start = datetime.datetime.now()
C_Image = cluster.fit_predict(data)
train_end = datetime.datetime.now()
print("訓練總耗時為:%s(s)" % (train_end - train_start).seconds)
ClusterImage = C_Image.reshape(h,w, ) #設定為原來的尺寸
plt.imshow(ClusterImage)
plt.show()
plt.imsave(str(k)+'photo'+'_MiniBatchKMeans.png',ClusterImage) #保存顏色壓縮的圖
運行結果:
原圖

8種顏色(耗時0s)

16種顏色(耗時1s)

32種顏色(耗時2s)

64種顏色(耗時3s)

128種顏色(耗時6s)

對比前面的k-mean演算法,我們不難發現小批量處理演算法的耗時減少了很多,并且影像相對來說線條更為明顯,可以看出MiniBatchKMeans小批量處理演算法總體優于Kmean演算法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/374537.html
標籤:AI
上一篇:學習筆記5:TensorFlow編程語法--常量與變數
下一篇:Python 資料集:乳腺癌資料集(from sklearn.datasets import load_breast_cancer)。
