2010-11-03 6 views
3

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

Thanks,

+0

Вы получаете очень дешевое размытие, просто изменяя размер изображения. Уменьшите размер, затем измените размер до первоначального размера. –

ответ

2

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

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


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

+0

На самом деле я хочу реализовать алгоритм сглаживания изображения в частотной области. как фильтр идеального нижнего фильтра, фильтр нижних частот Баттерворта или фильтр верхних частот – Keshan

+0

@Keshan, существуют хорошо определенные алгоритмы, которые могут быть использованы для создания приближенных ядер свертки для разных фильтров. Мы говорим о том, как эти фильтры ведут себя в частотной области (так как это удобный способ думать о них), но почти все реализации DSP будут применять их в пространственном (или временном) домене напрямую, а не применять к спектру. Это связано с тем, что производительность и потеря качества, связанные с преобразованиями FFT, хуже, чем вы можете добиться с помощью свертки. –

0

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

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

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

+0

На самом деле я хочу реализовать его без использования библиотеки обработки изображений. – Keshan

+0

Это открытый исходный код, который вы можете читать, понимать, а затем реализовывать самостоятельно. Это не тривиальная задача, так что удачи. – Aliostad

1

Существует большая серия по проекту Кодекса Кристиана Graus, который вы могли бы оказаться полезными, особенно часть 2, которая занимается среди прочего, с сглаживающих фильтров:

Image Processing for Dummies with C# and GDI+ Part 1 - Per Pixel Filters
Image Processing for Dummies with C# and GDI+ Part 2 - Convolution Filters
Image Processing for Dummies with C# and GDI+ Part 3 - Edge Detection Filters
Image Processing for Dummies with C# and GDI+ Part 4 - Bilinear Filters and Resizing
Image Processing for Dummies with C# and GDI+ Part 5 - Displacement filters, including swirl
Image Processing for Dummies with C# and GDI+ Part 6 - The HSL color space

+1

Извините, я просто понял, что речь идет не о сглаживании в частотной области, тем не менее это может быть интересно для вас или других, которые приходят на эту страницу, поэтому я не буду удалять свой ответ. –

1

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

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

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