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
- 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
Ahí sería importante jugar con la proporción de frecuentes a incluir. 4 pts.
ResponderEliminar