Length consecutive value 1 within a 2D matrix
    3 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
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.
Risposta accettata
  Image Analyst
      
      
 il 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
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Legend in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


