Определение Доминирующих Тонов Изображения [V 1.1]

После публикации последнего статьи Я полностью отказался от попыток выполнить алгоритм с использованием координат HSV или Lab. Я забыл об использовании библиотек цветов и вообще забыл о самом скрипте.

Но что-то надоело и руки зачесались снова работать с изображениями и в то же время хотелось подкорректировать существующий алгоритм.

Скрипт: связь

Определение Доминирующих Тонов Изображения [V 1.1]



Решение
Больным местом алгоритма было выявление похожих тонов.

Было тошно из-за того, что не учитывалась яркость схожих цветов.

На момент написания статьи я прекрасно осознавал проблему, с которой мне придется столкнуться при определении яркости и решил ее не учитывать.

В результате черно-белые изображения не обрабатывались.

Также довольно насыщенные цвета и контрастные изображения выдавали странные тона, которых, казалось, не было на снимке.

Вот почему все это возникло.

Уникальный идентификатор цвета был определен как (г-г)*1000000+(р-б)*1000+(г-б) .

Соответственно, цвета с одинаковыми идентификаторами были похожими.

В процессе обработки в компоненты цвета r, g и b постоянно вносилась все большая ошибка.

Оно было введено простым округлением: round(round((r-g)/$error) * $error) и т. д. Само решение оказалось предельно простым, но не без нюансов.

Сначала я определил яркость цвета.

Это простейшее среднее арифметическое, только приведенное к целочисленной шкале от 0 до n, где n в данном случае — количество интервалов яркости.

Собственно, тут и возникает большая проблема: на границе интервалов действительно будут одинаковые цвета, но они будут обрабатываться отдельно и каждый будет выводиться отдельно.

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

В идеале такие границы не должны быть строго разделены, т.е.

в зависимости от текущей палитры они смещаются в ту или иную сторону.

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

Теперь вместо 60 000 алгоритм обрабатывает 500 000 цветов, а шаг проверки уменьшился с 20 пикселей до 10 пикселей.

Поэтому возможно снижение производительности.





Результат
В результате картина изменилась очень сильно в лучшую сторону! Скрипт выдаёт более-менее адекватные цвета для большинства изображений.

Черно-белые изображения также работают, хотя с ними могут быть ошибки.

Ниже приведены некоторые примеры работ:

Определение Доминирующих Тонов Изображения [V 1.1]

Определение Доминирующих Тонов Изображения [V 1.1]

Определение Доминирующих Тонов Изображения [V 1.1]

Определение Доминирующих Тонов Изображения [V 1.1]

Определение Доминирующих Тонов Изображения [V 1.1]



Кроме того
Я не публиковал «Алгоритмы» в блоге, потому что… Это всего лишь небольшое изменение в работе предыдущей версии.

Многие люди просили создать сценарий для определения цветов на изображении.

На самом деле Здесь .

Внутри есть описание.

УПД_1 По просьбам некоторых пользователей я добавил вывод цветов в шестнадцатеричном формате после обработки изображения.

Вам нужен RGB? УПД_2 Добавлена поддержка PNG. УПД_3 Автор фото рыжеволосой девушки: Елена Серебрякова.

УПД_4 Пересчет яркости по формуле 0,299*R + 0,587*G + 0,114*B. Ошибка изменена.

Добавлена возможность конвертировать цвета из формата HEX в формат RGB. УПД_5 Уменьшен порог ошибки.

Добавлена возможность определять цвета на загруженной фотографии.

Просто нажмите в нужном месте изображения.

Теги: #цветовая палитра #сочетание цветов #алгоритм #Алгоритмы

Вместе с данным постом часто просматривают: