miércoles, 8 de mayo de 2013

[Lab VC] Actividad 8: Detección de esquinas


Para ésta tarea se debieron programar las rutinas para detectar esquinas en imagenes. Para ello se utilizó una combinación entre filtro mediano y filtro en escala de grises.


Teoría

Primeramente, los pasos necesarios para la detección son:
  • Aplicar filtro mediano a la imágen
  • Aplicar filtro escala de grises a la imágen
  • Por cada pixel, restar el valor del filtro mediano al filtro en escala de grises, dicha diferencia al final resaltará las esquinas a color blanco.
  • Identificar las coordenadas donde se encuentra cada esquina y asignarlas al objeto al que pertenecen. Se puede utilizar detección de bordes y BFS para dicho objetivo.
  • Se hace un corte pequeño en los bordes detectados (borde discontinuo), al utilizar BFS nuevamente el corte obligará al BFS a recorrer los pixeles en una sola dirección, lo que permitirá darle un orden al las esquinas detectadas.
  • Con las esquinas asignadas a cada objeto y ordenasas, conectarlas con una línea para obtener el wireframe de cada objeto o polígono detectado.
  • Dibujar las lineas, y si se requiere, etiquetar las esquinas y objetos.

    Práctica

    Las imagen utilizada para las pruebas fue la siguiente:

    Imágen original


    Se eligió la imágen porque cuenta con varias figuras para hacer diferentes pruebas, es una imágen con poco ruido en realidad y por ahora es necesario que las figuras se encuentren separadas y rellenas de un color solido para poder resaltar sus bordes correctamente.

    Objetos completamente sólidos


    Resultados

    Para los resultados primero se sacan los bordes

    Bordes detectados

    Después realizamos el corte en los bordes, no se alcanza a ver muy bien, pero haciendo zoom en la imágen se alcanza a ver muy bien

    Corte en la primer esquina detectada

    Lo demás ya es automático, recorriendo los bordes podemos fácilmente ordenar las esquinas, ya solo es de etiquetarlas y dibujar el wireframe, es éste caso es de color negro y muy delgado pero ahí esta. En la terminal se ve un paso intermedio, donde se asignan las esquinas a cada objeto, por ello hay 4 listas.


    En la imágen, el wireframe con las esquinas y objetos etiquetados.
    En la terminal, las esquinas asignadas a cada objeto.


    Código


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


    Para la detección de esquinas

    Para dibujar en la GUI


    Referencias:

    1 comentario: