2012-10-01 95 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完美運作。 –