2012-10-01 99 views
1

我有一个来自611张图像(尺寸3x611)ROI的平均RGB像素值阵列。图像拍摄时间超过64秒。我将每种颜色流的平均值解释为随时间变化的信号并将其绘制在Matlab中。我还使用fft()绘制功率谱。在这个功率谱中,我在低频范围内获得了巨大的数值。我想删除这些值,因此需要一个截止频率为0.2 Hz的高通滤波器。此外,我希望这个滤波器非常清晰,完全抑制频率低于0.2 Hz的功率,并保持频率大于0.2 Hz的功率。请建议一种方法来做到这一点。在Matlab中应用高通滤波器信号

代码,我拿绿色河流

imageFiles = dir('*.png');  
noFiles = length(imageFiles); % Number of files found 
avgVals = zeros(noFiles,3); 

noise = 0;      %Boolean for noise: if 1, then ROI moves randomly 

noiseV = 0; 
noiseH = 0; 

for i=1:noFiles 
    curFileName = imageFiles(i).name; 
    curImage = imread(curFileName); 

    temp1 = curImage(175:215 , 290:385, 1); 
    avgVals(i,1) = (sum(sum(temp1)'))/3936; 

    temp2 = curImage(175:215 , 290:385, 2); 
    avgVals(i,2) = (sum(sum(temp2)'))/3936; 

    temp3 = curImage(175:215 , 290:385, 3); 
    avgVals(i,3) = (sum(sum(temp3)'))/3936; 
end 

Rstream = avgVals(:,1); 
Gstream = avgVals(:,2); 
Bstream = avgVals(:,3); 

%plot actual signal with respect to time 
xAxis = (0:64/610:64); 
plot(xAxis,Rstream,'r'); 
hold on; 
plot(xAxis,Gstream,'g'); 
hold on; 
plot(xAxis,Bstream,'b'); 

nfft = 1024; 

R = fft(Rstream,nfft); 
R = R(1:nfft/2); 
mR = abs(R); 
G = fft(Gstream,nfft); 
G = G(1:nfft/2); 
mG = abs(G); 
B = fft(Bstream,nfft); 
B = B(1:nfft/2); 
mB = abs(B); 

f=(0:nfft/2-1)*(611/64)/nfft; 

figure(2); 
plot(f,mG,'g'); 

感谢的功率谱。任何帮助,将不胜感激。

回答

1

如果您不熟悉Matlab滤波器,可以在控制台中输入filterbuilder来使用filterbuilder GUI。

一旦你做了设置,你会得到一个过滤器对象,你可以结合使用filter函数。

http://www.mathworks.de/de/help/signal/ref/filterbuilder.html

http://www.mathworks.de/de/help/matlab/ref/filter.html

如果你的工作是什么,我认为你做的,你也可以做使用detrend一个简单的去趋势,为了摆脱你信号的“DC”部分。

+0

非常感谢。 detrend完美运作。 –