Размытие по Гауссу с вопросами БПФ

У меня есть текущая реализация Gaussian Blur, использующая обычную свертку. Он достаточно эффективен для небольших ядер, но как только размер ядра становится немного больше, производительность падает. Итак, я думаю реализовать свертку с использованием БПФ. У меня никогда не было опыта обработки изображений, связанных с БПФ, поэтому у меня есть несколько вопросов.

  1. Можно ли разделить свертку на основе 2D БПФ на две одномерные свертки?

    • Если это правда, происходит ли это так - 1D БПФ включен каждую строку, а затем 1D FFT для каждого столбца, затем умножить на 2D ядро, а затем обратное преобразование каждого столбца и обратное преобразование каждой строки? Или мне нужно умножать на 1D ядро ​​после каждого 1D преобразования БПФ?
  2. Теперь я понимаю, что размер ядра должен быть того же размера, что и изображение (строка в случае 1D). Но как это повлияет на края? Нужно ли заполнять края изображения нулями? Если да, то размер ядра должен быть равен размеру изображения до или после заполнения?

Кроме того, это проект C ++, и я планирую использовать kissFFT, поскольку это коммерческий проект. Вы можете предложить лучшие альтернативы. Спасибо.

РЕДАКТИРОВАТЬ: Спасибо за ответы, но у меня есть еще несколько вопросов.

  1. Я вижу, что мнимая часть входного изображения будет состоять из нулей. Но будет ли выходная мнимая часть тоже нулями? Должен ли я умножать гауссово ядро ​​как на действительную, так и на мнимую части?

  2. У меня есть экземпляры одного и того же изображения, которые нужно размыть в разных масштабах, то есть одно и то же изображение масштабируется до разных размеров и размывается при разных размерах ядра. Должен ли я выполнять БПФ каждый раз, когда масштабирую изображение, или я могу использовать одно и то же БПФ?

  3. Наконец, если я хочу визуализировать БПФ, я понимаю, что к БПФ должен применяться фильтр журнала. Но я действительно не понимаю, какую часть следует использовать для визуализации БПФ? Действительная или мнимая часть.

  4. Также для изображения размером 512x512, каким будет размер реальной и мнимой частей. Они будут одинаковой длины?

Еще раз спасибо за подробные ответы.

5
задан CharlesB 5 June 2012 в 12:10
поделиться