【问题标题】:How to compute power spectrum from 2D FFT如何从 2D FFT 计算功率谱
【发布时间】:2013-11-08 19:42:01
【问题描述】:

我在做实验作业时遇到问题,不知道如何实施:

在灰度图像上使用fft2 并进行傅里叶变换,然后计算功率谱。到目前为止,这是我的代码:

>> Pc = imread('pckint.jpg');
>> whos Pc;
  Name        Size             Bytes  Class    Attributes

  Pc        256x256            65536  uint8              

>> imshow(Pc);
>> result = fft2(Pc);

我的问题来自结果。如何计算功率谱?

【问题讨论】:

    标签: matlab fft


    【解决方案1】:

    试试:

    psd=abs(fftshift(fft2(Pc))).^2;
    

    分贝:

    psd=immultiply(log10(abs(fftshift(fft2(Pc)))), 20);
    

    【讨论】:

    • 我不熟悉图像上下文中的功率谱密度,但通常 dB 标度需要乘以 10。如果您需要平方项(同样,我对图像不够熟悉处理来说明是否有必要)然后你可以乘以 20 并删除正方形。
    • 日志 10 是干什么用的?
    • log是用dB表示psd。感谢 nisio 指出因素。
    • 强度值的分贝为 20*log10(value)。
    【解决方案2】:

    我猜你正在寻找FFT的对数形式,因为这是表达傅里叶级数功率谱的更好方法之一,因为与8位的频谱相比,频谱的动态范围是如此之大中心的亮度值主导结果的显示,这个困难是通过对数变换来处理的。

    这是在 MATLAB 中的做法:

    I = imread('cameraman.tif');
    imshow(I)
    F = fft2(I);
    shF = fftshift(F);
    Log = log2(1 + abs(shF));
    imshow(Log, []);
    

    imshow 表达式末尾的空括号对于在指定范围内显示图像是必需的,对于这种情况,表示 [min(I(:)) max(I(:))];即I中的最小值显示为黑色,最大值显示为白色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 2015-05-24
      • 2011-02-05
      相关资源
      最近更新 更多