[英]16bit greyscale image to heatmap
我正在为我的大学开发科学成像软件,但遇到了一个大问题。 我实验室的科学相机 (Apogee Alta U57) 以 16bpp 阵列的形式提供图像 - 每像素 0-65535 值! 我们想保持这个范围,但实际上我们无法在监视器上显示它们(0-255 灰度范围)。 所以我找到了解决这个问题的方法——简单地利用颜色,并将整个图像显示为热图(从黑色、蓝色、绿色和红色到纯白色)。
我的意思是这样的 - 我想要实现的示例热图图像
我唯一的问题是:如何在 c# 中有效地将 16bpp 像素值数组转换为完整的热图位图? 有没有图书馆可以做到这一点? 如果没有,我如何使用 .NET 资源实现这一目标?
我的想法是创建将 65536 个值映射到 (255 R, 255G, 255B) 的函数,但这是一项艰巨的工作——尤其是在不使用 HSV 模型的情况下。
我将非常感谢提供的任何帮助!
你的问题由几个部分组成:
我将跳过第一和第三部分,给你一些关于第二部分的想法。
事实上,它比看起来更难。 一个不会丢失任何信息的独特映射很简单,实际上微不足道,只需稍微移动就可以了。
但是您还希望结果在视觉上起作用,这意味着不是应该在视觉上吸引人而是应该对人眼有意义。 所以我们需要一个具有可信但足够大的梯度的映射。
为此,您应该尝试一下。 我建议使用 LinearGradientBrush,正如我在这里展示的那样。 看看interpolateColors
函数! 它在示例中仅使用 6 种颜色,对于您的情况来说很少!
你应该选择更多; 您可能需要以螺旋形式穿过色彩空间。
你的诀窍是选择漂亮和足够的停止颜色来创建 64k 大组独特的颜色,最好从蓝色到红色。
您需要测试结果的唯一性; 事实上,您可能希望为映射创建一对 Dictionary 和 Dictionary。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.