k-means算法另類(lèi)應(yīng)用:壓縮圖片

不看廣告,直接看“療效”:

網(wǎng)絡(luò)上下載的圖片,圖片中有大面積色塊的還是有壓縮空間:


保留原圖片中64種顏色。壓縮率:66%,也就是節(jié)省了1/3的存儲(chǔ)空間

對(duì)于網(wǎng)絡(luò)上色彩斑斕的圖片。壓縮率有可能不降反增。



其實(shí)很多網(wǎng)站的圖片已經(jīng)優(yōu)化壓縮了,能再壓縮的空間很小。

自己拍攝的圖片,即使保留更多的顏色也能獲得較大壓縮比:


壓縮率:33%

原理:

  • 保留少數(shù)量的顏色,取代原圖片中的N多顏色
  • 采用聚類(lèi)方式得到新的顏色種類(lèi),用種類(lèi)中心的顏色代表這個(gè)顏色種類(lèi)
  • 用選出來(lái)的顏色重新對(duì)圖片著色

代碼在此:

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import imageio

iname = "original.jpg"
cname = "compress_" + iname

#保留的顏色數(shù)量
n_colors = 64
img = imageio.imread(iname)


ax = plt.axes(xticks=[], yticks=[])
ax.imshow(img);


img.shape


data = img / 255.0 # 顏色從0-255轉(zhuǎn)換為0-1之間的小數(shù)
data = data.reshape(-1, 3)
data.shape

#批量KMeans
from sklearn.cluster import MiniBatchKMeans
kmeans = MiniBatchKMeans(n_colors)
kmeans.fit(data)
new_colors = kmeans.cluster_centers_[kmeans.predict(data)]


#重新著色
new_img = new_colors.reshape(img.shape)
new_img = (255 * new_img).astype(np.uint8)

fig, ax = plt.subplots(1, 2, figsize=(16, 6),
                       subplot_kw=dict(xticks=[], yticks=[]))
fig.subplots_adjust(wspace=0.05)
ax[0].imshow(img)
ax[0].set_title('Original Image', size=16)
ax[1].imshow(new_img)
ax[1].set_title(str(n_colors)+'-color Image', size=16);
#保存壓縮后的圖片
imageio.imsave(cname,new_img)


# 計(jì)算壓縮率

import os
from os.path import join, getsize

compress_ratio = getsize(cname) / getsize(iname)
compress_ratio

代碼參考:
https://mybinder.org/v2/gh/jakevdp/PythonDataScienceHandbook/master?filepath=notebooks%2FIndex.ipynb

里面的In Depth: k-Means Clustering

KevinZhang
Sep 20, 2018

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 摘要:對(duì)android 上圖片壓縮,其實(shí)總結(jié)起來(lái)基本可以分為兩類(lèi)壓縮:尺寸壓縮和質(zhì)量壓縮, 尺寸壓縮其實(shí)也可以理解...
    男爵是只貓丶閱讀 8,985評(píng)論 2 14
  • 三月,是溫潤(rùn)的。 只是步履有些匆忙,稍有不留意,樹(shù)梢上的葉子又不知什么時(shí)候嘩啦嘩啦長(zhǎng)大...
    阿芬阿小鄭閱讀 266評(píng)論 0 0
  • 積極覺(jué)察表。 早起,低標(biāo)準(zhǔn)。閱讀,低標(biāo)準(zhǔn)。鍛煉:高標(biāo)準(zhǔn)。 今天跟朋友一起玩,從一開(kāi)始就想著放松,所以并沒(méi)有嚴(yán)格要求...
    再見(jiàn)你好_8260閱讀 170評(píng)論 0 0
  • 關(guān)鍵詞:基于數(shù)據(jù)元素值的查找、基于結(jié)點(diǎn)的查找 0. 查找的方式 基于數(shù)據(jù)元素值的查找GTreeNode<T>* f...
    編程半島閱讀 535評(píng)論 0 0

友情鏈接更多精彩內(nèi)容