十四、聚类实战——图片压缩

对同一像素点值的像素点归为一类,通过平均值进行取代,从而将图像进行压缩并且保证图像尽可能不失真,关键信息仍保留。

from PIL import Image
import numpy as np
from sklearn.cluster import KMeans
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Ddef restore_image(cb, cluster, shape):row, col, dummy = shapeimage = np.empty((row, col, 3))index = 0for r in range(row):for c in range(col):image[r, c] = cb[cluster[index]]index += 1return imagedef show_scatter(a):N = 10print('原始数据:\n', a)density, edges = np.histogramdd(a, bins=[N,N,N], range=[(0,1), (0,1), (0,1)])density /= density.max()x = y = z = np.arange(N)d = np.meshgrid(x, y, z)fig = plt.figure(1, facecolor='w')ax = fig.add_subplot(111, projection='3d')ax.scatter(d[1], d[0], d[2], c='r', s=100*density, marker='o', depthshade=True)ax.set_xlabel(u'红色分量')ax.set_ylabel(u'绿色分量')ax.set_zlabel(u'蓝色分量')plt.title(u'图像颜色三维频数分布', fontsize=20)plt.figure(2, facecolor='w')den = density[density > 0]den = np.sort(den)[::-1]t = np.arange(len(den))plt.plot(t, den, 'r-', t, den, 'go', lw=2)plt.title(u'图像颜色频数分布', fontsize=18)plt.grid(True)plt.show()if __name__ == '__main__':matplotlib.rcParams['font.sans-serif'] = [u'SimHei']matplotlib.rcParams['axes.unicode_minus'] = Falsenum_vq = 256 #256个像素,最后想降维到256个维度im = Image.open('Lena.png')     # flower2.png(200)/lena.png(50)  读取图片image = np.array(im).astype(np.float) / 255 # 将图像数据转化为array类型,方便后续的操作image = image[:, :, :3]#所有行、列、前三个维度,因为png有四个属性,RGBα,alpha为透明度,不需要,只用前三个维度信息即可image_v = image.reshape((-1, 3))#拉伸像素点,行不关心,列为3列===转换为二维数据,每一列均为一个维度的全部数据,RGB变成了3列,每行为一个像素点model = KMeans(num_vq)#通过Kmeans对每一行进行处理,也就是每个像素点进行处理,对每个像素点进行分类,像素点相似度的归类;创建聚类对象#每类都有一个中心像素点,将该中心像素点代替这一类,这里手动传入的是分成256个类别。不管像素点位置,只考虑相似与否是否为一类show_scatter(image_v)#画图N = image_v.shape[0]    # 图像像素总数# 选择足够多的样本(如1000个),计算聚类中心idx = np.random.randint(0, N, size=1000)#从图像中随机选取1000个像素点image_sample = image_v[idx]model.fit(image_sample)#将这1000个像素点去训练模型,聚类结果,从1000个像素点中找到最重要的256个像素点作为中心点c = model.predict(image_v)  # 将图像全部的像素点进行预测,看看图像中的所有像素点离这256个簇哪一个最近,把图像的所有像素点进行分类print('聚类结果:\n', c)print('聚类中心:\n', model.cluster_centers_)plt.figure(figsize=(15, 8), facecolor='w')plt.subplot(121)plt.axis('off')plt.title(u'原始图片', fontsize=18)plt.imshow(image)#plt.savefig('1.png')plt.subplot(122)vq_image = restore_image(model.cluster_centers_, c, image.shape)#聚类中心点、聚类结果、模型图像的形状   作为参数进行恢复图像plt.axis('off')plt.title(u'矢量量化后图片:%d色' % num_vq, fontsize=20)plt.imshow(vq_image)#plt.savefig('2.png')plt.tight_layout()plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

步骤菜单使用css3实现

代码库:http://thecodeplayer.com/walkthrough/css3-breadcrumb-navigation 有兴趣的可以看一下,看完绝对让你大饱眼福。首先截图,看效果看着很酷吧,其实实现起来也不是很难,里边需要用的技术有:box-shadow,计数器&…

【嵌入式系统】STM32串口通信的四种方法(基于RTOS)

目录1、串行通信的基本参数2、轮询方式代码效果3、中断方式代码效果4、中断加上时间戳方式代码及效果5、DMA空闲中断方式接收数据1、串行通信的基本参数 串行端口的通信方式是将字节拆分成一个接一个的位再传输出去,接收方再将此一个一个的位组合成原来的字符&…

十五、聚类的评估

一、Given Label 均一性homogeneity:一个簇中只包含一个类别样本,Precision 完整性completeness:同类别样本被归到同一个簇中,Recall 将均一性h和完整性c进行结合(二者加权平均)得到V-Measure,,β为权重 …

SQL SERVER作业的Schedules浅析

SQL SERVER作业的计划(Schedules),如果你没仔细研究过或没有应用一些复杂的计划(Schedules),那么你觉得SQL SERVER作业的计划(Schedules)非常好用,也没啥问题,但是我要告诉你一个“残…

leetcode 51. N 皇后 思考分析

目录题目思考AC代码题目 n 皇后问题研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 思考 首先以N4为例,画出解空间树的一部分: 根据模板: void backtracking(参数) {if(终止条件){存放结果…

No module named ‘tensorflow.examples‘解决方案

想从tensorflow中导入mnist手写数字数据集,结果报错 from tensorflow.examples.tutorials.mnist import input_data import tensorflow.compat.v1 as tf tf.disable_v2_behavior()my_mnist input_data.read_data_sets("MNIST_data_bak/", one_hotTrue)&…

.NET通用基本权限系统

DEMO下载地址: http://download.csdn.net/detail/shecixiong/5372895 一、开发技术:B/S(.NET C# ) 1、Windows XP以上 (支援最新Win 8) 2、Microsoft Visual Studio 2010/2012 C#.NET 3、.NET Framework 4.0以上 (支援最新4.5版本) 4、SQL Server 2005以…

leetcode 37. 解数独 思考分析

目录题目核心思路的不断细化1、核心框架2、考虑到每个位置的工作3、考虑到到达最后一列、该位置的数已经预置的情况4、判断是否符合规则的函数5、确定递归终止条件确定函数返回值AC代码题目 编写一个程序,通过填充空格来解决数独问题。 一个数独的解法需遵循如下规…

快速完成兼职外包开发任务

做了很多年的开发相关的工作,做过兼职开发,也做过外包一些开发项目。 兼职人员角色时 正是经历这些事情时,每次就要提前很费经的跟公司沟通,让他们把公司内部的svn开发出去,但是就是很难,会涉及到安全各方的…

使用YOLOv5训练NEU-DET数据集

一、下载YOLOv5源码和NEU-DET(钢材表面缺陷)数据集 YOLOv5源码 NEU-DET(钢材表面缺陷)数据集 这里的数据集已经经过处理了,下载即可 若通过其他途径下载的原始数据集标签为xml格式,需要转化为txt格式XML转txt格式脚本 二、数据集准备 NEU-DET(钢材表…

带分页功能的SSH整合,DAO层经典封装

任何一个封装讲究的是,使用,多状态。Action:任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数。并根据这个参数进行查值。然后在继承ServiceManage,Service…

leetcode 198. 打家劫舍 思考分析

目录1、题目2、求解思路3、代码1、题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动…

找不到Windows照片查看器解决方法

桌面创建一个txt文本 复制这些命令,之后将后缀改为.reg,右击管理员身份运行即可 Windows Registry Editor Version 5.00 ; Change Extensions File Type [HKEY_CURRENT_USER\Software\Classes\.jpg] "PhotoViewer.FileAssoc.Tiff" ; Change E…

伙伴分配器的一个极简实现

提起buddy system相信很多人不会陌生,它是一种经典的内存分配算法,大名鼎鼎的Linux底层的内存管理用的就是它。这里不探讨内核这么复杂实现,而仅仅是将该算法抽象提取出来,同时给出一份及其简洁的源码实现,以便定制扩展…

[USACO3.2.3 Spinning Wheels]

[关键字]:模拟 枚举 [题目大意]:有5个轮子,每个轮子优r个缺口并且会按一定速度不停转动,问什么时候可以使一条光线射过所有轮子。 // [分析]:从0到1000(或其他的)枚举分钟然后判断,当…

一、SQLServer2008安装(带密码)、创建数据库、C#窗体项目测试

一、下载和安装SQLServer2008 东西太大了,没法上传到资源里面,官网其他公众号都下载可以。 右击管理员身份 运行setup.exe 这个密钥不能用的话,也可以去百度其他密钥 JD8Y6-HQG69-P9H84-XDTPG-34MBB 建议改一下路径,我这边修…

【C++grammar】多态、联编、虚函数

目录1、多态概念1.多态性有两种表现的方式2、联编(实现多态)1.静态联编2.动态联编3、实现运行时多态1.为何要使用运行时多态?2.如何实现运行时多态3.多态的例子1.调用哪个同名虚函数?2. 用途:可以用父类指针访问子类对…

一 MVC - HtmlHelper

HtmlHelper类位于System.Web.Mvc.Html之中主要有七个静态类组成: FormExtensions - BeginForm, BeginRouteForm, EndForm InputExtensions - CheckBox, CheckBoxFor, Hidden, HiddenFor, Password, PasswordFor, RadioButton, RadioButtonFor, TextBox, TextBoxFor …

二、用户登录和注册

一、页面设计 一共四个页面 主页面Form1,登录页面login,注册页面resister,主菜单页面main_page 系统运行进入Form1,单击登录按钮跳转到login,数据库中得存在数据信息且输入正确才可登录成功,跳转到main_pa…

【C++grammar】访问控制与抽象类与纯虚函数

目录一、访问控制 (可见性控制)1.private、public、protected关键字2.关键字示例1、关键字对类数据成员访问的限制3. 公有继承4. 私有继承5. 保护继承6. 私有继承和保护继承的区别二、抽象类与纯虚函数1.什么是抽象类2.抽象函数/纯虚函数3.抽象类示例一、访问控制 (可见性控制)…