Да, двумерное гауссовское ядро отделимо , так что вы можете просто применить его как два одномерных ядра.Обратите внимание, что вы не можете применить эти операции «на месте», однако - вам нужен как минимум один временный буфер для хранения результата первого прохода 1D.
Свертка на основе FFT - полезная оптимизация, когда у вас большиеядра - это относится к любому виду фильтров, а не только к гауссовским.Насколько велико «большое», зависит от вашей архитектуры, но вы, вероятно, не хотите беспокоиться об использовании подхода на основе FFT для чего-то меньшего, чем, скажем, ядро 49x49.Общий подход таков:
- БПФ на изображении
- БПФ на ядре, дополненный размером изображения
- , умножьте два в частотной области (эквивалентносвертка в пространственной области)
- IFFT (обратное БПФ) результат
Обратите внимание, что если вы применяете фильтр к более чем одному изображению, вам нужно только БПФ с дополненным ядромодин раз.У вас все еще есть по крайней мере два FFT для каждого изображения (одно прямое и одно обратное), поэтому этот метод становится вычислительным выигрышем только для ядер большого размера.