ложное / псевдоцветовое кодирование температуры - PullRequest
2 голосов
/ 02 февраля 2012

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

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

Ответы [ 3 ]

2 голосов
/ 02 февраля 2012

Здесь может быть полезно HSV colourspace .

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


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

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

2 голосов
/ 02 февраля 2012

Для температуры (т) от 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 ° Цельсия. Вам просто нужно выбрать интервалы сейчас.

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

0 голосов
/ 02 февраля 2012

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

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

temps = 0:1:100;

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

colors = jet(length(temps));

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

colors(1,:)

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

colors(end,:)
...