снова Я все еще пытаюсь запустить мой фильтр нижних частот, но я нахожусь в точке, где я не знаю, почему это все еще не работает. Я ориентировал мой код в соответствии с FFT Filters и моим предыдущим вопросом FFT Question, чтобы применить идеальный фильтр нижних частот к изображению. Приведенный ниже код делает изображение темнее и помещает в результирующее изображение некоторые белые пиксели.Идеальный фильтр нижних частот с fftw
// 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);
Некоторая помощь будет принята с благодарностью.
Wolf
Для произвольного содержимого фильтр с кирпичной стеной (обнуление БПФ) далеко не идеален. – hotpaw2
Насколько я вижу, это поведение называется «идеальным», см. [Идеальный низкий проход] (https://ccrma.stanford.edu/~jos/sasp/Ideal_Lowpass_Filter.html) – DerHandwerk
Обратите внимание, что этот фильтр является непрерывным, что может ведут себя совсем по-другому от БПФ (где ответ может иметь огромные перерегулирования между центрами bin, а не быть плоскими, согласно диаграмме). – hotpaw2