如何在频域中实现平滑?

时间:2010-11-03 13:32:18

标签: c# image-processing filtering frequency-analysis

我想对频域中的图像进行平滑处理。当我使用谷歌看到任何文章它给了一些我不需要的Matlab代码。我可以对图像进行FFT,但我不知道如何在频域中实现任何平滑技术(ILPF,BLPF,IHPF,BHPF)。如果您可以为任何上述技术提供任何代码示例而不使用任何图像处理库,那么它将非常有用并且C#是首选。

谢谢,

4 个答案:

答案 0 :(得分:2)

您能否通过'在频域中平滑'来定义您的意思?您可以使用FFT生成光谱图像,并通过某种函数将图像乘以衰减特定频率,然后使用逆FFT将光谱转换回图像。但是,对于这种滤波(通过频率中的某些缩放函数进行乘法),通过在空间域中对双重函数进行卷积,可以更快地实现相同的结果。

在任何情况下,如果您希望自己实现,请阅读FFT(快速傅立叶变换)和卷积。如果您感兴趣,也可以查看信号处理教科书,因为离散滤波背后的理论相当深入。如果没有这个理论,算法就没有多大意义,尽管你可以在不理解它们的情况下应用它们。


如果您想实施自己的DSP算法,请在线查看this book。特别是,第33章描述了巴特沃斯滤波器设计背后的数学和算法。第12章描述了如何实现FFT。

答案 1 :(得分:1)

答案 2 :(得分:1)

克山,很简单。想象一下,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)有不同的选择,看起来会有所不同。例如高斯函数或bessel或其他。我为我的本科生做了这件事,非常有趣。如果你给我发邮件,我会寄给你我的程序: - )。

有一点需要注意的是fft输出的排序。它生成的数组可以以奇怪的方式排序。重要的是要找出哪个数组索引对应于“分析”傅里叶变换中的哪个x / y位置!

答案 3 :(得分:0)

对于所有图像/信号处理,我推荐使用OpenCV。

这有一个托管的C#包装器:Emgu。

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