python中學(xué)習(xí)K-Means和圖片壓縮
大家在學(xué)習(xí)python中,經(jīng)常會(huì)使用到K-Means和圖片壓縮的,我們?cè)诖私o大家分享一下K-Means和圖片壓縮的方法和原理,喜歡的朋友收藏一下吧。
通俗的介紹這種壓縮方式,就是將原來(lái)很多的顏色用少量的顏色去表示,這樣就可以減小圖片大小了。下面首先我先介紹下K-Means,當(dāng)你了解了K-Means那么你也很容易的可以去理解圖片壓縮了,最后附上圖片壓縮的核心代碼。
K-Means的核心思想
k-means的核心算法也就上面寥寥幾句,下面將分三個(gè)部分來(lái)講解:初始化簇中心、簇分配、簇中心移動(dòng)。
初始化簇中心
隨機(jī)取簇中心若是不幸,會(huì)出現(xiàn)局部最優(yōu)的情況;想要打破這種情況,需要多次取值計(jì)算來(lái)解決這種情況。
代價(jià)函數(shù)
代碼實(shí)現(xiàn)
J = zeros(100,1); M = size(X,1); min = inf; for i = 1:100 %隨機(jī)取k個(gè)樣本點(diǎn)作為簇中心 randidx = randperm(M); initial_centroids = X(randidx(1:K),:); %將所得的中心點(diǎn)進(jìn)行訓(xùn)練 [centroids0, idx] = runkMeans(X, initial_centroids,10); for k = 1:M J(i) = J(i) + sum((X(k,:) - centroids0(idx(M),:)).^2); end %取最小代價(jià)為樣本中心點(diǎn) if(min > J(i)) centroids =centroids0; end end
簇分配
將樣本點(diǎn)分配到離它最近的簇中心下
tmp = zeros(K,1); for i = 1:size(X,1) for j = 1:K tmp(j) = sum((X(i,:) - centroids(j,:)).^2); end [mins,index]=min(tmp); idx(i) = index; end
簇中心移動(dòng)
取當(dāng)前簇中心下所有樣本點(diǎn)的均值為下一個(gè)簇中心
for i = 1:m centroids(idx(i),:) = centroids(idx(i),:) + X(i,:); end for j = 1:K centroids(j,:) = centroids(j,:)/sum(idx == j); end
圖片壓縮
% 加載圖片 A = double(imread('dragonfly.jpg')); % 特征縮減 A = A / 255; img_size = size(A); X = reshape(A, img_size(1) * img_size(2), 3); K = 16; max_iters = 10; %開(kāi)始訓(xùn)練模型 initial_centroids = kMeansInitCentroids(X, K); [centroids, idx] = runkMeans(X, initial_centroids, max_iters); %開(kāi)始?jí)嚎s圖片 idx = findClosestCentroids(X, centroids); X_recovered = centroids(idx,:); X_recovered = reshape(X_recovered, img_size(1), img_size(2), 3); %輸出所壓縮的圖片 subplot(1, 2, 2); imagesc(X_recovered)
- python實(shí)現(xiàn)圖片批量壓縮
- python 實(shí)現(xiàn)圖片批量壓縮的示例
- python 無(wú)損批量壓縮圖片(支持保留圖片信息)的示例
- python如何實(shí)現(xiàn)圖片壓縮
- Python無(wú)損壓縮圖片的示例代碼
- python3 圖片 4通道轉(zhuǎn)成3通道 1通道轉(zhuǎn)成3通道 圖片壓縮實(shí)例
- python實(shí)現(xiàn)圖片壓縮代碼實(shí)例
- python實(shí)現(xiàn)圖片批量壓縮程序
- Python實(shí)現(xiàn)批量壓縮圖片
- python利用Guetzli批量壓縮圖片
- 在Python中使用pngquant壓縮png圖片的教程
- python 批量壓縮圖片的腳本
相關(guān)文章
Python實(shí)現(xiàn)把utf-8格式的文件轉(zhuǎn)換成gbk格式的文件
這篇文章主要介紹了Python實(shí)現(xiàn)把utf-8格式的文件轉(zhuǎn)換成gbk格式的文件,本文給出了實(shí)現(xiàn)代碼并同時(shí)剖析了代碼的作用,需要的朋友可以參考下2015-01-01python+django+selenium搭建簡(jiǎn)易自動(dòng)化測(cè)試
這篇文章主要介紹了python+django+selenium搭建簡(jiǎn)易自動(dòng)化測(cè)試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08一個(gè)基于flask的web應(yīng)用誕生 組織結(jié)構(gòu)調(diào)整(7)
一個(gè)基于flask的web應(yīng)用誕生第七篇,這篇文章主要介紹了組織結(jié)構(gòu)的調(diào)整,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Blender Python編程實(shí)現(xiàn)程序化建模生成超形示例詳解
這篇文章主要為大家介紹了Blender Python編程實(shí)現(xiàn)程序化建模生成超形示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08