Counting consecutive repeat values for each row in matrix
이전 댓글 표시
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!
채택된 답변
추가 답변 (2개)
David Hill
2019년 11월 19일
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 k = 1:size(X,1)
a=num2str(X(k,:));
a=a(a~=' ');
a=regexp(a,'([0]+)','tokenExtents');
b(k)=max(cellfun(@(y)max(diff(y))+1,a));%b array will have the maximum number of consecutive zeros of each row
end
댓글 수: 1
David, in your above answer, how to output the positions of b-vector?
For example, if we are counting number of '1' in each row,
b(1)=4
the corrsponding position is
X(1,1:4)
and for
b(2)=3
the corresponding positions are:
X(2,5:7) and X(2,12:14)
How to get these X-values also?
cc = bwconncomp(~yourphoto, [0 0 0; 1 1 1; 0 0 0]); %only consider connection on a row
rowcount = cell(size(yourphoto, 1), 1);
for idx = 1:cc.NumObjects
row = mod(cc.PixelIdxList{idx}(1)-1, size(yourphoto, 1)) + 1; %find which row correspond to the connected component
rowcount{row} = [rowcount{row}, numel(cc.PixelIdxList{idx}-1)]; %number of pixels in the component
end
edit: fixed lots of typos.
댓글 수: 2
This does not work. Is youphoto supposed to be X?
After changing 'yourphoto' to 'youphoto', and 'Pixel' and 'PixelIdx' to 'PixelIdxList', I get the error:
Expected one output from a curly brace or dot indexing expression, but there were 3 results.
But I'm curious for the solution using image processing. Can you correct your code?
Guillaume
2019년 11월 20일
Indeed, I shouldn't write answers just before going to bed, there were lots of typos. All fixed now.
카테고리
도움말 센터 및 File Exchange에서 Mathematics에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!