python中学习K-Means和图片压缩

作者:laozhang 时间:2022-08-15 14:09:07 

大家在学习python中,经常会使用到K-Means和图片压缩的,我们在此给大家分享一下K-Means和图片压缩的方法和原理,喜欢的朋友收藏一下吧。

python中学习K-Means和图片压缩

通俗的介绍这种压缩方式,就是将原来很多的颜色用少量的颜色去表示,这样就可以减小图片大小了。下面首先我先介绍下K-Means,当你了解了K-Means那么你也很容易的可以去理解图片压缩了,最后附上图片压缩的核心代码。

K-Means的核心思想

python中学习K-Means和图片压缩

python中学习K-Means和图片压缩

k-means的核心算法也就上面寥寥几句,下面将分三个部分来讲解:初始化簇中心、簇分配、簇中心移动。

初始化簇中心

python中学习K-Means和图片压缩

随机取簇中心若是不幸,会出现局部最优的情况;想要打破这种情况,需要多次取值计算来解决这种情况。

代价函数
python中学习K-Means和图片压缩

代码实现


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)

来源:https://www.cnblogs.com/hello-world-n/p/7861341.html

标签:python,K-Means,图片压缩
0
投稿

猜你喜欢

  • python中startswith()和endswith()的用法详解

    2023-11-02 12:41:09
  • Python列表的定义及使用

    2023-08-02 03:38:32
  • 如何在社区建立一个寻呼台?

    2009-11-08 18:59:00
  • Banner广告条中的字体设计

    2010-08-05 20:57:00
  • Python定时发送消息的脚本:每天跟你女朋友说晚安

    2023-05-26 02:47:14
  • 一直闪烁变色的超级链接代码

    2008-02-27 13:08:00
  • 有时应该告诉我,但有时不应该告诉我

    2009-03-19 13:40:00
  • Python中的左斜杠、右斜杠(正斜杠和反斜杠)

    2022-02-08 07:00:34
  • js+csss实现的一个带复选框的下拉框

    2023-08-18 03:11:19
  • 教你快速掌握数据库查询优化的实用技巧

    2008-11-28 15:10:00
  • Python创建简单的神经网络实例讲解

    2021-12-02 05:38:41
  • 如何用Python破解wifi密码过程详解

    2021-06-03 05:32:38
  • python贪吃蛇核心功能实现上

    2021-12-06 15:49:18
  • 10个ASP网页制作技巧

    2007-09-24 13:12:00
  • Python面向对象之反射/自省机制实例分析

    2022-07-27 06:57:53
  • CSS背景图片的运用优化HTTP连接数

    2008-09-04 21:38:00
  • 不唐突的JavaScript的七条准则[翻译]

    2008-12-09 13:33:00
  • python多进程提取处理大量文本的关键词方法

    2022-02-17 13:07:36
  • Python调用shell命令常用方法(4种)

    2021-05-06 08:22:06
  • SQLserver 2000中出现“指定的服务并未以已安装的服务存在 解决方案

    2011-04-27 14:33:00
  • asp之家 网络编程 m.aspxhome.com