图像的功率谱

AJW*_*AJW 6 matlab signal-processing dft

我已经开始(一个小项目)来计算频域中图像的功率谱.

所以,我到现在所拥有的是以下内容:

%// close all; clear all; %// not generally appreciated
img   = imread('ajw_pic.jpg','jpg'); % it is a color image
img = rgb2gray(img); %// change to gray
psd = 10*log10(abs(fftshift(fft2(img))).^2 );
figure(2); clf
mesh(psd)
Run Code Online (Sandbox Code Playgroud)

到目前为止它看起来不错; 我得到的网格图类似于我在各种学术论文中看到的光谱.

然而,我正在寻找的是这个功率谱与频率的关系图,我不完全确定如何得到这个频率向量.我可以这样做:

N=400;        %// the image is 400 x 400
f=-N/2:N/2-1; %// possible frequencies?
Run Code Online (Sandbox Code Playgroud)

但我不相信这是完全正确的,因为这会产生负频率.

如果有人能指出我正确的方向绘制对数频率与功率谱,我真的很感激.

kam*_*gin 2

fft将信号“拆分”为频率“箱”,其中您可以观察到的最大频率是奈奎斯特频率或采样频率的一半。这意味着对于:

Y = fft(X,N); %  (1D case)
Run Code Online (Sandbox Code Playgroud)

对应于 fft 值的频率Y(1:N/2+1)将为:

f = [fs/2*linspace(0,1,N/2+1)]; % where fs is your sampling frequency
Run Code Online (Sandbox Code Playgroud)

Y 的另一半只是镜像,来自傅立叶变换的本征。如果你不想完全理解它,我想说除了你可以在维基百科上找到的内容之外,没有必要费心去了解它。但出于好奇,您可以查看正频率和负频率起源的直观说明:https://dsp.stackexchange.com/questions/431/what-is-the-physical-significance-of-negative -频率/449#449

2D 图像案例的一些主要区别:

  1. 使用 fftshift,您已将 0 频率移动到矩阵的中心,而不是像上面的 1D 示例那样将它们放在边缘。所以你实际上会得到f = fs/2 * linspace(-1,1,N)(再一次,不要介意负频率)

  2. 下一个问题是获取采样频率。空间频率通常以 [mm^-1] 为单位测量,因此为了获得它,您实际上需要知道像素中心之间的物理距离(像素间距)。但是您当然可以考虑 [pixels^-1] 中的空间频率,在这种情况下您就可以开始了。