0

繰り返しますが、まだローパス フィルターを実行しようとしていますが、なぜこれがまだ実行されていないのかわかりません。画像に理想的なローパス フィルターを適用するために、 FFT フィルターと前の質問FFT 質問に従ってコードを方向付けました。以下のコードは、画像を暗くして、結果の画像に白いピクセルを配置するだけです。

// forward fft the result is in freqBuffer
fftw_execute(forward);

for (int y = 0; y < h; y++)
{
    for (int x = 0; x < w; x++)
    {
        uint gid = y * w + x;

        // shifting coordinates normalized to [-0.5 ... 0.5]
        double xN = (x - (w / 2)) / (double)w;
        double yN = (y - (h / 2)) / (double)h;

        // max radius
        double maxR = sqrt(0.5f * 0.5f + 0.5f * 0.5f);

        // current radius normalized to [0 .. 1]
        double r = sqrt(xN * xN + yN * yN) / maxR ;

        // filter response
        double filter = r > 0.7f ? 0.0f : 1.0f;

        // applying filter response
        freqBuffer[gid][0] *= filter;
        freqBuffer[gid][1] *= filter;
    }
}

// normlization (see fftw scaling)
for (uint i = 0; i < size; i++)
{
    freqBuffer[i][0] /= (float)size;
    freqBuffer[i][1] /= (float)size;
}

// backward fft
fftw_execute(backward);

いくつかの助けをいただければ幸いです。

4

1 に答える 1

1

周波数ドメインにステップ応答を持つフィルターがある場合、空間ドメインに大きなsin(x)/x リンギングが見られます。これはギブズ現象として知られています。これを軽減するには、目的の周波数応答にウィンドウ関数を適用する必要があります。

于 2012-05-01T20:46:07.800 に答える