Max Hernandez

Laberinto - Ejemplo de Canvas en HTML5

lunes, 25 de febrero de 2013

Tarea 3: Detección de lineas

 Esta semana en la clase de visión computacional estuvimos viendo el tema de detección de lineas, así que se nos dio la tarea de hacer un programa capaz de detectar lineas horizontales y verticales en una imagen, después calcular el número de pixeles en lineas horizontales y finalmente el número de pixeles para las lineas verticales. Esta publicación servirá de reporte para dicha tarea.

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

1 comentario:

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

    ResponderBorrar