Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Стиснення зображень | Аналіз результатів
Метод Головних Компонент

book
Стиснення зображень

Переходимо до останнього завдання, яке може вирішити PCA - це стиснення зображення. Рішення даної задачі відбувається за тим же алгоритмом, що і зазвичай. Ми вже знаємо, як створювати моделі PCA та завантажувати в них дані. Тому зараз ми заглибимося в інші деталі. Стиснення чорно-білих і кольорових зображень здійснюється по-різному. Стиснення чорно-білих зображень нічим не відрізняється від стиснення звичайних. У той час як для кольорових зображень потрібно: розділити зображення на 3 кольорові канали RGB, зменшити розмірність кожного каналу за допомогою PCA, а потім об’єднати канали в повноцінне кольорове зображення. Щоб прочитати зображення та розділити їх на канали RGB, нам потрібні бібліотеки matplotlib і cv2:

python
import matplotlib.pyplot as plt
import cv2

img = plt.imread('test.jpg')
b, g, r = cv2.split(RGB_img)

Стандартизуємо дані. Ми можемо реалізувати це простіше, не використовуючи бібліотеку, а лише за допомогою поділу:

python
r_scaled = r / 255
g_scaled = g / 255
b_scaled = b / 255

Тепер створимо 3 моделі PCA:

python
from sklearn.decomposition import PCA

pca_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)

Тепер ми можемо об'єднати отримані дані в одне зображення:

python
pca_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 компонентів.

Рішення

# Importing libraries
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from urllib.request import urlopen
import numpy as np
import cv2

# Reading image
url = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/7b22c447-77ad-48ae-a2d2-4e6714f7a4a6/photo.png'
resp = urlopen(url)
image = np.asarray(bytearray(resp.read()), dtype = 'uint8')
img = cv2.imdecode(image, cv2.IMREAD_COLOR)

# Data standardization
image_sum = img.sum(axis = 2)
img_scaled = image_sum / image_sum.max()

# Create PCA model
pca_model = PCA(n_components = 40)
# Fit data into the model
img_transformed = pca_model.fit_transform(img_scaled)
# Inverse data
img_compressed = pca_model.inverse_transform(img_transformed)
plt.imshow(img_compressed)
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 5
# Importing libraries
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from urllib.request import urlopen
import numpy as np
import cv2

# Reading image
url = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/7b22c447-77ad-48ae-a2d2-4e6714f7a4a6/photo.png'
resp = urlopen(url)
image = np.asarray(bytearray(resp.read()), dtype='uint8')
img = cv2.imdecode(image, cv2.IMREAD_COLOR)

# Data standardization
image_sum = img.sum(axis = 2)
img_scaled = image_sum / image_sum.max()

# Create PCA model
pca_model = PCA(___)
# Fit data into the model
img_transformed = ___.___(___)
# Inverse data
img_compressed = pca_model.___(___)
plt.imshow(img_compressed)
toggle bottom row
some-alt