martes, 26 de febrero de 2013

[VC] Tarea 3: Detección de líneas

Para ésta tarea se debieron programar las rutinas para detectar líneas horizontales y verticales un una imágen. Para ello se utilizó la Transformada de Hough.


Para la detección de bordes es necesario:
  • Aplicar máscaras mediante el método de convolución discreta.

Primeramente, los pasos necesarios para la detección son:
  • Elegir las máscaras a aplicar, en mi caso elegí 2 máscaras de Sobel
  • Aplicar las máscaras utilizando convolución discreta (2D)
    • Aplicar por separado para obtener 2 gradientes gx y gy
  • A partir de las matrices de gradientes obtenidas, calcular el ángulo para cada pixel de acuerdo a la formula:
$$ \theta = \arctan \left ( gy/gx \right ) $$
  • Calcular la variable rho aplicando la formula
$$\rho = x \cos \left ( \theta \right ) + y \sin \left ( \theta \right )$$
  • Establecer las condiciones necesarias para obtener los ángulos correctos.
  • Armar pares ($\rho , \theta$) y almacenar dichos pares en una matriz del mismo tamaño (ancho, alto) de la imágen original, a cada pixel le corresponde un par ($\rho , \theta$).
  • Realizar un histograma para cada par ($\rho , \theta$), si un cierto número de pixeles tiene coincidencia en dicho par  ($\rho , \theta$) es probable que existan líneas en la imágen.
  • Clasificar las líneas en horizontales y verticales, colorearlas de diferente tono.

Las máscaras aplicadas fueron obtenidad de la siguiente lectura:


Resultados

Primeramente, estas son las imágenes utilizadas para realizar las pruebas.


Los resultados obtenidos de la aplicación de la transformada fueron:


Los resultados son parciales y no muy favorables, posiblemente se necesitan algunos ajustes en el cálculo de los ángulos y en la realización del histograma.

Código




Referencias

1 comentario:

  1. Ahí sería importante jugar con la proporción de frecuentes a incluir. 4 pts.

    ResponderEliminar