Умножение изображений в частотной области - PullRequest
3 голосов
/ 21 марта 2011

Я работал с изображениями в частотной области (принимая ДПФ или БПФ изображения), и я знаю, что свертка в пространственной области - это умножение частоты.

Итак, мой вопрос: если бы я хотел применить конкретное ядро ​​(скажем, сглаживающее ядро ​​9x9) в области пространства, я бы просто свернул все изображение с помощью фильтра 9x9. Теперь, если я хочу сделать то же самое в частотной области, я беру БПФ как изображения, так и ядра? Тогда как / что мне умножить? После того, как у меня есть этот новый набор данных (изображение, умноженное на ядро), я просто изменяю направление БПФ, и это должно дать мне тот же результат, что и ядро, свернутое с изображением в области пространства, верно?

Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

Обратите внимание, что FFT умножение такое же, как круговая свертка (например, как если бы края ваших данных обернуты вокруг).Если вы не хотите, чтобы эти эффекты окружности были получены из результатов свертки, вы можете обнулить свои данные по крайней мере на ненулевую длину вашего ядра свертки плюс 1. Вы также должны обнулить свое ядро ​​свертки, чтобы придать ему такую ​​же длину.

Например, в вашем случае вы можете использовать FFT длиной 522 (512 + 9 + 1) или, возможно, FFT длиной 540 с меньшими ценовыми коэффициентами (библиотека FFTW может использоваться для очень эффективногоpower-of-2 FFT) или нулевое заполнение до 1024 FFT, если необходимо использовать степень 2.

Как и в ответе @ maola, как FFT данных, так и ядродолжно быть одинаковой длины (иначе частоты, которые вы умножаете, не будут совпадать), и вы должны выполнить сложное умножение в частотной области.

2 голосов
/ 21 марта 2011

IIRC, вам нужно, чтобы ваше FFT-изображение и ядро ​​(оба FFT-изображения) имели одинаковые размеры, затем умножали попиксельное оба FFT-изображения, а затем инвертировали FFT результат.

Позаботьтесь о том, что происходит с границами вашего изображения (см. БПФ-теория).

...