Método utilizado
Para poder distinguir que pixeles pertenecen a una linea y cuales no, primero se calculó el ángulo de cada pixel en la imagen imaginando que éste fuera parte de una linea (aún y si no lo es), esto se hizo utilizando el gradiente de sus vecinos para saber hacia que dirección se encontraban los cambios (de la misma forma que hice para la primera tarea http://maxkalavera.blogspot.com/2013/02/tarea-1-deteccion-de-bordes.html). Las matrices kernel de convolución utilizadas para ésto fueron las de Prewitt:
$P_{x} = \begin{bmatrix}
-1 & 0 & 1 \\
-1 & 0 & 1 \\
-1 & 0 & 1
\end{bmatrix}
P_{y} = \begin{bmatrix}
1 & 1 & 1\\
0 & 0 & 0\\
-1 & -1 & -1
\end{bmatrix}$
Ahora calculé el angulo hacia el cuál el gradiente apunta utilizando la siguiente formula:
$\Theta = arctan(\frac{g_{y}}{g_{x}})$
Una vez ésto utilicé la siguiente representación polar de una linea para calcular un valor numérico que junté con el ángulo para representar esa linea imaginaria (digo linea imaginaria por que estas operaciones se hacen para cada pixel, aun si el pixel es parte de una linea o no):
$\rho = xcos(\Theta )+ysin(\Theta )$
Una vez teniendo una representación de una linea en dos valores $(\Theta, \rho)$ agrupé los conjuntos de valores parecidos para juntar los valores que pertenecen a una linea, después utilizando el ángulo fui capaz de averiguar si grupos de pixeles eran parte de lineas verticales u horizontales. En caso de que los pixeles no se agruparan en ningún valor, llegué a la conclusión de que estos pixeles no pertenecen a ninguna linea y los ignoré.
Código
https://github.com/MaxHernandez/Vision_computacional/tree/master/tarea3
Resultado
El programa debería dar como resultado el número de pixeles localizados en lineas verticales, el número en horizontales y una imagen con las lineas horizontales resaltadas en rojo y las lineas verticales en azul.
Número de pixeles Horizontales: 2478
Número de pixeles verticales: 2716
Número de pixeles Horizontales: 3955
Número de pixeles verticales: 5429
Referencias:
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/lineas.pdf




Bien. Dicen que las máscaras Sobel agarran mejor para detectar líneas. 5 pts.
ResponderBorrar