MATLAB: Detect parts of a 0/1 (binary) vector consisting of only 0 or 1

Image Processing Toolboxvector manipulationvectors

Let's say I have a vector of 0 and 1:
a=[1 1 1 0 0 0 1 0 1 0 0 1 1 0];
It's needed to find a way to extract the vector's indices so that each group of extracted indices contains a part of a vector consisting of only zeros or only ones. For the given example it should be like:
[1 3] [4 6] [7] [8] [9] [10 11] [12 13] [14]
I thought about diff(), but some post-processing is definitely required after it…

Best Answer

idx = find(diff([~a(1) a]))';
pcs = spdiags(rot90([idx-1 idx]));
pcs(end) = numel(a)