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


Posted in Python onNovember 20, 2017

大家在学习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)
Python 相关文章推荐
python迭代器实例简析
Sep 25 Python
python正则表达式及使用正则表达式的例子
Jan 22 Python
Sublime开发python程序的示例代码
Jan 24 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
python数据处理 根据颜色对图片进行分类的方法
Dec 08 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
Oct 18 Python
win10下python3.8的PIL库安装过程
Jun 08 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
python如何将图片转换素描画
Sep 08 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
python在协程中增加任务实例操作
Feb 28 Python
深入理解Python中的super()方法
Nov 20 #Python
python实现读取excel写入mysql的小工具详解
Nov 20 #Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 #Python
python Matplotlib画图之调整字体大小的示例
Nov 20 #Python
python cx_Oracle的基础使用方法(连接和增删改查)
Nov 19 #Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 #Python
python中urlparse模块介绍与使用示例
Nov 19 #Python
You might like
php xfocus防注入资料
2008/04/27 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
私有程序集与共享程序集有什么区别
2013/04/05 面试题
会计专业自我鉴定
2014/02/10 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
听课评语大全
2014/04/30 职场文书
抵押贷款承诺书
2014/05/30 职场文书
父亲节活动策划方案
2014/08/24 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
北京英语导游词
2015/02/12 职场文书
2015年财务部工作总结
2015/04/10 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书