0

我已经编写了一个计算 FFT 的应用程序,我想知道一种以颜色可视化光谱的好方法。

不幸的是,我幼稚的尝试并没有产生好的结果。我想实现这样的目标:

图片

我目前正在使用它进行着色

float r = std::log( std::abs(source[u][v]) + 1 ) * 0.2f;
float g = std::log( std::max(std::abs(source[u][v]) - 10.0f, 0.0f) + 1 ) * 0.2f;
float b = std::log( std::max(std::abs(source[u][v]) - 100.0f, 0.0f) + 1 ) * 0.2f;
4

1 回答 1

0

我提出以下方法。首先,选择一个最大值(代表“红色”的那个)并缩放 [0, 1] 区间中的所有值。接下来,将此值用于色调并使用 HSL 到 RGB 转换。Python 代码如下所示:

import colorsys
from PIL import Image, ImageDraw

w = 400
h = 20
im = Image.new("RGB", (w, h))
draw = ImageDraw.Draw(im)

for x in range(0, 100):
    value = float(x)/100

    r, g, b = colorsys.hsv_to_rgb(1-value*3/4-0.33, 1, 1)
    color = int(r*255), int(g*255), int(b*255)
    draw.rectangle((x * 4, 0, (x + 1) * 4, h), color, color)

im.save('example.png' , 'png')

结果:

将 [0,1] 中的值映射到颜色

于 2012-08-16T15:43:52.273 回答