Matlab multiple segments extraction

4 vues (au cours des 30 derniers jours)
Sunil
Sunil le 6 Oct 2012
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].

Réponse acceptée

Image Analyst
Image Analyst le 6 Oct 2012
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 commentaires
Image Analyst
Image Analyst le 26 Oct 2012
Modifié(e) : Image Analyst le 26 Oct 2012
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 le 21 Nov 2012
Thank you.... it worked very well...

Connectez-vous pour commenter.

Plus de réponses (2)

Matt J
Matt J le 6 Oct 2012
Modifié(e) : Matt J le 6 Oct 2012
Do you have the Image Processing Toolbox? If so, just use regionprops(...,'PixelIdx')
Otherwise,
  1 commentaire
Sunil
Sunil le 6 Oct 2012
It did not work as mine is not a repeated sequence... Its random.

Connectez-vous pour commenter.


Sunil
Sunil le 6 Oct 2012
Modifié(e) : Image Analyst le 6 Oct 2012
Is there a simple way to do it without using Image Processing Toolbox?
  1 commentaire
Image Analyst
Image Analyst le 6 Oct 2012
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.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by