Цвет, который является наиболее контрастным для данного набора цветов? - PullRequest
3 голосов
/ 29 октября 2011

У меня есть список из нескольких разных «случайных» значений цветов (не менее 1 и не более 8 цветов).(Случайный означает, что нет никакой информации об их взаимной «контрастности».)

Цвета даны как значения RGB (возможное упрощение: как значения H в модели HSL или в какой-либо другой цветовой системе выбора - у меня естьнекоторая степень контроля над тем, как генерируются оригинальные цвета).

Мне нужно вычислить одно значение одного цвета, которое является наиболее "контрастным" (то есть визуально различимым) из всех цветов из списка.

Практические критерии для контраста, для случая с 8 цветами:

Если мы рисуем 9 квадратов, заполненных нашими цветами следующим образом:

[1][2][3]
[4][X][5]
[6][7][8]

Цвет квадрата X должен бытьчетко различимы между всеми смежными цветами.

Возможное упрощение: уменьшить максимальное количество цветов с 8 до 4 (квадраты 2, 4, 5, 7 в этом примере, игнорировать диагонали).

1 Ответ

1 голос
/ 29 октября 2011

Я думаю, что лучшее решение может быть:

  1. максимизировать разницу оттенков со всеми цветами (простая линейная оптимизация)
  2. максимальное освещение
  3. максимизировать насыщенность

http://www.colorsontheweb.com/colorcontrasts.asp

Редактировать: при линейном программировании вы можете придавать меньшую значимость диагональным цветам.

Edit2: что означает максимизация: Вы хотите максимизировать контраст оттенка, это означает, что сумма всех | Hi - result |, где Hi означает Hue цвета i, должна быть максимизирована. Вы даже можете создать условия для минимальной разницы, например, | Привет - результат | > Хмин. Фактический расчет можно выполнить, задав уравнения для алгоритма линейной оптимизации, или вы можете попробовать все значения оттенков в диапазоне от 0,0 до 1,0 с шагом 0,05 и сохранить лучший результат. http://en.wikipedia.org/wiki/Linear_programming.

...