4

我在做实验作业时遇到了一个问题,不知道如何实现:

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

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

  Pc        256x256            65536  uint8              

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

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

4

2 回答 2

4

尝试:

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

以分贝为单位:

psd=immultiply(log10(abs(fftshift(fft2(Pc)))), 20);
于 2013-11-08T20:30:44.930 回答
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 中的最小值显示为黑色,最大值显示为白色。

于 2014-10-28T12:53:34.490 回答