Length consecutive value 1 within a 2D matrix

1 view (last 30 days)
Having a 2 dimensional array, e.g.
[ 0, 0, 0,1,1,1,2 ;
0,0,1,1,1,1,2;
0,1,1,1,1,1,0;
0,0,0,1,1,0,0]
I want for each row the length of consecutive 1
In this case R1 = 3, R2= 4, R3=5,R4=2.

Accepted Answer

Image Analyst
Image Analyst on 19 Mar 2022
Try this: I've made it general and put the results into a cell array in case some row has more than one region of 1's, like it might have 2 or 5 or 20 runs of 1's.
m = [ 0, 0, 0,1,1,1,2 ;
0,0,1,1,1,1,2;
0,1,1,1,1,1,0;
0,0,0,1,1,0,0;
1,1,0,1,1,1,0] % Last row has 2 contiguous regions instead of 1.
mb = m == 1
[rows, columns] = size(mb);
for row = 1 : rows
% Make measurements of all lines of 1's.
props = regionprops(mb(row, :), 'Area');
% Extract all the lengths into a vector and then put into a cell.
R{row} = [props.Area];
end
R % Shows in command window
R =
1×5 cell array
{[3]} {[4]} {[5]} {[2]} {[2 3]}
If you know in advance that there is just one run of 1's per row then you can use just a regular (non-cell array) vector:
m = [ 0, 0, 0,1,1,1,2 ;
0,0,1,1,1,1,2;
0,1,1,1,1,1,0;
0,0,0,1,1,0,0] % Last row has 2 contiguous regions instead of 1.
mb = m == 1
[rows, columns] = size(mb);
for row = 1 : rows
% Make measurements of all lines of 1's.
props = regionprops(mb(row, :), 'Area');
% Extract all the lengths into a vector and then put into a cell.
R(row) = [props.Area];
end
R
Shows
R =
3 4 5 2

More Answers (0)

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!