Para poder realizar detectar las líneas antes que nada la imagen la tuvimos que haber pasado en escala de grises, binarizada, para después aplicar la convolución y finalmente la transformada de hough.
Una vez llegado a convolución (en mi caso apliqué las máscaras de prewitt en x & y) nosotros tendremos dos arreglos uno que son los bordes de la imagen en x y otro en y, una vez obtenido esto (gradientes horizontales y verticales) calcularemos para después obtener el ángulo de los pixeles.
Donde las fórmulas aplicadas para obtener del ángulo son theta y rho:
[http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/lineas.pdf]
Donde p es rho y este nos servirá para hacer un matriz y poner las líneas que se detectan en el ángulo.
Código:
A continuación les dejo el código, pueden checar en las entrada anteriores para hacer la escala de grises, pasarla a binario y tener la convolusion.
Resultados:
Notas:
Se podría experimentar con el código un poco aplicando diferentes máscaras y viendo que diferentes resultados nos pudiera dar, al igual de tratar de obtener las líneas sin pasar necesariamente de la binarización, escala de grises y los límites de gx & gy que nos pudiera dar cuáles son las líneas continuas.
Referencias:
http://es.wikipedia.org/wiki/Transformada_de_Hough
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/lineas.pdf
http://www.slideshare.net/omarspp/segmentacin-de-imagen
http://dmi.uib.es/~aortiz/4730-tema8.pdf
http://alojamientos.us.es/gtocoma/pid/tema4.pdf
Es un poco atrevido convertir theta a un int, ya que solamente puede tomar uno de dos valores (0, 1) siendo originalmente un valor entre cero y pi... El if de los gradientes también requeriría mayor justificación. Con una imagen de muestra aún no queda ni muy claro si jala en general esto. En la literatura las máscaras de Sobel son más populares para detección de líneas. 3 pts.
ResponderEliminar