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