2016-04-23 69 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