Нахождение эквивалентной маски фильтра Гаусса в частотной области для заданной маски в пространственной области - PullRequest
2 голосов
/ 21 января 2011

До сих пор я реализовал фильтр размытия по Гауссу полностью в пространственной области, используя отделимость по Гауссу, то есть применяя одномерное ядро ​​Гаусса вдоль строк, а затем вдоль столбцов изображения. Это сработало нормально.

Теперь, учитывая только размер N матрицы свертки NxN в пространственной области, я хочу получить точно такое же размытое изображение в частотной области. Это означает, что я загружу изображение в матрицу (numpy, я использую python), наложу на него БПФ (тогда у меня есть G (x, y)), а затем у меня должен быть также фильтр H ( и, v) в частотной области, которая также напоминает форму некоторого 2-го гауссиана, при этом его значение центра равно 1,0, а затем значения падают до 0 по мере удаления от центра я. Затем я делаю умножение в частотной области (прежде чем я должен рассмотреть возможность сдвига центра H), а затем применяю iFFT.

Проблема, с которой я столкнулся, заключается в том, чтобы найти точную формулу (то есть найти сигму, отклонение от стандартного отклонения), которая приведет к соответствующему H (u, v). Из области пространства, если мне дали размер маски N, я знаю, что сигма std-dev может быть аппроксимирована как сигма = (maskSize-1) /2/2.575, например, для размера маски N = 15 я получаю std-dev = 2.71845 для e ^ - (x² / 2sigma²), просто пока рассматривая одномерные случаи.

Но как мне получить сигма для частотной области?

Забавно, кстати, что в теории я знаю, как получить сигму, используя Mathematica, но результат, как я могу продемонстрировать, является чистым поддельным:

gauss1d[x_, sigma_] := Exp[-(x^2)/(2 sigma^2)]
Simplify[FourierTransform[gauss1d[x, sigma], x, omega], sigma > 0]

Результат E ^ (- (1/2) омега ^ 2 сигма ^ 2) * сигма

Это фальшивка, потому что в показателе функции E она превращает 1 / sigma² в sigma². Следовательно, если вы нарисуете это, вы увидите, что стандартное отклонение стало намного меньше, поскольку H (u, v) -гауссиан намного «тоньше». Однако на самом деле он должен быть намного шире в частотной области, чем в космической области !! Это не имеет никакого смысла ...

1 Ответ

7 голосов
/ 22 января 2011

Преобразование Фурье для гауссиана является гауссовым, как вы можете видеть из

http://en.wikipedia.org/wiki/Fourier_transform

Но обратите внимание, что стандарт.девиацияИнвертирует !!!!

Вы говорите, что это фальшивка, НО это не так.Частотная область, в некотором смысле, является инверсией временной области.

freq = 1 / time

Стандартное отклонение дано во времени, когда вы преобразуете, оно все еще во времени (константа не преобразуется).

Предположим, вы нашли временную версию гауссианы, использующую некоторые s в терминах времени.Вы преобразуете данные в свободное пространство.Вы можете использовать эти s, и они будут вести себя именно так, как и предполагалось.Например, если у вас маленький s, то это вызовет freq std.девиацияв версии частоты она должна быть большой.

Опять же, это потому, что частота - это инверсия времени (опять же, в некотором смысле).

Предположим, у вашего гауссиана очень маленький стандарт.девиацияТогда он приближается к дельта-функции Дирака.Мы знаем это, потому что превращается в синусоиду в домене freq.то есть то, что охватывает всю частотную область.(т. е. имеет бесконечное стандартное отклонение. (если бы это был гауссов).

Думайте об этом так: Вы хотите сглаживать в частотной области. Сглаживание, что? Высокочастотные компоненты, верно? Свертываяс гауссианом вы сглаживаете данные. Если стандартное отклонение мало, вы сохраняете более высокие частоты. В частотной области это означает, что вы УДЕРЖИВАЕТЕ больше частот. Но сложение - это умножение в частотной области. Если мы умножаем натонкий гауссиан в частотной области мы остались бы с небольшой группой частот.

G (t) * f (t) G [w] * f [w]

Первый, свертка. Для гладкого фильтра мы хотим, чтобы G (t) был «большим» (стандартное значение - большим). Это означает, что мы хотим меньше высокочастотных компонентов (своего рода фильтр нижних частот).частотная область, которую мы умножаем на G [w]. Это означает, что G [w] должна быть тонкой (и центрирована вокруг начала координат), чтобы мы блокировали максимумы.

Я думаю, что в основном вы непонимая, что во временной области мы чсвертка и частотная область это умножение.G не может быть одинаковым в обоих.Если G является тонким во временной области и тонким в частотной области, они не приведут к тому же самому эффекту.G thin в свертке почти не дает эффекта, но G thin в частоте.Домен практически полностью удаляет все частоты (сохраняются только самые низкие).

...