我想对频域中的图像进行平滑处理。当我使用谷歌查看任何文章时,它提供了一些我不需要的 Matlab 代码。我可以对图像进行 FFT,但我不知道如何在频域中实现任何平滑技术(ILPF、BLPF、IHPF、BHPF)。如果您可以在不使用任何图像处理库的情况下为上述任何技术提供任何代码示例,那将非常有帮助,并且首选 C#。
谢谢,
我想对频域中的图像进行平滑处理。当我使用谷歌查看任何文章时,它提供了一些我不需要的 Matlab 代码。我可以对图像进行 FFT,但我不知道如何在频域中实现任何平滑技术(ILPF、BLPF、IHPF、BHPF)。如果您可以在不使用任何图像处理库的情况下为上述任何技术提供任何代码示例,那将非常有帮助,并且首选 C#。
谢谢,
您能否定义“频域平滑”的含义?您可以使用 FFT 生成频谱图像并将图像乘以某个函数以衰减特定频率,然后使用逆 FFT 将频谱转换回图像。但是,对于这种过滤(在频率上乘以某个缩放函数),您可以通过在空间域中与对偶函数进行卷积来更快地获得相同的结果。
无论如何,如果您想自己实现它,请阅读 FFT(快速傅里叶变换)和卷积。如果您有兴趣,还可以查看信号处理教科书,因为离散滤波背后的理论相当深入。如果没有这个理论,这些算法就没有多大意义,尽管你当然可以在不理解它们的情况下应用它们。
如果您想实现自己的 DSP 算法,请在线查看这本书。特别是,第 33 章描述了巴特沃斯滤波器设计背后的数学和算法。第 12 章描述了如何实现 FFT。
Christian Graus 的 Code Project 有一个很棒的系列,您可能会发现它很有用,尤其是第 2 部分,其中涉及平滑过滤器:
使用 C# 和 GDI+ 的傻瓜图像处理第 1 部分 - 每像素过滤器
使用 C# 和 GDI+ 的傻瓜图像处理第 2 部分 -
使用 C# 和 GDI+ 的傻瓜图像处理第 3 部分 - 边缘检测过滤器
使用 C# 和 GDI+ 的傻瓜图像处理部分4 - 使用 C# 和 GDI+ 对傻瓜进行双线性滤镜和调整
图像处理第 5 部分 - 置换滤镜,包括
使用 C# 和 GDI+ 对傻瓜进行漩涡图像处理 第 6 部分 - HSL 颜色空间
克山,很简单。想象一下 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 位置非常重要!