热像图的16位灰度图像

时间:2015-07-05 15:32:28

标签: c# image heatmap

我正在为我的大学研究科学成像软件,但我遇到了一个重大问题。我实验室的科学相机(Apogee Alta U57)提供的图像为16bpp阵列 - 每个像素的0-65535值!我们希望保留此范围,但实际上我们无法在显示器上显示它们(0-255灰度范围)。所以我找到了解决这个问题的方法 - 只需使用颜色,并将整个图像显示为热图(从黑色,蓝色,绿色和红色到纯白色)。

我的意思是这样的 - Example heatmap image I want to achieve enter image description here

我唯一的问题是:如何有效地转换16bpp像素值数组以完成c#中的热图位图?这样做有没有图书馆?如果没有,我如何使用.NET资源实现这一目标?

我的想法是创建将65536值映射到(255 R,255G,255B)的函数,但这是一项艰巨的工作 - 尤其是在不使用HSV模型的情况下。

我将不得不提供任何帮助!

1 个答案:

答案 0 :(得分:1)

您的问题包括几个部分:

  • 读取16位像素数据值
  • 将它们映射到24位rgb颜色
  • 将它们写入图像文件

我将跳过第一部分和第三部分,并就第2部分给出一些想法。

事实上它比看起来更难。一个不会丢失任何信息的独特映射很简单,实际上是微不足道的,只需稍微移动即可。

但是你也希望结果在视觉上有效,这意味着不应该在视觉上吸引人,而应该对人眼有意义。所以我们需要一个具有可靠但足够大的梯度的映射。

为此,你应该尝试一下。我建议使用LinearGradientBrush,因为我显示here。看看interpolateColors功能吧!它在示例中仅使用了6种颜色,对于您的情况很少!

你应该选择更多;你可能需要以螺旋形式穿过色彩空间..

你的诀窍是选择漂亮和足够的停止颜色来创造一套64k大的独特颜色,最好是从蓝色到红色......

您需要测试结果的唯一性;实际上你可能想为映射创建一对字典和字典..