質問

私は、FFTWについての割り当てを持っていると私は、画像のFFTを作成するための小さなプログラムを書くためにしようとしていました。私は画像を読み書きするCIMGを使用しています。しかし、私が得るすべては、単一の白いドットと暗い画像である:(

私が最も可能性が高い。この間違った方法をやっていると、誰かがこれを行うべきであるかを説明することができれば私は幸いです。私はちょうどこれを行うための正しい方法は何か知っている必要があり、コードは必要ありません。

ここに私のコードは次のとおりです。

CImg<double> input("test3.bmp");
CImg<double> image_fft(input, false);

unsigned int nx = input.dimx(), ny = input.dimy();
size_t align = sizeof(Complex);

array2<Complex> in (nx, ny, align);

fft2d Forward(-1, in);

for (int i = 0; i < input.dimx(); ++i) {
    for (int j = 0; j < input.dimy(); ++j) {
        in(i,j) = input(i,j);
    }
}

Forward.fft(in);

for (int i = 0; i < input.dimx(); ++i) {
    for (int j = 0; j < input.dimy(); ++j) {
        image_fft(i,j,0) = image_fft(i,j,1) = image_fft(i,j,2) = std::abs(in(i,j));
    }
}

image_fft.normalize(0, 255);
image_fft.save("test.bmp");
役に立ちましたか?

解決

あなたは大きさのログを取る必要があります。画素値は負であることができないので、あなたが、(DC値を取る単一の白色点が基準値(あなたがそれを呼び出すために好き0ヘルツ、DC)であり、それはほとんど常にはるかに任意の画像の最大成分であろういつも)正と大きくなること。

何をする必要がある各ポイントに(あなたが複合体からのマグニチュード/位相形式に変換した後(フェーザ表記IIRC?))の大きさの対数(対数計算のLN、何でも、いくつかのタイプ)を計算でありますあなたはそれを正規化する前に。

(わずかに大きいだけ多くすることにより、より大きな値が小さいと、より大きな値になります)、ログ他の周波数が見えるようになりますを取って、彼らはDC値に比べて本当に小さくて、値があることに注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top