特征值分解和奇异值分解

这篇文章详细介绍了奇异值分解和特征值分解的内容https://www.cnblogs.com/endlesscoding/p/10033527.html

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

 

 

下面上压缩图像的代码:

 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()

 

 

posted @ 2020-08-13 00:01  你的雷哥  阅读(353)  评论(0编辑  收藏  举报