Bootstrap

奇异值分解与图像压缩(含python代码)

前言

在阅读本文章之前参考
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
;