一种压缩图片的方法---Machine learning 之 K-Means
背景描述:
RGB编码:对于一个直接用24bit表示每一个而像素的图像来说,每一个pixel使用8-bit无符号整数(0-255)来表示红or绿or蓝。
压缩目的:
将128x128大小的图片由原来的24bit表示-压缩成->16bit表示每一个像素的图像。
压缩方法:
对于每一个pixel, 使用 K-Means选择16bits来表示原来的24bits。当然,具体是通过计算每一个像素空间的16bits大小的聚类来表示原来的24bits。
实现步骤:
1.将原来的128x128大小的图片读入到一个3维矩阵A中。举个例子 A(50, 33, 3)表示原图片中rowNum = 50 columnNum = 33 RGB中的B维 所对应的
颜色值(0-255)。这样我们就得到了一个 X = (m x 3)matrix of piexl colors( where m = 128 * 128 = 16384)。
2.运行K-Means算法,取K= 16, 这样将每一个pixel聚类到一个Cluster k上(关于K-means初始K个点的选择 其实就是随机在X中选出K个点作为 centroid的)。用k这个centroid point的location来代表原来的像素值。这里K=16,我们可以用四位来表示16种分类的可能。那么也就需要4bits就可以记录当前piexl的压缩后的分类。(当然,最后还需要有一个对照表 k(16个颜色(?为啥不用4bits来映射,2进制转换太繁琐!这里直接映射就好了)) -> RGB(24bits))。
压缩效果:
压缩前大小:128*128*24 = 393216 bits;
压缩后大小:128*128*4 + 16*24 = 65920 bits;
压缩因子接近 6!
代码在gitlab Machine learning ex7中。
核心思路:
K-means进行图片压缩,压缩的并不是颜色。原来用24位表示颜色,现在也用24位表示颜色。只不过编码方式发生了改变,将原来的24bits种颜色变成了16bits种颜色。而这个过程正是采用的k-means聚类。那么颜色之间的区分度就变得不是那么明显,导致分辨率下降。
Have fun , good luck!
And this is my picture kebe compressed:
K-Means结果可视化
如图每一个颜色代表一个cluster(共计16种)。
一种压缩图片的方法---Machine learning 之 K-Means的更多相关文章
- 另一种压缩图片的方法---Machine learning 之 PCA(Principle Component Analysis)
PCA最主要的用途是用来减少特征向量的数目,N个特征向量 减小到 K个特征向量.如果为了可视化,k可以使3 或者 2.这样可以加速算法的学习速度. PCA用来压缩图像同一有效. 具体方式以及原理在gi ...
- OpenCV Machine Learning 之 K近期邻分类器的应用 K-Nearest Neighbors
OpenCV Machine Learning 之 K近期邻分类器的应用 以下的程序实现了对高斯分布的点集合进行分类的K近期令分类器 #include "ml.h" #includ ...
- [实现]Javascript代码的另一种压缩与加密方法——代码图片转换
代码=图片 图片=代码 JS代码对于喜欢F12的同志来说,连个遮羞布都没有... 虽然把代码变成图片也仅仅只是增加一层纱布而已...但这方法还是挺好玩的,而且代码也被压缩了一点. 第一次看到[图片=代 ...
- 10 行 Python 代码,批量压缩图片 500 张,简直太强大了
本文原创并首发于公众号[Python猫],未经授权,请勿转载. 原文地址:https://mp.weixin.qq.com/s/5hpFDgjCpfb0O1Jg-ycACw 熟悉 "Pyth ...
- Android 下压缩图片—微弱失真
Android下压缩图片的方法: 大概能将3M左右的图片压缩到100K左右, 几乎不失真. 代码如下: import java.io.FileNotFoundException; import jav ...
- Canvas DrawImage截取和压缩图片的陷阱
html5的canvas十分之强大,可以做到快速的截取压缩出新的图片! 不过最近开发过程中遇到一个问题,图片压缩后使用toDataURL取得图片显示为一片漆黑,什么都没有! 折腾了很久,起初以为是上传 ...
- JAVA中pdf转图片的方法
JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用. 一.icepdf.有收费版和开源版,几种方法里最推荐的.转换的效果比较好,能识别我手头文件中的中文, ...
- Python解压ZIP、RAR等常用压缩格式的方法
解压大杀器 首先祭出可以应对多种压缩包格式的python库:patool.如果平时只用基本的解压.打包等操作,也不想详细了解各种压缩格式对应的python库,patool应该是个不错的选择. pato ...
- 使用Python轻松批量压缩图片
在互联网,图片的大小对一个网站的响应速度有着明显的影响,因此在提供用户预览的时候,图片往往是使用压缩后的.如果一个网站图片较多,一张张压缩显然很浪费时间.那么接下来,我就跟大家分享一个批量压缩图片的方 ...
随机推荐
- httpd-vhosts.conf
## VirtualHost example:# Almost any Apache directive may go into a VirtualHost container.# The first ...
- EF-调用sql进行操作
一丶执行 class Program { static void Main(string[] args) { var db = new TestDBEntities(); string sql = @ ...
- cuda_device_functions.h:32:31: fatal error: cuda/include/cuda.h: 没有那个文件或目录
问题在复现工程https://github.com/google/hdrnet时遇到. 现象: 解决办法: 修改hdrnet文件夹下的Makefile文件:在在nvcc里面添加路径:-I /usr/l ...
- Luogu P1550 打井Watering Hole
P1550 [USACO08OCT]打井Watering Hole 题目背景 John的农场缺水了!!! 题目描述 Farmer John has decided to bring water to ...
- Cat VS Dog HDU_3829(最大独立集最大匹配)
Cat VS Dog 题意:一群小朋友去动物园,如果每个小朋友喜欢的动物是猫,那么不喜欢的动物一定是狗,反之也是.现在动物园的管理者要拿走一些动物,如果拿走的是某个小朋友不喜欢的动物,那这个小朋友就非 ...
- Python中的@property装饰器
要了解@property的用途,首先要了解如何创建一个属性. 一般而言,属性都通过__init__方法创建,比如: class Student(object): def __init__(self,n ...
- BZOJ 1606 USACO 2008 Dec. 购买干草
[题意概述] 有n件物品,每件物品有体积Vi,背包容量为C,问最多可以装多少体积的物品 [题解] 显然是个无限背包嘛.. 直接做背包DP就好 注意无限背包的写法和01背包的区别 #include< ...
- Maven学习总结(5)——聚合与继承
Maven学习总结(五)--聚合与继承 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module> ...
- Linux学习总结(13)——在阿里云的ubuntu上部署个人服务
作为一个IT界的人,一般都希望有一个独立的博客,或者一部独立的机器.所以我一直在找机会,拥有一台自己可以独立控制的机器,自己想干嘛干嘛.当然这在虚拟机或者自己的PC上面也可以实现,但是这跟一台一直开着 ...
- [HDU3518]Boring counting(后缀数组)
传送门 求出现超过1次的不重叠子串的个数 根据论文中的方法. 枚举子串的长度 k. 用 k 给 height 数组分组,每一组求解,看看当前组的位置最靠后的后缀和位置最靠前的后缀所差个数是否大于长度, ...