Помните, что свертка в пространстве эквивалентна умножению в частотной области.Это означает, что как только вы выполняете БПФ как для изображения, так и для маски (ядра), вам нужно только выполнить умножение по точкам, а затем выполнить ОБПФ результата.Сказав это, вот несколько слов предостережения.
Вы, вероятно, знаете, что при цифровой обработке сигналов мы часто используем круговую свертку , а не линейнуюсвертка .Это происходит из-за любопытной периодичности .Проще говоря, это означает, что DFT (и FFT, который является его вычислительно эффективным вариантом) предполагает, что ваш сигнал является периодическим, а когда вы фильтруете свой сигнал таким образом - предположим, что ваше изображение N x M пикселей - что требуется пиксель в (1, m ) соседу или пиксель в ( N , m ) длянекоторые м <<em> М .Вы сигнализируете виртуально вокруг себя.Это означает, что ваша гауссова маска будет усреднять пиксели в дальнем правом углу с пикселями в дальнем левом углу, и то же самое относится к верху и низу.Это может быть или не быть желательным, но в общем случае все равно приходится иметь дело с краевыми артефактами.Однако гораздо проще забыть об этой проблеме при работе с умножением БПФ, потому что проблема перестает быть очевидной.Есть много способов решить эту проблему.Лучший способ - это просто дополнить изображение нулями и позже удалить лишние пиксели.
Очень полезная вещь при использовании гауссовского фильтра в частотной области состоит в том, что вам никогда не придется брать его FFT.Хорошо известен тот факт, что преобразование Фурье гауссовского является гауссовским (некоторые технические детали здесь ).Все, что вам нужно было бы сделать, это дополнить изображение нолями (сверху и снизу), сгенерировать гауссиан в частотной области, умножить их вместе и взять IFFT.Тогда все готово.
Надеюсь, это поможет.