Обратное генерирование изображения RGB PCA не работает

1

Shakira.jpg

Изображение 174551

Я пытаюсь сжать вышеупомянутое изображение, но вывод, который я получаю, является неправильным изображением. Я думаю, что я делаю шаги PCA правильно, но что-то не так на последнем этапе.

Шакира сжата

Изображение 174551

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()
Теги:
pca

1 ответ

0

Вы перепутали форму.

  1. замените img_reshaped = np.reshape(img, (930, 1860)) с img_reshaped = np.reshape(img, (img.shape[0] * img.shape[1], img.shape[2]))

  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), и изображение будет выглядеть довольно красиво =)

  • 0
    Благодарю. Я обнаружил ошибку в моем коде, а также. Если я разделю img_inverse_reshaped на 255, проблема будет исправлена. Да, n_components = 3 выглядит красиво :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню