Tuesday 2 July 2013

Detección de Lineas

Este es el post de la tarea 3: Detección de lineas.

A continuación, se plantean algunos conceptos abstractos en las siguientes notas:

En la cuestión algorítmica y el código no me fue muy bien, creo tener el concepto de como se detectan las rectas pero me falta la impresión de salida, ya que me perdi en que es que; a continuación mi código:

Repositorio git del código anterior: Aquí

Referencias:

  1. Machine Vision by E.R. Davies Third Edition, Chapter 9.
  2. Clase de Visión Computacional impartida por la Dra. Satu Elisa Schaeffer
    http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/lineas.pdf

Monday 1 July 2013

Detección de Bordes

Este es el post de la tarea 1: Detección de bordes, en las 3 imágenes siguientes muestro dibujos que hice para meditar el problema:

Se tendrán 3 imágenes en formato PNG, las cuales fueron convertidas a escala de grises, para esto simplemente se sumaron las 3 matrices de grises que conforman al RGB y se promediaron, en el código me aseguro que sean enteros y genero una nueva imagen en gris:

Código Fuente para convertir imágenes a color a escala de grises

Para la detección de bordes se hizo uso de la mascara Prewitt 3 x 3 "gradiente suavizado" tomado de la referencia 1, para la convolución se procedió a barrer la imagen pixel por pixel y tomando sus 8 vecinos formar una zona de la imagen original, tomar esos valores y multiplicarlos con la mascara, después del resultado de la multiplicación se toman y se hace una suma de todos sus valores para tener el gradiente en x y y segun sea el caso; después sacamos una distancia euclidiana para obtener el gradiente en magnitud mas no en dirección, por ultimo los gradientes mas grandes o cercanos a 255 (Blanco) se toman como borde y los que sean menores se dejan como fondo. En cuanto al programa este se posiciona en el pixel [1,1] esto para evitar salirse del arreglo, esto no afecta en gran medida ya que no hay información muy relevante en el marco de la imagen, el tamaño se conserva pero teniendo los valores de esos pixeles en el marco a 0.

Con la detección paso algo curioso, el programa arrojaba como bordes algunas partes de la imagen original que servían de detalles como se ve en la imagen de abajo, mi Starman tiene algo de profundidad con esas lineas esparcidas en sus filos:

Hay dos detalles en el código de detección de bordes que servirán para quitar este ruido que no es representativo de un borde, este "umbral" servirá para, dependiendo de la imagen, quitar el ruido y dejar los bordes y variara de acuerdo a la situación. A continuación los resultados con su tiempo de respuesta:

En la imagen de arriba el "umbral" fue de 135.

En la imagen de arriba el "umbral" fue de 135, no se modifico.

En la imagen de arriba el "umbral" fue de 135, no se modifico. Parece ser que la detección de borde es algo fina ya que pone como fondo el interior de las lineas negras.

En la tabla de abajo, se muestran los tiempos de respuesta:

Abajo muestro el código fuente de la detección de bordes:

Referencias:

  1. Machine Vision by E.R. Davies Third Edition, Chapter 5.
  2. Blog de Visión Computacional de Esteban Sifuentes Samaniego, 2013
    http://esteban-vision.blogspot.mx/
  3. Blog de Isaias Garza acerca de Visión Computacional, 2013
    http://isaias-garza.blogspot.mx/search/label/Visi%C3%B3n%20Computacional
  4. Programa de manipulación de imágenes de GNU: Manual de usuario, by Equipo de documentación de GIMP and Ignacio AntI (ant.ign@gmail.com)
    http://docs.gimp.org/es/plug-in-convmatrix.html
  5. http://wiki.scipy.org/Tentative_NumPy_Tutorial#head-c5f4ceae0ab4b1313de41aba9104d0d7648e35cc
  6. http://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html

Monday 24 June 2013

Aplicaciones de Visión

En cuestiones de objetos en movimiento la visión comunicacional tiene aplicaciones en cuanto al conocer el comportamiento de objetos en movimientos, ya sea para cuestiones de vigilancia, rastreo e identificación, interfaces hombre-maquina, deportes, etc... estas cuestiones tienen un grado mayor de complejidad, comparándolo con un análisis estático de una serie reducida de imágenes, ya que implican grandes cantidades de capturas por lo que se requiere un análisis mas organizado y selectivo. Este tipo de situaciones representan un reto el cual ya se ha trabajado en ello, con lo cual se tienen soluciones y trabajos a futuros para hacer frente a estos retos (Referencia 1).

En cuestiones de comunicación y administración de recursos, en el caso de la referencia 2, se mostró la necesidad de poner los recursos de procesamiento digital de imágenes, al alcance de toda la red del hospital, integrarlos y presentarlos en una interfaz amigable para los usuarios, el documento menciona que fue echo para los sistemas de Unix y Windos.

En cuestiones de seguridad, se hace mucho uso de visión computacional para el reconocimiento de personas; haciendo uso de rasgos biométricos según la situación, grado de seguridad y condiciones de captura de las muestras, teniendo las imágenes de un individuo por medio de métodos de procesamiento de digital de imágenes se extrae el rasgo o rasgos biométricos a usar para el registro de ese individuo, de los rasgos biométricos se extraen datos únicos de cada individuo,los cuales deben ser irrepetibles; con estos un sistema extraería de una base de datos, tomaría otra muestra de imagen de la persona, extraería los datos relevantes de los rasgos y los compararía con su base de datos para tomar la decisión de que individuo se trata, de sí es un individuo nuevo o alguien que intenta suplantar una identidad.

En la imagen de arriba se observa un ejemplo del uso de lectura de retina.

El rasgo mas usado y estudiado es el de huella digital, pero existen otros rasgos, unos con mas ventajas que otros, por ejemplo el color de piel, es un rasgo que cambia con el tiempo, varía mucho con la luz y la herramienta de captura; la lectura de retina también es otro rasgo muy usado para identificar a las personas, área de la cara y forma, mano, pies, imagen 3D del cuerpo, retina, frecuencias de la voz, etc...

En la imagen de arriba se observa un ejemplo del procesado de empalmado de imágenes o en ingles "stitching" en el cual las imágenes combinadas generan una imagen mas grande, este gato de dos patas no existe como tal si no que es un gato normal pero que estaba en movimiento como el carro de google streets también esta en movimiento y tomando fotos, dos de estas fotos debieron contener partes del gato, como este continuo caminando, creo que el algoritmo tomo el cuerpo del gato de la foto 1 y la foto 2 como idénticos y los tomo como marco, es por eso que unió desde la parte trasera hasta la delantera omitiendo el cuerpo, ya que procuran crear uniones entre fotos con las partes de píxeles iguales.

Bibliografía:

  1. Machine Learning for Vision-Based Motion Analysis: Theory and Techniques, by Liang Wang, G. Zhao, Li C., Matti P., (Eds.); Editorial Springer
    http://books.google.es/books?id=Xz_q4QyP99IC&lpg=PR5&ots=nqwow748y5&dq=Vision%20machine%20applied%20to%20healthcare&lr&hl=es&pg=PR4#v=onepage&q=Vision%20machine%20applied%20to%20healthcare&f=false
  2. DIPE: A Distributed Environment for Medical Image Processing, by M Zikos, E Kaldoudi, SC Orphanoudakis - 1997 - Citeseer, Medical Informatics Europe 14th International Congress, Porto Carras, Greece
  3. http://commons.wikimedia.org/wiki/File:Retinal_scan_securimetrics.jpg
  4. "Human Skin Colour Clustering for Face Detection", Jure Kovac, Peter Perr and Franc Solina, University of Ljubljana
    http://academic.aua.am/Skhachat/Public/Papers%20on%20Face%20Detection/Human%20Skin%20Colour%20Clustering%20for%20Face%20Detection.pdf
  5. Aplicaciones de la Biometría a la seguridad by Carmen Sánchez Ávila; VIII Ciclo de Conferencias UPM-TASSI; CEDINT, U. Politécnica de Madrid.
    http://www.criptored.upm.es/descarga/TASSI2012_CarmenSanchez.pdf
  6. http://www.nuevodiarioweb.com.ar/notas/2013/5/8/google-street-view-fotografia-gato-patas-medio-cuerpo-452079.asp

Sunday 23 June 2013

Herramientas open source para uso de visión con Python

Por lo general Python ya viene predefinido en versiones de Linux así que le preguntamos al terminal que versión tengo con:

python --vesion

Creo solo necesito Numpy, en el segundo link se muestra como instalar esa librería, yo solo trate de instalar python-numpy, pero no me instalo nada; por lo que quisa ya venia con mi python así que para checar la versión que tengan del Numpy sigan las instrucciones de la imagen siguiente:

Para tener el openCV, hay que descargarlo de su pagina (referencia 4), descargaremos un .tar.gz que fácilmente puede ser extraído con "tar -zxvf opencv-2.4.5.tar.gz" después de eso segun la referencia 5 hay que tener CMake, herramienta que ya esta integrada en Linux:

Ya que se tiene el CMake ya podremos continuar con la instalación del openCV:

Después escribimos "make" en el termial y damos enter, proceso que tardara mucho mas que en el vídeo de la referencia 10. Después haremos sudo make install y con esto debería ser mas que suficiente para hacer uso del OpenCV en Python.

Instalando PIL:

En la imagen de arriba tenemos que el .tar.gz ya esta extraido y se abrio el README con EMACS
En la imagen de arriba se muestra parte del archivo que contiene los pasos a seguir para instalar PIL

No tuve problemas instalando PIL mas que este no podia crear unos directirios, el problema se soluciona dando permisos de usuario con sudo antes del "python setup.py install".

Por ultimo se requiere instalar TKInter, para esto se recomienda: "sudo apt-get install python-tk"

En la imagen de arriba vemos que la librería de TKInter ya esta instalada

Esto es todo por el momento, para tener instalados y listos para usar; no debería haber ningún problema.

Bibliografía:

  1. http://www.python.org/
  2. http://www.scipy.org/install.html
  3. http://www.andrewsturges.com/2012/05/installing-numpy-16-on-python-27-in.html
  4. http://opencv.org/
  5. http://opencv.willowgarage.com/wiki/InstallGuide
  6. http://www.cmake.org/
  7. http://hdesu.wordpress.com/2007/12/11/como-instalar-archivos-targz-o-gz-en-ubuntu/
  8. http://www.pythonware.com/products/pil/
  9. http://stackoverflow.com/questions/4783810/install-tkinter-for-python
  10. http://www.youtube.com/watch?v=MqQB5KKJCh0