2013-11-23 70 views
0

我想使用MATLAB来计算图像的一维PSD(分别沿着行和列)。Matlab - 使用fft的图像的对称PSD

我使用下面的代码片段。

F=fft(img,[],2);%FFT along dim2 
F=fftshift(F,2); 
mtf=(abs(F)).^2; 
mtf_mean = mean(mtf,2);% Mean of all contents of a row 
mtf_mean_norm = mtf_mean/max(max(mtf_mean)); %Normalization to 1 
plot(mtf_mean_norm); 

当我绘制它时,我期待一个关于中心的对称图(这就是我想要的)。但是,我碰巧看到两个部分看起来像附图所示的一样。

看起来像我有一个代码错误,任何线索我错过了什么?

图片网址:http://i.stack.imgur.com/RrLIt.jpg

回答

0

我不是一个图像处理的人,只是从我自己的统计知识,我会说。您应该使用mtf=abs(F)'*abs(F)而不是mtf=(abs(F)).^2。我得到了下图 enter image description here

这里是生成图的代码。

> img=randn(50,50); 
> F=fft(img,[],2);%FFT along dim2 
> F=fftshift(F,2); 
> mtf=abs(F)'*abs(F); 
> mtf_mean = mean(mtf,2);% Mean of all contents of a row 
> mtf_mean_norm = mtf_mean/max(max(mtf_mean)); %Normalization to 1 
> plot(mtf_mean_norm); 
> plot(mtf_mean_norm); 
0

我想了解当您沿图像的每一行操作一维FFT时您的观点。这种功率谱密度只沿着THE行,并且与其他行的信息无关,并且沿着列的轮廓(在对每行进行平均后)不一定是对称的。 当你在整个图像上做2D FFT时,你的PSD线是对称的。

F=abs(fftshift(fft2(img))).^2; 
plot(mean(F,2)); 

顺便说一句,有一个函数periodogram它被用来得到一维PSD。你可以比较你的结果,当你做一维PSD。