Анализ цветовых сочетаний кадра с помощью Matlab

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

В создании гармоничного сочетания цветов отлично помогает цветовой круг сочетаний. Его очень часто используют фотографы для подбора одежды для фотосессии, выборе удачного фотофона… В общем, для всего, что связано с цветом. Про то, как пользоваться кругом, можно почитать по ссылке.

Допустим, мы хотим подобрать одежду под цвет локации, где будет проходить фотосъемка. Делаем фото локации, приходим домой…И начинаем думать и подбирать. Иногда бывает сложно (или лень 🙂) находить цветовые сочетания самому. В такие моменты думаешь, что было бы здорово иметь при себе инструмент, в который ты загружаешь фотографию локации, а он тебе выдает преобладающие цвета в кадре, при чем сразу на цветовом круге сочетаний. И сразу же становится легче подобрать нужный цвет одежды.

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

Инструменты

Анализировать картинки будем с помощью программы, написанной на языке программирования Matlab. Придумывать «велосипед» — не наша задача, поэтому за основу нашего анализатора возьмем два готовых программных кода.

•Код по определению преобладающих цветов на HSV-диаграмме: https://www.mathworks.com/matlabcentral/fileexchange/49002-rgb-hsv-distribution [1]

•Код кластеризации цветов изображения по методу k-средних: https://www.mathworks.com/matlabcentral/fileexchange/75116-image-color-analysis-tool [2]

•Код для моделирования HSV-диаграммы: https://stackoverflow.com/questions/3339692/modeling-hsv-color-space-in-matlab [3]

Один код отвечает за определение основных цветов на картинке с помощью метода k-средних (о, великий и ужасный Machine Learning). С помощью второго кода мы будет рисовать цветовой круг сочетаний (один из разрезов HSV-диаграммы) и выделять на нем основные оттенки загружаемой фотографии.

Отдельно хочется выразить благодарность авторам за их работу.

Используем готовое решение [1]

В качестве тестовой картинки возьмем следующую фотографию:

Картинка для анализа

На этой картинке четко видны преобладающие цвета: черный, зеленый и красный.

Можно не мудрить и взять сразу готовую программу из [1]. Тогда достаточно будет воспользоваться функцией hsv_distribution.m. Для этого нужно просто передать в функцию путь к предварительно сжатой картинке im и так называемый коэффициент усиления amp (например, amp = 20).

Результат анализа картинки

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

Определяем основные цвета методом k-средних

Определим основные цвета на картинке с помощью кода [2] , который реализует метод k-средних. Метод достаточно простой: алгоритм берет конкретную точку на картинке, выбирает k точек, цвет которых ближе всего по цвету выбранной точки, и вычисляет «усредненный» цвет всех выбранных точек. И так далее по всем точкам картинки, пока расстояния между усредненными точками не распределятся оптимальным образом.

Воспользуемся готовым приложением mImageColorAnalysisTool.mlapp или функцией colorCluster.m. Для этого нужно просто передать в приложение/функцию путь к предварительно сжатой картинке im и количество выделяемых на картинке цветов colorNum (например, colorNum = 4).

При использовании приложения получим и картинку с усредненными цветами, и гистограмму основных цветов. Если используем функцию colorCluster.m, то гистограмму придется нарисовать самостоятельно.

Картинка с усредненными цветами
Гистограмма основных цветов

В результате усреднения видим, что на картинке преобладают черный, зеленый, красный и розовый оттенки. Мы получили более конкретный результат, чего в принципе и хотели. Осталось только нанести полученный результат на цветовой круг сочетаний.

Отображение основных цветов на HSV-диаграмме

Для отображения цветов на цветовом круге сочетаний воспользуемся HSV-диаграммой по ссылке [3].

Используемая диаграмма — это конус в цилиндрической системе координат, на который «натянута» поверхность HSV-цветов. И поэтому для того, чтобы нанести нашу точку на диаграмму, необходимо перейти в эту цилиндрическую систему координат и нанести соответствующую точку.

На выходе из анализатора цветов мы получаем цвета в пространстве RGB. Т.к. наш цветовой круг соответствует пространству HSV, то нам необходимо перейти в это пространство. Сделать это можно с помощью команды Matlab rgb2hsv(color), где color — конкретный цвет.

А теперь подробнее про координаты цилиндра:

Hue — это цветовой тон, ему соответствует угол окружности цилиндра. Это первая координата на выходе функции rgb2hsv(color). В Matlab принимает значение от 0 до 1.

Saturation — насыщенность цвета, ей соответствует радиус окружности цилиндра. Это вторая координата на выходе функции rgb2hsv(color).

Value (или Brightness) — яркость оттенка. Ей соответствует координата высоты цилиндра. Это третья координата на выходе функции rgb2hsv(color).

Сопоставив все вышенаписанное, получим:

Разрез H-S диаграммы
Разрез S-V диаграммы

Разрез H-S — это и есть наш заветный цветовой круг сочетаний с нанесенными основными оттенками картинки. Да, полное представление о цвете мы получаем только из обоих разрезов HSV-диаграммы, но для подбора подходящего цвета нам достаточно анализировать разрез H-S.

Результаты

Мы посмотрели, как двумя способами можно наносить основные цвета на цветовой круг сочетаний для дальнейшего анализа изображений. Теперь мы можем подбирать цвет одежды по фотографии локации или проводить анализ уже готовых картинок.

Пример — определение основных цветов локации по фото:

Фотография локации для анализа цветов
HSV-диаграмма
Основные цвета кадра
H-S разрез

Пример анализа готовой фотографии:

analyzephoto1
analyzephoto2
analyzephoto3
analyzephoto4

Спасибо за внимание!

Оцените статью
В коробке инженера
Добавить комментарий

Нажимая на кнопку "Добавить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности

Введите буквы на русском языке : *

Reload Image