jueves, 28 de febrero de 2013

[VISIÓN COMPUTACIONAL] Lab 4: Diagonales

Siguiendo la entrada anterior sobre detección de lineas, esta vez haré lo mismo pero sobre diagonales. Básicamente lo que le decía al programa era que si encontraba una linea a 0º o a 90º, las pintara en colores distintos. Ahora el programa busca todas las lineas y separa las diagonales de las rectas.

En lugar de solo buscar diferencias en los gradientes, ahora utilizo la función arctan de python (math.atan) que dependiendo de los gradientes x o y se emplea de una o de otra manera.

La imagen de prueba la creé utilizando paint online usando lineas negras.

Para poder trabajar con la imagen, primero le apliqué un fondo rojo, las diagonales las pinté en blanco y las rectas en negro, aunque las lineas ya son negras solo detectaré el contorno de ellas.

La imagen queda de la siguiente mantera:


Se puede observar como las diagonales no son perfectas, esto es debido a que en realidad las diagonales son secuencias de lineas horizontales o verticales apiladas.

Ahora hay que separar las lineas, debido a que por ahora no sabemos si se trata de segmentos separados.

Para eso se utiliza BFS que ya había utilizado en entregas anteriores, con la ayuda de un poco de dilatación. El resultado es el siguiente:

Despues de eso solo pinté en la imagen original los pixeles pertenecientes al contorno de cada linea que estan en la imagen modificada:

El programa no detecta las lineas en si, sino que detecta el borde de ellas, ya que técnicamente una linea recta es un rectángulo de un pixel de grosor. por lo tanto hay 4 lineas que detectar. Para las diagonales es distinto, ya que el BFS las une, aún así se logran pintar los bordes de distinto color.

Código:
Liga al proyecto:
https://github.com/victoralex911/vision-computacional

1 comentario: