Tarea 5: Visión Computacional
Esta entrada es para la detección de elipses:
Primero que nada lo que realizamos es identificar los pixeles de borde de un objeto, para poder realizar lo anterior lo realice con el bfs que es una función que ya tenia para poder trabajar con lo que son las formas y solo traerme los pixeles de los bordes en cada una de ellas, el código es el siguiente:
Los puntos seleccionados son al azar ya que se selecciona un punto y despues otro de una misma figura, y después de hacer esto es calcular sus pendientes lo cual lo realizo con la formula m=Gy/Gy la pendiente se reliza para cada punto, después de esto checamos si las pendientes son iguales si lo son esos puntos son descartados.
Ya cuando tenemos las pendientes de los dos puntos tenemos que checar en donde es que se intersectan sus pendientes, como saben para poder hacer lo anterior trabajaremos con las ecuaciones de las rectas de cada uno de los puntos que son:
punto 1: y1=m1x1+b1
punto 2: y2=m2x2+b2
Si queremos que se intersecten en este caso la (x,y) deben de ser la misma en las dos ecuaciones, pero primero debemos obtener el valor de b1 y de b2.
Para obtener el valor de b1 y b2 utilizamos la misma formula anterior solo que ahora (x,y) tienen el valor de las coordenadas de nuestro pixel donde nos encontramos. Despejamos la ecuacion anterior y otenemos la ecuacion para encontrar b.
b1=y1-m1x1
Ahora ya encontrada la b seguimos con el paso de encontrar (x,y) el punto donde se intersectan, para encontrar primero la x igualamos las ecuaciones de punto1 y punto 2 anteriores:
punto 1: y1=m1x1+b1
punto 2: y2=m2x2+b2
m1x+b1 =m2x+b2
De lo anterior despejamos x y nos queda de la siguiente manera:
x=(b2-b1)/(m1-m2)
ya sacando lo que es x vamos a obtener el valor de y esto lo encontramos facilmente sustituyendo la x en una de las ecuaciones anteriores:
y1=m1x1+b1
y=m1*x+b1
y=m1((b2-b1)/(m1-m2))+b1
Ahora ya tenemos donde se intersectan lo que son sus tangentes, nos toca sacar su punto medio y para sacar e punto medio entre dos puntos utilizamos la siguiente formula:
Xm = (x1 + x2)/2
Ym = (y1 + y2)/2
Punto medio:
P = (Xm, Ym)
Después de sacar el punto medio necesitamos obtener la linea que pasa por la intersección y el punto medio.
Obteniendola lo que nos importa es la linea marcada de rosa ya que estos cuentan como centros potenciales para un elipse.
Los pasos anteriores se repiten para cada par de puntos seleccionados y asi se tiene que ir votando cierto pixel para poder seleccionar el que tuvo mas votos y en este caso seria nuestro centro del elipse, de ahi solo se pasaria a dibujarlo.
Hasta el momento lo que tengo hasta el punto de obtener el punto medio entre los dos pixeles sacar la recta para poder checar los posibles centros potenciales.
El código es:
martes, 16 de abril de 2013
martes, 9 de abril de 2013
Laboratorio 6 Cómputo Ubicuo
En esta entrada daremos nuestros puntos de vista y recomendaciones de la ultima presentacion de cada equipo acerca de Diseño de Prototipo
Equipo 1: Alarma inteligente para carros
En esta entrada daremos nuestros puntos de vista y recomendaciones de la ultima presentacion de cada equipo acerca de Diseño de Prototipo
Equipo 1: Alarma inteligente para carros
En este caso el Hardware que utilizaran se me hace bueno, ya que son materiales que hemos usado y además es lo que tienen más a la mano y no estan comprando cosas que realmente cuestan.
En el caso de los sensores a utilizar hubiese sido mejor dar a conocer cuales son los sensores que se utilizaran además de para se tiene pensado utilizar cada uno.
Equipo 2: Computadora Inteligente
Me gusto la idea más acerca de que se puede aplicar una Webcam cuando se tiene una computadora o una laptop que no cuente con esta, ya que esto facilitaria a los usuarios comprarla en caso de no tenerla.
Equipo 3: Oficina personalizada
Acerca de las nuevas propuestas que se dieron en la presentación me gusto la del acceso por internet ya que asi es más facil accesar para una persona, además una buena idea seria acceder mediante una aplicación donde uno como usuario pueda acceder en el celular.
Equipo 4: Localizador de personas
La idea acerca de lo del comando de voz me parece muy bien ya que serviria de mucho para personas que sufren problemas de visión y solo pueden escuchar.
Y que el cambio que se dio de no reconocer a personas ya que era molesto para ellas pues esa bien, la idea de personas pienso que hubiera diso mejor adaptarlo a solo niños pequeños. Y acerca de los componentes caros si tienen razón ya que la mayoría de la gente compraria cosas baratas que funcionaran bien.
Equipo 6: Despertador Inteligente
Hasta el momento me parece muy buena su idea, me gusto mucho como explican para que se utiliza cada cosa y de que usen una opción más que fue lo del buzzer, además el software que escogieron es muy completo.
Equipo 7: Casa segura
Falto poner en la presentación un poquito mas información acerca de lo que va a realizar cada cosa. En si deben de enfocar mejor el proyecto a cosas más pequeñas por el momento, lo digo por el tiempo que queda.
Equipo 8: Garage Inteligente
En este caso ya que cuentan con el reconocedor de códigos qr seria bueno que tomaran mucho más en cuenta lo que es la seguridad.
Equipo 3: Oficina personalizada
Acerca de las nuevas propuestas que se dieron en la presentación me gusto la del acceso por internet ya que asi es más facil accesar para una persona, además una buena idea seria acceder mediante una aplicación donde uno como usuario pueda acceder en el celular.
Equipo 4: Localizador de personas
La idea acerca de lo del comando de voz me parece muy bien ya que serviria de mucho para personas que sufren problemas de visión y solo pueden escuchar.
Y que el cambio que se dio de no reconocer a personas ya que era molesto para ellas pues esa bien, la idea de personas pienso que hubiera diso mejor adaptarlo a solo niños pequeños. Y acerca de los componentes caros si tienen razón ya que la mayoría de la gente compraria cosas baratas que funcionaran bien.
Equipo 6: Despertador Inteligente
Hasta el momento me parece muy buena su idea, me gusto mucho como explican para que se utiliza cada cosa y de que usen una opción más que fue lo del buzzer, además el software que escogieron es muy completo.
Equipo 7: Casa segura
Falto poner en la presentación un poquito mas información acerca de lo que va a realizar cada cosa. En si deben de enfocar mejor el proyecto a cosas más pequeñas por el momento, lo digo por el tiempo que queda.
Equipo 8: Garage Inteligente
En este caso ya que cuentan con el reconocedor de códigos qr seria bueno que tomaran mucho más en cuenta lo que es la seguridad.
sábado, 6 de abril de 2013
Tarea 3: Codificación Huffman
La codificación de Huffman es un algoritmo que es usado en la compresión de datos, es una forma de codificación estadistica.
La lóngitud para cada simbolo no es la misma ya que los simbolos utilizados con mas frecuencia se le asignan códigos más cortos mientras que los simbolos menos frecuentes se les asigna un código mas largo.
Ejemplo de como trabaja:
En esta caso dare como entrada una cadena la cual es la siguiente:
Paso 1
Buscamos la frecuencia de los caracteres unicos en el texto anterior:
Paso 2
Cada uno de los caracteres se crea como un arbol y los agrego a una lista, cada arbol tiene su simbolo asociado y su numero de frecuencia.
Paso3 Los ordenamos de menor a mayor según las frecuencias
Paso4
De lo anterior se seleccionaran los primeros dos arboles de la lista y formaremos un nuevo arbol con ellos, antes de realiar el arbol borraremos los dos arboles de la lista:
La raiz del nuevo arbol sera la suma de las frecuencias de las raices de los dos arboles a unir y los arboles seran ahora nodos hijos de esta:
Paso 5
Agregamos a la lista el nuevo arbol creado ordenando de menor a mayor:
Realizamos el paso 4 y 5 de lo anterior hasta que solo quede un arbol en la lista:
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Paso 6
Ya después de haber obtenido el arbol final tenemos que comenzar a recorrerlo para poder obtener el código binario de cada uno de los caracteres, como es un arbol binario sabemos que tiene las siguientes etiquetas que unen un nodo con otro:
Este árbol contiene las palabras clave nuevas para cada letra, y el nodo raiz que en este caso es el 11 sera el número de caracteres en el texto que son 11.
Paso 7
Convertir el texto original con sus valores de código bianrios por huffman:
Texto origina: Hola alicia
Comprimido: 000001110100101011011101111110
Paso 8
El paso 8 es descomprimirlo, en este caso recorro la cadena ya comprimida caracter por caracter y voi buscando en el arbol si es un cero me voi a la izquierda si es un uno a la derecha hasta encontrar el ultimo nodo que no tenga hijos, ejemplo:
Mi código es el siguiente:
Realice dos pruebas una donde utilizo una gran cantidad de texto en la cadena de entrada pero que los caracteres son repetidos y otro en donde es un texto más pequeño y existen una mayor cantidad de diferentes caracteres:
Mejor Caso:
Texto grande con caracteres identicos mayor, sería el mejor caso ya que no recorreria el arbol muchas veces.:
Peor Caso:
Texto pequeño con caracteres identicos menor, sería el peor caso ya que el arbol lo recorrera muchas veces por que los caracteres casi no se repiten y son diferentes:
Si nos damos cuenta que mientras más se repita un caracter en una cadena el código dado por el algoritmo de huffman se hace más pequeño.
Y que los caracteres que más se repiten son los que tienen un código binario de menor digitos.
Intenete dibujar el arbol :s pero no alcanse a terminarlo y me lo empalmaba:
Es del ejemplo Hola alicia lo hice con networkx:
Código:
La codificación de Huffman es un algoritmo que es usado en la compresión de datos, es una forma de codificación estadistica.
La lóngitud para cada simbolo no es la misma ya que los simbolos utilizados con mas frecuencia se le asignan códigos más cortos mientras que los simbolos menos frecuentes se les asigna un código mas largo.
Ejemplo de como trabaja:
En esta caso dare como entrada una cadena la cual es la siguiente:
Paso 1
Buscamos la frecuencia de los caracteres unicos en el texto anterior:
Paso 2
Cada uno de los caracteres se crea como un arbol y los agrego a una lista, cada arbol tiene su simbolo asociado y su numero de frecuencia.
Paso3 Los ordenamos de menor a mayor según las frecuencias
Paso4
De lo anterior se seleccionaran los primeros dos arboles de la lista y formaremos un nuevo arbol con ellos, antes de realiar el arbol borraremos los dos arboles de la lista:
La raiz del nuevo arbol sera la suma de las frecuencias de las raices de los dos arboles a unir y los arboles seran ahora nodos hijos de esta:
Paso 5
Agregamos a la lista el nuevo arbol creado ordenando de menor a mayor:
Realizamos el paso 4 y 5 de lo anterior hasta que solo quede un arbol en la lista:
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Paso 6
Ya después de haber obtenido el arbol final tenemos que comenzar a recorrerlo para poder obtener el código binario de cada uno de los caracteres, como es un arbol binario sabemos que tiene las siguientes etiquetas que unen un nodo con otro:
Este árbol contiene las palabras clave nuevas para cada letra, y el nodo raiz que en este caso es el 11 sera el número de caracteres en el texto que son 11.
Paso 7
Convertir el texto original con sus valores de código bianrios por huffman:
Texto origina: Hola alicia
Comprimido: 000001110100101011011101111110
Paso 8
El paso 8 es descomprimirlo, en este caso recorro la cadena ya comprimida caracter por caracter y voi buscando en el arbol si es un cero me voi a la izquierda si es un uno a la derecha hasta encontrar el ultimo nodo que no tenga hijos, ejemplo:
Mi código es el siguiente:
Realice dos pruebas una donde utilizo una gran cantidad de texto en la cadena de entrada pero que los caracteres son repetidos y otro en donde es un texto más pequeño y existen una mayor cantidad de diferentes caracteres:
Mejor Caso:
Texto grande con caracteres identicos mayor, sería el mejor caso ya que no recorreria el arbol muchas veces.:
Texto pequeño con caracteres identicos menor, sería el peor caso ya que el arbol lo recorrera muchas veces por que los caracteres casi no se repiten y son diferentes:
Si nos damos cuenta que mientras más se repita un caracter en una cadena el código dado por el algoritmo de huffman se hace más pequeño.
Y que los caracteres que más se repiten son los que tienen un código binario de menor digitos.
Intenete dibujar el arbol :s pero no alcanse a terminarlo y me lo empalmaba:
Es del ejemplo Hola alicia lo hice con networkx:
Código:
jueves, 7 de marzo de 2013
Laboratorio 5:
Detección de circulos sin radio
En esta entrada tenemos que realizar la detección de circulos pero con diferentes radios.
Lo que trate primero fue acomodar mi codigo de la vez anterior ya que no me detectaba lo que son los circulos solo los centros.
Imagen original:
Lo que hice fue darle una lista de parametros con radios diferentes los radios que tienen mis circulos. Después.
Guarde una imagen por cada iteracion:
Como vemos aun falta ya que lo que hago yo es que le doy estaticos los radios.
Este es sólo mi código relevante:
Detección de circulos sin radio
En esta entrada tenemos que realizar la detección de circulos pero con diferentes radios.
Lo que trate primero fue acomodar mi codigo de la vez anterior ya que no me detectaba lo que son los circulos solo los centros.
Imagen original:
Guarde una imagen por cada iteracion:
Este es sólo mi código relevante:
martes, 5 de marzo de 2013
Laboratorio 5
En esta entrada tenemos que poner un listado de proveedores de HW y SW para las personas que quieren implementar sistemas inteligentes, en que se especializan como se pueden comprar los productos y la lista de productos que tienen.
Primero que nada empezaremos con las tiendas que se encuentran en el are en la que vivimos:
La tienda cuenta con muchos productos, los cuales se caracteriza más por vender lo que es la tarjeta arduino, aunque también contamos con muchos otros componentes como:
Microcontroladores
Led
Displays
Programador para AVR
Modulo Bluetooth
Encontramos muchas mas cosas, las cuales podemos ver con más tranquilidad en su pagina que es: http://www.5hz-electronica.com/
Cuenta con dos tipos de compra:
-Ir directo a la tienda venden las cosas al momento
-Cuenta con un carrito de compra
Lo malo de esta tienda es que solo existe una aquí en monterrey.
Es la tienda a la que asistimos mas común mente, ya que encontramos más locales de ella y uno cerca de nuestra casa.
También cuenta con una variedad pero no muy grande entre los productos que vende están:
-Led
-Cable para conexiones
-Productos ya completos solo para armar como el brazo mecánico
Para adquirir los productos podemos ir a cualquier local de steren y comprarlo, al igual que también cuenta con un carrito de compra.
Pagina oficial: http://www.steren.com.mx/
AG Electrónica
Esta tienda no la encontramos aquí en Nuevo León y para pedir los productos necesitamos pedirlos, primero nos registramos y después lo agregamos al carrito de compras. También podemos adquirirlos directamente en la tienda.
En la tienda se encuentra mucha variedad de productos como:
-Sensores
-Arduino
-Pantallas de led´s
Para más información: http://www.agelectronica.com/
lunes, 4 de marzo de 2013
Visión Computacional: Detección de Circulos
En esta entrada realizaremos lo que es la detección de circulos.
Los circulos seran del mismo radio el cual se dara como argumento desde la terminal.
Para poder encontrar los circulos primero necesitamos encontrar lo que son los centros de cada uno de ellos y esto lo encontramos teniendo xc, yx.
Para poder calcularlos debemos de tener cosas que se realizaron en las entradas anteriores como lo que es convolución ya que necesitamos lo que es obtener la magnitud del gradiente.
Primero calculamos lo que la magnitud:
Después obtenemos lo siguiente:
Teniendo lo anterior calculamos:
Recuerden que r es el radio que le damos al correr el programa, teniendo ya todo lo anterior se calcula el posible centro de un circulo.
Los centros lo puse que me los marcara de color rojo pero en este caso en vez de detectarme 6 centros solo me detecto 3 y fuera del rango donde deberian de estar.
Después trate de agregarle lo demas y el codigo ya no me jalo :(, no logre terminarlo
Código:
Después trate de agregarle lo demas y el codigo ya no me jalo :(, no logre terminarlo
Código:
Suscribirse a:
Entradas (Atom)




























