2012-02-02 161 views
2

我有一个给定范围内的温度值,比如说在0-100摄氏度之间。现在我想将这些值映射到颜色,所以蓝色= RGB(0,0,255)表示0°C,红色= RGB(255,0,0)表示100°C,中间的颜色表示介于两者之间的某些温度。温度的假/伪彩色编码

Matlab实际上有一个叫做colormap的函数。我的东西在OpenCV & C++中实现。有没有人已经有了一些颜色编码的经验,或者知道有什么好的数学方法来做到这一点?

回答

1

HSV colourspace可能会对您有所帮助。

色调是周期性的,但是,也就是说,如果你从红色一路走到另一端,你会回到红色,这对你的情况并不有用。你可能想要做的是选择一个从红色,黄色和绿色到蓝色(忽略粉红色/紫色)色调光谱的子集。 RGB-HSV section中有一张图片可以让你知道我的意思。


更新:事实上,this previous answer告诉你如何实现完全MATLAB 喷气调色板,你描述。

看起来Jet实际上是HSV色彩空间上的变体!

+2

感谢这真的很有启发性的答案。 [本网站](http://paulbourke.net/texture_colour/colourramp/)特别有用。我仍然有点惊呆了,似乎没有OpenCV实现颜色编码的信息,如温度或距离... – zhurora 2012-02-03 14:51:58

+0

尼斯链接,谢谢:) – 2012-02-03 15:12:15

+0

我碰到[this](http://codingmess.blogspot。 de/2009/05/conversion-of-wavelength-in-nanmeters.html)昨天整洁的解决方案:算法将可见光的波长(nm)转换为RGB值。 – zhurora 2012-10-22 12:38:57

2

对于从0和温度(T)为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°摄氏度的给定最大/最小值。 你只需要现在选择你的时间间隔。

希望有所帮助。

-1

听起来好像你想要一个JET色彩地图,它以深蓝色开始,以深红色结束。

假设你有一个设定温度从0到100的,由一个递增:

temps = 0:1:100; 

使用Jet功能在N个点,其中N是您的温度矢量的长度来创建组颜色:

colors = jet(length(temps)); 

现在,进入第一个温度的颜色(这会给蓝色):

colors(1,:) 

或上一次温度(这将是红色)的颜色:

colors(end,:)