2010-08-24 6 views
8

im пытается реализовать гауссовское размытие с использованием FFT и может найти здесь следующий рецепт.gaussian blur with FFT

Это означает, что вы можете взять преобразование Фурье изображений и фильтра, умножать (сложные) результатов, а затем взять обратное преобразование Фурье .

У меня есть ядро ​​K, матрица 7x7 и изображение I, матрица 512x512.

Я не понимаю, как умножить K на I. Это единственный способ сделать это, сделав K таким большим, как я (512x512)?

ответ

15

Да, вам нужно сделать K таким большим, как я, заполнив его нулями. Кроме того, после заполнения, но прежде чем вы берете FFT ядра, вам нужно перевести его с помощью wraparound, так что центр ядра (пик гауссова) находится в точке (0,0). В противном случае отфильтрованное изображение будет переведено. Кроме того, вы можете перевести полученное отфильтрованное изображение, как только вы закончите.

Еще один момент: для небольших ядер, не использующих БПФ, на самом деле может быть быстрее. 2D-гауссовское ядро ​​является разделимым, что означает, что вы можете разделить его на два ядра 1D для x и y. Затем вместо двумерной свертки вы можете сделать две одномерные свертки в направлениях x и y в пространственной области. Для более мелких ядер, которые могут оказаться быстрее, чем выполнение свертки в частотной области с использованием БПФ.

2

Если вы знакомы с пиксельными шейдерами и если FFT не ваша главной цели здесь, но свертка с гауссовым ядром размывания, - то я могу порекомендовать моему учебнику on what convolution is

приветы.

Смежные вопросы