0
点赞
收藏
分享

微信扫一扫

python 图片SVD(奇异值分解)压缩测试

英乐 2022-01-31 阅读 104

python图片SVD(奇异值分解)压缩测试

对图片进行压缩,使用SVD分解,取前%K 的权重值,对比压缩前和压缩后的模型精度。

# -*- coding: utf-8 -*-


from numpy import linalg as la
import matplotlib.pyplot as plt
from sklearn import datasets
from skimage import io
import numpy as np
def getImgAsMat(index):
    ds = datasets.fetch_olivetti_faces()
    return np.mat(ds.images[index])

def getImgAsMatFromFile(filename):
    img = io.imread(filename, as_gray=True)
    print(np.mat(img))
    return np.mat(img) 

def plotImg(imgMat):
    plt.imshow(imgMat, cmap=plt.cm.gray)
    plt.show()

def recoverBySVD(imgMat, k):
    # singular value decomposition
    print(imgMat)
    U, s, V = la.svd(imgMat)
    print('length = ',len(s))
    # choose top k important singular values (or eigens)
    Uk = U[:, 0:k]
    Sk = np.diag(s[0:k])
    Vk = V[0:k, :]
    # recover the image
    imgMat_new = Uk * Sk * Vk
    return imgMat_new


# -------------------- main --------------------- #
A = getImgAsMatFromFile('C:/Users/LJ/Desktop/AI_Picture.png')
plotImg(A)
A_new = recoverBySVD(A, 100)
plotImg(A_new)

测试图片

举报

相关推荐

0 条评论