算法简介

算法实现

我只是简单处理了一下图像的灰度值,如果要处理RGB值的话,就需要分别进行SVD分解,最后再合起来即可。

 import numpy as np
from PIL import Image
import matplotlib.pyplot as plt def picture_processing(file): # 图像处理,返回灰度值
im = Image.open(file)
im = im.convert('L') # 转换为灰度图
#im.save('original_' + file) # 保存图片
w, h = im.size
data = np.zeros((h, w))
for i in range(w): # 得到灰度值矩阵
for j in range(h):
data[j][i] = im.getpixel((i, j))
return data def picture_restore(U, Sigma, VT, k): # 图像恢复,k为选取的奇异值个数
sig = np.eye(k) * Sigma[:k]
new_pic = U[:, :k].dot(sig).dot(VT[:k, :]) # 重构图片
new_size = U.shape[0] * k + sig.size + k * VT.shape[1] # 计算SVD图片所需大小
#new_im = Image.fromarray(new_pic.astype(np.uint8)) # 保存图片
#new_im.save('pic_' + str(k) + '.jpeg')
return new_pic, new_size if __name__ == '__main__':
file = 'pic.jpeg'
data = picture_processing(file)
U, Sigma, VT = np.linalg.svd(data) pic_list, size_list = [], [] #图片列表,图片大小列表
k_list = [1, 10, 50, 100, 300]
for k in k_list:
new_pic, new_size = picture_restore(U, Sigma, VT, k)
pic_list.append(new_pic)
size_list.append(new_size) fig, ax = plt.subplots(2, 3) # 展示
ax[0][0].imshow(data)
ax[0][0].set_title('original picture——size:%d' % data.size)
for i in range(len(k_list)):
ax[int((i+1) / 3)][int((i+1) % 3)].imshow(pic_list[i])
ax[int((i+1) / 3)][int((i+1) % 3)].set_title('k = %d——size:%d' % (k_list[i], size_list[i]))
plt.show()

运行结果

基于SVD的图像压缩的更多相关文章

  1. 基于SVD的推荐算法

    首先每行减去每列的均值,然后svd分解,得到USV,然后US代表用户矩阵u,SV代表项目矩阵v,那么预测评分为用户均值加上uv. 降维方法扩展性好,不过降维导致信息损失,而且与数据及相关,高维情况下效 ...

  2. 利用奇异值分解(SVD)进行图像压缩-python实现

    首先要声明,图片的算法有很多,如JPEG算法,SVD对图片的压缩可能并不是最佳选择,这里主要说明SVD可以降维 相对于PAC(主成分分析),SVD(奇异值分解)对数据的列和行都进行了降维,左奇异矩阵可 ...

  3. 机器学习实战(Machine Learning in Action)学习笔记————10.奇异值分解(SVD)原理、基于协同过滤的推荐引擎、数据降维

    关键字:SVD.奇异值分解.降维.基于协同过滤的推荐引擎作者:米仓山下时间:2018-11-3机器学习实战(Machine Learning in Action,@author: Peter Harr ...

  4. 利用奇异值分解(SVD)简化数据

    特征值与特征向量 下面这部分内容摘自:强大的矩阵奇异值分解(SVD)及其应用 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法.两者有着很紧密的关系,在接下来会谈到,特征值分解和奇异值分解的 ...

  5. 【机器学习实战】第14章 利用SVD简化数据

    第14章 利用SVD简化数据 SVD 概述 奇异值分解(SVD, Singular Value Decomposition): 提取信息的一种方法,可以把 SVD 看成是从噪声数据中抽取相关特征.从生 ...

  6. 一步步教你轻松学奇异值分解SVD降维算法

    一步步教你轻松学奇异值分解SVD降维算法 (白宁超 2018年10月24日09:04:56 ) 摘要:奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分 ...

  7. SVD简化数据

    一,引言 我们知道,在实际生活中,采集到的数据大部分信息都是无用的噪声和冗余信息,那么,我们如何才能剔除掉这些噪声和无用的信息,只保留包含绝大部分重要信息的数据特征呢? 除了上次降到的PCA方法,本次 ...

  8. 机器学习实战 [Machine learning in action]

    内容简介 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存.谋发展的决定性手段,这使得这一过去为分析师和数学家所专属 ...

  9. 奇异值分解(SVD)和简单图像压缩

    SVD(Singular Value Decomposition,奇异值分解) 算法优缺点: 优点:简化数据,去除噪声,提高算法结果 缺点:数据的转换可能难于理解 适用数据类型:数值型数据 算法思想: ...

随机推荐

  1. linux pwd命令 显示当前所在路径

    pwd 显示当前所在路径 [root@MongoDB ~]# pwd /root

  2. vue 点击图片放大

    文档:https://www.npmjs.com/package/vue-directive-image-previewer [只能弹框查看 不能关闭和播放下一张,其他功能使用别的插件] 安装: np ...

  3. vue深度监控数据改变,缓存数据到本地

    项目效果图: var vm = new Vue({ el:'#app', data:{ students:[], }, watch:{ students:{ handler(){ localStora ...

  4. CentOS7安装vsftpd3.0.2、以及虚拟用户配置

    vsftpd(very secure ftp daemon)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,还具有很高的安全性.传输速度,以及支持虚拟用户验证. vsftpd ...

  5. HTML元素解释

    <html> 与 </html> 之间的文本描述网页 <body> 与 </body> 之间的文本是可见的页面内容 <head> 与 < ...

  6. python 图像处理,画一个正弦函数

    import numpy as np from PIL import Image import matplotlib.pyplot as plt import math size = 300 new_ ...

  7. RestTemplate的使用介绍汇总

    一 常用方法 https://blog.csdn.net/u012843361/article/details/79893638 二 关于client的选择和设置(通过设置ClientHttpRequ ...

  8. Delphi中PointerMath指令

    Type   Switch   Syntax   {$POINTERMATH ON} or {$POINTERMATH OFF}   Default   {$POINTERMATH OFF}   Sc ...

  9. 游戏引擎——cocos2d-x

    Cocos2d-x是一个开源的移动2D游戏框架,MIT许可证下发布的.这是一个C++ Cocos2d-iPhone项目的版本.Cocos2d-X发展的重点是围绕Cocos2d跨平台,Cocos2d-x ...

  10. 2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 20165335

    一.实验目标: 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,get ...