Identifying time for prolong changes in a sequence

조회 수: 2 (최근 30일)
Tino
Tino 2021년 7월 6일
댓글: Image Analyst 2021년 7월 12일
Hello
Please I have a sequence for instance
010001100000111110000100011001
And I want to identify the ones that are more than 2(onces) and the time
for this example is 5 seconds
Also another example is when I have more than one occurances of 1 greater than 2
000001110001111001000110001
Then the time are [ 3sec 4sec]
I have used the code A = seconds(x)
It only shows me a total number of 1 in seconds.
Is there a way I can get about this.
Thanks for your help in advance

채택된 답변

Image Analyst
Image Analyst 2021년 7월 6일
Try this (requires the Image Processing Toolbox):
binarySequence = [0 1 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 0 0 0 1 1 0 0 1];
props = regionprops(logical(binarySequence), 'Area');
allLengths = [props.Area]
% Count number of regions longer than some number:
maxLength = max(allLengths)
for k = 1 : maxLength
longerThanN = sum(allLengths == k);
fprintf('There are %d sequences of %d.\n', longerThanN, k);
end
You get:
There are 3 sequences of 1.
There are 2 sequences of 2.
There are 0 sequences of 3.
There are 0 sequences of 4.
There are 1 sequences of 5.
  댓글 수: 10
Tino
Tino 2021년 7월 12일
Hi Image analyst.
If I wanted only onces to show (and there group occurences in the sequence) in the result instead of both 1 and zero
for instance if I have 1111100001111000000111111
I will like the results to be
There are 1 sequences of 4 = second occurences
There are 2 sequences of 5 = first and third occurences
I will appreciate it if you answer the question for me as you ve done in the past
Best wishes
Image Analyst
Image Analyst 2021년 7월 12일
Try this:
binarySequence = [0 1 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 0 0 0 1 1 0 0 1]
% Measure the data
props = regionprops(logical(binarySequence), 'Area', 'PixelIdxList');
allLengths = [props.Area]
% Count number of regions longer than some number:
maxLength = max(allLengths)
for k = 1 : maxLength
% Get the labels for this length
labels = allLengths == k;
longerThanN = sum(labels);
fprintf('There are %d sequences of %d.\n', longerThanN, k);
indexes{k} = find(labels);
for k2 = 1 : length(indexes{k})
fprintf(' Sequence %d\n', indexes{k}(k2));
end
% Get 1's wherever the run has a length of k.
locations = zeros(size(binarySequence));
for k2 = 1 : length(labels)
if labels(k2)
locations(props(k2).PixelIdxList) = 1;
end
end
% Report to the command window:
%locations
end
There are 3 sequences of 1.
Sequence 1
Sequence 4
Sequence 6
There are 2 sequences of 2.
Sequence 2
Sequence 5
There are 0 sequences of 3.
There are 0 sequences of 4.
There are 1 sequences of 5.
Sequence 3

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Labels and Annotations에 대해 자세히 알아보기

제품


릴리스

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by