Найти тему
Max Shipitsin dev.

Как научить компьютер видеть цвета - алгоритм KMeans

Алгоритм KMeans

Алгоритм кластеризации KMeans был открыт еще в 1950 году математиком Гуго Штенгаузом. У этого алгоритма есть множество применений, например:

Для начала немного терминов, которые помогут вам разобраться в работе этого алгоритма:

  • кластер - некое множество, состоящее из точек и одного центроида
  • центроид - абстрактный объект в кластере, к которому прикрепляются все соседние незакрепленные точки
  • значение потери - сумма всех евклидовых расстояний точек до назначенного ей центроида
Пример работы алгоритма KMeans
Пример работы алгоритма KMeans

Этот алгоритм гениален в своей простоте - его основная цель это уменьшить значение потери перемещая центроиды и создавая новые кластеры. Его шаги таковы:

  1. Случайным образом создать некоторое количество центроидов
  2. У каждой точки найти ближайший цетроид при помощи евклидового расстояния и прикрепить эту точку к нему
  3. Переместить центроиды у образовавшихся кластеров в новое место - среднее всех точек определенного кластера
  4. Вычислить новое значение потерь
  5. Повторять шаги 2-4 пока значение потерь не перестанет заметно меняться
  • для лучшего результата можно несколько раз инициализировать этот алгоритм с разным начальным положением центроидов (п.1), и выбрать из получившихся решений наиболее удачное

COLORSCHEME

На основе алгоритма KMeans я создал свой полностью автоматизированный паблик ВК, пример его работы:

Работает моя программа так:

  1. на вход подается изображение
  2. это изображение постеризуется (процесс уменьшения палитры цветов изображения) P.S. постеризованное изображение можно увидеть напротив диаграммы цветов
  3. цвета изображения подаются в алгоритм KMeans
  4. полученные кластеры из п.3 - и есть наиболее важные цвета на изображении
  5. некоторые процедуры по созданию графического интерфейса

В будущем планируется добавить еще больше информации о цветах изображения, придумать как сделать тегирование, и другое...