【问题标题】:Matlab fft2 anomaly (bug or stupid user error?)Matlab fft2 异常(错误或愚蠢的用户错误?)
【发布时间】:2018-06-05 09:52:08
【问题描述】:

在尝试在 Matlab 中复制光学傅里叶变换时,我执行了以下操作:

我将此 512x512 图像加载为“dot512r”:

然后做了:

>> 谁的dot512r 名称大小字节类属性 dot512r 512x512x3 786432 uint8 >> bwimg=rgb2gray(dot512r); >> 谁是bwimg 名称大小字节类属性 bwimg 512x512 262144 uint8 >> ftimg=fft2(bwimg); >> 图 >> imshow(log(fftshift(ftimg))/10.0);

这导致了这个图像(到目前为止一切都很好):

然后我做了逆 fft 并显示如下:

>> iftimg=ifft2(ftimg); >> imshow(iftimg);

这导致了以下图像,其中我用红色箭头标记了异常。我可以接受白条左上角和左下角的两个小像素“错误”,但图像左上角的大异常让我感到困惑。与我对 512x512 图像所做的其他几种形状相同的异常情况。

我不明白我做错了什么。

【问题讨论】:

  • 您确认bwimg 没有这些异常吗?你还能确认imag(iftimg) 是零吗?
  • 我查看了 bwimg,它没有异常。如果您只执行以下命令,可以看到与上述相同的输出异常:imshow(ifft2(fft2(bwimg)));

标签: matlab fft ifft


【解决方案1】:

尝试将ifft 的输出除以 255,您将不再看到异常。

你输入的是uint8,默认显示为0=黑色,255=白色。

你的输出是双精度的,默认显示为 0 = 黑色,1 = 白色。

也就是说,1 以上的所有内容都显示为纯白色。输入中您看不到的值 1 在输出中变为白色。

原则上,ifft(fft(x))-x 在数值精度范围内。但前提是 x 开始时是双精度数。

【讨论】:

    【解决方案2】:

    好的,我相信我知道发生了什么。

    我开始怀疑它是否是 JPEG 压缩工件。 Jpeg 的 8x8 像素单元的频率为 512/8 或 64。这大致就是异常出现的地方。

    最初我在 Photoshop 中创建图像,然后使用“保存为网络”选项并将质量设置为 100%,所以我认为不会有 JPEG 压缩噪音。我没有注意到标有“优化”的小复选框,它被选中了。

    我从头开始重新创建图像,并确保一切都是纯黑白的,并在未选中“优化”框的情况下保存它。

    当我在新图像上重新运行正向和反向 fft2 时,大异常消失了。只有角落里的小东西存在,那些可能来自精度损失。这是新的输出:

    >>imshow(ifft2(fft2(rgb2gray(dot512f))));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多