Как найти «достаточно другой» RGB? - PullRequest
4 голосов
/ 01 сентября 2011

Если вам дан цвет в виде RGB, есть ли способ программно определить, достаточно ли он отличается от какого-либо другого RGB.

Скажите, я хотел бы проверить, находятся ли цвета как минимум на 30% друг от друга, как мне это сделать?Или, иначе говоря, как я могу создать цвет, который достаточно отличается от другого цвета?

Ответы [ 4 ]

7 голосов
/ 01 сентября 2011

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

[обновление] и вот онлайн калькулятор , который, по-видимому, рассчитает эти различия для вас (это сложно, и ссылки не меняют URL, поэтому на них трудно ссылаться, но если вы нажмете вокруг, это может имеет смысл ....)

2 голосов
/ 01 сентября 2011

Это очень и очень субъективно. Тем не менее, я лично думаю, что ваш лучший шанс - использовать яркость оттенка (HSL или HSV в этом отношении) и попытаться получить значение из разницы значений. Например что-то вроде:

value = a*abs(H1-H2)+b*abs(S1-S2)+c*abs(L1-L2);

и попытайтесь методом проб и ошибок найти лучшие a, b и c константы, которые различают цвета в той же степени, что и ваш человеческий взгляд. Если вы знаете линейную регрессию, вы можете получить несколько образцов цветов с назначенными вами различиями и получить значения a, b и c с линейной регрессией.

Более подходящая формула может содержать различия в степени 2 вместо abs, например, и, что более важно, значения для a, b и c как функции самих цветов, а не констант.

1 голос
/ 01 сентября 2011

Я думаю, что это та же проблема, что у вас была с цветами, несколько часов назад, в другом вопросе. Читайте о HSV (или HSL) в википедии http://en.wikipedia.org/wiki/HSL_and_HSV: при преобразовании RGB -> HSV, значение H - это цвет, S и V - другие характеристики.

Если вы хотите узнать расстояние между цветами, просто измерьте значение H. Если вы преобразуете его в нотацию 360 градусов, 30 градусов будет достаточно, чтобы получить очень разные цвета.

Если вы хотите узнать его в цветах RGB, вам станет немного сложнее: значения R, G и B могут привести вас к сероватому «цвету», а не к точно цвету.

0 голосов
/ 01 сентября 2011

Рассматривайте значение RGB как точку и используйте формулу расстояния от геометрии.

distance = ( (R2-R1)^2 + (G2-G1)^2 + (B2-B1)^2 )^.5
distance > minimun value

В случае, если требуется разница в 30%, установите минимальное значение = расстояние от точки_1 * .3 до начала координат, т. Е. .3 ((R1) ^ 2 + (G1) ^ 2 + (B1) ^ 2 ) *. 5

...