Построение цветов для максимальной контрастности - PullRequest
3 голосов
/ 22 апреля 2010

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

Так, например, с N =2 мои результаты будут черно-белыми.С тремя я думаю, я получу все красное, все зеленое, все голубое.Для всех четырех менее очевиден правильный ответ, и вот тут у меня возникают проблемы.

РЕДАКТИРОВАТЬ :: Очевидный подход состоит в том, чтобы отобразить 0 на красный, 1 на зеленый и все цветамежду соответствующими цветами радуги, затем вы можете получить цвет для набора N, выполнив GetRainbowColour (N / TotalSets), поэтому метод GetRainbowColour - это все, что необходимо для решения этой проблемы

Ответы [ 3 ]

5 голосов
/ 22 апреля 2010

Ответ на этот вопрос субъективен - то, что лучше всего контрастирует с человеком с полным зрением, не обязательно лучше, чем с человеком, страдающим дальтонизмом или ограниченным зрением, или человеком с нормальным зрением, который работает с оборудованием в темноте.

Физиологически у людей гораздо более высокое разрешение по интенсивности, чем по оттенку или насыщенности.Вот почему аналоговое телевидение, цифровое видео и сжатие фотографий отбрасывают информацию о цвете, чтобы уменьшить полосу пропускания ( 4: 2: 2 ) - если вы соедините два пикселя с разной интенсивностью, не имеет значения, какой цветони есть - мы просто можем ощутить разницу в цвете только на больших областях одинаковой интенсивности.

Так что, если объект, который вы пытаетесь отобразить, имеет множество небольших областей размером всего в несколько пикселей, или вы хотите, чтобы он использовалсяв темноте (в темноте мозг усиливает синие клетки, а мы также не видим цвета) или 10% мужской популяции, страдающей дальтонизмом, рассмотрите возможность использования интенсивности в качестве основного дифференцирующего фактора, а не оттенка.GetRainbowColour игнорирует самое важное измерение человеческого зрительного восприятия, но вполне может работать с непрерывными данными.

5 голосов
/ 22 апреля 2010

О цветовых моделях HSL и HSV вы можете прочитать в этой статье Википедии . «H» в акронимах обозначает Hue, и это радуга, которую вы хотите. Звучит так, будто вы хотите, чтобы насыщенность была максимальной. В статье также объясняется, как конвертировать в цвета RGB.

Похоже, подобный вопрос уже задавался здесь .

1 голос
/ 21 октября 2014

Спасибо, brainjam, за предложение использовать HSL.Я выбрал эту маленькую функцию, которая, кажется, хорошо работает для составных графиков:

...