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

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

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

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

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


person Paul    schedule 24.08.2010    source источник


Ответы (2)


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

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

person Dima    schedule 24.08.2010

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

С уважением.

person Agnius Vasiliauskas    schedule 28.08.2010