Shakira.jpg
Я пытаюсь сжать вышеупомянутое изображение, но вывод, который я получаю, является неправильным изображением. Я думаю, что я делаю шаги PCA правильно, но что-то не так на последнем этапе.
Шакира сжата
import pylab as plt
import numpy as np
img = plt.imread("shakira.jpg")
print(img.shape)
plt.axis('off')
plt.imshow(img)
plt.show()
img_reshaped = np.reshape(img, (930, 1860))
print(img_reshaped.shape)
from sklearn.decomposition import PCA
pca = PCA(.95)
pca.fit(img_reshaped)
img_transformed = pca.transform(img_reshaped)
print(img_transformed.shape)
img_inverse = pca.inverse_transform(img_transformed)
print(img_inverse.shape)
plt.imshow(img_inverse)
plt.show()
img_inverse_reshaped = np.reshape(img_inverse, (930,620,3))
print(img_inverse.shape)
plt.axis('off')
plt.imshow(img_inverse_reshaped)
plt.show()
Вы перепутали форму.
замените img_reshaped = np.reshape(img, (930, 1860))
с img_reshaped = np.reshape(img, (img.shape[0] * img.shape[1], img.shape[2]))
замените img_inverse_reshaped = np.reshape(img_inverse, (930,620,3))
с img_inverse_reshaped = np.reshape(img_inverse, img.shape)
Как только я исправил это, изображение стало выглядеть более или менее разумным.
Затем вам нужно заменить pca = PCA(.95)
на pca = PCA(n_components=3)
, и изображение будет выглядеть довольно красиво =)