Atom Blog

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 Hacer una Animacion de Movimiento de Texto En HTML



En este post mostraremos como realizar una animacion sencilla que refleje los distintos tipos de movimientos que se puede hacer con los textos.

Crearemos un contenedor en el cual escribiremos 7 nombres que representan a: Java, Matlab, HTML, Threads, GUI, Button, JSF, cada nombre tendra un color y un efecto de movimiento diferente.

Para este ejemplo haremos todo desde HTML y JavaScript, no utilizaremos CSS.

Haremos uso del script "Kinetic", el cual nos brindara un ambiente de javaScript, creando stages, layers y utilizaremos algunos de sus metodos para lograr los efectos que se obtuvieron en el ejemplo:

El ejemplo se desarrollara dentro de las etiquetas <body> y </body> y seguira de la siguiente manera:

Para agregar el script Kinetic aplicamos la siguiente sentencia:

<script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.7.4.min.js"></script>

Una vez que se importa el script, se continua programando en JavaScript dentro de las sentencias siguientes:

<script>
       .........codigo en javascript.........
</script>

E incluimos el siguiente codigo que permite agregar un contenedor donde incluiremos nuestros textos.

//Creamos una nueva etapa llamada "stage" 
 var stage = new Kinetic.Stage({
     container: 'container', 
     width: 600,
     height: 340 
 });

//Creamos nueva capa sobre la que colocaremos los easings 
 var layer = new Kinetic.Layer();

Creamos los textos al los que les pondremos los efectos de movimiento.
//Creamos la lista que se mostrara con su respectivo nombre, //color y efecto (easings).  
var easings = [ {
easing: 'ElasticEaseOut', name:'Java', color:'blue'}, 
   {easing: 'BackEaseIn', name:'Matlab', color:'red'}, 
   {easing: 'EaseOut', name:'HTML', color:'green'}, 
   {easing: 'EaseInOut', name:'Threads', color:'blue'}, 
   {easing: 'BackEaseIn', name:'GUI', color:'yellow'}, 
   {easing: 'EslasticEaseIn', name:'Button', color:'red'}, 
   {easing: 'BackEaseInOut', name:'JSF', color:'orange'} 
 ];  

Como se puede observar en las sentencias anteriores los efectos vienen daros por: 'BackEaseIn, EaseOut, EaseInOut, etc. Existen otros efectos aparte de estos.

Nuestro ejemplo se veria de la siguiente manera:

Para descargar el proyecto completo seguir los siguientes enlaces:


Como Crear Menu Vertical en HTML y Decorar con CSS


En este post ensenaremos como crear un menu vertical en html y decorarlo con css a partir de una lista simple creada con el siguiente codigo que lo colocaremos entre las etiquetas <body> y </body>.

<body>
<div id="menuVertical">
     <ul>   <!--Define la lista en 
          <li>   <!--Define cada elemento de la lista-->
          <li> <a href="http://aflrovvs.blogspot.com/search/label/java">  Java </a> </li>
          <li> <a href="http://aflrovvs.blogspot.com/search/label/matlab"> Matlab </a> </li>
          <li> <a href="http://aflrovvs.blogspot.com/search/label/html">  HTML  </a> </li>
     </ul>
</div>
</body>

Lo cual se vera de la siguiente manera:
Para hacer que la lista luzca como un verdadero menu vertical aplicaremos algunos estilos con css, en los que se incluye codigo para eliminar las vinetas, eliminar el subrayado, colocar paneles detras de cada elemento, entr otros.

Para poder eliminar las vinetas colocaremos:

list-style-type:none;

Dentro de la funcion  #menuVertical ul{..} en la plantilla de nuestro blog dentro de la funcion body {..}
En esta misma funcion definimos el color de fondo de cada elemento de menu y el color de los bordes de los paneles de los elementos de menu respectivamente:

 background:#CEFBF6; 
 border:solid 5px #7FFEF1;

El radio de borde viene dado por:

border-radius:9px;

Para eliminar el subrayado colocaremos la sentencia siguiente:

text-decoration: none;

Dentro de la funcion #menuVertical ul a{..} en la plantilla de nuestro blog dentro de la funcion body{...} debajo de la funcion  #menuVertical ul {..}.
En esta misma funcion colocamos el tamano de la fuente que viene definida por:

font-size: 20px;

Para crear el efecto de cambio de contraste al colocar el mouse sobre el menu aplicamos el siguiente codigo que lo unico que hace es mostrar una inversion de los colores para cada caso, es decir cuando no se coloca el mouse sobre el menu el color de cada elemento de menu esta variando de negro hasta blanco y al colocar el mouse sobre el elemento de menu, este varia de blanco a negro, lo que da el efecto de seleccionar tal elemento de menu.

#menuVertical li a{ 
    color:#06F; 
    margin:0px; 
    background:linear-gradient(#fff 0%,#dedede 100%); 
    background:-moz-linear-gradient(#fff 0%,#dedede 100%); 
    background:-ms-linear-gradient(#fff 0%,#dedede 100%); 
    background:-o-linear-gradient(#fff 0%,#dedede 100%); 
    background:-webkit-linear-gradient(#fff 0%,#dedede 100%); 
    border:solid 1px #f9f9f9; 
    border-radius:15px; 
    padding:10px; 
 } 

 #menuVertical li a:hover{ 
     background:linear-gradient(#DEDEDE 0%, #FFF 100%); 
     background:-moz-linear-gradient(#DEDEDE 0%, #FFF 100%);
     background:-ms-linear-gradient(#DEDEDE 0%, #FFF 100%);
     background:-o-linear-gradient(#DEDEDE 0%, #FFF 100%); 
     background:-webkit-linear-gradient(#DEDEDE 0%, #FFF 100%); 
     border-radius:15px; 
     border:solid 4px #333; 
     color: red; 
 }

Al aplicar estas sentencias y las demas que vienen incluidas en la carpeta del proyecto, nuestro menu deberia verse de la siguiente manera:

Ademas se lo puede apreciar en la parte izquierda de nuestro blog.

Para descargar el proyecto seguir los enlaces siguientes:



Como crear un Menu con Submenus en HTML decorado con CSS


En este nuevo post crearemos un menu que contenga submenus, cada uno de los cuales estara enlazado a paginas de este blog.
Utilizaremos herramientas de html/css para poder dar ciertos efectos a los menus.

Para crear el menu utilizaremos el siguiente codigo, que estara dentro de la etiqueta <body>.

<div id='subMenu'>
    <ul>   <!--Define la lista en si--> 
        <li> <a href="http://aflrovvs.blogspot.com/">  Inicio </a> </li>
        <li>
            <a href="http://aflrovvs.blogspot.com/p/descargas.html"> Descargas </a>
                <ul>
                     <li> <a href="https://skydrive.live.com/#cid=CB2C976AE9CB5D07&id=CB2C976AE9CB5D07%21278"> SkyDrive </a> </li>
                     <li> <a href="https://www.dropbox.com/sh/kotx2ml5a097vlv/C1YPyPd7QL"> DropBox </a> </li>
                    </ul>    
                </li>
                <li> <a href="http://aflrovvs.blogspot.com/p/sobre-mi.html">  Sobre Mi  </a> </li>
                <li> <a href="http://aflrovvs.blogspot.com/p/contacto.html">  Contacto </a> </li>
            </ul>
</div>

El cual contendra los submenus con sus respectivos enlaces y quedara de la siguiente manera:

Como Insertar Imagenes y Crear Menus Horizontales con HTML/CSS



El primer post dedicado al lenguaje HTML es sobre como insertar imagenes que esten alojadas en internet y la creacion de menus horizontales disenados con herramientas de CSS.

Este post en particular muestra el diseno del banner principal y del menu horizontal alojado en este blog.

El codigo consta de 3 partes: la primera es la colocacion del banner principal, seguida de la creacion del menu , para luego agregar ciertas caracteristicas de diseno al menu creado.

Para Insertar la Imagen utilizaremos el codigo siguiente:

<center>
        <div id="carga">
            <img src="http://drive.google.com/uc?export=view&id=0B1kFwZU59fWZYVRKMWUycFlJenM"              bord  ="0" height="197" width="1000" ""/>
        </div>
</center>

Estas lineas se colocan debajo de donde empieza <body>, la direccion de la imagen es insertada justo en medio de las comillas de la seguiente sentencia <img src=" ">. La altura y ancho de la imagen se controlan con "height" y "width".

<center> y </center> son utilizadas para centrar la imagen.

Para la creacion del menu se utilizan las siguientes lineas de codigo, las cuales se colocan abajo del codigo utilizado para insertar la imagen, dentro de la etiqueta <body>.

<div id='cssmenu'>
            <ul>   <!--Define la lista en si--> 
                <li> <a href="http://aflrovvs.blogspot.com/">  Inicio </a> </li>
                <li> <a href="http://aflrovvs.blogspot.com/p/descargas.html"> Descargas </a> </li>
                <li> <a href="http://aflrovvs.blogspot.com/p/sobre-mi.html">  Sobre Mi  </a> </li>
                <li> <a href="http://aflrovvs.blogspot.com/p/contacto.html">  Contacto </a> </li>
            </ul>
</div>

En la primera linea colocamos el nombre de nuestro menu: "cssmenu".
En la segunda linea creamos la lista que contendra cada elemento del meno con la etiqueta "<ul>".
Desde la tercera linea a traves de la etiqueta "<li>" se puede crear cada uno de los elementos del menu, sobre los cuales se colocan su respectivo nombre y su enlace al cual nos dirigiremos al hacer click. En nuestro caso cada uno de los enlaces son paginas creadas previamente en mi blog.

Quedando de la siguiente manera:

Como se observa el menu se crea de una manera simpre y en forma vertical, para convertir el menu a una forma horizontal y con colores y sombras aplicamos las siguientes sentencias:

Estas funciones se colocan entre las etiquetas <style type="text/css"> y  </style> por debajo de <title></title>.
Esta primera funcion pinta del color azul el panel de fondo donde colocaremos el menu, ademas redondea el panel creado pintado de azul.

#cssmenu { width:100%; 
   background-color: #62a8f6; 
   border-top-left-radius:34px; 
   border-top-right-radius:34px; 
   border-bottom-left-radius:34px; 
   border-bottom-right-radius:34px;
}

Esta funcion acompanada de la siguiente colocan la lista de una forma horizontal, ademas colocan las coordenas donde se situara el menu y tamano de paneles que lo contendran.

#cssmenu ul { 
    list-style-type:none; 
    height: 40px; 
    width: 534px; 
    margin: auto; 
    position:relative; 
    display:block; 
}

Esta funcion en la 3 linea coloca el color de cada elemento de menu, el la 4 linea asigna la separacion que mantendran los elementos del menu, en la 5 linea pondremo un borde a cada elemento de menu con su repectivo color y en la ultima linea redondeamos las esquinas de los paneles que contienen a lso elementos de menu.

#cssmenu li a{ 
    float: left; 
    background-color: #d4eaff;
    margin:0px; 
    border:solid 1px #f9f9f9; 
    border-radius:15px; 
 }

Esta funcion es la encargada de crear el efecto de cambiar de color que realiza el menu al colocar el puntero sobre cada uno de los elementos de menu.
En la segunda linea asignamos el color al que cambiara, en nuestro caso sera el azul de fondo.
En la tercera linea asignamos el nivel de redondeado.
En la ultima linea colocamos un borde de color negro.

#cssmenu li a:hover { 
    background-color: #6285f5; 
    border-radius:15px; 
    border:solid 1px #000; 
 }

Esta ultima funcion se encarga de realizar algunas funciones como quitar el subrayado con la linea 5.
Ademas en las lineas 2 y 3 controlamos el largo de los paneles de cada unos de los elementos de menu.
En la linea 4 establecemos el ancho de los paneles que contiene los elementos de menu.

 #cssmenu ul a { 
    padding-right: 32px; 
    padding-left: 32px; 
    display: block; line-height: 40px; 
    text-decoration: none;  
    font-family: Georgia, "Times New Roman", Times, serif, fantasy; 
    font-size: 18px; 
    color: #FC4A04; 
 }

El programa quedara de la siguiente manera:

Para descargar el proyecto completo seguir cualquiera de los enlaces siguientes:


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: