Max Hernandez

Laberinto - Ejemplo de Canvas en HTML5

jueves, 7 de marzo de 2013

Laboratorio 2: Círculos con diferentes radios

Para esta semana en el laboratorio de visión computacional, se nos dio la tarea de detectar círulos con diferentes radios, en una imágen. Esta publicación servira a manera de reporte para la tarea de esta semana.

Funcionamiento
El algoritmo funciona, aplicando el filtro de borde que ya teniamos y después dibujando un circulo por cada pixel de borde con el radio elegido como entrada. Generando diferentes imagenes con diferentes radios como entradas, se puede aplicar un filtro umbral a la imagen como resultado para dejar solamente las areas mas blancas, osea a las que los puntos mas blancos son los puntos en los que hay un centro de un circulo.

Código

[]

Resultado


Esta imagen muestra la busqueda que se realiza generando un círculo por cada pixel de borde, generando imagenes y aplicando un umbral para dejar solamente el centro de los círculos.



La salida en la terminal es la siguiente:
max@max-laptop:~/Dropbox/vision_computacional/lb5$ python circle.py united_States_money_coins_part1.jpg
C1, Radio(pixeles): 43, porcentaje de diagonal: 13%
C2, Radio(pixeles): 47, porcentaje de diagonal: 15%
C3, Radio(pixeles): 55, porcentaje de diagonal: 17%
C4, Radio(pixeles): 59, porcentaje de diagonal: 19%
C5, Radio(pixeles): 63, porcentaje de diagonal: 20%
C6, Radio(pixeles): 63, porcentaje de diagonal: 20%
C7, Radio(pixeles): 71, porcentaje de diagonal: 22%
C8, Radio(pixeles): 71, porcentaje de diagonal: 22%
Tiempo de corrida: 5.87415409088


Referencias:
http://www.aishack.in/2010/03/circle-hough-transform/

martes, 5 de marzo de 2013

Laboratorio 5: Catálogo de software (libre) y proveedores de hardware para sistemas inteligentes

En esta semana para el laboratorio de cómputo ubicuo, hemos estado adquiriendo los elementos de software y hardware necesarios para nuestro proyecto, por eso para esta semana en laboratorio voy a mostrar diferentes proveedores de hardware y software que me parecieron útiles para cualquiera que quiera implementar un proyecto de computo ubicuo.

Proveedores de hardware

5hz Electrónica
http://www.5hz-electronica.com/

5hz es una tienda de electrónica local que tienen una gran cantidad de electrónicos útiles, como Arduinos, Raspberry PI, dispositovs Xbee y en serio una gran cantidad de cosas útiles y en su página cuentan con algunos tutoriales
útiles.

Entre sus productos que me pareció que podrían servir para nuestro proyecto, están los siguientes:

Arduinos
http://www.5hz-electronica.com/arduino.aspx
[imagen obtenida de:"http://www.5hz-electronica.com/images/products/display/0902601b.jpg"]

Modulos Bluetooth
http://www.5hz-electronica.com/bluetooth.aspx


Raspberry PI
http://www.5hz-electronica.com/raspberrypi.aspx

[Imagen obtenida de:"http://www.5hz-electronica.com/raspberrypi-modelb.aspx"]

Steren
http://www.steren.com.mx/

Esta es una tienda mexicana de componentes electrónicos muy generales tienen una gran cantidad de productos y tiene muchas sucursales en el área metropolitana, entre las cosas que podemos encontrar son componentes básicos como resistencias, capacitores, cables, sensores básicos.

Entre los productos que podrían ser útiles para nuestro proyecto son:

Cámara Web
http://www.steren.com.mx/catalogo/category.asp?f=6&sf=53&c=569

Para la parte de el agregado QR del proyecto podemos empezar a probar su funcionamiento utilizando una simple cámara Web, en especial me agrado la que se muestra en la parte de abajo por que es barata y flexible hablando del movimiento.

[imagen obtenida de:"http://www.steren.com.mx/_imgs/prod/zoom/com-117.jpg"]

Cámaras de seguridad

http://www.steren.com.mx/catalogo/sfam.asp?f=10&sf=106

También cuentan con cámaras de seguridad por si necesitamos probar de manera mas realista el añadido con códigos QR, aunque por el momento solo tenemos planeado probarlo con una cámara web, por que estas cámaras de seguridad son algo caras.

[imagen obtenida de:"http://www.steren.com.mx/_imgs/prod/grande/cctv-187.jpg"]

Adafruit
http://www.adafruit.com

Esta es una tienda en linea que encontré mientras navegaba en la web, la dueña de esta tienda es Limor Fried una egresada de la M.I.T. y la tienda parece ser muy reconocida. En esta página se encuentran a la venta una gran cantidad de componentes electrónico de todo tipo, además de que la misma página ofrece sus propios componentes que muy útiles y estéticos, además de que la página cuenta con muchos vídeos y tutoriales.

Entre los productos que nos podrían ser útiles en nuestro proyecto están:

Los componentes para comunicación inalámbrica
https://www.adafruit.com/category/112

Entre lo mas interesante son los dispositivos para establecer una comunicación, entre los mas interesantes son las tecnologías de Radio frecuencia y las tarjetas IMP para configurar conexiones a Internet.

Radio frecuencia

[imagen obtenida de:"https://www.adafruit.com/images/medium/1096_MED.jpg"]

IMP

[Imagen obtenida de:"https://www.adafruit.com/images/medium/1130insitu_MED.jpg"]

Software que puede ser útil

Opencv
http://opencv.willowgarage.com/wiki/

Opencv es una librería para procesamiento de imágenes para C++/ python muy utilizada, yo la estare utilizando en mi proyecto para leer los códigos QR y trabajar con ellos.

Algunas librerías de análisis de sonido en Python:
  • Friture
  • LibXtract
  • Yaafe
  • Aubio
Referencias:
http://wiki.python.org/

Laboratorio 5: Simulando redes

Para esta semana en el laboratorio de redes de telecomunicaciones se nos dio a la tarea de construir una simulación utilizando el simulador de redes SN-2. Esta publicación servirá de reporte para dicha tarea.

SN-2
Es un simulador de eventos discretos destinado a la investigación en red. NS presta un apoyo sustancial para la simulación de TCP, enrutamiento y protocolos de multidifusión a través de cable e inalámbricas (local y satélite) redes.

El simulador recibe como entrada un archivo que describe la forma en que se va a llevar a cabo la simulación y es capaz de generar archivos de salida en texto plano que describen la simulación.

El objetivo de la simulación es enviar archivos con el protocolo FTP sobre una conexión TCP. Nuestra simulación cuenta con seis nodos y la conexión TCP se lleva acabo entre los nodos 0 y 4 de la simulación.

Código
"redes.tcl"
..

Se corre de la siguiente manera:

ns redes.tcl

Vídeo de la simulación

[]

Midiendo el rendimiento de la conexión TCP

El rendimiento es el rango promedio de mensajes entregados con éxito en un canal de comunicación. Normalmente el rendimiento se mide en bits por segundo o bps, y otras veces en paquetes por segundo o longitud de tiempo.

Se logro medir el rendimiento construyendo un código para AWK que busca en el archivo de texto plano de salida, los paquetes que llegan y salen de los nodos involucrados para la conexión TCP

Para poder entender el script es necesario entender que los paquetes enviados en la simulación tienen el siguiente formato
+ -t 2.50944000000001 -s 0 -d 5 -p tcp -e 1040 -c 1 -i 1062 -a 1 -x {0.0 4.0 537 ------- null}

El primer dato quiere decir lo siguiente:
  • r: paquete recibido
  • +: paquete agregado a la cola
  • -: paquete eliminado de la cola
  • h: paquete enrutado
  • d: paquete perdido

Los siguientes datos son:
  • -t 2.50944000000001 -> El tiempo
  • -s 0 -> Nodo de origen
  • -d 5 -> Nodo de destino
  • -p tcp -> El protocolo
  • -e 1040 -> tamaño del paquete
  • -c 1 -> El tipo de flujo
  • -i 1062 -> Es el número del paquete
Código:
"throughput.awk"

Se corre de la siguiente manera:
awk -f throughput.awk output.nam

El resultado es el siguiente:
max@max-laptop:~/redes_de_telecomunicaciones/tarea5$ awk -f throughput.awk output.nam 
Se mandaron 2330 y de esos 2325 fueron entregados con exito 
El rendimiento es: 1897.09 Kbps 

Referencias:
http://nile.wpi.edu/NS/simple_ns.html
http://www.nsnam.com/2011/11/ns2-ns-235-installation-in-ubuntu-1110.html
http://ns2homeworkforbeginner.blogspot.mx/

lunes, 4 de marzo de 2013

Tarea 4: Detección de círculos

Para esta semana en la clase de visión computacional, se nos dio a la tarea de construir un código capaz de detectar circunferencias en una imagen. Esta publicación servirá a manera de reporte para dicha tarea.



[imagen obtenida de:"http://what-when-how.com/wp-content/uploads/2011/06/tmp2053_thumb1.jpg"]

El algoritmo

El método utilizado para detectar círculos es muy parecido al que utilice en publicaciones pasadas para detectar lineas, solo que en esta ocasión se utilizan los gradientes para calcular el ángulo con el fin de tomar ese punto como si fuera parte de un círculo y utilizar el ángulo para generar un punto a una distancia $r$ de dicho punto, es decir se calcula un posible centro para cada punto. esto se hace de la siguiente forma:

Primero calculé el gradiente para cada pixel utilizando los gradientes en $x$y en $y$ tal como se hizo en tareas pasadas.

$g = \sqrt{ g_{x}^{2} + g_{y}^{2} }$

Una vez hecho esto se utilizan dichos valores para calcular:

$cos\left ( \theta  \right ) = \frac{gx}{g}$

$sin\left ( \theta  \right ) = \frac{gy}{g}$

Con esto podemos calcular los posibles centros de círculo para cada pixel de la siguiente manera:
$x_{c} = x-rcos\left ( \theta  \right )$
$y_{x} = y - rsin\left ( \theta  \right ) $

Código

Resultado

El contorno del círculo se muestra con tonos de amarillo generados aleatoriamente, en el centro con verde el punto central y una etiqueta para cada círculo. El centro se mueve por que para poder lograr abarcar mayor contorno del círculo con el algoritmo discreticé en múltiplos de un número por lo cual el centro suele moverse un poco a la esquina superior izquierda del círculo.





Referencias:
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/circulos.pdf