martes, 23 de abril de 2013

[VC] Tarea 6: Detección de agujeros

Para esta actividad se debieron programar las rutinas para detectar agujeros de diferentes tamaños en una imagen. Para ello se utilizó el método del histograma lateral.

Requisitos

  • Los agujeros detectadas se marcan con un borde morado oscuro y un relleno de morado claro.
  • Un tono ligeramente diferente en cada agujero. Se marca el centro de cada agujero con un punto amarillo.
  • Al centro de cada agujero se agrega una etiqueta del ID del agujero.
  • El programa imprime un listado que indica para cada ID el tamaño del agujero (como porcentajes del tamaño de la imagen).

Teoría


Los pasos necesarios para la detección de agujeros son:
  • Pre-procesar la imagen con filtro en escala de grises.
  • Realizar una sumatoria, por filas y por columnas, para obtener los histogramas horizontal y vertical.
  • Calcular los mínimos locales en los historiales.
  • (Opcional) Normalizar los valores del histograma para que coincidan con las dimensiones de la imagen (para dibujar el histograma sobre la imagen).
  • (Opcional) Guardar los datos del histograma en un archivo para graficarlos posteriormente (para graficar el histograma en otra imagen).
  • Recorrer las listas de mínimos locales horizontales y verticales, y armar pares de coordenadas (intersecciones).
  • Buscar aquellas intersecciones que proporcionan los menores valores al sumarse, por lo general, un agujero tendrá pixeles más obscuros debido a los cambios en la iluminación, entonces, los pixeles más oscuros rodeados de pixeles más claros son indicios de un supuesto agujero en la imagen.
  • Realizar BFS, comenzando en la intersección, para hallar todos los pixeles que pertenecen al agujero, como validación adicional, se puede verificar que el tamaño del objeto encontrado no sea un cierto porcentaje de la imagen , por ejemplo, 5%. En otro caso, posiblemente sea otro tipo de objeto y pueda detectarse utilizando otras técnicas.
  • Colorear los objetos encontrados de acuerdo a las especificaciones, etiquetarlos e imprimir en pantalla su información.

Procedimiento


Principalmente se siguieron los pasos descritos en la parte de arriba, las intersecciones entre 2 mínimos (o máximos) del histograma muestran un posible agujero, basta con verificar si el pixel en esa intersección cumple con un umbral de iluminación para clasificarlo como agujero, después basta con realizar la técnica de BFS en ese lugar para capturar todos los pixeles que forman parte del agujero.
Las imágenes utilizadas para la actividad fueron:

Original
Escala de grises


Resultados


Los resultados del preprocesamiento se muestran en esta entrada





Como vemos en la imagen de la galleta, algunos agujeros son muy pequeños que pasan desapercibidos, pero en las otras imágenes se detectaron bien.

Código


En el repositorio encuentran la implementación completa en código, la carpeta marcada como Tarea 7.



Para dibujar los agujeros


Referencias:
  • N/A

3 comentarios:

  1. Pues, en referencias podrían estar mis diapositivas, las cuales seguramente consultaste.5 pts.

    ResponderEliminar
  2. Solo las consulté para ver los requisitos de la tarea, lo demás me lo explicó Max.

    ResponderEliminar