图像处理算例:用Python的奇异值分解SVD实现图像压缩

import matplotlib.image as mpimg       # mpimg 用于读取图片mapping
import numpy as np 
import matplotlib.pyplot as plt

img = mpimg.imread("D:/swift.jpg")
img = img[:, :, :]/255 
print("原始图像尺寸:", img.shape)

# 灰度化:灰度化是一个加权平均的过程!
a1, a2, a3 = 0.2989, 0.5870, 0.1140
img_gray = img[:,:,0]*a1+img[:,:,1]*a2+img[:,:,2]*a3 
print("灰度化后尺寸:", img_gray.shape)

# 奇异值分解,用于压缩图像
M, Q, N = np.linalg.svd(img_gray, full_matrices=True)
Q=np.diag(Q) #对角化处理
re_img=M[:, 0:50] @ Q[0:50, 0:50] @ N[0:50, :]  # 恢复图像
plt.imshow(np.real(re_img), cmap=plt.get_cmap("gray"))
plt.show()

原始图像:
图像处理算例:用Python的奇异值分解SVD实现图像压缩_第1张图片

压缩后图像:
图像处理算例:用Python的奇异值分解SVD实现图像压缩_第2张图片

你可能感兴趣的:(Python,机器学习,python,图像识别)