我正在尝试重建我之前使用 SVD 分解的图像。图片是这样的:
我用这段代码成功分解了图像:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img = Image.open('steve.jpg')
img = np.mean(img, 2)
U,s,V = np.linalg.svd(img)
s图像奇异值的数组。我取的奇异值越多,重建图像与原始图像就越相似。
例如,如果我取 20 个奇异值:
n = 20
S = np.zeros(np.shape(img))
for i in range(0, n):
S[i, i] = s[i]
recon_img = U@S@V
plt.imshow(recon_img)
plt.axis('off')
plt.show()
我想固定奇异值的最小数量以获得良好的pretty
结果:与原始图像相似的图像。此外,我想看看当我采用更多的奇异值时结果会发生多少变化。我尝试了一个动画但没有成功:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
img = Image.open('steve.jpg')
img = np.mean(img, 2)
U,s,V = np.linalg.svd(img)
fig = plt.figure()
def update(i):
S = np.zeros(np.shape(img))
n = 20
for i in range(0, n):
S[i, i] = s[i]
recon_img = U@S@V
plt.imshow(recon_img)
plt.axis('off')
ani = FuncAnimation(fig = fig, func = update, frames = 20, interval = 10)
plt.show()
慕码人2483693
相关分类