Изображение с частотной фильтрацией становится черным после выполнения обратного БПФ

Я пишу программу, которая будет вычислять БПФ изображения, применять простые фильтры в частотной области, а затем выполнять обратное БПФ для отображения отфильтрованного изображения во временной области.

Я сделал следующее:

  1. Создайте матрицу NxN, где N*N является степенью числа 2, а N больше, чем ширина и высота исходного изображения.

  2. Инициализируйте матрицу комплексом 0+0i. Эффективное заполнение изображения нулями.

  3. Центрируйте исходное изображение в матрице, взяв журнал значений каждого пикселя, чтобы в конечном итоге их можно было отобразить в видимом диапазоне в частотной области. Я обрабатываю каждый элемент цвета R/G/B в отдельной матрице.

  4. Преобразуйте матрицу в одномерный массив и выполните одномерное БПФ для данных. Позже я обновлю это до 2D FFT.

  5. Примените фильтр к частотным данным. В этом случае я использую круг в центре частотных данных. Это должно действовать как фильтр верхних частот, если данные за пределами круга исключены, или как фильтр нижних частот, если данные внутри круга исключены. Чтобы применить фильтр, я заменяю значение комплексного числа для отклоненных частот на 0+0i. Это должно быть таким же, как умножение на матрицу фильтра 1 для пропускаемых частот и 0 для отклоненных частот.

  6. Выполните обратное БПФ на отфильтрованных частотных данных и создайте отфильтрованное изображение во временной области.

Кажется, все работает, за одним исключением:

Когда я использую частотный фильтр, который включает точку в центре частотной области, обратное БПФ завершается успешно и создает изображение только с высокими частотами.

Когда я использую частотный фильтр, который исключает точку в центре изображения, результирующее обратное БПФ дает полностью черное изображение.

Я не уверен, почему весь результат изображения черный. Я ожидаю, что он будет содержать все низкочастотные данные. Должен ли фильтр быть симметричным? Есть ли что-то особенное в частотной точке в начале координат, что я упустил?


person BKnight    schedule 19.11.2013    source источник
comment
В качестве теста я использовал фильтр, который отбрасывал круг в середине частотной области, а затем пропускал несколько средних пикселей. Теперь изображение видно. Есть что-то особенное, что нужно сделать с этим средним пикселем, но я не уверен, что именно.   -  person BKnight    schedule 20.11.2013
comment
Кажется, что удаление частот в центре частотной области удалит самые сильные сигналы в изображении. Эти сильные сигналы также повышают яркость других пикселей. Если другие сигналы в изображении не усиливаются для компенсации, изображение будет слишком темным для распознавания. Каков подходящий метод для корректировки потерянных интенсивностей?   -  person BKnight    schedule 20.11.2013
comment
Вы можете нормализовать изображение с плавающей запятой, найдя минимальное и максимальное значение, а затем (при условии интенсивности от [0...1]): pixel = (pixel-min) / (max-min)   -  person Sam    schedule 20.11.2013
comment
Я не уверен, что это сделает то, что мне нужно. Интенсивность должна быть увеличена в частотной области, прежде чем она будет преобразована в обратное БПФ. Значения в частотной области представляют собой комплексные числа. Поскольку комплексные числа не упорядочены, я не могу сказать, какое из них больше другого. Все, что я могу использовать, это величина комплексного числа.   -  person BKnight    schedule 20.11.2013
comment
Изображение полностью нулевое? Или даже NaN, INF? Не могли бы вы предоставить код?   -  person Sam    schedule 20.11.2013
comment
Возможно, у вас перепутаны частоты. Убедитесь, что низкие частоты плюс требуемое смещение постоянного тока не находятся в среднем круге.   -  person hotpaw2    schedule 20.11.2013
comment
(1) Проверяли ли вы свои данные в матрице? Они все нулевые? (2) Удалили ли вы постоянную составляющую вашего сигнала перед применением БПФ? (3) Вы меняли частоту при выполнении БПФ?   -  person lennon310    schedule 21.11.2013
comment
По сути, я делаю то, что изображено здесь: страница FFT Пола Бурка. После того, как я вычислил БПФ, мне нужно поменять местами данные о частоте в начале координат, чтобы получить перекрестное изображение. Перекачка Пола Бурка по исходному изображению Являются ли пиксели в центре изображения по существу Компонент постоянного тока тогда? Как только я закончу применять фильтр нижних частот, я переставлю частоты обратно в исходную точку и вычислю обратное БПФ.   -  person BKnight    schedule 21.11.2013
comment
Я не уверен, что вы имеете в виду под изменением частоты при выполнении БПФ. Можете ли вы объяснить немного об этом?   -  person BKnight    schedule 21.11.2013


Ответы (1)


«Центральная» точка вашего преобразованного изображения представляет собой «DC-компонент» изображения, то есть среднее значение всех пикселей во «временной» области.

Если вы установите этот компонент равным нулю, вы сдвинете все пиксели вниз именно на эту величину. Таким образом, ваш входной диапазон (RGB Vlues) 0..255 станет -128..128.

Либо вы сдвигаете вывод обратно в какой-то «видимый» диапазон, либо не изменяете этот компонент постоянного тока, также известный как центральный пиксель.

person DrKoch    schedule 06.02.2015