我正在尝试开发一个图像处理应用程序。
Here is my complete code in DotNetFiddle
我使用来自互联网的不同图像测试了我的应用程序:
蝴蝶和野鸡的大小调整为300
x 300
。
以下两张图片显示正确傅立叶和反傅里叶谱:
以下两张图片未显示预期结果:
可能是什么原因?
后两张图片有问题吗?
我们是否需要使用特定质量的图像来测试图像处理应用程序?
答案 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
的输出为最后的亮度分量两个图像看起来应该如下:
<强>蝶强>
<强>野鸡强>
其他尺寸图像的常见解决方法是将图像填充为2的精确大小。否则,如果必须处理任意大小的图像,则应考虑其他2D离散傅立叶变换(DFT)算法或库。通常会支持小素数产品的尺寸。 请注意,为了验证输出,您还可以选择使用直接DFT公式(尽管您不应期望相同的性能)。
答案 1 :(得分:0)
我没时间挖掘您的代码。就像我在评论中所说的那样,你应该关注这些图像之间的差异。
没有理由不能计算一个图像的FFT而另一个图像失败。除非您的代码中存在某些问题,否则无法处理这些图像之间的某些差异。如果你可以显示它们,你应该能够处理它们。
所以引起我注意的第一件事就是你成功的两个图像都有均匀的尺寸,而算法产生垃圾的图像至少有一个奇怪的尺寸。我不会再根据经验对此进行调查。我非常有信心这会导致您的问题。
所以你要做其他事情: 取其中一个工作正常的图像,删除一行或一行,看看你是否得到了好的结果。然后修复你的代码。