Asked by Giorgos Papakonstantinou
on 21 Jun 2013

I have a vector:

a=[0 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 0 1 ];

in which I would like to count the "areas" of zeros and the "areas" of ones. In the example above I have

4 areas of zeros and 4 areas of ones. Thank you!

*No products are associated with this question.*

Answer by Andrei Bobrov
on 21 Jun 2013

Accepted answer

a=[0 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 0 1 ];

lc = [true;diff(a(:))~=0];

x = a(lc);

zerosareas = sum(~x); onesareas = sum(x);

Answer by Jan Simon
on 21 Jun 2013

Another approach which might be faster for large data sets: FEX: RunLength:

a = [0 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 0 1 ]; b = RunLength(a); nZero = sum(b == 0); nOne = length(b) - nZero; % Or: sum(b == 1)

Answer by Image Analyst
on 23 Jun 2013

I know you already accepted an answer, but if you have the Image Processing Toolbox there is a straightforward one-liner solution to get either of those numbers:

a=[0 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 0 1]; [~, numberOf1Regions] = bwlabel(a) % Get # of "1" regions. [~, numberOf0Regions] = bwlabel(~a) % Get # of "0" regions.

Opportunities for recent engineering grads.

## 0 Comments