在Matlab中应用高通滤波器信号

时间:2012-10-01 09:17:49

标签: matlab image-processing signal-processing

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

代码直到我获得绿色光谱的功率谱

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 个答案:

答案 0 :(得分: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”部分。