2016-04-23 56 views
1

我嘗試對一組數據(它們是10張圖片,在中間畫一個'T')進行FFT並計算給定區域的頻譜大小。在Matlab中計算一個區域的頻譜大小

這裏是我的代碼:

for i=1:10 
    filename = sprintf('T%d.GIF', i); 
    %fourier transform and showing 
    f = imread(filename);  %read in image 
    z = fft2(double(f));  % do fourier transform 
    q = fftshift(z);   % puts u=0,v=0 in the centre 
    Magq = log(abs(q));    % magnitude spectrum 
    Phaseq=angle(q);   % phase spectrum 
    imagesc(log(abs(q)+1));  % Usually for viewing purposes: 
    colorbar; 
end 

The outcome after fft pic

上面的圖片是運行我的代碼之後公佈的結果。下面的圖片是我想要計算的區域。

areas

我使用

T(i,1)=mean(mean(Magq(1:150,300:340)))+mean(mean(Magq(260:400,300:340)))+mean(mean(Magq(190:210,160:320)))+mean(mean(Magq(190:210,320:480))); 

來計算頻譜幅度,但這樣做的結果總是-Inf。這主要是因爲mean(mean(Magq(1:150,300:340)))mean(mean(Magq(260:400,300:340)))都等於-Inf

任何人都可以給我任何提示,爲什麼結果是-Inf

回答

0

我猜想你的q變量的某些值爲零,因此Magq = log(abs(q))將返回-Inf這些值。也許你正在尋找的mean應該

log(abs(mean(mean(q(1:150,300:340))))) 

否則,如果你只是想忽略無窮,它們都設置爲零

Magq(~isfinite(Magq)) = 0 

以前那樣應用 mean功能之前
+0

你是我找到我出錯的地方了。我應該忽略-Inf,因爲它不會影響我的最終結果。無論如何非常感謝! – newinjava