2016-08-28 12 views
0

に画像の局所的な最大値と最小値を見つけ、私はMathWorks社のMATLABでイメージを持っている私はMathWorks社のMATLAB

enter image description here

I=imread('sample.png'); 
    sumCol=sum(I,2); 
    plot(sumCol); 

Sum Plotをsample.png次のコマンドを

をしたために

y値のしきい値に基づいて例えば、私はそれらの最大値のそれぞれに対して局所的な最大値と2つの最小値を得る必要があります。 上記のプロットでは、必要な赤い長方形(maximas)と茶色の長方形(minimas)について述べました。 青は元のプロット、黄色はマニュアルの平滑化曲線です。

どのように私はそのプロットを平滑化する(さもなければ、あまりにも多くのmaximasがあるでしょう)、そしてそれらのmaximasとminimasをmatlabで見つけるでしょうか?

+1

登山に「プロミネンス」の概念を検索に適しています正確に何を見つけるお勧めします。それは無関係と聞こえるが、実際には役に立っている。あなたはトップ3の最も顕著なポイントを取るでしょう。 (しかし、あなたがやっていることは、3つのローカルピークを取ることができるかもしれないので、 'findpeaks'コマンドを見てください)。私は顕著さを計算するスクリプトを持っていますが、現在はそれにアクセスすることはできませんが、必要に応じてそれを掘り起こすことができます。 – chessofnerd

+1

また、スプラインはスムージング処理の自動化に役立ちます。 – chessofnerd

+0

それを掘り起こしてください。 –

答えて

1

信号にローパスフィルタをかけて(ガウスまたはボックスカーを使って)、最大値と最小値を見つけるのがはるかに簡単です。

ローカル最大使用量を見つけるにはfindPeaks(chessofnerdで提案されているように) ローカルのmimimaを見つけるには、-1 *信号でピークを見つけます。

私はあなたが関数findpeaksを見て、あなたのケースhttp://www.mathworks.com/help/signal/ref/findpeaks.html

% Create a random 1D signal 
sig = randn(100,1); 

% Create a gaussain window for low pass filtering 
gaussFilter = gausswin(5); 
gaussFilter = gaussFilter/sum(gaussFilter); % Normalize. 

% Low pass filter the data 
sigFilters = conv(gaussFilter,sig); 

% Find max points (you should config this function for you own needs) 
[maxPeaks,maxLocs] = findpeaks(sigFilters); 

% Find min points 
[minPeaks,minLocs] = findpeaks(-1*sigFilters); 

% Plot 
plot(1:length(sigFilters),sigFilters,'b',maxLocs,maxPeaks,'b*',minLocs,-1*minPeaks,'r*') 
+0

あなたはmatlabを使用して少し精巧にすることができますか? –

+1

いくつかのコードを追加しました –

+0

最後のピークの最初のピークと最後の分の開始分が表示されません。それについてのアイデアもありますか? –

関連する問題