python中学习K-Means和图片压缩
作者:laozhang 时间:2022-08-15 14:09:07
大家在学习python中,经常会使用到K-Means和图片压缩的,我们在此给大家分享一下K-Means和图片压缩的方法和原理,喜欢的朋友收藏一下吧。
通俗的介绍这种压缩方式,就是将原来很多的颜色用少量的颜色去表示,这样就可以减小图片大小了。下面首先我先介绍下K-Means,当你了解了K-Means那么你也很容易的可以去理解图片压缩了,最后附上图片压缩的核心代码。
K-Means的核心思想
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,图片压缩
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python中startswith()和endswith()的用法详解
2023-11-02 12:41:09
Python列表的定义及使用
2023-08-02 03:38:32
![](https://img.aspxhome.com/file/2023/9/61759_0s.png)
如何在社区建立一个寻呼台?
2009-11-08 18:59:00
Banner广告条中的字体设计
2010-08-05 20:57:00
![](https://img.aspxhome.com/file/UploadPic/20108/5/01-53s.jpg)
Python定时发送消息的脚本:每天跟你女朋友说晚安
2023-05-26 02:47:14
![](https://img.aspxhome.com/file/2023/3/63883_0s.png)
一直闪烁变色的超级链接代码
2008-02-27 13:08:00
有时应该告诉我,但有时不应该告诉我
2009-03-19 13:40:00
![](https://img.aspxhome.com/file/UploadPic/20093/19/login1-79s.jpg)
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2022-02-08 07:00:34
js+csss实现的一个带复选框的下拉框
2023-08-18 03:11:19
![](https://img.aspxhome.com/file/2023/9/56099_0s.gif)
教你快速掌握数据库查询优化的实用技巧
2008-11-28 15:10:00
Python创建简单的神经网络实例讲解
2021-12-02 05:38:41
![](https://img.aspxhome.com/file/2023/2/72762_0s.png)
如何用Python破解wifi密码过程详解
2021-06-03 05:32:38
![](https://img.aspxhome.com/file/2023/6/72986_0s.gif)
python贪吃蛇核心功能实现上
2021-12-06 15:49:18
![](https://img.aspxhome.com/file/2023/6/67866_0s.png)
10个ASP网页制作技巧
2007-09-24 13:12:00
Python面向对象之反射/自省机制实例分析
2022-07-27 06:57:53
CSS背景图片的运用优化HTTP连接数
2008-09-04 21:38:00
![](https://img.aspxhome.com/file/UploadPic/20089/4/200894214417934s.gif)
不唐突的JavaScript的七条准则[翻译]
2008-12-09 13:33:00
python多进程提取处理大量文本的关键词方法
2022-02-17 13:07:36
![](https://img.aspxhome.com/file/2023/7/67837_0s.jpg)
Python调用shell命令常用方法(4种)
2021-05-06 08:22:06
![](https://img.aspxhome.com/file/2023/8/76188_0s.png)
SQLserver 2000中出现“指定的服务并未以已安装的服务存在 解决方案
2011-04-27 14:33:00