После публикации последнего статьи Я полностью отказался от попыток выполнить алгоритм с использованием координат HSV или Lab. Я забыл об использовании библиотек цветов и вообще забыл о самом скрипте.
Но что-то надоело и руки зачесались снова работать с изображениями и в то же время хотелось подкорректировать существующий алгоритм.
Скрипт: связь
Решение
Больным местом алгоритма было выявление похожих тонов.Было тошно из-за того, что не учитывалась яркость схожих цветов.
На момент написания статьи я прекрасно осознавал проблему, с которой мне придется столкнуться при определении яркости и решил ее не учитывать.
В результате черно-белые изображения не обрабатывались.
Также довольно насыщенные цвета и контрастные изображения выдавали странные тона, которых, казалось, не было на снимке.
Вот почему все это возникло.
Уникальный идентификатор цвета был определен как (г-г)*1000000+(р-б)*1000+(г-б) .
Соответственно, цвета с одинаковыми идентификаторами были похожими.
В процессе обработки в компоненты цвета r, g и b постоянно вносилась все большая ошибка.
Оно было введено простым округлением: round(round((r-g)/$error) * $error) и т. д. Само решение оказалось предельно простым, но не без нюансов.
Сначала я определил яркость цвета.
Это простейшее среднее арифметическое, только приведенное к целочисленной шкале от 0 до n, где n в данном случае — количество интервалов яркости.
Собственно, тут и возникает большая проблема: на границе интервалов действительно будут одинаковые цвета, но они будут обрабатываться отдельно и каждый будет выводиться отдельно.
Но это будет заметно только на изображениях, где цвета расположены по разные стороны границы.
В идеале такие границы не должны быть строго разделены, т.е.
в зависимости от текущей палитры они смещаются в ту или иную сторону.
Также из-за разделения тонов на интервалы яркости пришлось увеличить количество обрабатываемых цветов.
Теперь вместо 60 000 алгоритм обрабатывает 500 000 цветов, а шаг проверки уменьшился с 20 пикселей до 10 пикселей.
Поэтому возможно снижение производительности.
Результат
В результате картина изменилась очень сильно в лучшую сторону! Скрипт выдаёт более-менее адекватные цвета для большинства изображений.Черно-белые изображения также работают, хотя с ними могут быть ошибки.
Ниже приведены некоторые примеры работ:
Кроме того
Я не публиковал «Алгоритмы» в блоге, потому что… Это всего лишь небольшое изменение в работе предыдущей версии.Многие люди просили создать сценарий для определения цветов на изображении.
На самом деле Здесь .
Внутри есть описание.
УПД_1 По просьбам некоторых пользователей я добавил вывод цветов в шестнадцатеричном формате после обработки изображения.
Вам нужен RGB? УПД_2 Добавлена поддержка PNG. УПД_3 Автор фото рыжеволосой девушки: Елена Серебрякова.
УПД_4 Пересчет яркости по формуле 0,299*R + 0,587*G + 0,114*B. Ошибка изменена.
Добавлена возможность конвертировать цвета из формата HEX в формат RGB. УПД_5 Уменьшен порог ошибки.
Добавлена возможность определять цвета на загруженной фотографии.
Просто нажмите в нужном месте изображения.
Теги: #цветовая палитра #сочетание цветов #алгоритм #Алгоритмы
-
Крупп
19 Dec, 24 -
Цветовая Дифференциация Персонала
19 Dec, 24 -
Как Я Купил Снежного Барса
19 Dec, 24 -
Numpy На Python. Часть 2
19 Dec, 24 -
«У Вас В Статье Опечатка»
19 Dec, 24