Atom Blog

Mostrando las entradas con la etiqueta matrices. Mostrar todas las entradas
Mostrando las entradas con la etiqueta matrices. Mostrar todas las entradas

Como cargar Imagenes en Axes en GUI en Matlab y convertirlas en Matrices de datos



En este post leeremos y cargaremos 2 imagenes ubicadas en la carpeta donde se encuentran los archivos .m y .fig del programa.
Ambas imagenes seran leidas por la funcion imread() para luego ser mostradas en los axes.
Las imagenes son leidas como una matriz de datos binarios (En este caso ya que solo se trabaja con valores de 0=negro, 1=blanco).
Las imagenes son de tamano 8x8, por lo tanto cada matriz sera de dimensiones 8x8, donde cada posicion de la matriz contendra valores entre 0 y 1.

Las siguientes lineas de codigo representan el evento que se realizara al presionar sobre el boton "Cargar Images".

Seleccionamos el axes1.
axes(handles.axes1);
Guardamos el parth de la primera imagen
path = '\MATLAB\a2.bmp';
Leemos la imagen convirtiendola en una matriz
imag = imread(path);
Mostramos la imagen en el axes
imshow(imag);
Desabilitamos los ejes vertical y horizontal
axis off;
Mostramos la matriz que representa la primera
imagen y mostramos en un static text.
set(handles.text1,'String',num2str(imag));

Repetimos el procedimiento para la segunda
imagen que sera mostrada sobre el axes2.
axes(handles.axes2);
path = '\MATLAB\e0.bmp';
imag = imread(path);
imshow(imag);
axis off;
set(handles.text2,'String',num2str(imag));

Otra cosa importante que se debe de tomar en cuenta es que los "Static Text" deber ser modificados desde la GUI haciendo click derecho sobre cada static text y variando el valor de "max" hasta 10.




A continuacion en los enlaces siguientes se puede descargar los archivos e imagenes utilizados en el programa.





Como utilizar Global, Rand, Reshape en Matlab


Este post pretende explicar algunas sentencias muy basicas pero que a la vez son muy utiles a lo hora que se necesita trabajar con Matlab, nos concentramos en los siguientes conceptos:

Trabajar con variables tipo "global" en Matlab.
Genear numeros, matrices aleatorias con la funcion "rand".
Redimensionar el tamano de una matriz con la funcion "reshape".

Variables Globales:
Son variables que se puede utilizar en cualquier momento y desde cualquier funcion definida en el archivo .m.
El unico requisito es declarar las variables en cada una de las funciones donde se la vaya a utilizar.

A continuacion planteamos un ejemplo:
Tenemos 2 funciones en un archivo .m en matlab, lo cual quedaria asi:

function func1(hObject, eventdata, handles)
     global var2
     var1 = [1:1:10];
     var2 = sum(var1/(7-var1));

function func2(hObject, eventdata, handles)
     global var2
     disp(var2);

En el ejemplo anterior se puede observar que gracias a la definicion de la variable global var2 se puede utilizar esta variable en ambas funciones.
En la primera funcion definimos "var1" como una variable que varia de uno en uno desde 1 hasta 10 y la variable "var2" realiza la suma para todos los valores de "var1".

Funcion Rand:
Esta funcion nos permite generar numeros aleatorios en intervalos determinados, ademas nos permite crear vectores y matrices de numeros aleatorios, para lo cual se puede utilizar las siguientes sentencias:

rand(1) --> genera un numero aleatorio entre 0 y 1.
rand(5,1) --> genera un vector de numeros aleatorios de 5x1.
rand(1,3) --> genera un vector de numeros aleatorios de 1x3.
rand(2,3) --> genera una matriz de numeros aleatorios de 2x3.
rand(2,3,2) --> genera 2 matrices de numeros aleatorios de 2x3.


Existen otras funciones para generar valores aleatorios como las siguientes: randi(), randn().

La función randi() devuelve valores enteros dobles extraídas de una distribución uniforme discreta.
randi(2,10,1);

La función randn() devuelve matrices de números en coma flotante reales que se dibujan de una distribución normal estándar.
randn(10,1);

Funcion Reshape:
Esta funcion nos permite redimensionar matrices, por ejemplo se puede cambiar una matriz que representa valores para x,y,z en una matriz que represente valores solamente en x,y. Se aprecia mejor en el siguiente ejemplo:

Tenemos una matriz compuesta de los siguientes datos:

Podemos redimensionar con:

>> B = reshape(A(:, :, :), 24, 1)

Con este comando logramos crear un solo vector de datos de 24x1, en el cual contenga en sus filas cada uno de los valores de las matrices anteriores a la redimension.