为什么某些图像没有显示正确的傅立叶和反向光谱?

时间:2016-06-13 08:33:07

标签: c# c#-4.0 image-processing fft

我正在尝试开发一个图像处理应用程序。

Here is my complete code in DotNetFiddle

我使用来自互联网的不同图像测试了我的应用程序:

蝴蝶和野鸡的大小调整为300 x 300

以下两张图片显示正确傅立叶和反傅里叶谱:

enter image description here

enter image description here

以下两张图片未显示预期结果:

enter image description here

enter image description here

可能是什么原因?

后两张图片有问题吗?

我们是否需要使用特定质量的图像来测试图像处理应用程序?

2 个答案:

答案 0 :(得分:1)

code you linked to是一个基数-2 FFT实现,适用于尺寸精确为2的任何图像。

顺便提一下,Cameraman图像是256 x 256(2的幂),Baboon图像是512 x 512(再次是2的幂)。调整为300 x 300的其他两个图像不是2的幂。在将这些图像调整为2的精确幂(例如256或512)之后,FrequencyPlot的输出为最后的亮度分量两个图像看起来应该如下:

<强>蝶

FFT mag of butterfly brightness

<强>野鸡

enter image description here

其他尺寸图像的常见解决方法是将图像填充为2的精确大小。否则,如果必须处理任意大小的图像,则应考虑其他2D离散傅立叶变换(DFT)算法或库。通常会支持小素数产品的尺寸。 请注意,为了验证输出,您还可以选择使用直接DFT公式(尽管您不应期望相同的性能)。

答案 1 :(得分:0)

我没时间挖掘您的代码。就像我在评论中所说的那样,你应该关注这些图像之间的差异。

没有理由不能计算一个图像的FFT而另一个图像失败。除非您的代码中存在某些问题,否则无法处理这些图像之间的某些差异。如果你可以显示它们,你应该能够处理它们。

所以引起我注意的第一件事就是你成功的两个图像都有均匀的尺寸,而算法产生垃圾的图像至少有一个奇怪的尺寸。我不会再根据经验对此进行调查。我非常有信心这会导致您的问题。

所以你要做其他事情: 取其中一个工作正常的图像,删除一行或一行,看看你是否得到了好的结果。然后修复你的代码。