jueves, 25 de abril de 2013

Actividad #7 Lab - Pre-procesamiento para detección de agujeros

La tarea de laboratorio de este semana era hacer una especie de pre-procesamiento para la actividad de clase de detección de agujeros. Ya que se usaría el método de histogramas para encontrar los agujeros, en esta parte lo que se haría era precisamente eso, hallar la forma de crear los histogramas y la forma de interpretarlos para la detección de agujeros.

El código es una parte del que se mostró para la tarea de clase, solo con los agregados de imprimir los resultados de los histogramas directamente en un archivo .txt con cierto formato para su posterior interpretación de gnuplot(crear las gráficas).

El procedimiento es, se va recorriendo por filas o columnas la imagen y se van sumando las intensidades de los píxeles (la suma de los valores rgb dividido entre 3), estas sumas se van agregando a los archivos .txt, después los valores pasas por filtros(mínimos locales) para obtener solo los de menor intensidad (se acercan mas a color negro).


Ya con los valores obtenidos, solo se busca su posición en los histogramas y esta posición se usa para pintar  las líneas en la imagen y este es el resultados:


Los valores de los histogramas almacenados en los archivos .txt se usan junto con un script de gnuplot para crear las gráficas, el código para esto es el siguiente:


Y la gráfica que resulta de la imagen anterior es la siguiente:


Ejemplos con otras imágenes:




La siguiente es la misma que la anteior, pero recortada y con el color de los hoyos más marcado:








martes, 23 de abril de 2013

Tarea 6 - Deteccion de Agujeros

La tarea de esta semana es detectar agujeros en imágenes, para esto lo primero que se hizo(la parte del lab) fue checar las intensidades de la imagen sumándolas horizontal y verticalmente, posterior a esto se analizaron los puntos en los que marcaban diferencia en estas sumas y se procedió a pintar lineas que pasaran por estos puntos (independientes verticales y horizontales) y en el punto en el que se cruzaran ahí estaría el agujero.

Esta es la imagen con la líneas(el código esta más abajo):



Posterior para poder identificar correctamente el agujero, se aplico bfs a la imagen donde la misma función de bfs devuelve posibles centros de las figuras que analiza, estos centros se filtraron para quitar centros falsos y se procedió a comparar con los valores por los que cruzaban las lineas de la imagen anterior, si el centro se encontraba en las intersecciones con estos puntos, ese centro era el centro de un agujero.

El código completo:



Al final solo se agregaron las líneas para dar el color morado al agujero, añadir la etiqueta y su centro, además de su área en proporciones de la imagen completa:




El resultado final con centro, color y etiqueta es éste:




_________________________________________________________________________________
Referencias
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/agujeros.pdf

jueves, 18 de abril de 2013

Actividad #6 Lab - Relleno de elipses/circulos


La meta de esta actividad es rellenar solamente lo que se encuentre dentro de la figura con un color "x" y arrojar la información acerca de su área en proporciones del tamaño de la imágen.

Primero es necesario obtener de la imagen sus bordes y colorear aleatoriamente su contenido (solo el interior), para esto es necesario partir de una imagen binarizada como esta:




y aquí esta el código:



esta es la imagen que arroja el código anterior:




Posterior a esto, la imagen que arroja el script anterior hay que procesarla para que podamos obtener los datos sobre las áreas e incrustar las etiquetas en la imágen, y se hace con el siguiente código:



y esta es la imagen final, ya con los datos y etiquetas:




y una captura de la información que se arroja en el terminal:


martes, 16 de abril de 2013

Detección de elipses....

La idea era detectar circulos siguiendo el procedimiento:


  • tomar parejas de puntos al azar
  • calcular sus pendientes con los gradientes gx y gy
  • calcular su distancia media
  • y calcular en que punto se cruzan dos lineas que se prolonguen a partir de estos puntos
  • las lineas con más cruces pueden ser parte del elipse
Hay que utilizar máscaras para obtener los gradientes y bfs para los bordes.

y aqui el código hasta donde llegue...



no termine, pero creo que iba por buen camino :/

_________________________________________________________________________________
Referencias
http://pier.guillen.com.mx/algorithms/07-geometricos/07.3-interseccion_recta-recta.htm