2012-02-02 5 views
2

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

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

ответ

1

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

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


Update: На самом деле, this previous answer говорит вам, как реализовать точно такой MatLab Jet палитру, вы описываете.

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

+2

СПАСИБО за этот действительно просвещенный ответ. [Этот сайт] (http://paulbourke.net/texture_colour/colourramp/) был особенно полезен. Я все еще немного ошеломлен тем, что, казалось, не было реализации OpenCV цветового кодирования для информации, такой как температура или расстояние ... – zhurora

+0

Хорошая ссылка, спасибо :) –

+0

Я наткнулся на [это] (http: //codingmess.blogspot. de/2009/05/conversion-of-length-in-nanometers.html), вчерашнее решение: алгоритм преобразует длину волны видимого света (в нм) в значения RGB. – zhurora

2

Для темпер (г) от 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 исходит из данных Max/Min значений от 0 ° до 100 ° по Цельсию. Вам просто нужно выбрать свои интервалы.

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

-1

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

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

temps = 0:1:100; 

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

colors = jet(length(temps)); 

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

colors(1,:) 

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

colors(end,:) 
Смежные вопросы