2013-12-09 333 views
4

我已經開始(一個小項目)來計算頻域圖像的功率譜。圖像的功率譜

所以,我有什麼到現在是這樣的:

%// 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) 

到目前爲止,它看起來不錯;我得到了類似於我在各種學術論文中看到的光譜的網格圖。

但是,我正在尋找的是這個功率譜與頻率的關係圖,我不完全確定如何獲得這個頻率矢量。我可以做例如:

N=400;  %// the image is 400 x 400 
f=-N/2:N/2-1; %// possible frequencies? 

但我不相信這是完全正確的,因爲這會導致負頻率。

我真的很感激,如果有人能指出我在正確的方向繪製日誌頻率與功率譜。

回答

2

fft將信號「拆分」爲頻率「bin」,其中您可以觀察到的最大頻率是奈奎斯特頻率或採樣頻率的一半。這意味着,對於:

Y = fft(X,N); % (1D case) 

頻率對應於FFT值在Y(1:N/2+1)將是:

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

Y的另一半是鏡像只是和來自傅立葉變換的內部函數。如果你不想完全理解它,我會說除了你可以在維基百科上找到的東西外,沒有必要去打擾它。但爲了好奇,您可以查看正負頻率起源的一個非常直觀的例子:https://dsp.stackexchange.com/questions/431/what-is-the-physical-significance-of-negative-frequencies/449#449

您的2D圖像情況下,一些關鍵的區別:

  1. 使用fftshift你移動的0頻率矩陣的中心,而不是讓他們在邊緣如上面1D例。所以你實際上會得到f = fs/2 * linspace(-1,1,N)(再一次,不要介意負頻率)

  2. 下一個問題是獲取採樣頻率。空間頻率通常以[mm^-1]來衡量,因此爲了獲得它,您實際上需要知道像素中心之間的物理距離(像素間距)。但你當然可以考慮[pixel^-1]的空間頻率,在這種情況下你準備好了。

+0

非常感謝您的詳細回覆。我似乎理解負頻率 - 但是,我還不完全確定的是我的頻率在fft之後應該如何。所以,正如你所解釋的,我可以使用'1/400'(給出400我的px),但是我沒有'fs',因爲這是一個圖像?此外,當我放映我的400x400圖像並計算功率時,結果也是一個400 x 400的矩陣 - 但是,我想我想要的是1x400的大小 - 以便我可以繪製頻率和功率譜。或者我在這裏很愚蠢? – AJW

+0

你的fs實際上是1像素或1 /(像素間距)mm。如果你沒有像素間距,你仍然可以使用fs = 1(只要記住這個單位 - 你的奈奎斯特頻率就是半個倒像素)。您還應該考慮在x和y方向上可以有不同的頻率(例如非二次像素) - 這就是爲什麼您有400x400矩陣。因此,創建一個fx和fy頻率矢量(它們與NX = NY = 400相同,且像素大小未知)。但是如何可視化它是一個不同的問題(除了用fx和fy作爲抽動標記標記軸之外,我沒有很好的答案) – kamjagin

+0

我正在嘗試做你所建議的:所以,我這樣做:'fs = 1;''f = fs/2 * linspace(-1,1,N); %其中N是400' - 這可以達到「-0.5到+0.5」 - 這是否有意義?這是Hz值還是弧度/秒? :( – AJW

0

如果您的空間間隔爲1像素,則可以使用fs = 1。然後你的頻率範圍是(-N/2:N/2-1)/N,其中N是你的圖像的大小(x或y方向的像素數)。請注意,頻率間隔爲1/N,N> 2時小於1/2像素,因此圖像處理中可以避免混疊。

+0

@ lenon310:感謝Lenon,但是當我繪製這個時,我的頻率範圍始終是'-0.5到+0.5'(這可以不是赫茲!)。另外,當我對功率譜(由我的問題中的'psd'定義)進行繪圖時,我從psd的圖上獲得了約400張圖。只是看起來不正確! :) – AJW

+0

AJW,請注意,頻率範圍取決於生成此圖像的採樣率(生成兩個像素(x,y)和(x + 1,y)需要多長時間),它是哪裏fs來自。頻率爲fs *( - 0.5,0.5),如果您假定採樣頻率爲1 Hz,則單位爲Hz。 – lennon310

1

要繪製功率譜與圖像頻率的關係曲線,可以使用稱爲「徑向平均」的過程。這將計算距離圖像中心某個徑向距離的像素的平均值。將其應用於功率譜密度矩陣可以得出功率與頻率的關係曲線。

欲瞭解更多信息和示例MATLAB代碼:http://www.mathworks.com/matlabcentral/fileexchange/46468-radialavg-zip/content/radialavg.m

+0

我刪除了第一段,因爲這個問題的確有一個解決方案,因此被接受的答案。此外,所有內容都保存在本網站上,因此未來的參考始終是這種情況。至於你自己的答案:請將鏈接中的所有相關代碼(如果可能的話)加入答案本身,因爲鏈接可能會腐爛。如果您不是該代碼的作者,則習慣於添加引用/引用。 – Adriaan