2016-04-23 7 views
1

私は、データのセットをFFTしてみましょう(中央に 'T'を描いた10枚の画像です)、与えられた領域でスペクトルの大きさを計算します。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))))) 

する必要があり、あなたが

前に行ったように mean関数を適用する前にゼロ

Magq(~isfinite(Magq)) = 0 

にそれらすべてを設定

+0

私はどこが間違っているのか分かりました。私はそれを無視する必要がありますので、私の最終結果にはあまり影響を与えません。とにかくおかげさまで! – newinjava

関連する問題