MATLAB: Counting consecutive repeat values for each row in matrix

0s1'sblackandwhiteconsecutivenumbercountlengthmatrixmeasurerepeatrepeatvalues

I have a matrix for a black and white photo, so 1s and 0s.
I want to horizontally measure the length, in pixels, of each black region in the photo. So the number of 0s.
How can I count the number of consecutive 0's for each row? Bare in mind for each row it is likely there are more than one group of consecutive 0's. I want a count value for each group of consecutive 0s in each row.
For example: I have a matrix
X = [1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0;
1 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0]
So I want it to tell me:
Row 1: 2 groups of 0's, length of each: 5 and 4 respectively
Row 2: 3 groups of 0's, length of each: 3, 4, and 2 respectively
Any help would be greatly appreciated!

Best Answer

First, I would download Jan's RunLength utility from the File Exchange, which was designed to solve exactly this kind of problem.
X = [1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0;
1 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0];
for nr = 1:size(X,1)
[b{nr} n{nr}] = RunLength(X(nr,:))
end
Each element of b will be the values of each consecutive "run", and n will have the lengths of those runs. So, in this example, the outputs are
% Row 1 results
[b{1}; n{1}]
ans =
1 0 1 0
4 5 3 4
% Row 2 results
[b{2}; n{2}]
ans =
1 0 1 0 1 0
1 3 3 4 3 2
You may need to do another step or two to get the output exactly as you want it, but this could be your first building block.