【问题标题】:16bit greyscale image to heatmap16 位灰度图像到热图
【发布时间】:2015-07-06 00:15:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 接下来几周我没时间了,所以我无法帮你找到渐变映射,但我会在第四天试试。

标签: c# image heatmap


【解决方案1】:

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

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

我将跳过第 1 部分和第 3 部分,并为您提供有关第 2 部分的一些想法。

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

但您还希望结果在视觉上起作用,这意味着与其说应该是视觉上吸引人,但应该对人眼有意义。所以我们需要一个具有可信但足够大梯度的映射。

为此,您应该进行一些实验。我建议使用 LinearGradientBrush,正如我所展示的 here。看看interpolateColors 函数!它在示例中仅使用 6 种颜色,对于您的情况来说很少!

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

您的诀窍是选择既漂亮又足够的停止颜色来创建一组 64k 大的独特颜色,最好从蓝色变为红色。..

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

【讨论】:

  • 是的,你为我指明了方向——非常感谢!我将浏览 LinearGradient 类并尝试深入研究它!
猜你喜欢
  • 2015-06-29
  • 2014-11-03
  • 2020-05-15
  • 2017-07-31
  • 2012-06-13
  • 2012-11-18
  • 1970-01-01
  • 2015-08-11
  • 2011-12-25
相关资源
最近更新 更多