如何从2D FFT计算功率谱

时间:2013-11-08 19:42:02

标签: matlab fft

我在做实验室分配时遇到问题,不知道如何实现这个:

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

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

  Pc        256x256            65536  uint8              

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

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

2 个答案:

答案 0 :(得分:4)

尝试:

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

以dB为单位:

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

答案 1 :(得分:3)

我猜你正在寻找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中的最小值显示为黑色,最大值显示为白色。