Рассматривая цвет как вектор в 3-мерном пространстве, вы можете легко вычислить разницу, используя 3d-пифагоры:
d = sqrt((r2-r1)^2 + (g2-g1)^2 + (b2-b1)^2)
Тем не менее, обратите внимание, что из-за того, что цвета интерпретируются не столь совершенными глазами, вы можете настроить цвета, чтобы избежать их одинаковой важности.
Например, используя типичный взвешенный подход :
d = sqrt(((r2-r1)*0.3)^2 + ((g2-g1)*0.59)^2 + ((b2-b1)*0.11)^2)
Поскольку глаза наиболее чувствительны к зеленому цвету и наименее чувствительны к голубому, два цвета, которые различаются только по синему компоненту, должны, следовательно, иметь большую числовую разницу, чтобы считаться «более отличной», чем та, которая имеет такую же числовую разницу зеленый компонент.
Существуют также различные способы оптимизации этого расчета. Например, поскольку вы на самом деле не интересуетесь фактическим значением d
, вы можете обойтись без квадратного корня:
d = ((r2-r1)*0.30)^2
+ ((g2-g1)*0.59)^2
+ ((b2-b1)*0.11)^2
Обратите внимание, что во многих языках программирования, основанных на C-синтаксисе (например, C #), ^
не означает «повышение до степени», а скорее «двоичный исключающий или».
Так что, если бы это был C #, вы бы использовали Math.Pow
, чтобы вычислить эту часть, или просто разверните и выполните умножение.
Добавлено : Судя по странице Разница в цвете в Википедии , существуют различные стандарты, которые пытаются обрабатывать различия в восприятии. Например, тот, который называется CIE94, использует другую формулу, в цветовой модели L*C*h
, которая выглядит так, что на нее стоит обратить внимание, но зависит от того, насколько точной вы хотите, чтобы она была.