前面几篇文章 浅谈支持向量机 神经网络——手写数字识别 中涉及的算法都属于监督学习的范畴,今天小编给大家介绍一种属于无监督学习范畴的算法——K-means。

K-means是一种应用很广泛的聚类算法。聚类,通俗的讲就是“人以群分物以类聚”。

K-means是怎么实现聚类的呢?下面我们以一个简单的样例来阐述它的工作原理。

观察上面的图,我们一般会认为这些数据点集中分布在三个区域,即这些数据点可以聚成三个族。K-means的工作过程是:首先随机挑选三个点作为中心点,然后计算所有的数据点离哪个中心点最近,再根据离中心点近的点更新中心点,循环多次直到中心点不怎么变化即可。

利用K-means聚类上面的数据,中心点更新过程如下。

好了,现在大致了解了K-means的作用和工作原理,下面就进入我们这次的主题——图像压缩。

上图是128*128的png图像,存储格式是RGB,所以这副图像占用的位数是128×128×24=393216。我们怎样利用K-means算法实现这副图像的压缩呢?

我的想法是:这副图像存在许多很大一块区域的颜色相近,既然相近,我们就用一种颜色替代一大块区域中的各色。我们可以人为的用8、16、24、32种颜色表示整幅图像的颜色,也即说明聚类的个数为8、16、24、32。

具体的Python代码如下。

import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
from sklearn.cluster import KMeans
import numpy as nppixel = mpimg.imread('bird_small.png')
pixel = pixel.reshape((128*128 , 3))kmeans = KMeans(n_clusters=16, random_state=0).fit(pixel)newPixel = []
for i in kmeans.labels_:newPixel.append(list(kmeans.cluster_centers_[i,:]))newPixel = np.array(newPixel)
newPixel = newPixel.reshape((128,128,3))plt.imshow(newPixel)
plt.show()

如果用了16个类,则压缩之后的图像占用的位数为128×128×4 = 65536,压缩比为16.7%。但这种压缩是有损压缩,图像质量会下降,使用8、16、24、32压缩后效果图如下。

可以看到,图像的质量较原图是有所下降的,有点类似在原图上进行平滑处理,并且分类数越多,图片质量越接近原图,这个应该不难理解。

好了,以上就是本次的全部内容。

利用K-means进行图像压缩相关推荐

  1. K means 图片压缩

    k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...

  2. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  3. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  4. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  5. 文献记录(part89)--I-k-means-+:An iterative clustering algorithm based on an enhanced k -means

    学习笔记,仅供参考,有错必究 关键词:k均值:解决方案改进:准确的k均值:迭代改进 I-k-means-+:An iterative clustering algorithm based on an ...

  6. 为了联盟还是为了部落 | K means

    1. 问题 人类有个很有趣的现象,一群人在一起,过一段时间就会自发的形成一个个的小团体.好像我们很擅长寻找和自己气质接近的同类.其实不只是人类,数据也有类似情况,这就是聚类(Clustering)的意 ...

  7. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  8. python 聚类分析 k means

    Kmeans 是一种动态聚类方法,其基本思想是:首先随机选取 K 个点作为初始凝聚点,按照距离最近原则划分为 K 类:然后重新计算 K 个类的重心作为新的凝聚点,再按照距离最近原则重新分类:重复这一过 ...

  9. k means聚类算法_一文读懂K-means聚类算法

    1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...

  10. simple k means

    //选择初始的k个质点 for (int j = initInstances.numInstances() - 1; j >= 0; j--) { instIndex = RandomO.nex ...

最新文章

  1. 考研规划计算机科学与技术,【图片】2020考研,老学长教你如何规划!【计算机考研吧】_百度贴吧...
  2. .net 开源组件推荐 之 StackExchange
  3. leetcode 53.最大子序和
  4. vue配置二级目录vue-axios跨域办法谷歌浏览器设置跨域
  5. 徐小平:全员拥抱区块链是内部分享 1比特币寻泄密者
  6. 一致吗 驱动_iPhone 12无线充电真的香吗?
  7. 为了研究,可以在 Linux 内核中植入漏洞吗?
  8. 【转】ubuntu 12.04 /sbin/ldconfig.real: /usr/local/lib/*.so.8 不是符号连接 解决办法
  9. Distribution download cancelled. Using distribution from 'https://services.gradle.org/distributions/
  10. Python绘制污染玫瑰图
  11. 程序员的英文简历编写参考
  12. Windows 2016 服务器安全配置
  13. 图片指纹技术检测图片相似度
  14. html中点重置和提交没反应,为什么点击按钮没反应??
  15. github html倒计时器,GitHub - Sign312/CountDown: 一个用来实现简单页面倒计时的轻量级工具...
  16. 欢迎来怼——第四次Scrum会议
  17. 信息量、熵、交叉熵、KL散度、JS散度、Wasserstein距离
  18. 动画跨专业考研计算机,跨专业考研动漫
  19. 中专计算机毕业生登记表自我鉴定,中专毕业生登记表自我鉴定范文(精选5篇)...
  20. 为什么静下心来阅读会是一种奢侈?

热门文章

  1. C语言怎么消除最后的回车键,多样例输出,如何去掉最后一个回车
  2. 虚拟机上网的三种方式
  3. 计算机图形杂志,计算机图形学顶级杂志、会议、期刊
  4. 汇编语言rep movsd 的使用
  5. python如何输入n个数字_如何在列表中逐个输入n个数字?
  6. VSCODE 关闭文件和资源管理器关联
  7. 利用匿名管道实现远程CMD---我的解读
  8. C++ Lambda 表达式教程
  9. 计算地球表面两点之间的距离
  10. Oracle数据库常见问题及解决办法