Programación Específica > Matlab

 Dibujar intensidades en una matriz

(1/3) > >>

Estrufi:
Bueno, Tengo una duda bastante importante...

 A ver si me explico bien, yo tengo una tabla con coordenadas x e y,  y un valor corresponediente. Lo que quiero es crear una matriz de tamaño maximo el valor que tengo como "x"  e "y", y en cada coordenada poner el valor correspondiente para luego hacer una grafica de colores, donde unos colores representen los colores mas altos y otros los mas bajos. Ademas en algunas coordenadas no tendre valores , con lo que dejare esas a cero:

 Un ejemplo

 x  y  valor
 
 1 1   5
 2 1   4
 3 4   2
 4 4   4

 Entonces quiero crear una matriz:

     5  0  0  0
     4  0  0  0
     0  0  0  2
     0  0  0  4

 Y luego dibujarla, dando diferentes colores segun el valor que tenga cada componente de la matriz.

 A alguien se le ocurre como poder hacer???

 Muchisimas gracias por todo, Saludos!!!

Geo:
¿Eh? :wacko:


--- Cita de: "Estrufi" ---Tengo una duda bastante importante...
--- Fin de la cita ---
Un paso muy importante para resolver un problema es definirlo correctamente...


--- Cita de: "Estrufi" ---donde unos colores representen los colores mas altos y otros los mas bajos.

--- Fin de la cita ---
Supongo que será valores.

Bueno, según lo que entendí, lo que harías es crear una matriz de ceros de xmax * ymax, donde la vas llenando de acuerdo a los valores de la tabla que tienes. No mencionas de dónde proviene dicha tabla, imagino que será de un archivo, siendo así, creo que no deberías tener muchos problemas para cargar la tabla pues ya has trabajado leyendo/guardando archivos en cierto formato (por otras dudas que has colocado en el foro).

En cuanto a "dibujar la matriz", dependiendo del tamaño de la matriz, podrías representar cada posición en la misma como un cuadrado, de forma que toda la matriz asemejara un tablero de ajedrez, donde cada casilla corresponda con una posición de la matriz. Para ello crearías una imagen del tamaño que desees (si fuera muy trande podría ser un pixel por cada posición de la matriz, si fuera muy pequeña podrías definir de cuántos pixeles hacer cada cuadro), luego recorres la imagen (no es más que una matriz de colores) modificando los valores según corresponda.

Suerte.

Estrufi:
Buenas!!

  Pero se te ocurre alguna manera de ir metiendo en cada coordenada ese valor correspondiente? porque tengo bastante dificultad a la hora de crear esa matriz. Efectivamente cada punto de la matriz se corresponde con un pixel de la imagen, y se podria decir que quiero representar diferentes intensidades dependiendo del valor que tome cada punto de la matriz, por ejemplo los valores a 0 que sean blancos, entre 1 y 2 verdes, etc....

 Muchisimas gracias!!!! Saludos!

Estrufi:
Buenas!!

  Pero se te ocurre alguna manera de ir metiendo en cada coordenada ese valor correspondiente? porque tengo bastante dificultad a la hora de crear esa matriz. Efectivamente cada punto de la matriz se corresponde con un pixel de la imagen, y se podria decir que quiero representar diferentes intensidades dependiendo del valor que tome cada punto de la matriz, por ejemplo los valores a 0 que sean blancos, entre 1 y 2 verdes, etc....

 Muchisimas gracias!!!! Saludos!

Geo:
Una imagen es una matriz de filas * columnas * 3 (si la imagen es a color), son 3 elementos pues cada pixel se compone por 3 componentes: rojo, verde y azul. Este código crea una matriz; luego un vector donde se guardan los colores que corresponden a cada valor de la matriz, en la posición 1 del vector se tiene el color para el valor 1, en la posición 2 el color para el valor 2, etc. Finalmente, se crea una imagen de las mismas dimensiones que la matriz, se recorre y en cada pixel se coloca el color que se saca del vector de colores.

Espero le entiendas, si quisieras hacerlo por intervalos (de x a y valor que sea el mismo color), puedes hacerlo con sentencias if dentro del ciclo que recorre la imagen.

--- Código: Matlab M ---%% Limpiezaclose allclear allclc % matriz de valoresmatriz = [ 5 0 0 0; 4 0 0 1; 0 0 0 2; 0 1 0 4 ];% dimensiones de la matrizfilas = 4;columnas = 4; % cuántos coloresmax_color = 6; % vector de colores% la posición 1 corresponde al color para la cantidad 1, % la posición 2 al color para la cantidad 2...% tiene max_color elementos por 3, para guardar las componentes rojo, verde% y azul de cada colorcolores = zeros( max_color, 3 ); %% Asignación de colores% llenamos los colores, para cada elemento tenemos 3 componentes: rojo,% verde y azul % Elemento 1, rojocolores( 1, 1 ) = 255;colores( 1, 2 ) = 0;    % se puede eliminar, pues ya vale cerocolores( 1, 3 ) = 0;    % se puede eliminar, pues ya vale cero% Elemento 2, verdecolores( 2, 1 ) = 0;    % se puede eliminar, pues ya vale cerocolores( 2, 2 ) = 255;colores( 2, 3 ) = 0;    % se puede eliminar, pues ya vale cero% elemento 3, azulcolores( 3, 1 ) = 0;    % se puede eliminar, pues ya vale cerocolores( 3, 2 ) = 0;    % se puede eliminar, ya vale cerocolores( 3, 3 ) = 255;% elemento 4, amarillocolores( 4, 1 ) = 255;colores( 4, 2 ) = 255;% elemento 5, moradocolores( 5, 1 ) = 128;colores( 5, 3 ) = 128; %% Imagen% la imagen es una matriz de filas x columnas x 3 componentes de cada pixel% se convierte a uint8 pues cada componente del pixel es de ese tipo (byte)imagen = uint8( zeros( filas, columnas, 3 ) ); %% Dibujado% recorre la matriz por filas y columnas, colocando el color adecuado% en la imagenfor f = 1 : filas    for c = 1 : columnas        valor = matriz( f, c );        if ( valor ~= 0 )             imagen( f, c, 1 ) = colores( valor, 1 );            imagen( f, c, 2 ) = colores( valor, 2 );            imagen( f, c, 3 ) = colores( valor, 3 );        end    endend imshow( imagen ); 
Suerte.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa