一种压缩图片的方法---Machine learning 之 K-Means
背景描述:
RGB編碼:對于一個直接用24bit表示每一個而像素的圖像來說,每一個pixel使用8-bit無符號整數(shù)(0-255)來表示紅or綠or藍。
壓縮目的:
將128x128大小的圖片由原來的24bit表示-壓縮成->16bit表示每一個像素的圖像。
壓縮方法:
對于每一個pixel, 使用 K-Means選擇16bits來表示原來的24bits。當然,具體是通過計算每一個像素空間的16bits大小的聚類來表示原來的24bits。
實現(xiàn)步驟:
1.將原來的128x128大小的圖片讀入到一個3維矩陣A中。舉個例子 A(50, 33, 3)表示原圖片中rowNum = 50 columnNum = 33 RGB中的B維 所對應(yīng)的
顏色值(0-255)。這樣我們就得到了一個 X = (m x 3)matrix of piexl colors( where m = 128 * 128 = 16384)。
2.運行K-Means算法,取K= 16, 這樣將每一個pixel聚類到一個Cluster k上(關(guān)于K-means初始K個點的選擇 其實就是隨機在X中選出K個點作為 centroid的)。用k這個centroid point的location來代表原來的像素值。這里K=16,我們可以用四位來表示16種分類的可能。那么也就需要4bits就可以記錄當前piexl的壓縮后的分類。(當然,最后還需要有一個對照表 k(16個顏色(?為啥不用4bits來映射,2進制轉(zhuǎn)換太繁瑣!這里直接映射就好了)) -> RGB(24bits))。
壓縮效果:
壓縮前大小:128*128*24 = 393216 bits;
壓縮后大小:128*128*4 + 16*24 = 65920 bits;
壓縮因子接近 6!
代碼在gitlab Machine learning ex7中。?
核心思路:
K-means進行圖片壓縮,壓縮的并不是顏色。原來用24位表示顏色,現(xiàn)在也用24位表示顏色。只不過編碼方式發(fā)生了改變,將原來的24bits種顏色變成了16bits種顏色。而這個過程正是采用的k-means聚類。那么顏色之間的區(qū)分度就變得不是那么明顯,導致分辨率下降。
Have fun , good luck!
And this is my picture kebe compressed:
?K-Means結(jié)果可視化
如圖每一個顏色代表一個cluster(共計16種)。
轉(zhuǎn)載于:https://www.cnblogs.com/luntai/p/5926369.html
總結(jié)
以上是生活随笔為你收集整理的一种压缩图片的方法---Machine learning 之 K-Means的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 词法分析程序
- 下一篇: MyBatis源码分析-IDEA新建My