размытие по Гауссу с помощью БПФ - PullRequest
9 голосов
/ 24 августа 2010

Я пытаюсь реализовать размытие по Гауссу с использованием БПФ и могу найти здесь следующий рецепт.

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

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

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

Ответы [ 2 ]

16 голосов
/ 24 августа 2010

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

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

2 голосов
/ 28 августа 2010

Если вам не безразличен пиксельный шейдер, и если БПФ не является для вас главной целью, а свертка с ядром размытия по Гауссу IS, - тогда я могу порекомендовать мой урок о том, что такое свертка

привет.

...