Недавно мне нужно было сравнить несколько цветов, чтобы получить 2 самых одинаковых цветов. Эта проблема на фасаде выглядит как легкая прогулка, даже для начинающих, но немного вовлечена.
Наивная реализация заключается в расчете на евклидовое расстояние (как показано ниже) между значениями RGB 2 цветов.
d = SQRT ((x1 -x2)^2 + (y1 -y2)^2 + (z1 -z2)^2)
Затем выбраны 2 цвета, которые имеют самое низкое евклидовое расстояние. Но в этом предположении есть серьезный недостаток. Хотя значения RGB являются удобным способом представления цвета в компьютерах, мы, люди, воспринимаем цвета по -разному от того, как цвета представлены в цветовом пространстве RGB. То, что для нас выглядит как идентичные цвета, может дать нам евклидовое расстояние, которое больше, чем евклидова расстояния цветов, которые выглядят отличными от нас при сравнении в цветовом пространстве RGB.
Итак, что теперь делать?
Delta-E Distance Metric приходит на нашу помощь. Он использует цветовое пространство CIE Lab, которое приближается к тому, как мы воспринимаем цвета, хотя оно также не совсем точное. Как только мы представляем цвет в цветовом пространстве CIE, мы можем рассчитать метрику расстояния Delta-E с использованием евклидового расстояния. С момента его выхода в 1976 году он был изменен 2 раза, чтобы справиться с недостатками предыдущих версий. Диаграмма ниже показывает, что, смещаясь по оси x и y, мы получаем разные оттенки одного и того же цвета. CIE76 -> CIE94 -> CIE2000
Для этого урока мы будем использовать CIE2000. Если вы заинтересованы в реальной математике, обратитесь к странице Википедии. Довольно легко написать свой собственный код, чтобы сравнить 2 цвета, но мы не попытаемся заново изобрести колесо. Python обеспечивает высокую коммунальную пакет Colormath
Для преобразования между различными цветами сравнения дельта, плотности с спектральной работой и т. Д.
Используя Colormath
Нам просто не нужно прилагать много усилий, чтобы найти метрику Delta-E.
Модуль Colormath
может быть установлен с помощью PIP –
sudo apt-get install python-pip sudo pip install colormath
Теперь давайте напишем фактический код Python, чтобы найти разницу между 2 цветами.
from colormath.color_objects import sRGBColor, LabColor from colormath.color_conversions import convert_color from colormath.color_diff import delta_e_cie2000 # Red Color color1_rgb = sRGBColor(1.0, 0.0, 0.0); # Blue Color color2_rgb = sRGBColor(0.0, 0.0, 1.0); # Convert from RGB to Lab Color Space color1_lab = convert_color(color1_rgb, LabColor); # Convert from RGB to Lab Color Space color2_lab = convert_color(color2_rgb, LabColor); # Find the color difference delta_e = delta_e_cie2000(color1_lab, color2_lab); print "The difference between the 2 color = ", delta_e
Рекомендации
Оригинал: “https://dev.to/tejeshreddy/color-difference-between-2-colours-using-python-182b”