Как реализовать сглаживание в частотной области? - PullRequest
3 голосов
/ 03 ноября 2010

Я хочу сделать сглаживание изображения в частотной области. Когда я использую Google, чтобы увидеть какие-либо статьи, он дал некоторые коды Matlab, которые мне не нужны. Я мог бы сделать БПФ для изображения, но я не знаю, как реализовать какие-либо методы сглаживания (ILPF, BLPF, IHPF, BHPF) в частотной области. Если вы можете предоставить какие-либо примеры кода для любого из вышеперечисленных методов БЕЗ использования каких-либо библиотек обработки изображений, это будет очень полезно, и C # предпочтительнее.

Спасибо

Ответы [ 4 ]

2 голосов
/ 03 ноября 2010

Не могли бы вы определить, что вы подразумеваете под «сглаживанием в частотной области»?Вы можете сгенерировать изображение спектра, используя БПФ, и умножить изображение на некоторую функцию для ослабления определенных частот, а затем преобразовать спектр обратно в изображение, используя обратное БПФ.Однако для этого вида фильтрации (умножение на некоторую функцию масштабирования по частоте) вы можете быстрее достичь того же результата, свернув его с двойной функцией в пространственной области.

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


Если вы хотите реализовать свои собственные алгоритмы DSP, посмотрите книга онлайн.В частности, глава 33 описывает математику и алгоритм, лежащие в основе конструкции фильтра Баттерворта.Глава 12 описывает, как реализовать БПФ.

1 голос
/ 05 ноября 2010

Кешан, это просто. Представьте себе, что БПФ - это еще две картины, где низкие частоты лежат посередине, а высокие - далеко от середины. Если пиксели пронумерованы от -w / 2 до w / 2 и от -h / 2 до h / 2, вы можете просто измерить расстояние от середины как (x, y) = sqrt (x ^ 2 + y ^ 2) , Затем возьмите произвольную монотонную убывающую функцию, такую ​​как f (x) = 1 / (1 + x), и умножьте каждую точку в БПФ на f (a (x, y)). Затем преобразуйте обратно, используя БПФ.

Существуют разные варианты для f (x), которые будут выглядеть по-разному. Например, гауссовская функция или бессель или что-то еще. Я сделал это для моего старшекурсника, и это было очень весело. Если вы отправите мне письмо, я вышлю вам мою программу: -).

Однобитовое предостережение - это порядок вывода FFT. Массивы, которые он генерирует, могут быть упорядочены странным образом. Важно, чтобы вы выяснили, какой индекс массива соответствует какой x / y-позиции в «аналитическом» преобразовании Фурье!

0 голосов
/ 03 ноября 2010

Для обработки всех изображений / сигналов я рекомендую OpenCV.

Имеется управляемая оболочка C #: Emgu.

http://www.emgu.com/wiki/index.php/Main_Page

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...