Matlab - Recorrido

   
Vista:

Recorrido

Publicado por Maly (1 intervención) el 18/06/2015 07:24:45
Hola, ojala alguien pueda ayudarme, tengo que recorrer una matriz en bloques y a cada bloque aplicar ciertas operaciones, es algo así:
Mat = [250 250]
For i=1:50
For j=1:50
//Contar el numero de 1's en este bloque
//si num1 <40
// Regresar 1
Sino Regresa 0
End
End
Ahora si regreso 1 debo recorrer la matriz en filas haciendo bloques de 50 por 50, Cundo j>= tamaño de Mat bajo a la posición (50,0) y repito... Si es 0 termina, tengo la idea pero no se como hacerlo, ojala alguien Pueda Ayudarme
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Daniel

Recorrido

Publicado por Daniel (212 intervenciones) el 18/06/2015 16:22:01
aca te mando una programa, por si te sirve. si m1 es tu matriz de 250x250 y cada bloque es de 50x50, quedaría algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% cargar m1 %
 
m=m1==1; % matriz lógica de unos y ceros
tm=size(m1,1); %tamaño de la matriz
tb=50;  %tamaño del bloque
 
alfa=40; % condición sobre la cantidad de unos
for i=1:(tm/tb)
for j=1:(tm/tb)
    num1=sum(sum(m((tb*(i-1)+1:tb*i),(tb*(j-1)+1:tb*j))));
    if num1<=alfa
        disp(['el bloque (' num2str([i j]) ') tiene menos de ' num2str(alfa) ' unos']);
    else
        disp(['el bloque (' num2str([i j]) ') tiene mas de ' num2str(alfa) ' unos']);
    end
end
end


Fijate si te sirve

Avisanos como te fue

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Royeth

Recorrido

Publicado por Royeth jesus.royeth@gmail.com (758 intervenciones) el 18/06/2015 22:45:21
Primero muchas gracias a Daniel por su intervención
Bueno una vez hice algo así pero en excel para medir la concentración en un mezclador donde los bloques representaban las cámaras dentro del mezclador que tenía dos polvos uno blanco (1) y el otro negro (0) , la forma de recorrer la matriz era la misma pero los cálculos eran otros , en todos caso como lo planteas y dándote libertad para que varíes el tamaño de los bloques si lo deseas el código quedaría de la siguiente forma :
M es el número de filas de la matriz , N el número de columnas de la matriz , m el número de filas del bloque y n el número de columndas del bloque

1
2
3
4
5
6
7
8
9
10
clear all
M=250; N=250; m=50; n=50;
Mat=randi([0,1],[M,N]); %ejemplo aleatorio aquí va tu matriz
for I=0:m:M-m
for J=0:n:N-m
    A= Mat(1+I:m+I,1+J:n+J);
   num1(I/m+1,J/n+1)=length(A(A==1));
end
end
disp(num1)
%devuelve una matriz con el número de unos de cada bloque


Espero y te sea de ayuda. y de nuevo gracias Daniel
https://www.facebook.com/royethmatlab
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar