Length consecutive value 1 within a 2D matrix

2 次查看(过去 30 天)
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.

采纳的回答

Image Analyst
Image Analyst 2022-3-19
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

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

标签

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by