SVD 图片压缩

作者: zidea | 来源:发表于2020-02-03 22:20 被阅读0次

SVD 分解

例如推荐系统我们将每一个商品建立一个维度,那么数据样本维度就会上万,这样当前计算能力还是吃不消的。这样就需要我们对数进行降维,降维技术要尽可能保留数据结构,在降维后因为数据结构被保留下来,获得的结果是原始数据空间的可靠近似。
我们先来 PCA 是如何实现降维
假设我们数据集(n \times m) 也就是有 n 个样本,每一个样本有 m 特征(也就是有 m 个维度),PCA 就是将这个(n \times m)矩阵投射到小子空间(n \times d) 上,

import numpy as np
import cv2
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open('images/naruto.png')
imggray = img.convert('LA')
plt.figure(figsize=(9, 6))
plt.imshow(img);
output_1_0.png
imgmat = np.array(list(imggray.getdata(band=0)), float)
imgmat.shape = (imggray.size[1], imggray.size[0])
imgmat = np.matrix(imgmat)
plt.figure(figsize=(9,6))
plt.imshow(imgmat, cmap='gray');
output_2_0.png
U, sigma, V = np.linalg.svd(imgmat)
print(sigma.shape)
reconstimg = np.matrix(U[:, :1]) * np.diag(sigma[:1]) * np.matrix(V[:1, :])
plt.imshow(reconstimg, cmap='gray');
(180,)
output_3_1.png
a = np.array([1,2,3])
a_diag = np.diag(a)
print(a_diag)
[[1 0 0]
 [0 2 0]
 [0 0 3]]

for i in range(2, 4):
    reconstimg = np.matrix(U[:, :i]) * np.diag(sigma[:i]) * np.matrix(V[:i, :])
    plt.imshow(reconstimg, cmap='gray')
    title = "n = %s" % i
    plt.title(title)
#     print(i)
#     plt.subplot(2,2,(i-1))
    plt.show()
output_5_0.png output_5_1.png
for i in range(10,12 ):
    reconstimg = np.matrix(U[:, :i]) * np.diag(sigma[:i]) * np.matrix(V[:i, :])
    print(U.shape)
    print(sigma.shape)
    print(V.shape)
    plt.imshow(reconstimg, cmap='gray')
    title = "n = %s" % i
    plt.title(title)
#     print(i)
#     plt.subplot(2,2,(i-1))
    plt.show()
(180, 180)
(180,)
(180, 180)
output_6_1.png

[图片上传失败...(image-fe3053-1580739613951)]

(180, 180)
(180,)
(180, 180)
output_6_3.png
img = Image.open('images/naruto.png')
img = img.resize((28, 28))
plt.imshow(img)
print(img)
<PIL.Image.Image image mode=RGBA size=28x28 at 0x1271D9490>
output_7_1.png
img_nparray = np.array(list(img.getdata(band=0)), float)
print(img_nparray.shape)
(784,)
mu, sigma = 0, 1
s = np.random.normal(mu, sigma, 784)
# print(s)
mean_s = np.mean(s)
print(mean_s)
var_s = np.var(s)
max_s = np.max(s)
min_s = np.min(s)
print(var_s)
print(max_s)
print(min_s)

0.06221887461516067
1.0457062296216892
3.2441223180124705
-3.5929682195036348
from pylab import imshow, show, get_cmap
Z = np.random.random((28,28))   # Test data
plt.imshow(Z, cmap=get_cmap("Spectral"), interpolation='nearest')
plt.show()
output_10_0.png

相关文章

  • SVD 图片压缩

    SVD 分解 例如推荐系统我们将每一个商品建立一个维度,那么数据样本维度就会上万,这样当前计算能力还是吃不消的。这...

  • 《机器学习实战》笔记(十四):Ch14 - 利用SVD简化数据

    第14章 利用SVD简化数据(代码) SVD的应用图像压缩噪声滤波模式识别生物,物理,经济方面的一些统计模型的处理...

  • 图片压缩组件

    图片压缩 图片压缩

  • iOS 图片压缩方法

    两种图片压缩方法 两种图片压缩方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量 通过...

  • iOS 图片压缩限制大小最优解

    iOS 图片压缩限制大小最优解 图片的两种压缩方法 1.1 压缩图片质量 1.2 压缩图片尺寸 压缩图片使图片文件...

  • iOS 图片压缩限制大小最优解

    概要: 图片的两种压缩方法1.1 压缩图片质量1.2 压缩图片尺寸压缩图片使图片文件小于指定大小2.1 压缩图片质...

  • iOS 图片压缩限制大小

    一、两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量...

  • iOS 图片压缩方法

    两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量 N...

  • 图片压缩方法

    两种图片压缩方法 压缩图片质量(quality)、压缩图片尺寸(size) 压缩图片质量 或 前者可以控制压缩比例...

  • 图片懒加载之高斯模糊

    压缩原始图片 将原始图片压缩至1~2kb甚至更小的图片nature.jpg 压缩 java 图片压缩natur...

网友评论

    本文标题:SVD 图片压缩

    本文链接:https://www.haomeiwen.com/subject/vdtlxhtx.html