filling regions of matrix

2 visualizaciones (últimos 30 días)
Mohammad Golam Kibria
Mohammad Golam Kibria el 26 de Jun. de 2011
Hi have a matrix.
I =
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Here ones in the matrix has divided the matrix in 3 regions.Is it possible to have the following type of output:
I =
2 2 2 1
2 2 1 1
2 1 1 1
1 1 1 1
3 1 1 1
3 3 1 1
3 3 3 1
Thanks

Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 26 de Jun. de 2011
Iout = bwlabel(~cumsum(I,2))+1
  2 comentarios
Oleg Komarov
Oleg Komarov el 27 de Jun. de 2011
great! +1
Mohammad Golam Kibria
Mohammad Golam Kibria el 27 de Jun. de 2011
Thanks

Iniciar sesión para comentar.

Más respuestas (1)

the cyclist
the cyclist el 26 de Jun. de 2011
There might be more efficient ways, but this will get the job done. I hope I didn't just do your homework for you.
I = [0 0 0 1; ...
0 0 1 0; ...
0 1 0 0; ...
1 0 0 0; ...
0 1 0 0; ...
0 0 1 0; ...
0 0 0 1];
[M,N] = size(I);
J = I;
for nj = 1:N
% Find the ones in this column. Algorithm OK even if there's only one of them.
firstOne = find(I(:,nj),1,'first');
lastOne = find(I(:,nj),1,'last');
J(1:firstOne-1, nj) = 2;
J(firstOne:lastOne,nj) = 1;
J(lastOne+1:end, nj) = 3;
end
J

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by