Atom Blog

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

Como Utilizar Imagenes en Matlab


En este nuevo post veremos algunas cosas muy utiles al momento que necesitemos trabajar con imagenes en matlab, aprenderemos como leer imagenes desde la computadora, como mostrarlas en un axes y como escribirlas (guardar) en la computadora.

Una imagen en blanco/negro en matlab es representada por una matriz de dimensiones nxm, donde "n" representan las filas y "m" las columnas.
Para representar una imagen a color en matlab se necesitaran 3 matrices representando los colores basicos.

Para leer una imagen desde la computadora aplicamos la siguiente sentencia:

ruta = 'C:\Users\Rafa\Desktop\imagen1.jpg';
A=imread(ruta);

La variable "A" guardara la matriz de datos de la imagen. Para poder representar la imagen leida en una ventana utilizamos la siguiente sentencia:

imshow(A);

Para obtener el tamano de la imagen utilizamos:

size(A);

lo que representa que existen 3 matrices para cada uno de los colores basicos y el tamamo 375x600.

Podemos aplicar la sentencia siguiente para obtener informacion detallada de la imagen leida.

whos A;

Se puede observar algunos parametros obtenidos de la imagen leida como su nombre, su tamano, los bytes utilizados para representar la matriz, asi como su clase (clase de imagen) que en este caso es uint8 y sus atributos.

Clases de Imagenes:

char: Para caracteres (2 bytes por elemento).
double: Doble precision, numeros de punto flotante en un rango de -10^308 hasta 10^308 (8 bytes por elemento).
int8: Enteros de 8 bits en el rango [-128, 127] (1 byte por elemento).
int16: Enteros de 16 bits en el rango [-32768, 32767] (2 byte por elemento).
int32: Enteros de 32 bits en el rango [-147483648,2147483647] (4 byte por elemento).
logical: Representada por valores de 0 y 1 (1 byte por elemento).
single: Numero de punto flotante de precision simple, con valores entre [-10^38, 10^38] (4 bytes por elemento).
uint8: Enteros de 8 bits en el rango [0, 255] (1 byte por elemento).
uint16: Enteros de 16 bits en el rango [0, 65535] (2 byte por elemento).
uint32: Enteros de 32 bits en el rango [0, 4294967295] (4 byte por elemento).

Para guardar una imagen en la computadora utilizaremos las siguientes sentencias:

imwrite(f, 'nombre_imagen.jpeg');

Ademas se puede utilizar la sentencia siguiente para definir la calidad de la imagen que vamos a guardar, el valor de "q" varian de 0 a 100 representando la calidad respectivamente.

imwrite(A, 'nombre_imagen.jpeg','quality', q);

Para poder recuperar informacion correspondiente a la imagen que acabamos de guardar aplicamos lo siguiente:

imfinfo nombre_imagen.jpeg;



Existen algunos comandos utilizados para tranformar entre las distintas clases de imagenes, como se  muestra a continuacion:

Nuestra imagen original guardada en A es:
Al aplicar:

 im2bw(A)

se obtiene:



Se tiene otros tipos de transformacion como:

im2uint8(A);

im2uint16(A);

im2double(A);







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 y Elegir los Axes en GUI en Matlab


En este nuevo sencillo ejemplo mostraremos como utilizar los axes en la gui de matlab, graficando algunas funciones sobre los mismos.
Utilizaremos un boton para mandar a graficar las diferentes funciones sobre los 3 axes.
Ademas resolveremos el problema de no saber seleccionar el axes sobre el cual se requiere trabajar, para solucionar este problema utilizaremos la sentencia siguiente:



axes(handles.axes1);

Esta sentencia permite seleccionar el axes sobre el que se va a trabajar en ese instante.
En las siguientes lineas de codigo observamos que en la linea 4 se graficara sobre el axes1 que se selecciono con anterioridad en la linea 1.
Asimismo en la linea 9 se graficara sobre el axes 2 ya que se selecciono con anterioridad en la linea 6.

Las lineas 2 y 7 crean una variable que va desde 1 hasta 10/15 variando cada 0.001 para ser utilizada para graficar.

Las funciones plot() sirven para graficar sobre los axes seleccionados, permite colocar parametros como el LineWidth, el cual establece el ancho de la linea que se grafica.

axes(handles.axes1);
x1 = [1:0.001:10];
x2 = 2-x1*3;
plot(x1,x2,'red','LineWidth', 2.5);

axes(handles.axes2);
x1 = [1:0.001:15];
x2 = x1*3/9;
plot(x1,x2,'LineWidth', 2.5);



Para descargar los archivos del programa seguir los enlaces siguientes:

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.

Como Utilizar el Slider, Button, Edit Text en GUI en Matlab


En este ejemplo mostraremos como utilizar el componente Slider de la GUI de Matlab, su utilizacion es muy sencilla. En primer lugar creamos un nuevo archivo tipo fig y colocaremos lo siguiente:


a continuacion hacemos click en View Callbacks-->Callbacks sobre el Slider y colocamos el siguiente codigo:

handles.slider1 = get(hObject,'Value');
indSlide = round(handles.slider1);
set(handles.salidaSlider,'String',indSlide);

En indSlide capturamos la posicion del slider y la mostramos en uns static text en la siguiente linea.

Por defecto el intervalo de variacion del Slider es de 0 a 1, para cambiar estos parametro tendremos que ingresar a la GUI en Property Inspector sobre el Slider y encontrar los valores de maximo y minimo para su modificacion; en nuestro caso hemos colocado min = 0 y max = 10.

La siguiente parte del programa es establecer un valor al Slider al colocar un valor determinado sobre un Edit Text, es decir setear un determinado valor sobre un slider, lo cual se vera de la siguiente manera:



El codigo utilizado al presionar el boton "Aceptar" es el siguiente:

dato = str2num(get(handles.txtIn, 'String'));
set(handles.slider1, 'Value', fix(dato));

En la primera linea obtenemos el valor de entrada y los transformamos a formato de numeros.
En la segunda linea colocamos el valor obtenido del edit text sobre el slider.

Para descargar los archivos del programa seguir los enlaces siguientes:

Archivo.m
Archivo.fig


Como utilizar CheckBox y Button en GUI en Matlab


Este es un sencillo ejemplo que abarca la utilizacion de los checkbox en matlab, los checkbox permiten la seleccion de multiples opciones simultaneamente, lo cual los hace muy utiles para muchisimas aplicaciones que se crean dia a dia.

El primer paso es dirigirse a la gui y crear un nuevo documento sobre el cual pondremos los elementos que se muestran en la siguiente figura:


estado = get(handles.checkbox1,'Value');
if estado==1
    set(handles.txtSalida1,'String','Opcion1');
end

En la variable estado almacenaremos el valor de cada checkbox, siendo (1--> Seleccionado y 0--> No Seleccionado).

Se puede descargar los archivos del programa de los siguientes enlaces:



Como usar Radio Button, Button Group y Button en GUI en Matlab


En esta ocasión mostramos un programa sencillo realizado en matlab, el mismo que contendra un panel Button Group sobre el cual estaran alguno Radio Button.

Gracias a este panel Button Group, los radio button que se encuentren dentro del panel podran seleccionarse solamente uno a la vez haciendolo muy util para los casos en los cuales e necesitan presentar una de varias opciones en la GUI.

Ademas este sencillo programa a traves de un boton muestra en un static text la opcion que se ha seleccionado.

Para poder determinar si algun radio button especifico esta seleccionado o no se aplica la siguiente sentencia:

estado = get(handles.radiobt1,'Value');

if estado == 1
    set(handles.txtSalida,'String', 'Opcion 1');
end  

radiobt1 es el nombre del primer radio button sobre la GUI, guardamos en la variable estado el estado del radio button (1--> Seleccionado, 0-->No Seleccionado).



Se puede descargar los archivos siguiendo el enlace siguiente: