前言
在阅读本文章之前参考
https://blog.csdn.net/discoverer100/article/details/89356513
https://blog.csdn.net/rainpasttime/article/details/79831533
SVD图像压缩原理
singular value decomposition是线性代数中一种重要的矩阵分解
a=[[1,2,3],[3,4,5]]
print(len(a))
函数:np.linalg.svd(a,full_matrices=1,compute_uv=1)。
参数:
a是一个形如(M,N)矩阵
full_matrices的取值是为0或者1,默认值为1,这时u的大小为(M,M),v的大小为(N,N) 。否则u的大小为(M,K),v的大小为(K,N) ,K=min(M,N)。
compute_uv的取值是为0或者1,默认值为1,表示计算u,s,v。为0的时候只计算s。
A = usv
其中s是对矩阵a的奇异值分解。s除了对角元素不为0,其他元素都为0,并且对角元素从大到小排列。s中有n个奇异值,一般排在后面的比较接近0,所以仅保留比较大的r个奇异值
python代码实现
from PIL import Image
import numpy as np
def rebuild_img(u,sigma,v,p):
print(p)
m=len(u)
n=len(v)
a=np.zeros