Etiquetas

Mostrando entradas con la etiqueta Visión Computacional. Mostrar todas las entradas
Mostrando entradas con la etiqueta Visión Computacional. Mostrar todas las entradas

jueves, 16 de mayo de 2013

Detección de Movimiento

Para el laboratorio de esta semana se nos encargo trabajar con lo que es detección de movimiento.

Para llevar acabo esto fue necesario utilizar algunas de las técnicas de visión computacional realizadas anteriormente entre ellas:
  • Escala de grises
  • Filtro
  • Convolución
  • Binarizacion
Para detectar el movimiento  utilice dos imágenes en las cuales se encontraba la misma figura pero en diferente posición.

 
Lo  primero que hice fue pasar cada una de las imágenes por todos los filtros antes mencionados.
 



Después de esto calcule una diferencia entre las dos imágenes para poder identificar si eran diferentes y en su defecto había algún movimiento en la figura que se encontraba ahí. Lo primero que hice fue comparar las ultimas dos imágenes y crear una nueva imagen en la que se identifique si hubo un cambio.
Posteriormente volví a comparar la imagen obtenida con la primer imagen que se utilizo para el paso anterior. Y lo que obtuve fue lo siguiente:
Este es una parte del código que utilice para realizar lo siguiente:
****
****

Ademas de esto anteriormente trate de utilizar imágenes tomadas desde la webcam e intentar utilizar el mismo método, pero estas imágenes al momento de pasarlas por el ultimo filtro, me resultaban con demasiado ruido, por lo que al momento de comparar las imágenes obtenidas simplemente se mezclaba el ruido de una con la otra y al final todo se mezclaba.


Repositorio.

martes, 14 de mayo de 2013

Proyecto Final - Detección de Códigos de Barras

Buenos días, en esta entrada les hablara sobre mi proyecto final para la clase de visión computacional. A continuación les redactare como es que trabaje para llevar acabo esto.

Detección de Códigos de Barras.

Anteriormente ya les había presentado una idea general de mi proyecto, el cual consiste en detectar los códigos de barras dentro de ciertas imágenes que podrían contenerlos.

Para que son  útiles los códigos de barras?
Actualmente los códigos de Barras son utilizados para identificar gran cantidad de artículos  facturas, paquetes, etc.. estos códigos de barras como su nombre lo dice, son un conjunto de lineas paralelas de diferente grosor y espaciado que contienen cierta información.

Ahora la pregunta es para que detectarlos?
Bueno esto para saber si el producto o lo que sea que contiene el código, tiene alguna procedencia o algún cierto control que lo identifique del resto de objetos o cosas que contienen un código de barras, por el momento puedo decir que una parte del proyecto esta hecha ya que logra ubicar donde se encuentra un código de barras, la otra parte es saber leerlos.

Usos de los códigos de barras:
  • Industria en general
  • Manejo de credenciales, tarjetas, etc.
  • Artículos comerciales
  • Registro de mercancías, etc.
Diseño.
El diseño de mi proyecto es el siguiente:


La manera en que funciona es así:

  1. Damos como entrada la imagen
  2. La procesamos por escala de grises
  3. Aplicamos gradientes (en este caso las mascaras de Sobel)
  4. Aplicamos umbrales
  5. Se aplica erosion y dilatacion para agrupar pixeles
  6. Después ubicamos el código de barras
  7. Y por ultimo dibujamos un recuadro sobre de el código

Herramientas
El Lenguaje de programación que utilice fue:
-Python
Las librerías que utilice para llevar a cabo la detección de códigos de barras son las siguientes:
-Opencv para utilizar algunos filtros que contiene la librería.

Trabajo a futuro
Pues como trabajo a futuro tengo pensado lograr leer lo que son los códigos de barras, y lograr entender que es lo que contienen, ademas de que mejorare la manera en que se ubican los códigos y si es posible recortar la imagen para detallar un poco mas el enfoque del código.
Otra cosa que podría realizar es el implementar esto utilizando una cámara e ir guardando los datos de cada código de barras en una base de datos. 

Pruebas y resultados
Estas son algunas de las pruebas que realice con mi código aplicándolo a diferentes imágenes. 
Prueba y Resultado 1


Prueba y Resultado 2



Como el código lo realice con opencv al utilizar las librerías era realmente rápido el proceso en que se detectaban los códigos de barras, aunque si revisamos el tiempo de ejecución de las imágenes anteriores se puede apreciar que el tiempo de la segunda imagen es mayor, esto es debido a las dimensiones de la imagen.

Aquí pueden encontrar las cosas con las que se ha trabajado durante el semestre y el código del proyecto se llama proyecto.py 

Gracias!

Presentación.



Referencias:
Link 1  - Wikipedia - Información acerca de códigos de barras
Link 2 - Tutoriales de python
Link 3 - Tutorial opencv
Link 4 - Para descargar opencv 

jueves, 9 de mayo de 2013

Actividad #9 - Deteccion de Esquinas

Para esta semana se nos pidió trabajar con el tema de detección de esquinas en imágenes utilizando diferencia de filtro mediano.

Para realizar esto utilice la siguiente imagen
 

Lo primero que hice fue aplicar una escala de grises a la imagen, una ves teniendo la imagen en escala de grises aplique lo que es el filtro mediano, en este filtro vamos procesando los pixeles de manera similar al filtro normal, pero en este caso también recorremos esquinas y al final se les calcula la mediana.
Este es el código del filtro mediano:
****
****
Imagen Filtrada
Una ves que se tiene el filtro de la imagen hacemos una diferencia entre la imagen en escala de grises y la imagen filtrada.
****
****
Y esto es lo obtenido de la diferencia, ademas le agregue convolucion a la imagen para poder apreciar mejor las esquinas
Y esta es otra imagen en donde aplique el código



Y eso es todo por el momento, aquí dejo la liga a mi repositorio donde se encuentra el código completo.

jueves, 2 de mayo de 2013

Actividad # 8 - Detección de Polígonos

Para esta semana, lo que se nos pidió fue trabajar sobre el tema detección de polígonos. Lo que se busca principalmente es identificar cualquier polígono dentro de una imagen dada.

Primero, un polígono es una figura geométrica que esta compuesta por segmentos rectos consecutivos que cierran cierta región.
Ahora para detectar si existe un polígono o no dentro de la imagen, lo primero que tenemos que hacer es recorrer la imagen con un bfs, como se ha hecho anteriormente para detectar las formas dentro de la imagen. ( Detección de formas).

******
******
Después de eso ubicamos cada una de las lineas que conforman las figuras y almacenamos sus coordenadas dentro de un lista, después calculamos las pendientes de cada una de los pixeles para saber si están dentro de una misma linea.

******
******

Y eso es todo lo que pude obtener ya que inicialmente quise reutilizar mi código para encontrar las lineas pero al querer hacer lo de las pendientes me revolví .

martes, 23 de abril de 2013

Actividad # 7 Detección de agujeros mediante histogramas

Para esta entrada de laboratorio.. se nos pidió trabajar con histogramas para la detección de agujeros.

Al utilizar histogramas en la detección de agujeros lo que se busca es utilizarlos con las intensidades de los colores de los pixeles dentro de las filas y las columnas de una imagen, para buscar los posibles agujeros.

A continuación explicare como genere los histogramas para cada una de las imágenes en las cuales se trata de identificar los posibles agujeros.

Primero que nada lo que hice fue recorrer la imagen para obtener los pixeles verticales y los horizontales y a partir de esto generar un archivo .dat en el cual se hace un listado de los pixeles revisados y su intensidad.
****
****

Una vez obtenidos los archivos .dat mando llamar el siguiente codigo en gnuplot para que nos genere las graficas:
****
****


Y este es el resultado con algunas de las imágenes:

Imagen Original

      

Histograma

Esta es otra de las imágenes aunque esta tiene mucho ruido, y varían mucho las intensidades de color, lo que hace que las lineas donde se marcan los posibles agujeros sean demasiadas.



  




Tarea # 6 - Hole detection

Para esta semana en la clase de visión se nos pido trabajar en la detección de agujeros.

Pero que es un agujero, bueno pues un agujero es todo aquel que tiene una forma similar a un circulo y dentro de el existe un cambio en la intensidad de luz que hay sobre la superficie, lo cual hace que estos sean fáciles de detectar mediante la utilización de histogramas.

En la entrada de laboratorio se  habla mas sobre ese tema. La imagen que utilizare para esto es la siguiente:

Bien utilizando esta técnica obtenemos los siguiente :

****

******


Aquí dejo el link a mi repositorio

https://github.com/AdriC1705/Viscomp.git





jueves, 18 de abril de 2013

Actividad # 6 - Elipses

Para esta entrada se nos pidio trabajar con el tema de detección de elipses, solo que en este caso era identificarlo y rellenarlo con un color distinto al original.

Para realizar esto era necesario utilizar los puntos ubicados en el centro de cada posible elipse, y recorrerlo mediante un bfs, como se ha tratado en tareas anteriores.

Hasta ahorita tengo un avance parcial sobre esto, ya que tuve algunos problemas con la tarea de este tema, y este es el código que tengo..

*****
*****

Y esto es algo de lo que obtuve, antes de procesar la imagen le aplique binarizacion y convolucion.




jueves, 28 de febrero de 2013

Actividad #4 - Detección de lineas Diagonales

Para esta entrada se nos encargo seguir trabajando con detección de lineas, pero en este caso identificaremos las lineas diagonales con un color distinto de las verticales y horizontales.

Para elaborar esto fue necesario apoyarnos con lo que se había trabajado en clase anteriormente (tarea 3) y utilizamos las mismas formulas para calcular theta y rho.



ρ = x cos θ + y sin θ

En este caso identificamos los ángulos con pi para 180°, pi/2 para 90° y pi/4 para 45° , esto para identificar las diagonales.

Estas son las imágenes que use de prueba:


Y este es el resultado que obtuve:
Como podemos observar las lineas diagonales están marcadas en color verde, incluso las partes diagonales de los círculos están marcadas así.

Como le seguí moviendo al código encontré un pequeño detalle y lo corregí y al cambiarlo obtuve el siguiente resultado:

Ahora me marca las diagonales hacia la izq de un color y las de la derecha de otro.
Este es el código que utilice :)
**
**
Para realizar esto , me apoye en el código de la Dra. Elisa Schaeffer.