LINUX.ORG.RU

Сгенерировать N максимально контрастных цветов


0

2

Есть какой-нибудь стандартный метод как получить N (в конкретном случае нужно 60) максимально контрастных по отношению друг к другу цветов. Нужно получить R, G и B компоненты.

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

Реально?

★★★★

Представь куб RGB. Диаметрально противоположные точки - самые контрастные.

mv ★★★★★
()

>>колличество

Реально?

Тебе - нереально почти наверняка.

человек мог глазом различить 60 цветов

Человек в состоянии удержвать не более 5-10 сущностей одновременно. Остальное - издевательство.

А вообще - делишь 255 на ceiling(∛60)-1 отрезков и получаешь все комбинации RGB.

mclaudt
()
Ответ на: комментарий от mclaudt

Человек в состоянии удержвать не более 5-10 сущностей одновременно. Остальное - издевательство.

Нужно визуализировать двумерные массивы данных со значениями 1-60. Задача человека искать в этом наборе закономерности появления разных цветов и кластеров из цветов. Так как пока не до конца понятно какими будут из себя данные, то и компу это поручить не получается.

А вообще - делишь 255 на ceiling(∛60)-1 отрезков и получаешь все комбинации RGB.

Попробую.

alexru ★★★★
() автор топика
Ответ на: комментарий от mv

Представь куб RGB. Диаметрально противоположные точки - самые контрастные.

Если они расползутся к поверхности, как заряды в проводнике, не задействуя место внутри, то это не позволит полностью использовать весь контраст. Нужно просто равномерно заполнить ими RGB-куб.

mclaudt
()

Кстати, у меня тоже была такая проблема (для графического представления температуры в виде цветных градиентов): как получить для ряда чисел от x₁ до x₂ равномерную цветовую гамму от синего до красного цвета?

Сейчас вычисляю линейно, т.е. для x₁ RGB=0xff0000, затем линейно уменьшается R и увеличивается B, вплоть до RGB=0x0000ff для синего цвета. Но при этом получается кривовато, да и отсутствуют желтый-зеленый и иже с ними. Если сначала уменьшать R и увеличивать G, а затем уменьшать G и увеличивать B, получается вообще черт знает что. В интернете так и не нашел приличного алгоритма для генерирования цветов, наиболее близких к равномерному спектральному диапазону...

Eddy_Em ☆☆☆☆☆
()

Можно попробовать взять HSV пространство, поделить H(ue) на 20 частей и для каждого такого H взять ещё по 3 цвета с разными V(alue). Или что-то в таком духе, напаример, ещё менять S(aturation)

mikki
()
Ответ на: комментарий от alexru

А вообще - делишь 255 на ceiling(∛60)-1 отрезков и получаешь все комбинации RGB.

Попробую.

Что попробуешь? Тебе же надо контрастный цвет найти :) Контрастные цвета при суммировании дают белый цвет. Соответственно, для цвета {R1, G1, B1} контрастный цвет в представлении RGB24 со значением компоненты 0..255 будет { 255 - R1, 255 - G1, 255 - B1}, т.е. он в цветовом кубе будет находиться в противоположной точке.

mv ★★★★★
()
Ответ на: комментарий от mv

Мне нужно найти 60 (пусть 64 будет для ровного счета) попароно далеких друг от друга. Как найти контрастный к заданному я знаю.

alexru ★★★★
() автор топика
Ответ на: комментарий от alexru

Может вам попробовать перейти к модели «цвет/яркость» и задвать кол-во цветов и яркостей. Причём яркостный канал делить нелинейно.

mky ★★★★★
()
Ответ на: комментарий от mclaudt

Мда, с контрастностью проблем нет, все различимо хорошо, но глазами искать закономерности в этой каше нельзя :)

Будем искать другие методы.

alexru ★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

Нужно просто подбирать сочетающиеся цвета. В гимпе есть редактор градиентов, можно сначала там прикинуть градеинты и потом их переносить в по.

mikki
()
Ответ на: комментарий от mikki

Да вроде бы преобразование из равномерной HSV-гаммы в RGB дает как раз то, что нужно. Более близкую к реальности гамму, по-моему, простым алгоритмом не получишь...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от alexru

>>Нужно визуализировать двумерные массивы данных со значениями 1-60.

Если число имеет количественный, а не только перечислительный смысл, то разумнее цвета сделать похожими.

Если же это «1», «2», ..., «60» (смысл только перечислительный), по интересно, в какой предметной области попались 60 принципиально разных сущностей?

mclaudt
()
Ответ на: комментарий от Eddy_Em

HSV гамма это и есть примерно твои линейные переходы, просто у тебя они не все между соседними цветами по Hue в этом пр-ве.

mikki
()
Ответ на: комментарий от mikki

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

>>отлично иллюстрируется картинкой

Красота, все бы понятия так объясняли наглядно.

mclaudt
()

а не ущербна ли выбранная модель визуализации изначально ?
что она отражает ?

x905 ★★★★★
()

Я давеча эту задачу для себя решил (визуализации массивов), см. http://a-iv.ru/aivlib там есть документация. Палитры меняются достаточно просто.

Дальше от специфики задачи...

AIv ★★★★★
()
Ответ на: комментарий от alexru

Пожалуй, еще можно попробовать выделять сущности символами псевдографики + раскрасить их тоже в разные цвета. Или попробовать перейти к трем измерениям

eagleivg ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.