2012-03-19 69 views
2

我猜這裏有多種形式的問題在這裏在stackoverflow。但我無法理解我如何解決我的問題。在MATLAB中的圖像中存在的最大頻率

我有一個圖像,我想找到圖像的頻率內容。

img = imread('test.tif'); 
img = rgb2gray(img); 
[N M] = size(img); 
%% Compute power spectrum 
imgf = fftshift(fft2(img)); 
imgfp = (abs(imgf)/(N*M)).^2; 

我知道我必須使用fft來達到這個目的。但是我想知道是否可以根據特定值找到圖像中的最大頻率,比如'x週期/毫米'或'x週期/英寸'。

這樣做的最好方法是什麼?

謝謝。

+3

如果你看看'imgfp',你會注意到幾乎所有的圖像都將具有非零的頻率內容,直到fs/2(其中fs是採樣率)。所以你需要澄清你的意思是「最高頻率」。 – 2012-03-19 20:57:03

回答

4

FFT返回一個數組中的數據,其中每個數組元素與每個總數據寬度(或高度等)的循環有些相關。因此,您可以用某個尺寸單位(例如「英寸」)將圖像大小除以每個FFT單元的數量,以獲得每單位尺寸的週期數(例如每英寸的週期數)。請注意,除了某些非常特定的狹窄指定類型的圖像(例如恆定幅度精確孔徑的週期性正弦梯度)外,任何圖像內容都將在整個頻譜和FFT結果範圍內飛濺。因此,您可能必須爲頻率內容設置一些非零閾值,然後才能限制「最大」頻率搜索。

+0

感謝您的回覆。所以我想我應該先找到FFT的bin編號。 – Sista 2012-03-19 21:31:58

+0

不是「垃圾箱號碼」。一個FFT具有N/2個bin(對於典型的實際輸入是獨立的),每個都有一個複數幅度值。 – hotpaw2 2012-03-19 22:19:30

+0

值得指出的另一件事是,你隱式地假設矩形窗口函數,但直接計算FFT。在實踐中幾乎沒有人會使用它。您應該考慮使用Chebyshev窗口來對圖像進行卷積處理,以減少旁瓣在頻率估計中的影響。如果你是新手,這可能聽起來像是一堆胡言亂語,但它非常值得學習,而且Matlab有很好的內置插件,可以使開窗更容易。 – ely 2012-03-20 07:08:31