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 に答える