Mostrando entradas con la etiqueta vision computacional. Mostrar todas las entradas
Mostrando entradas con la etiqueta vision computacional. Mostrar todas las entradas

viernes, 24 de mayo de 2013

Laboratorio Wavelets - Puntos extra

Para esta entrada de laboratorio por puntos extra se nos pidió utilizar wavelets.

Que  son:

Las wavelets son funciones que satisfacen  ciertos requerimientos ,la transformada wavelet es una de las técnicas más recientes propuestas para resolver problemas de compresión de imágenes, relevamiento de bordes y análisis de texturas. El interés por este nuevo instrumento matemático nace de la posibilidad que el mismo ofrece de superar algunas de las limitaciones que se enfrentan al emplear otras transformaciones, entre las que se destaca la muy conocida transformación de Fourier.  


Existen tres tipos posibles: transformada continua wavelet (CWT), expansión en serie wavelet
y transformada discreta wavelet (DWT). 


Donde se utiliza:

La transformada wavelet discreta (DWT) es comúnmente utilizada en ingeniería y ciencias de la computación para la codificación de señales, mientras que la transformada wavelet continua (CWT) es
empleada en investigación científica para el análisis de señales. Las transformadas wavelet han sido adoptadas como herramientas para un vasto número de aplicaciones de naturaleza diversa, reemplazando a menudo a la transformada de Fourier convencional.

Muchas áreas de la física han testimoniado este cambio de paradigma, incluyendo dinámica molecular, astrofísica, geofísica sísmica, óptica, mecánica de turbulencia y mecánica cuántica. Otras áreas que han experimentado este cambio son: procesamiento de imágenes, análisis de señales médicas, análisis de proteínas y de ADN, climatología, topografía y geografía, reconocimiento del habla, gráficos computacionales, procesamiento de señales y análisis multifractal. Uno de los usos principales de las wavelets es la compresión de datos, mejora de imágenes y fusión de imágenes.

Ejemplo


Para el ejemplo que se dejara aquí abajo se utilizo la Cohen-Daubechies-Feauveau wavelet que históricamente es la primer familia de wavelets biortogonales. Para estos ejemplos se utilizo la Cohen–Daubechies–Feauveau 9/7 o abreviada la transformada de wavelet CDF 9/7 que es una wavelet es biortogonal.


Lo que se hizo fue una implementacion del wavelet y su transformada inversa. Para que se aprecie mes claramente como funciona aquí se deja un video de su funcionamiento y lo que realiza.

Aunque en el video no se aprecia a alcanzar a ver muy bien por la calidad ya que es muy mala, pero de igual manera se dejan las imágenes de resultados aquí abajo.


Se utilizaron imágenes en escala de grises para ya omitir su transformación. Imágenes de resultados

Original


 












Aplicando Wavelet




























Inversas
























CÓDIGO



Aquí les muestro un ejemplo de la trasformada de Wavelet obtenida desde la liga de wikipedia , que en teoría debería de obtenerse resultados parecidos, habría que hacer algunos ajustes simplemente.



Por mi parte sería todo como pueden observar habría que hacer algunas mejoras en los valores, para obtener resultados mucho mas visibles

Esta fue mi entrada de laboratorio de visión por puntos extras en espera de 5 puntos o mas :).

Fin

Referencias:

Wikipedia(http://en.wikipedia.org/wiki/Cohen-Daubechies-Feauveau_wavelet)[Acceso 23 Mayo ]

Wikipedia (http://en.wikipedia.org/wiki/Wavelet)[Acceso 23 Mayo ]
Wavelet Digest (http://www.wavelet.org/)[Acceso 23 Mayo ]
Wavelets made Simple (http://www.ee.ryerson.ca/~jsantarc/html/theory.html)[Acceso 23 Mayo ]
Una introducción a los Wavelets(http://www.amara.com/IEEEwave/IEEEwavelet.html)[Acceso 23 Mayo]

martes, 21 de mayo de 2013

Visión Computacional- Reporte de Proyecto

PRESENTACIÓN




_________________________________________________________________________________

Detección de Armas

Roberto Axel Valenzuela Padilla
FIME - UANL

Propósito y Justificación
El propósito de este proyecto es la creación de un sistema para la detección  y clasificación de armas, utilizando técnicas de visión computacional. Este proyecto utiliza la captura en tiempo real de una cámara de video donde se analiza si el objeto buscado se encuentra o no en la grabación , de ser encontrado el objeto se enmarca su posición.

Justificación

Elegí  este proyecto ya que la inseguridad vivida actualmente en México y principalmente en Nuevo León, es muy alta y necesita medidas urgentes para contrarrestarla. 

Es muy frecuente que en conciertos, bares o antros incluso en plazas comerciales ocurran este tipo de hechos violentos,si se implementarán más medidas de seguridad  en conjunto con este proyecto , este tipo de actos podrían verse reducidos significativamente.

Este proyecto puede ser implementado en muchos lugares como:


  • Bares 
  • Antros 
  • Conciertos 
  • Palenques
  • Aeropuertos
  • Plazas Comerciales
Entonces el proyecto se basa en esta inseguridad vivida como un método mas para prevenirla, reducirla y evitar que siga creciendo.

Diseño del Software

El software fue diseñado en el lenguaje de programación Python, utilizando la librería de OpenCV y el prototipo implementado y por cuestiones económicas probado en una computadora Dell, utilizando como sistema operativo Ubuntu 12.04.

OpenCV Logo with text.png         

Primeramente para la detección de imágenes ser entreno una red neuronal , donde se buscaron las imágenes "positivas" que en este caso son las fotografías de las armas y las "negativas" que serían cualquier imagen donde se encuentre presente el objeto a buscar.

La detección de los objetos en el video se hace analizando cada frame, y el archivo pistoladetect.xml es llamado en el código para analizarse si se encuentra o no el objeto buscado, para el preprocesamiento se utilizan las técnicas de visión y tareas vistas en clase como escala de grises y filtros. 

Se van guardando imágenes de cada parte del proceso y finalmente si el objeto es detectado es enmarcado en la pantalla.

Podríamos dividir el programa en varias partes:
  • Inicio: Donde se utiliza OpenCV para abrir la cámara de video de la computadora que sera tomado como dato de entrada.
  • Procesamiento: La función que lee cada frame y donde se mandan a llamara las demás funciones 
  • Preprocesamiento: la función se encarga de leer cada frame y de mandar llamar las funciones necesarias para procesarlas.
  • Procesamiento: Primero se pasa la imagen a escala de grises, después de eso se hace difusa la imagen y se binariza para poder eliminar el ruido.
  • Análisis de Captura: Después se llama al documento .xml y para hacer el Haar Detection , si es encontrado en la captura se enmarca y muestra en la pantalla el numero de armas detectadas como texto en el video.
                   


Imágenes del proceso.



Primero a escala de a escala de grises:




Ahora se aplica el filtro blur y convolución y binarización:
















Se aplica Haar Detection  y se muestra en pantalla.













Librerías



Para la realización de este proyecto se utilizaron diferentes librerías.

  • OpenCV: es una librería libre de visión computacional. Se ha utilizado para un sin fin de aplicaciones, desde seguridad con detección de movimiento hasta aplicativos de control de procesos donde se requiere reconocimiento de objetos.
  • Matplot: Que esuna librería para la generación de gráficos.
  • Numpy: Que constituye una biblioteca de funciones matemáticas de alto nivel para operar con esos vectores o matrices.
  • PIL (Python Imaging Library): Es una librería que nos ayuda para abrir, manipular y guardar diferentes imágenes en diferentes formatos.  
Desempeño

Para las pruebas se utilizó un equipo DELL Inspiron N4050 con:


  1. CPU Intel Core i4
  2. RAM 2GB
  3. Sistema operativo Ubuntu 12.04 particionado

Para evaluar el desempeño se tomó el tiempo que se tardaba en realizar todo el procedimiento  hasta encontrar y enmarcar un objeto  primeramente se realizó la prueba con las técnicas de visión solamente y después con las funciones que nos ofrece OpenCV.



Debilidades


Una de las debilidades más importantes es que al estar realizando tantos procesos en tiempo real se vuelve realmente demasiado pero demasiado lento y poco usable el proyecto, esto porque se implementaron las técnicas de visión sin utilizar funciones de OpenCV, aunque también se diseño el código utilizando funciones de OpenCV de igual manera se dejan los dos diseños y para el demo se utiliza OpenCV con todas sus funcionalidades que ofrece.

Trabajo a futuro y posibles mejoras


Creo que potencialmente aún hay muchas cosas que se le podrían implementar a este sistema, ya que como se mencionó un sistema de seguridad regularmente abarca distintos tipos de mecanismos de seguridad en conjunto.


Para mejorar el proyecto habría que adquirir cámaras , esto implica un gasto pero una gran mejora en el sistema, porque como se mencionó en el reporte fue realizado en una computadora Dell haciendo uso de su cámara integrada, así que cámaras externas mejorarían considerablemente el alcance y atractivo de este sistema.

 Otra idea en la que podría transformarse es en la de una empresa que brinda seguridad , totalmente ajena a los establecimientos ya sean locales ,plazas comerciales , bares , palenques, conciertos etc y ofrecer un monitorio remoto, esta empresa externa instalaría las cámaras de seguridad y su monitoreo.



Control de versiones


El proyecto se encuentra en línea en un repositorio. La liga del repositorio es la siguiente:

Repositorio

VIDEO - DEMO




Referencias

  • [1] HaarTraining doc Este documento puede obtenerse de OpenCV/apps/HaarTraining/doc en tu directorio de instalacion OpenCV[Accessed: 14 May 2013].
  • [2] Rainer Lienhart and Jochen Maydt. An Extended Set of Haar-like Features for Rapid Object Detection. IEEE ICIP 2002, Vol. 1, pp. 900-903, Sep. 2002. http://www.lienhart.de/ICIP2002.pdf[Accessed: 14 May 2013].
  • [3] Modified HaarTraining doc Este es una versión modificada de la referencia [1][Accessed: 14 May 2013].
  • [4]Rahman, Abid. (June 2012). Countours. OpenCV Python Tutorials. http://opencvpython.blogspot.mx/2012/06/hi-this-article-is-tutorial-which-try.html[Accessed: 14 May 2013].

miércoles, 15 de mayo de 2013

Laboratorio 10 - Movimiento

Para esta entrada se pidió que detectáramos movimiento.


Primeramente se obtuvieron las imágenes que serian utilizadas para este laboratorio, yo en mi caso use desde la cámara web , se utilizo opencv solamente para esto pero no para ninguna otra función.
Aquí se puede observar el momento de ejecutar el programa, iré dejando las partes importantes del código.





El proceso era muy lento ya que mientras se tomaba captura de vídeo con la cámara se procesaba la imagen , a escala de grises y se le aplicaba un filtrado , aquí arriba  se muestran las dos imágenes con el filtrado aplicado y después se sacaba la convolución. Aquí dejo el código de eso.






Posteriormente las imágenes se sometían a un binarizado y normalizado .

Después se procedía a sacarles una diferencia a estas imágenes eliminando un poco el ruido para comprobar los pixeles que sufrieron cambios de una imagen a otra.(cabe mencionar que salia mi dedo en una imagen la cambie por otra para evitar mas ruido)



Aun se puede apreciar que la imagen muestra ruido , pero claramente se observa también las lineas divisorias del movimiento.




XXX




 




vv




Se divide la imagen en cuadrantes 




Lo siguiente es que ya teniendo donde hubo movimiento regresamos a la segunda imagen donde ocurrió movimiento 

Una ves que se conoce los pixeles donde hubo cambio y su posición , regresamos a la imagen esa
y se pinta el cuadrante de verde donde hubo movimiento de el pixel inicial al pixel final en cada frame.



 

Aquí arriba se muestran los resultados obtenidos, por cuestiones técnicas no se pudo descargar algún programa para grabar la pantalla ya que en FIME no lo permitía , y la que se empezó a descargar eran 11 MB pero duro cerca de media hora y aun no pasaba de la mitad de carga, mas tarde si se puede conseguir este programa se pondrá aquí abajo el vídeo.

Aqui ya se agrego el video ,por falta de tiempo se decidió saltarse algunos frames pero este es el video.


Gracias



miércoles, 8 de mayo de 2013

Lab. Visión detección de esquinas


En esta semana se nos encargo detectar las esquinas de los polígonos en la imagen.
La parte básica: detectar las esquinas con el método de diferencia de filtro mediano y ya la parte avanzada: teniendo las esquinas, podemos sacar un “wire-frame” al borde.



En base a las esquinas que se detectaran y mediante sus bordes, y  esas esquinas se unen con segmentos de lineas rectas recorriendolas en un orden que sigue el borde.

 Detección de esquinas con un filtro mediano
• Calcular una versión con filtro de mediano de la imagen original.
• Sacar la diferencia entre la imagen original y el resultado del filtro.
• El chiste es primero disminuir el ruido en la imagen. 
• Por ejemplo eliminando ruido tipo sal-pimienta.
• Evita que pixeles que son ruido se resalten como  esquinas.

Estas son algunas imágenes utilizadas de prueba





.




Para las esquinas se saco la diferencia entra la imagen original y la filtrada . solo es una resta como las que ya se habían echo en tareas anteriores y se hace uso te código de tareas pasadas donde se aplica normalizacion y una binarizacion.

Aquí pueden observarse las esquinas de las dos figuras ,como se puede observar el circulo es omitido ya que no contiene esquinas.













Ahora se procede arealizar un recorrido "wire-frame" , este tipo de métodos ya fue usado en tareas pasadas para sacar los bordes y como estas esquinas están dentro de ellas nos son de mucha utilizad para sacar los puntos X, Y donde se encuentran y aplicamos un recorrido bfs.


Después de todos los pasos estos son los resultados.


Aquí dejo el código relevante.



Por alguna razón algunas veces el punto medio de la figura lo ponía equivocado 

Aquí otro ejemplo.







Creo que se en esta parte se podría hacer alguna condición  que si la imagen es de mas grande de tantos pixeles , se cambie automáticamente el tamaño de la letra y del centro porque aveces era muy grande como el ejemplo de arriba y apenas se alcanzaba a distinguir y tenia que mover manualmente al tamaño.

miércoles, 1 de mayo de 2013

Lab - Visión detección de poligonos

Para esta entrega de laboratorio se encargo el detectar polígonos.

Se utilizaron distintos códigos de tareas pasadas , se hizo uso de escala de grises , convolución, detección de lineas y  bfs.












Aquí también el código para detección de lineas .



Esta fue la imagen de prueba :


 

Resultados