0
点赞
收藏
分享

微信扫一扫

特征值分解和奇异值分解

这篇文章详细介绍了奇异值分解和特征值分解的内容:​​​​

下面的图也能看出图片能压缩的原理在哪,主要是三个矩阵的大小是如何变小的

特征值分解和奇异值分解_奇异值分解

 

 

下面上压缩图像的代码:

1 import numpy as np
2 from scipy import ndimage
3 import matplotlib.pyplot as plt
4
5
6 def pic_compress(k, pic_array):
7 u, sigma, vt = np.linalg.svd(pic_array)
8 sig = np.eye(k) * sigma[: k]
9 new_pic = np.dot(np.dot(u[:, :k], sig), vt[:k, :]) # 还原图像
10 size = u.shape[0] * k + sig.shape[0] * sig.shape[1] + k * vt.shape[1] # 压缩后大小
11 return new_pic, size
12
13
14 filename = "./Data/pic1.jpg"
15 ori_img = np.array(ndimage.imread(filename, flatten=True))
16 new_img, size = pic_compress(30, ori_img)
17 print("original size:" + str(ori_img.shape[0] * ori_img.shape[1]))
18 print("compress size:" + str(size))
19 fig, ax = plt.subplots(1, 2)
20 ax[0].imshow(ori_img)
21 ax[0].set_title("before compress")
22 ax[1].imshow(new_img)
23 ax[1].set_title("after compress")
24 plt.show()

 特征值分解和奇异值分解_奇异值分解_02

 

作者:你的雷哥

本文版权归作者所有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。

举报

相关推荐

0 条评论