ложное/псевдоцветовое кодирование температуры

У меня есть некоторые значения температуры в заданном диапазоне, скажем, от 0 до 100 по Цельсию. Теперь я хочу сопоставить эти значения с цветами, поэтому синий = RGB (0,0,255) означает 0 ° C, красный = RGB (255,0,0) означает 100 ° C, а промежуточные цвета означают некоторые промежуточные температуры.

В Matlab на самом деле есть функция, называемая цветовой картой. Мои материалы реализованы в OpenCV и C++. Есть ли кто-нибудь, кто уже имеет некоторый опыт в цветовом кодировании или знает какой-нибудь хороший математический способ сделать это?


person Fei    schedule 02.02.2012    source источник


Ответы (3)


Здесь может помочь цветовое пространство HSV.

Однако оттенок является периодическим, то есть если вы переходите от красного к другому концу спектра, вы вернетесь к красному, что не так уж полезно в вашем случае. Что вам, вероятно, захочется сделать, так это выбрать подмножество цветового спектра, которое идет от красного через желтый и зеленый к синему (исключая розовый/фиолетовый). В разделе RGB-HSV есть изображение, которое должно показать вам, что я имею в виду.


Обновление: Фактически, предыдущий ответ говорит вам, как именно реализовать MATLAB Jet палитра, которую вы описываете.

Похоже, что Jet на самом деле является вариацией цветового пространства HSV!

person Will Vousden    schedule 02.02.2012
comment
СПАСИБО за этот действительно поучительный ответ. Этот сайт оказался особенно полезным. Я все еще немного ошеломлен тем, что в OpenCV не было реализации цветового кодирования для такой информации, как температура или расстояние... - person Fei; 03.02.2012
comment
Вчера я наткнулся на это изящное решение: алгоритм преобразует длину волны видимого света (в нм) в значения RGB. - person Fei; 22.10.2012

Для температуры (t) от 0 до 100 вы можете рассчитать каждый цвет:

Pseudocode:
  Col(t)=(  0+INT(2.55*t), // Red
            0,             // Green
          255-INT(2.55*t)) // Blue
Col(0)  =(0,0,255)
Col(100)=(255,0,0)

Фактор 2,55 исходит из заданных макс./мин. значений 0° и 100° по Цельсию. Теперь вам просто нужно выбрать интервалы.

Надеюсь, это поможет.

person dgw    schedule 02.02.2012

Похоже, вам нужна цветовая карта JET, которая начинается с темно-синего и заканчивается темно-красным цветом.

Предполагая, что у вас есть набор температур от 0 до 100, увеличивающийся на единицу:

temps = 0:1:100;

Используйте функцию JET, чтобы создать набор цветов по N точкам, где N — длина вашего вектора температуры:

colors = jet(length(temps));

Теперь, чтобы получить доступ к цвету для первой температуры (это даст синий цвет):

colors(1,:)

Или цвета для последней температуры (это будет красный):

colors(end,:)
person siliconwafer    schedule 02.02.2012