Гауссово размытие и БПФ - PullRequest
       60

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

3 голосов
/ 14 октября 2011

Я пытаюсь реализовать реализацию размытия по Гауссу для школьного проекта. Мне нужно сделать реализацию CPU и GPU для сравнения производительности.

Я не совсем уверен, что понимаю, как работает размытие по Гауссу. Итак, один из моих вопросов если я правильно понял?

Вот что я делаю сейчас: Я использую уравнение из Википедии http://en.wikipedia.org/wiki/Gaussian_blur для расчета фильтр. Для 2d я беру RGB каждого пикселя в изображении и применяю фильтр к нему: умножение RGB пикселя и окружающих пикселей на соответствующую позицию фильтра. Затем они суммируются для получения новых значений RGB пикселей. Для 1d я применяю фильтр сначала горизонтально, а затем вертикально, что должно дать тот же результат, если я правильно понимаю вещи. Является ли этот результат точно таким же, как при применении 2d-фильтра?

Еще один вопрос, который у меня есть, о том, как алгоритм может быть оптимизирован. Я читал, что быстрое преобразование Фурье применимо к размытию по Гауссу. Но я не могу понять, как это соотнести. Может ли кто-нибудь дать мне подсказку в правильном направлении?

Спасибо.

1 Ответ

6 голосов
/ 14 октября 2011

Да, двумерное гауссовское ядро ​​ отделимо , так что вы можете просто применить его как два одномерных ядра.Обратите внимание, что вы не можете применить эти операции «на месте», однако - вам нужен как минимум один временный буфер для хранения результата первого прохода 1D.

Свертка на основе FFT - полезная оптимизация, когда у вас большиеядра - это относится к любому виду фильтров, а не только к гауссовским.Насколько велико «большое», зависит от вашей архитектуры, но вы, вероятно, не хотите беспокоиться об использовании подхода на основе FFT для чего-то меньшего, чем, скажем, ядро ​​49x49.Общий подход таков:

  • БПФ на изображении
  • БПФ на ядре, дополненный размером изображения
  • , умножьте два в частотной области (эквивалентносвертка в пространственной области)
  • IFFT (обратное БПФ) результат

Обратите внимание, что если вы применяете фильтр к более чем одному изображению, вам нужно только БПФ с дополненным ядромодин раз.У вас все еще есть по крайней мере два FFT для каждого изображения (одно прямое и одно обратное), поэтому этот метод становится вычислительным выигрышем только для ядер большого размера.

...