目录
一,比较同一张图片不同位深度文件
1、计算比较各个图像大小
1色位图
计算大小为512×512×1/8/1024=23KB=32,768字节
文件大小为32kb(32,830字节)
16色位图
计算大小为512×512×4/8/1024=128KB=131,072
实际大小:
24色位图
计算大小:512×512×24/8/1024=768KB=786,432字节
实际大小:
2、将图片转换为不同格式比较
各个格式压缩比不同所以文件大小也不同
计算可得:
BMP压缩比:-245%
JPG压缩包比57%
GIF压缩比53%
二、用奇异只分解对图片进行降维处理
运行代码:
import numpy as np
import os
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib as mpl
from pprint import pprint
def restore1(sigma, u, v, K): # 奇异值、左特征向量、右特征向量
m = len(u)
n = len(v[0])
a = np.zeros((m, n))
for k in range(K):
uk = u[:, k].reshape(m, 1)
vk = v[k].reshape(1, n)
a += sigma[k] * np.dot(uk, vk)
a[a < 0] = 0
a[a > 255] = 255
# a = a.clip(0, 255)
return np.rint(a).astype('uint8')
def restore2(sigma, u, v, K): # 奇异值、左特征向量、右特征向量
m = len(u)
n = len(v[0])
a = np.zeros((m, n))
for k in range(K+1):
for i in range(m):
a[i] += sigma[k] * u[i][k] * v[k]
a[a < 0] = 0
a[a > 255] = 255
return np.rint(a).astype('uint8')
if __name__ == "__main__":
A = Image.open("F:\\桌面\\嵌入式系统\\图像\\新建文件夹\\lena.jpg", 'r')
print(A)
output_path = r'F:\\桌面\\嵌入式系统\\图像\\新建文件夹\\SVD_Output'
if not os.path.exists(output_path):
os.mkdir(output_path)
a = np.array(A)
print(a.shape)
K = 50
u_r, sigma_r, v_r = np.linalg.svd(a[:, :, 0])
u_g, sigma_g, v_g = np.linalg.svd(a[:, :, 1])
u_b, sigma_b, v_b = np.linalg.svd(a[:, :, 2])
plt.figure(figsize=(11, 9), facecolor='w')
mpl.rcParams['font.sans-serif'] = ['simHei']
mpl.rcParams['axes.unicode_minus'] = False
for k in range(1, K+1):
print(k)
R = restore1(sigma_r, u_r, v_r, k)
G