Find easy patterns in a logic vector

조회 수: 4 (최근 30일)
fjnb86
fjnb86 2012년 3월 27일
Hello everyone,
I am a little bit confused performing an easy procedure.
I have a long logic vector, for example:
R = [1 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1]
It would be nice to localize this information in smalls groups.
For instance, in this position u have a group of three, here a group of 5, here only one.
Is there any specific command to do that?
Thanks!

채택된 답변

Daniel Shub
Daniel Shub 2012년 3월 27일
It doesn't handle the edges perfectly, but you might want to start with
diff(find(diff(R)))
The diff( R ) is a logic vector indicating if the ith element is end of a group. The find() gets the indices on which group end. The outer diff() then determines how many elements are between group endings.
  댓글 수: 1
fjnb86
fjnb86 2012년 5월 3일
Thanks Daniel
Very useful

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

추가 답변 (1개)

Image Analyst
Image Analyst 2012년 9월 5일
I'm not sure what you mean by "localize" but maybe you mean "connected components labeling." If you have the Image Processing Toolbox, you can identify each groups of connected 1's with a label number:
R = [1 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1]
labeled_R = bwlabel(R)
In the command window, it shows:
labeled_R =
1 0 2 2 0 0 3 3 0 0 0 0 4 4 4 4 4 0 0 5 0 0 6
If you want the indexes of each group (object, or "blob"), then you can call regionprops().
indexes = regionprops(labeled_R, 'PixelIdxList');

Community Treasure Hunt

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

Start Hunting!

Translated by