SVD和Kmeans做 《贝加尔湖畔》图片特征抽取压缩的比较
本样例比较kmeans和svd做图像压缩后的图片效果
原图如下:
代码如下:
#!/usr/bin/python
# -*- coding:utf-8 -*-import numpy as np
import os
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib as mpl
from pprint import pprint
from sklearn.cluster import KMeansdef restore1(sigma, u, v, K): # 奇异值、左特征向量、右特征向量m = len(u)n = len(v[0])a = np.zeros((m, n))for k in range(K):uk = u[:, k].reshape(m, 1)vk = v[k].reshape(1, n)a += sigma[k] * np.dot(uk, vk)a[a < 0] = 0a[a > 255] = 255# a = a.clip(0, 255)return np.rint(a).astype('uint8')if __name__ == "__main__":A = Image.open("timg.png", 'r')a = np.array(A)pixel = a.reshape((-1, 3))K = 12u_r, sigma_r, v_r = np.linalg.svd(a[:, :, 0])u_g, sigma_g, v_g = np.linalg.svd(a[:, :, 1])u_b, sigma_b, v_b = np.linalg.svd(a[:, :, 2])plt.figure(figsize=(11, 9), facecolor='w')mpl.rcParams['font.sans-serif'] = ['simHei']mpl.rcParams['axes.unicode_minus'] = Falsefor k in range(1, K+1):print(k)R = restore1(sigma_r, u_r, v_r, k)G = restore1(sigma_g, u_g, v_g, k)B = restore1(sigma_b, u_b, v_b, k)I = np.stack((R, G, B), axis=2)model = KMeans(n_clusters=k, init='k-means++', n_init=10)labels = model.fit_predict(pixel) # 每个点颜色分类colors = model.cluster_centers_ # 聚类中心,颜色值new_img = colors[labels]# 然后用聚类中心的颜色代替原来的颜色值。new_img = new_img.reshape(a.shape)new_img = new_img.astype(np.uint8)plt.subplot(3, 8, 2*k-1)plt.imshow(I)plt.axis('off')plt.title('奇异值个数:%d' % k)plt.subplot(3, 8, 2*k)plt.imshow(new_img)plt.axis('off')plt.title('簇个数:%d' % k)plt.suptitle('SVD与Kmeans做图像分解', fontsize=20)plt.tight_layout(0.3, rect=(0, 0, 1, 0.92))plt.show()
从图片的效果我们可以看出,运用kmeans会直接按照簇的个数使用像素个数,svd则是选择特征值的个数,即使在特征值为1时得到的也是多像素的图片但比较模糊,看不到轮廓。发现其实kmeans的只用少量的像素得到的效果并不差,当簇个数为12时基本与原图效果一直,较奇异值分解得到的图片更清晰一些。
SVD和Kmeans做 《贝加尔湖畔》图片特征抽取压缩的比较相关推荐
- kmeans学习笔记轮廓系数以及使用KMeans做矢量量化
from sklearn.cluster import KMeans cluster=KMeans(n_clusters=3,random_state=0).fit(X) y_pred=cluster ...
- glide 显示图片慢_做个看图片的App玩玩_第一篇
目标 做个看图片的App,效果图如下: 本期目标 功能: 1.下载一组图片,支持上下滑动翻页 涉及技术知识点: 1. retrofit+okHttp:访问网络接口获取数据 2. coroutines: ...
- java获取网络图片_做个看图片的App玩玩_第一篇
目标 做个看图片的App,效果图如下: 本期目标 功能: 1.下载一组图片,支持上下滑动翻页 涉及技术知识点: 1. retrofit+okHttp:访问网络接口获取数据 2. coroutines: ...
- 淘宝店铺装修之一怎样在自定义内容区做个商品图片轮播展示
<wbr><span style="font-size:24px"><strong>店铺装修之一怎样在自定义内容区做个商品图片轮播展示</ ...
- 百度图片推广怎么做(百度图片推广操作方法)
百度图片推行怎样做?微赚云今天赋享百度图片推行操作办法.首先,我们将要讨论如何将图片上传到百度的问题,只需是针对一个需求较大的行业,那么不论我们想要什么样的引流形式,毕竟在众多渠道中,我们我们也不能绝 ...
- php怎么banner指定超链接,巧用图片链接模块做banner广告图片,后台可更换图片
banner广告图片客户要自己更换怎么办,我们可以巧用图片链接模块做banner广告图片,让客户自己来更换banner广告图片.之前我 做过一个简单实现广告图片后台更换教程,是用产品模块来实现的,拖拖 ...
- 微信小程序做一个圆形图片旋转可以控制开始和结束-音乐播放器的图片旋转功能
微信小程序做一个圆形图片旋转可以控制开始和结束 1.在 WXML 文件中添加一个 标签,并设置图片的 src 和样式,并为其绑定一个 animation 用来控制旋转动画. <image src ...
- 图片转svg标注_两个免费网站轻松搞定图片文件压缩转化!
关注· 点击蓝字,关注我吧 图片压缩 文件转格式 两个免费网站轻松搞定 免费处理图片文字网站 前几天做公号的时候,上传图片遇到了图片过大无法上传的问题.这两个网站可以看做是兄弟俩,今天推荐给大家,省去 ...
- html 图片剪裁压缩,HTML5 canvas实现图片拉伸、压缩与裁剪
前言: 我们在网页中经常会用到图片展示,通常情况下会给一个固定的宽高来显示这个图片,然而从服务器端上传的图片大小是不确定的,如果直接按默认填充这个框有时候就会特别丑orz.作为一个完(wai)美(ma ...
最新文章
- 美团架构师开源5万字的《Java面试手册》PDF免费下载!
- java itemcf_大规模电商推荐数据分析-基于ItemCF的召回
- 开源大数据引擎:Greenplum 数据库架构分析
- windows 10 扩大C盘空间
- python调用zabbixapi接口_python3 + zabbix api 的使用
- 03-类与对象——课后动手动脑
- CGLI 报错 :VerifyError: class net.sf.cglib.core.DebuggingClassWriter overrides final method visit
- sql azure 语法_深入了解Azure Data Studio:扩展和Azure SQL DB开发
- java excel api 下载文件_Java-Excel Java操作Excel POI(Jakarta POI API) - 下载 - 搜珍网
- MusicPlayer音乐播放器Android
- 疯狂Java讲义(十一)---- 初始化块
- 全国计算机二级个考生自定义,全国计算机二级考试《C++》强化试题及答案
- java系统课程设计报告_201621123063《JAVA课程设计报告》
- gridview的sort_Gridview自动排序功能的实现
- 海康威视rtsp转rtmp(java稳定版)
- linux drwxr-xr-x 什么意思
- 经典r-k法 matlab,解微分方程欧拉法,R-K法及其MATLAB实例
- 《人月神话》,没有银弹
- 详细教程!手把手教你制作个人微信红包封面
- shell之正则表达式及grep命令
热门文章
- ITOF vs DTOF
- 装饰大楼,备用钥匙,IOIOI卡片占卜总结
- 怎么才能戒烟最好的方法,这样戒烟最有效
- Node.js系列-----数据库MySQL
- 计算机操作系统基础知识总结
- 从零开始-Exchange和Skype for Business 部署-Exchange 安装
- python爬取合工大、安大、中科大就业信息网宣讲会信息——requests_htmlmongoDB
- 开发者测评:阿里云 ACR 与其他的镜像仓库到底有什么不同?
- 车载注册蓝牙服务器,蓝牙配对码配备方法、系统、终端、服务器及车载设备专利_专利查询 - 天眼查...
- 使用腾讯云服务器和个人域名外加WordPress和WDCP建立个人博客的过程