Matlab multiple segments extraction

I am dealing with some matlab issue. Can someone help?
Suppose i have a sequence: A=[1 2 3 4 29 31 0 0 0 0 0 35 4 5 61 7 0 0 0 1 2 31 91 65], i need to extract nonzero segments seperately. For eg: my output should be s1=[1 2 3 4 29 31]; s2=[35 4 5 61 7]; s3=[1 2 31 91 65].

 채택된 답변

Image Analyst
Image Analyst 2012년 10월 6일

0 개 추천

If you have the Image Processing Toolbox, you can use PixelValues, which you can get from passing A into regionprops():
% Sample data:
A=[1 2 3 4 29 31 0 0 0 0 0 35 4 5 61 7 0 0 0 1 2 31 91 65];
% Make the measurements. Get all the regions.
regions = regionprops(A>0, A, 'PixelValues')
% Pull them out from the structure into separate variables, if desired.
s1 = regions(1).PixelValues
s2 = regions(2).PixelValues
s3 = regions(3).PixelValues
In the command window:
regions =
3x1 struct array with fields:
PixelValues
s1 =
1 2 3 4 29 31
s2 =
35 4 5 61 7
s3 =
1 2 31 91 65

댓글 수: 6

Sunil
Sunil 2012년 10월 6일
Great.. Thnx.. will install image processing TB...But what if i have this sequence??? i.e sequence which contains both positive and negative values? A=[1 -2 3 4 -29 31 0 0 0 0 0 35 -4 5 61 7 0 0 0 1 -2 -31 91 65];
Use
regions = regionprops(A~=0, A, 'PixelValues')
Sunil
Sunil 2012년 10월 6일
Thnx...
Sunil
Sunil 2012년 10월 25일
@Image Analyst. Sorry my question was not clear earlier. My problem is: I have a sequence A=[1 2 3 -4 0 29 31 0 100 0 0 0 0 35 4 5 61 7 0 0 0 0 1 2 31 91 65]. Then i need to extract nonzero segments seperately like s1=[1 2 3 -4 0 29 31 0 100], s2=[35 4 5 61 7] and s3=[1 2 31 91 65] i.e A~=[0 0 0 0]. It should not break for one zero but it should break for 4 or more zeros.
Image Analyst
Image Analyst 2012년 10월 26일
편집: Image Analyst 2012년 10월 26일
Use bwareaopen() to get rid of stretches of 3 or less.
% Sample data:
A=[1 2 3 -4 0 29 31 0 100 0 0 0 0 35 4 5 61 7 0 0 0 0 1 2 31 91 65]
% Find the zeros.
zeroLocations = A == 0
% Get rid of single zeros 0, pairs 0 0, or triples 0 0 0.
zeroLocations = bwareaopen(zeroLocations, 4)
% Find segments. A segment may have single zeros.
nonZeroLocations = ~zeroLocations
% Make the measurements. Get all the regions.
regions = regionprops(nonZeroLocations, A, 'PixelValues')
% Pull them out from the structure into separate variables, if desired.
s1 = regions(1).PixelValues
s2 = regions(2).PixelValues
s3 = regions(3).PixelValues
Sunil
Sunil 2012년 11월 21일
Thank you.... it worked very well...

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

추가 답변 (2개)

Matt J
Matt J 2012년 10월 6일
편집: Matt J 2012년 10월 6일

0 개 추천

Do you have the Image Processing Toolbox? If so, just use regionprops(...,'PixelIdx')
Otherwise,

댓글 수: 1

Sunil
Sunil 2012년 10월 6일
It did not work as mine is not a repeated sequence... Its random.

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

Sunil
Sunil 2012년 10월 6일
편집: Image Analyst 2012년 10월 6일

0 개 추천

Is there a simple way to do it without using Image Processing Toolbox?

댓글 수: 1

Image Analyst
Image Analyst 2012년 10월 6일
Nothing simple comes to mind. You could try the brute force / intuitive way of using for loops to find the regions and using cell arrays to store the regions once you've found them. I guess you could consider that simple but it will be several lines of code.

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

카테고리

질문:

2012년 10월 6일

Community Treasure Hunt

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

Start Hunting!

Translated by