Проблема заключается в размере s
, если вы напечатаете размеры U
, s
и V
, я получу:
print(np.shape(U))
print(np.shape(s))
print(np.shape(V))
(819, 819)
(819,)
(1024, 1024)
Итак, U
и V
квадратная матрица, s
массив. Вы должны создать матрицу с теми же размерами, что и ваше изображение (819 x 1024), с s
по главной диагонали следующим образом:
n = 10
S = np.zeros(np.shape(img))
for i in range(0, n):
S[i,i] = s[i]
print(np.shape(S))
output:
(819, 1024)
Затем вы можете продолжить разработку. Для сравнения проверьте этот код:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img = Image.open('bee.jpg')
img = np.mean(img, 2)
U,s,V = np.linalg.svd(img)
n = 10
S = np.zeros(np.shape(img))
for i in range(0, n):
S[i,i] = s[i]
recon_img = U @ S @ V
fig, ax = plt.subplots(1, 2)
ax[0].imshow(img)
ax[0].axis('off')
ax[0].set_title('Original')
ax[1].imshow(recon_img)
ax[1].axis('off')
ax[1].set_title(f'Reconstructed n = {n}')
plt.show()
, который дает мне это:
введите описание изображения здесь