MATLAB Answers

Yu Zhi
0

Find at least 5 consecutive values above a certain threshold in a vector?

Asked by Yu Zhi
on 17 Apr 2019
Latest activity Commented on by Walter Roberson
on 17 Apr 2019
I have a vector
M = [3,3,5,7,8,8,9,7,4,3,2,1,7,6,5,2,2,2];
I want to find at least 5 consecutive values which are above the threshold, which is 4. So the vector will be
N = [5,7,8,8,9,7]
Could anyone help me with this? Thanks.

  0 Comments

Sign in to comment.

3 Answers

Answer by Walter Roberson
on 17 Apr 2019
 Accepted Answer

mask = M > 4;
starts = strfind([0 mask], [0 1 1 1 1 1]);
stops = strfind([mask 0], [1 1 1 1 1 0]);
N = M(starts(1) : stops(1))

  2 Comments

How can I modify this code to get N = [5 7 8 8 9 7]? I guess the code you provided gave only the first and last value.
>> mask = M > 4;
starts = strfind([0 mask], [0 1 1 1 1 1]);
stops = strfind([mask 0], [1 1 1 1 1 0]);
N = M(starts(1) : stops(1))
N =
5 7
stops = strfind([mask 0], [1 1 1 1 1 0]) + 4;

Sign in to comment.


Answer by Akira Agata
on 17 Apr 2019

If there are 2 or more consective values above the threshold, the following is one possible solution.
(* The following needs Image Processing Toolbox)
M = [3,3,5,7,8,8,9,7,4,3,6,5,8,5,8,2,1,7,6,2,6,2];
idx = M > 4;
idx = bwareafilt(idx,[5,Inf]);
label = bwlabel(idx);
N = cell(max(label),1);
for kk = 1:max(label)
N{kk} = M(label == kk);
end
Result:
>> N
N =
2×1 cell array
{1×6 double}
{1×5 double}
>> N{1}
ans =
5 7 8 8 9 7
>> N{2}
ans =
6 5 8 5 8
>>

  0 Comments

Sign in to comment.


Answer by KSSV
on 17 Apr 2019

N(N>4)

  1 Comment

N is the vector I want after thresholding and the values must be consecutive for at least 5 times.

Sign in to comment.