图像处理算例:用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()

原始图像:
在这里插入图片描述

压缩后图像:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39464400/article/details/105986165
今日推荐