Квантование цвета с использованием K-Means в Scikit Learn
В этой статье мы поиграем со значением интенсивности пикселей, используя алгоритмы машинного обучения. Цель состоит в том, чтобы выполнить пример квантования цвета с использованием KMeans в библиотеке Scikit Learn.
Квантование цвета
Квантование цвета — это метод, при котором цветовые пространства в изображении сводятся к количеству различных цветов. Даже после квантования цвета новое изображение визуально похоже на исходное изображение.
Квантование цвета в основном используется для отображения или визуализации изображений с большим количеством пробелов на тех устройствах, которые могут отображать только ограниченное количество цветов, в основном из-за ограничений памяти. Этот метод позволяет алгоритмам сжатия отображать изображение на тех устройствах, где дисплей ограничен числом оттенков.
K-Means — это алгоритм кластеризации обучения без учителя, который имеет дело с кластеризацией на основе плотности. В этой статье мы будем использовать алгоритм K-средних для выполнения квантования цвета в изображении.
Квантование цвета с использованием K-Means в Scikit Learn
Во-первых, мы импортируем необходимые модули:
- NumPy
- OpenCV
- Матплотлиб
- Scitkit-узнать
Python3
import numpy as np import cv2 import matplotlib.pyplot as plt from sklearn.cluster import KMeans |
Если приведенный выше код выдает ImportError, используйте команду pip install для установки пакетов.
Затем нам нужно прочитать изображение, для которого мы будем использовать OpenCV.
Python3
original_image = cv2.imread( "lena.jpg" ) plt.imshow(cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB)) plt.axis( "off" ) |
Выход:
После этого нам нужно изменить форму изображения, т.е. сгладить изображение, чтобы передать модель.
Python3
reshaped_image = np.reshape( original_image, ((original_image.shape[ 0 ] * original_image.shape[ 1 ]), 3 )) |
KMeans — это алгоритм кластеризации, значение k следует процедуре. Процедура состоит в применении алгоритма KMeans с числом кластеров, равным количеству цветов, для которых требуется выполнить операцию квантования.
Python3
model = KMeans(n_clusters = 64 ) target = model.fit_predict(reshaped_image) color_space = model.cluster_centers_ |
Так как полученное color_space имеет число с плавающей запятой, нам нужно преобразовать его в целое число без знака, чтобы визуализировать изображение. Мы возвращаем исходную форму изображения, т. е. отменяем сглаживание.
Python3
output_image = np.reshape(color_space.astype( "uint8" )[target], (original_image.shape[ 0 ], original_image.shape[ 1 ], 3 )) con_image = cv2.cvtColor(output_image, cv2.COLOR_BGR2RGB) plt.imshow(con_image) plt.axis( "off" ) |
Выход:
Вывод
Изображения выглядят одинаково, но выходное изображение намного сжимаемее по сравнению с входным изображением. Мы можем использовать разные значения n_clusters для получения лучших результатов.