У меня есть текущая реализация Gaussian Blur с использованием регулярной свертки. Он достаточно эффективен для небольших ядер, но как только размер ядра становится немного больше, производительность падает. Итак, я думаю реализовать свертку с использованием БПФ. У меня никогда не было опыта обработки изображений, связанных с БПФ, поэтому у меня есть несколько вопросов.
Можно ли разделить свертку на основе 2D БПФ на две одномерные свертки?
- If true, does it go like this - 1D FFT on every row, and then 1D FFT on every column, then multiply with the 2D kernel and then inverse transform of every column and the inverse transform of every row? Or do I have to multiply with a 1D kernel after each 1D FFT Transform?
Теперь я понимаю, что размер ядра должен быть того же размера, что и изображение (строка в случае 1D). Но как это повлияет на края? Нужно ли заполнять края изображения нулями? Если да, то размер ядра должен быть равен размеру изображения до или после заполнения?
Кроме того, это проект C ++, и я планирую использовать kissFFT, поскольку это коммерческий проект. Вы можете предложить лучшие альтернативы. Спасибо.
РЕДАКТИРОВАТЬ: Спасибо за ответы, но у меня есть еще несколько вопросов.
Я вижу, что мнимая часть входного изображения будет нулевая. Но будет ли выходная мнимая часть тоже нулями? Нужно ли умножать гауссово ядро как на действительную, так и на мнимую части?
У меня есть экземпляры одного и того же изображения, которые нужно размыть в разных масштабах, то есть одно и то же изображение масштабируется до разных размеров и размывается при разных размерах ядра. Должен ли я выполнять БПФ каждый раз, когда масштабирую изображение, или я могу использовать одно и то же БПФ?
Наконец, если я хочу визуализировать БПФ, я понимаю, что к БПФ должен применяться фильтр журнала. Но я действительно не понимаю, какую часть следует использовать для визуализации БПФ? Реальная часть или мнимая часть.
Также для изображения размером 512x512, каким будет размер реальной и мнимой частей. Они будут одинаковой длины?
Еще раз спасибо за подробные ответы.