python中學習K-Means和圖片壓縮
大家在學習python中,經(jīng)常會使用到K-Means和圖片壓縮的,我們在此給大家分享一下K-Means和圖片壓縮的方法和原理,喜歡的朋友收藏一下吧。

通俗的介紹這種壓縮方式,就是將原來很多的顏色用少量的顏色去表示,這樣就可以減小圖片大小了。下面首先我先介紹下K-Means,當你了解了K-Means那么你也很容易的可以去理解圖片壓縮了,最后附上圖片壓縮的核心代碼。
K-Means的核心思想


k-means的核心算法也就上面寥寥幾句,下面將分三個部分來講解:初始化簇中心、簇分配、簇中心移動。
初始化簇中心

隨機取簇中心若是不幸,會出現(xiàn)局部最優(yōu)的情況;想要打破這種情況,需要多次取值計算來解決這種情況。
代價函數(shù)

代碼實現(xiàn)
J = zeros(100,1); M = size(X,1); min = inf; for i = 1:100 %隨機取k個樣本點作為簇中心 randidx = randperm(M); initial_centroids = X(randidx(1:K),:); %將所得的中心點進行訓練 [centroids0, idx] = runkMeans(X, initial_centroids,10); for k = 1:M J(i) = J(i) + sum((X(k,:) - centroids0(idx(M),:)).^2); end %取最小代價為樣本中心點 if(min > J(i)) centroids =centroids0; end end
簇分配
將樣本點分配到離它最近的簇中心下
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
簇中心移動
取當前簇中心下所有樣本點的均值為下一個簇中心
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;
%開始訓練模型
initial_centroids = kMeansInitCentroids(X, K);
[centroids, idx] = runkMeans(X, initial_centroids, max_iters);
%開始壓縮圖片
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)
相關(guān)文章
django 實現(xiàn)將本地圖片存入數(shù)據(jù)庫,并能顯示在web上的示例
今天小編就為大家分享一篇django 實現(xiàn)將本地圖片存入數(shù)據(jù)庫,并能顯示在web上的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
pydev debugger: process 10341 is co
這篇文章主要介紹了pydev debugger: process 10341 is connecting無法debu的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
Python在for循環(huán)里處理大數(shù)據(jù)的推薦方法實例
這篇文章主要介紹了Python在for循環(huán)里處理大數(shù)據(jù)的推薦方法實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
Python?range函數(shù)生成一系列連續(xù)整數(shù)的內(nèi)部機制解析
這篇文章主要為大家介紹了Python?range函數(shù)生成一系列連續(xù)整數(shù)的內(nèi)部機制解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
python 獲取utc時間轉(zhuǎn)化為本地時間的方法
今天小編就為大家分享一篇python 獲取utc時間轉(zhuǎn)化為本地時間的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python接口自動化之cookie、session應(yīng)用詳解
本文主要介紹cookie、session原理及在自動化過程中如何利用cookie、session保持會話狀態(tài)的應(yīng)用,有需要的朋友可以參考下,希望可以有所幫助2021-08-08
Python二叉搜索樹與雙向鏈表轉(zhuǎn)換實現(xiàn)方法
這篇文章主要介紹了Python二叉搜索樹與雙向鏈表轉(zhuǎn)換實現(xiàn)方法,涉及Python二叉搜索樹的定義、實現(xiàn)以及雙向鏈表的轉(zhuǎn)換技巧,需要的朋友可以參考下2016-04-04

