特征值分解和奇异值分解
这篇文章详细介绍了奇异值分解和特征值分解的内容: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()
作者:你的雷哥
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。