【问题标题】:Map a value [0.0-1.0] to color gain将值 [0.0-1.0] 映射到颜色增益
【发布时间】:2013-03-29 21:26:41
【问题描述】:

我需要将 0.0 到 1.0 的值转换为它们的颜色表示(每个值都是一个像素)。我正在制作光谱图,所以值越高,像素应该越亮(如下图所示)。

我该怎么做?我在 C# 中工作,但一个普遍适用的解决方案也很好。

例子:

【问题讨论】:

  • 你想让它看起来像这样吗?如果您只想使用红色,请使用 red = 255*value
  • 不需要像上面的例子那样,我只是想把它转换成一种颜色表示——而不仅仅是一种颜色(例如红色)。跨度>
  • 您可以:R = value*255, G = 255-R, B = 0 用于红色、黄色和绿色。
  • 使用例如创建一个数组100 个值 - 输入值中的每个 0.01 一个(例如,0.45 将变为颜色 [45]),然后将像素更改为该数组中的颜色。

标签: c# colors pixel spectrogram


【解决方案1】:

这个答案不仅应该向您展示如何从单个浮点值创建颜色,而且输出应该与显示的强度比例非常相似。

private float LinearStep(float x, float start, float width = 0.2f)
{
    if (x < start)
        return 0f;
    else if (x > start+width)
        return 1;
    else
        return (x-start) / width;
}

private float GetRedValue(float intensity)
{
    return LinearStep(intensity, 0.2f);
}

private float GetGreenValue(float intensity)
{
    return LinearStep(intensity, 0.6f);
}

private float GetBlueValue(float intensity)
{
    return LinearStep(intensity, 0f)
    - LinearStep(intensity, 0.4f)
    + LinearStep(intensity, 0.8f);
}

private Color getColor(float intensity)
{
    return Color.FromArgb(255,
        (int)(255*GetRedValue(intensity)),
        (int)(255*GetGreenValue(intensity)),
        (int)(255*GetBlueValue(intensity))
    );
}

我是在notepad++ 中完成的,所以没有经过测试。但你应该明白了 ;-)

当然,您可以使用它来创建查找表。这完全取决于你;-)


由于我无法将此图像放入 cmets,以下是如何获得此解决方案的过程:

  1. 识别“纯”颜色。我的意思是在 8 种颜色的调色板中,每个组件都是 255 或零。
  2. 画出虚线。您知道这些点的 rgb 值。
  3. 线性插值。

步骤 3 由代码中的 LinearStep() 函数完成,每个斜率调用一次。添加上升斜率,减去下降斜率。如果您对此不确定,请尝试使用原始颜色图执行此操作。我希望你能从这里拿走它:-)

【讨论】:

  • 这在没有任何修改的情况下效果很好:) 我应该如何调整浮点数以获得this scale
  • 查看我的编辑,我详细说明了答案背后的思考过程:-)
【解决方案2】:

您在这里看到的是伪彩色或假色的使用。根据应用领域的不同,倾向于使用不同的palettes,您展示的那个看起来很像thermography 中常用的一个,但还有其他几个可能更适合您的使用领域。而且这样的调色板的构造比在 rgb 组件中循环要复杂一些。

当我使用假彩色图像时,我们使用查找表,因为它是(并且可能是)迄今为止获取与输入值对应的颜色的最快方法。您显示的那个似乎有 256 个不同的值(这不足为奇),因此您需要一个包含 256 个颜色值的数组作为查找表。我个人建议编写一个小程序,通过从您喜欢的色标中读取像素并在您的主程序中使用它来构建一些源代码。周围可能还会有现成可用的源代码或色标信息,也许关键词 thermography 和 pseudocolor/false color 可以帮助您进行搜索。

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2019-11-26
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多