Link al repositorio: https://github.com/synnick/viscomp
En la materia ya se trabajó con la detección de líneas, pero particularmente en líneas horizontales y verticales (de 180° y 90° respectivamente). Ahora, lo siguiente es trabajar con líneas de 45° (diagonales "perfectas") y ángulos arbitrarios, es decir, cualquier otro ángulo que no forme los antes mencionados.
Esto en teoría ya debería de haber sido posible desde el programa de la materia, pero debido a que calculaba solamente los ángulos de 90 y 180° usando los valores de los gradientes, se omitía cualquier otro ángulo real que pudiera tener un cierto pixel.
Para cambiar esto ahora se utiliza de nuevo (pero como prioridad) la función $arctan$ para calcular el ángulo de cada pixel. Inicialmente con cualquier variación en los valores de los gradientes estos ángulos variaban mucho, existiendo muchos diferentes ángulos que aunque fueran cercanos o similares, no se habrían podido agrupar para obtener el histograma de los $(\rho, \theta)$.
Para arreglar esto, los ángulos se agrupan en un determinado rango a partir de su proximidad. Por ejemplo, si se calcula un ángulo de 83° para un determinado pixel, y definimos rangos de 10 en 10° para agrupar los similares, ese ángulo de 83° se convertiría en uno de 80°, por estar más cerca al 80 que al 90.
Cada ángulo diferente de los nuevos, se pinta después de un nuevo color.
Para poder identificar líneas continuas hago uso de BFS utilizado en posts anteriores, para poder pintar los vecinos de una línea determinada de un color.
Para poder hacerlo primero guardo todos los pixeles en los cuales se localizó alguna línea, y los pinto blancos en una imagen de salida, como la siguiente:
Con esta imagen, se buscan las líneas continuas con BFS, y se pintan de colores diferentes. El resultado:
Algunas líneas se detectaron de forma excelente,sobre todo las verticales, otras contienen mucho ruido, por lo cual aparecen pixeles de múltiples colores en la vecinidad.
Código:
Bien; 10 pts.
ResponderEliminar