2011-11-08 17 views
4

私はMATLABを使用して数字のベクトルのlocal maximaを見つけようとしています。組み込みfindpeaks関数のようなベクターのために動作します:MATLABを使用してベクトルの最大値を見つける

:ピーク( 3「sの各々は)だけベクター内の1つの位置を占める

[0 1 2 3 2 1 1 2 3 2 1 0] 

、私のようなベクトルを有する場合

[0 1 2 3 3 2 1 1 2 3 2 1 0] 

最初の「ピーク」はベクトルの2つの位置を占め、機能はそれを拾いません。

このようなピークを検出する最大値検出関数を作成する良い方法はありますか?

答えて

3

あなたは、画像処理ツールボックスからREGIONALMAX機能を使用することができます。

>> x = [0 1 2 3 3 2 1 1 2 3 2 1 0] 
x = 
    0  1  2  3  3  2  1  1  2  3  2  1  0 

>> idx = imregionalmax(x) 
idx = 
    0  0  0  1  1  0  0  0  0  1  0  0  0 
+0

に対しては機能しません私は感謝を使って終わったものです。続いてbwmorphで結果を縮小して各ピークについて1つの結果を得ます。 – kazimpal

-1
a = [ 0 1 2 3 3 2 1 2 3 2 1 ]; 

sizeA = length(a); 

result = max(a); 

for i=1:sizeA, 

    if a(i) == result(1) 
     result(length(result) + 1) = i; 
    end 
end 

には、最大値とそれに続く最大値のすべての値の位置が含まれます。

+0

-1同じこと、これはそうではありませんローカルの最大値 – Amro

-1

はるかに簡単な何か:

a = [1 2 4 5 5 3 2]; 
b = find(a == max(a(:))); 

出力:

b = [4,5] 
+0

-1で動作します。これは、ローカルの最大値 – Amro

関連する問題