C# 16位灰度图像到热图

C# 16位灰度图像到热图,c#,image,heatmap,C#,Image,Heatmap,我正在为我的大学开发一个科学成像软件,我遇到了一个大问题。我实验室的科学相机(远地点Alta U57)提供的图像为16bpp阵列-每像素0-65535个值!我们希望保持这个范围,但实际上我们不能在监视器上显示它们(0-255灰度范围)。所以我找到了解决这个问题的方法——简单地使用颜色,并将整个图像显示为热图(从黑色、蓝色、绿色和红色到纯白色) 我的意思是这样的- 我唯一的问题是:如何高效地将16bpp像素值数组转换为c#中的完整热图位图?有这样做的图书馆吗?如果没有,我如何使用.NET资源实现

我正在为我的大学开发一个科学成像软件,我遇到了一个大问题。我实验室的科学相机(远地点Alta U57)提供的图像为16bpp阵列-每像素0-65535个值!我们希望保持这个范围,但实际上我们不能在监视器上显示它们(0-255灰度范围)。所以我找到了解决这个问题的方法——简单地使用颜色,并将整个图像显示为热图(从黑色、蓝色、绿色和红色到纯白色)

我的意思是这样的-

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

我的想法是创建将65536个值映射为(255R,255G,255B)的函数,但这是一项艰巨的工作——特别是在不使用HSV模型的情况下


如果能提供任何帮助,我将不胜感激

你的问题由几个部分组成:

  • 读取16位像素数据值
  • 将它们映射到24位rgb颜色
  • 将它们写入图像文件
我将跳过第一部分和第三部分,给你一些关于第二部分的想法

事实上,这比看起来要难。一个不丢失任何信息的唯一映射很简单,实际上很简单,只要稍微移动一下就可以了

但你也希望结果能在视觉上起作用,这意味着,与其说是视觉上的吸引力,还不如说是人眼所能理解的。所以我们需要一个有足够大的梯度的贴图

为此,你应该做一点实验。我建议使用LinearGradientBrush,如我所示。查看
插值颜色
功能!在本例中,它只使用了6种颜色,这对于您的案例来说简直是少之又少

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

你的诀窍是选择好的和足够的停止颜色来创建一个64k大的独特颜色集,最好从蓝色到红色


您需要测试结果的唯一性;事实上,您可能需要为映射创建一对字典和一对字典。

我接下来几周没有时间,所以我无法帮助您找到渐变映射,但我将在四个月后尝试。耶,您为我指明了方向-非常感谢!我将浏览LinearGradient类并尝试深入了解它!