Filter löschen
Filter löschen

Length consecutive value 1 within a 2D matrix

2 Ansichten (letzte 30 Tage)
Odo Luo
Odo Luo am 19 Mär. 2022
Kommentiert: Odo Luo am 23 Mär. 2022
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.

Akzeptierte Antwort

Image Analyst
Image Analyst am 19 Mär. 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

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by