2

611 枚の画像 (寸法 3x611) の ROI からの平均 RGB ピクセル値の配列があります。画像は 64 秒にわたって撮影されています。各カラー ストリームの平均値を時間の信号として解釈し、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');

ありがとう。どんな助けでも大歓迎です。

4

1 に答える 1

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」部分を取り除くために、 を使用して簡単なトレンド除去を行うこともできます。

于 2012-10-01T09:25:07.690 に答える