【问题标题】:How to implement smoothing in frequency domain?如何实现频域平滑?
【发布时间】:2011-05-04 12:06:20
【问题描述】:

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

谢谢,

【问题讨论】:

  • 您只需调整图像大小即可获得非常便宜的模糊效果。把它变小,然后调整回原来的大小。

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


【解决方案1】:

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

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

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

【讨论】:

  • 其实我想在不使用任何图像处理库的情况下实现它。
  • 它是开源的,你可以阅读、理解然后自己​​实现。这不是一项微不足道的任务,祝你好运。
【解决方案2】:

【讨论】:

  • 对不起,我刚刚意识到这不是关于频域的平滑,但它可能对您或访问此页面的其他人感兴趣,所以我不会删除我的答案。
【解决方案3】:

您能否定义“频域平滑”的含义?您可以使用 FFT 生成频谱图像,并将图像乘以某个函数以衰减特定频率,然后使用逆 FFT 将频谱转换回图像。但是,对于这种滤波(在频率上乘以某个缩放函数),您可以通过在空间域中与对偶函数进行卷积来更快地获得相同的结果。

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


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

【讨论】:

  • 实际上我想在频域中实现图像平滑算法。比如理想低通滤波器、巴特沃斯低通滤波器或高通滤波器
  • @Keshan,有一些定义明确的算法可用于为不同的过滤器生成近似卷积核。我们讨论了这些滤波器在频域中的行为(因为这是一种方便的思考方式),但几乎所有 DSP 实现都将它们直接应用于空间(或时间)域,而不是应用于频谱。这是因为与 FFT 转换相关的性能和质量损失比使用卷积所能达到的要差。
【解决方案4】:

克山,很简单。想象一下 FFT 是另外两张图片,其中低频位于中间,高频远离中间。如果像素从 -w/2 到 w/2 和 -h/2 到 h/2 编号,您可以简单地测量到中间的距离 a(x,y)=sqrt(x^2+y^2) .然后取一些任意单调递减函数,如 f(x)=1/(1+x),并将 fft 中的每个点乘以 f(a(x,y))。然后使用 FFT 变换回来。

f(x) 有不同的选择,看起来会有所不同。例如高斯函数或贝塞尔或其他。我为我的本科生做了这个,非常有趣。如果你给我发邮件,我会把我的程序发给你:-)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2016-10-13
    相关资源
    最近更新 更多