我已经编写了一个计算FFT的应用程序,我想知道一种可视化颜色光谱的好方法。
不幸的是,我的naiive尝试没有取得好成绩。我想实现这样的目标:
我目前正在使用它进行着色
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;
答案 0 :(得分: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')
结果: