Анализ сочетания цветов с цепной кластеризацией

Для недавнего проекта мне нужно было найти метод, чтобы определить, какие цветовые палитры присутствуют в большом наборе данных произведений искусства, в идеале без моего участия! Эта задача связана с неконтролируемой техникой кластеризации и может быть разделена на два этапа:

  1. Извлечение часто встречающихся цветов.
  2. Извлечение общих сочетаний этих цветов.

И то, и другое можно выполнить с помощью кластеризации K-средних, которая просто группирует точки по расстоянию между точками и центрами кластеров.

1. Извлечение часто используемых цветов.

Чтобы эффективно использовать K-средние для извлечения цветовых комбинаций, важно, чтобы евклидово расстояние между точками цветовых данных можно было интерпретировать как воспринимаемую разницу в цветах. Простое использование красно-зелено-синих (RGB) каналов изображений в качестве трехмерного вектора довольно плохо справляется с этой задачей, поскольку расстояние в пространстве RGB плохо преобразуется в воспринимаемую разницу.

Чтобы преодолеть это, изображение преобразуется в цветовое пространство YCbCr, при этом каналы Y, Cb, Cr формируют трехмерные векторы для представления каждого цвета. Расстояния в этом цветовом пространстве гораздо лучше отражают различия в воспринимаемом цвете.

После преобразования загруженного набора данных в формат YCbCr и извлечения большой случайной выборки пикселей K-средние с n кластерами извлекут n часто используемых цветов в качестве центров кластеров. Поскольку эти центры отмечают среднее значение цветовых кластеров, получаемые цвета могут быть довольно приглушенными, если используется недостаточное количество кластеров. Опытным путем я обнаружил, что от 20 до 40 кластеров дают хорошие результаты.

2. Извлечение общих сочетаний этих цветов.

Как только общие цвета найдены, мы хотим выяснить, в каких сочетаниях и пропорциях эти цвета обычно используются.

Это можно сделать, взяв фиксированную выборку пикселей из каждого изображения и увидев, к какому цветовому кластеру принадлежит каждый пиксель. Эти группы могут быть агрегированы как подсчет каждого цвета по изображению и сохранены в виде n-мерного вектора, который представляет использование цвета в каждом изображении. Использование счетчиков таким образом фиксирует пропорции, а также присутствие каждого цвета. Поскольку все эти векторы изображений имеют одинаковую сумму, эти представления изображений лежат на гиперплоскости, которая пересекает все оси с размером образца пикселя.

Затем к этим векторам счета можно применить K-средние для извлечения общих комбинаций и пропорций цветов, найденных ранее, с центрами m-кластеров, дающими m различных цветовых палитр.

Эту систему можно протестировать, предоставив набор данных, который представляет изображения из двух очень разных распределений цветовой палитры — ярких радуг и землистых десертов. Установив количество цветов на консервативное значение 15 и количество цветовых палитр на два, мы можем увидеть, как различные палитры извлекаются за два шага.