本样例比较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做 《贝加尔湖畔》图片特征抽取压缩的比较相关推荐

  1. kmeans学习笔记轮廓系数以及使用KMeans做矢量量化

    from sklearn.cluster import KMeans cluster=KMeans(n_clusters=3,random_state=0).fit(X) y_pred=cluster ...

  2. glide 显示图片慢_做个看图片的App玩玩_第一篇

    目标 做个看图片的App,效果图如下: 本期目标 功能: 1.下载一组图片,支持上下滑动翻页 涉及技术知识点: 1. retrofit+okHttp:访问网络接口获取数据 2. coroutines: ...

  3. java获取网络图片_做个看图片的App玩玩_第一篇

    目标 做个看图片的App,效果图如下: 本期目标 功能: 1.下载一组图片,支持上下滑动翻页 涉及技术知识点: 1. retrofit+okHttp:访问网络接口获取数据 2. coroutines: ...

  4. 淘宝店铺装修之一怎样在自定义内容区做个商品图片轮播展示

    <wbr><span style="font-size:24px"><strong>店铺装修之一怎样在自定义内容区做个商品图片轮播展示</ ...

  5. 百度图片推广怎么做(百度图片推广操作方法)

    百度图片推行怎样做?微赚云今天赋享百度图片推行操作办法.首先,我们将要讨论如何将图片上传到百度的问题,只需是针对一个需求较大的行业,那么不论我们想要什么样的引流形式,毕竟在众多渠道中,我们我们也不能绝 ...

  6. php怎么banner指定超链接,巧用图片链接模块做banner广告图片,后台可更换图片

    banner广告图片客户要自己更换怎么办,我们可以巧用图片链接模块做banner广告图片,让客户自己来更换banner广告图片.之前我 做过一个简单实现广告图片后台更换教程,是用产品模块来实现的,拖拖 ...

  7. 微信小程序做一个圆形图片旋转可以控制开始和结束-音乐播放器的图片旋转功能

    微信小程序做一个圆形图片旋转可以控制开始和结束 1.在 WXML 文件中添加一个 标签,并设置图片的 src 和样式,并为其绑定一个 animation 用来控制旋转动画. <image src ...

  8. 图片转svg标注_两个免费网站轻松搞定图片文件压缩转化!

    关注· 点击蓝字,关注我吧 图片压缩 文件转格式 两个免费网站轻松搞定 免费处理图片文字网站 前几天做公号的时候,上传图片遇到了图片过大无法上传的问题.这两个网站可以看做是兄弟俩,今天推荐给大家,省去 ...

  9. html 图片剪裁压缩,HTML5 canvas实现图片拉伸、压缩与裁剪

    前言: 我们在网页中经常会用到图片展示,通常情况下会给一个固定的宽高来显示这个图片,然而从服务器端上传的图片大小是不确定的,如果直接按默认填充这个框有时候就会特别丑orz.作为一个完(wai)美(ma ...

最新文章

  1. 美团架构师开源5万字的《Java面试手册》PDF免费下载!
  2. java itemcf_大规模电商推荐数据分析-基于ItemCF的召回
  3. 开源大数据引擎:Greenplum 数据库架构分析
  4. windows 10 扩大C盘空间
  5. python调用zabbixapi接口_python3 + zabbix api 的使用
  6. 03-类与对象——课后动手动脑
  7. CGLI 报错 :VerifyError: class net.sf.cglib.core.DebuggingClassWriter overrides final method visit
  8. sql azure 语法_深入了解Azure Data Studio:扩展和Azure SQL DB开发
  9. java excel api 下载文件_Java-Excel Java操作Excel POI(Jakarta POI API) - 下载 - 搜珍网
  10. MusicPlayer音乐播放器Android
  11. 疯狂Java讲义(十一)---- 初始化块
  12. 全国计算机二级个考生自定义,全国计算机二级考试《C++》强化试题及答案
  13. java系统课程设计报告_201621123063《JAVA课程设计报告》
  14. gridview的sort_Gridview自动排序功能的实现
  15. 海康威视rtsp转rtmp(java稳定版)
  16. linux drwxr-xr-x 什么意思
  17. 经典r-k法 matlab,解微分方程欧拉法,R-K法及其MATLAB实例
  18. 《人月神话》,没有银弹
  19. 详细教程!手把手教你制作个人微信红包封面
  20. shell之正则表达式及grep命令

热门文章

  1. ITOF vs DTOF
  2. 装饰大楼,备用钥匙,IOIOI卡片占卜总结
  3. 怎么才能戒烟最好的方法,这样戒烟最有效
  4. Node.js系列-----数据库MySQL
  5. 计算机操作系统基础知识总结
  6. 从零开始-Exchange和Skype for Business 部署-Exchange 安装
  7. python爬取合工大、安大、中科大就业信息网宣讲会信息——requests_htmlmongoDB
  8. 开发者测评:阿里云 ACR 与其他的镜像仓库到底有什么不同?
  9. 车载注册蓝牙服务器,蓝牙配对码配备方法、系统、终端、服务器及车载设备专利_专利查询 - 天眼查...
  10. 使用腾讯云服务器和个人域名外加WordPress和WDCP建立个人博客的过程