2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Задача представления значения переменной цветом
Сообщение22.06.2019, 18:31 
Аватара пользователя


12/01/14
1127
Решаю задачу представления значения переменной цветом

Имеется переменная x, принимающая значения от 0 до 1. Этим значениям должен соответствовать определенный цвет из видимого спектра от фиолетового до красного.
Необходимо:
написать формулы, связывающие x и значения компонент базовых цветов RGB (решение, которое описано - кусочно-линейная аппроксимация промежуточных значений между 8 основными цветами);
выбрать представление таким образом, чтобы визуально по цвету можно было различить как можно больше градаций переменной x.

 Профиль  
                  
 
 Re: Задача представления значения переменной цветом
Сообщение22.06.2019, 20:54 


09/05/16
138
prof.uskov в сообщении #1400839 писал(а):
Имеется переменная x, принимающая значения от 0 до 1. Этим значениям должен соответствовать определенный цвет из видимого спектра от фиолетового до красного.


Обязательно ли от фиолетового до красного? Какие ещё требования предъявляются к палитре?

Возможно, ответ не на Ваш вопрос, но схожая задача получить палитру, которая не теряла бы смысл при обесцвечивании, а также покрывала бы заданный диапазон цветов и яркостей, была решена здесь путём закручивания спирали вокруг прямой $ R = G = B $. Есть код на Fortran (и других языках), из которого сравнительно легко получаются формулы.

В работе Thyng, K. M., Greene, C. A., Hetland, R. D., Zimmerle, H. M., & DiMarco, S. F. (2016). True colors of oceanography. Oceanography, 29(3), 10. палитры получали в цветовом пространстве CAM02-UCS (авторы сочли его наиболее соответствующими человеческому восприятию цвета), где оказалось сравнительно просто линейно менять параметры яркости, насыщенности и оттенка. Попутно затронута проблема палитр, не теряющих смысла при нарушениях цветовосприятия. Готовых формул в явном виде нет (CAM02-UCS переводится в RGB сравнительно сложно), но есть код на Python. Также есть готовая палитра ("phase") в виде массива из 256 троек значений $R, G, B$, которая пересекает все цвета радуги, сохраняя постоянную яркость и насыщенность.

 Профиль  
                  
 
 Re: Задача представления значения переменной цветом
Сообщение22.06.2019, 21:23 
Аватара пользователя


12/01/14
1127
Спасибо. Нет, все равно какие цвета, главное, чтобы визуально было заметно как можно меньшее значение переменной x.

 Профиль  
                  
 
 Re: Задача представления значения переменной цветом
Сообщение24.06.2019, 22:06 
Заслуженный участник


27/04/09
28128
prof.uskov в сообщении #1400839 писал(а):
выбрать представление таким образом, чтобы визуально по цвету можно было различить как можно больше градаций переменной x
Однозначно вопрос колориметрии. Я тут в какой-то теме пару книжек вроде выписывал, эх найти бы где… Различие двух цветов в очень сильно огрублённом виде задаётся функцией цветового отличия.

С другой стороны если учесть практические проблемы (дисплеи мало у кого откалиброваны, условия просмотра тоже не навяжешь, а значения $(L,a,b)$ зависят от этого всего значительно), окажется, что достаточно уже известных (из той же колориметрии) rules of thumb: человек намного более восприимчив к изменению светлоты (luminance, более аккуратно определённая «яркость»), чем оттенка и хромы (chroma, более аккуратно определённая «насыщенность»), так что чёрный и белый должны использоваться в интересующем градиенте уж точно. И тут можно посоветовать что-нибудь типа cubehelix, хотя его цели несколько иные.

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

-- Вт июн 25, 2019 00:07:38 --

В общем раскройте, что там было конкретнее.

 Профиль  
                  
 
 Re: Задача представления значения переменной цветом
Сообщение24.06.2019, 22:52 
Заслуженный участник
Аватара пользователя


30/01/06
72407
prof.uskov в сообщении #1400874 писал(а):
главное, чтобы визуально было заметно как можно меньшее значение переменной x.

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

 Профиль  
                  
 
 Re: Задача представления значения переменной цветом
Сообщение24.06.2019, 23:12 
Заслуженный участник


27/04/09
28128
Да, кстати, может быть полезно просто ограничивать диапазон (а значения вне его делать однотонно серыми, например). Опять же, когда доступна интерактивность, это надо делать (выбор диапазона значений на шкале всех попавших на иллюстрацию, например; а те же линии уровня можно рисовать для уровня точки прямо под курсором).

 Профиль  
                  
 
 Re: Задача представления значения переменной цветом
Сообщение25.06.2019, 13:53 


09/05/16
138
prof.uskov в сообщении #1400874 писал(а):
визуально было заметно как можно меньшее значение переменной x


В CubeHelix есть параметр gamma, который позволяет пожертвовать динамическим диапазоном с одной стороны диапазона значений в пользу другой. По сути, при расчёте палитры выполняется $ \hat{x} = x^\gamma, \; x \in [0; 1] $, так что если выставить $ \gamma < 1 $, меньшие значения $x$ станут соответствовать более ярким цветам, но большие значения $ x $ станет труднее отличить друг от друга.

 Профиль  
                  
 
 Re: Задача представления значения переменной цветом
Сообщение25.06.2019, 22:43 
Аватара пользователя


12/01/14
1127
aitap в сообщении #1401453 писал(а):
prof.uskov в сообщении #1400874 писал(а):
визуально было заметно как можно меньшее значение переменной x


В CubeHelix есть параметр gamma, который позволяет пожертвовать динамическим диапазоном с одной стороны диапазона значений в пользу другой. По сути, при расчёте палитры выполняется $ \hat{x} = x^\gamma, \; x \in [0; 1] $, так что если выставить $ \gamma < 1 $, меньшие значения $x$ станут соответствовать более ярким цветам, но большие значения $ x $ станет труднее отличить друг от друга.

Да, я как раз и думал, что бы возвести в степень. Получается моя идея верная. Спасибо.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Модераторы, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group