Стиснення зображень
Переходимо до останнього завдання, яке може вирішити PCA - це стиснення зображення.
Рішення даної задачі відбувається за тим же алгоритмом, що і зазвичай. Ми вже знаємо, як створювати моделі PCA та завантажувати в них дані. Тому зараз ми заглибимося в інші деталі.
Стиснення чорно-білих і кольорових зображень здійснюється по-різному. Стиснення чорно-білих зображень нічим не відрізняється від стиснення звичайних. У той час як для кольорових зображень потрібно: розділити зображення на 3 кольорові канали RGB, зменшити розмірність кожного каналу за допомогою PCA, а потім об’єднати канали в повноцінне кольорове зображення.
Щоб прочитати зображення та розділити їх на канали RGB, нам потрібні бібліотеки matplotlib
і cv2
:
pythonimport matplotlib.pyplot as pltimport cv2img = plt.imread('test.jpg')b, g, r = cv2.split(RGB_img)
Стандартизуємо дані. Ми можемо реалізувати це простіше, не використовуючи бібліотеку, а лише за допомогою поділу:
pythonr_scaled = r / 255g_scaled = g / 255b_scaled = b / 255
Тепер створимо 3 моделі PCA:
pythonfrom sklearn.decomposition import PCApca_r = PCA(n_components=50)pca_r_trans = pca_r.fit_transform(r_scaled)pca_g = PCA(n_components=50)pca_g_trans = pca_g.fit_transform(g_scaled)pca_b = PCA(n_components=50)pca_b_trans = pca_b.fit_transform(b_scaled)
Тепер ми можемо об'єднати отримані дані в одне зображення:
pythonpca_r_org = pca_r.inverse_transform(pca_r_trans)pca_g_org = pca_g.inverse_transform(pca_g_trans)pca_b_org = pca_b.inverse_transform(pca_b_trans)img_compressed = cv2.merge((pca_b_org, pca_g_org, pca_r_org))
Swipe to start coding
Зменшити розмірність чорно-білого зображення до 40 компонентів.
Рішення
Дякуємо за ваш відгук!