温度的假/伪颜色编码

Posted

技术标签:

【中文标题】温度的假/伪颜色编码【英文标题】:false-/pseudo color coding for temperature 【发布时间】:2012-02-25 07:16:32 【问题描述】:

我在给定范围内有一些温度值,比如说在 0-100 摄氏度之间。现在我想将这些值映射到颜色,所以 blue=RGB(0,0,255) 表示 0°C,red=RGB(255,0,0) 表示 100°C,中间的颜色表示中间的一些温度。

Matlab 实际上有一个叫做 colormap 的函数。我的东西是用 OpenCV 和 C++ 实现的。有没有人已经在颜色编码方面有一些经验或知道任何好的数学方法来做到这一点?

【问题讨论】:

【参考方案1】:

HSV colourspace 在这里可能会有所帮助。

但是,色调是周期性的,也就是说,如果您从红色一直到光谱的另一端,您将回到红色,这对您的情况没有多大用处。您可能想要做的是选择从红色、黄色和绿色到蓝色(省略粉色/紫色)的色调光谱子集。 RGB-HSV section 中有一张图片应该可以告诉您我的意思。


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

似乎 Jet 实际上是 HSV 色彩空间的变体!

【讨论】:

感谢这个非常有启发性的答案。 This site 特别有帮助。对于温度或距离等信息似乎没有 OpenCV 实现颜色编码,我仍然感到有些震惊…… 我昨天遇到了this 巧妙的解决方案:该算法将可见光的波长(以 nm 为单位)转换为 RGB 值。【参考方案2】:

对于从 0 到 100 的温度 (t),您可以计算每种颜色:

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° 摄氏度的最大值/最小值。 你现在只需要选择你的间隔。

希望对您有所帮助。

【讨论】:

【参考方案3】:

听起来您想要一个 JET 颜色图,它以深蓝色开始,以深红色结束。

假设您有一组从 0 到 100 的温度,以 1 递增:

temps = 0:1:100;

使用 JET 函数在 N 个点上创建一组颜色,其中 N 是温度向量的长度:

colors = jet(length(temps));

现在,访问第一个温度的颜色(这将显示蓝色):

colors(1,:)

或者最后一个温度的颜色(这将是红色):

colors(end,:)

【讨论】:

以上是关于温度的假/伪颜色编码的主要内容,如果未能解决你的问题,请参考以下文章

Camera2 API 设置自定义白平衡和温度颜色

HeatMap

如何接近创建视觉温度计

资料分享基于单片机红外音频温度传输系统设计-基于单片机RGB颜色智能识别系统设计-基于单片机智能市电温度控制系统设计-基于单片机汽车环境监测系统设计(转发)

关于matlab中用griddata绘制伪色彩图的一点经验教训

基于arm的多路温度采集控制系统需求分析