lunes, 11 de febrero de 2013

Tarea 1: Detección de Bordes

En ésta entrada veremos como detectar bordes en una determinada imagen, aplicando una máscara de convolución a nuestra matriz de la imagen. En esta entrada veremos aplicado con dos operadores (Sobel y Prewitt), que nos ayudarán a sacar la aproximación del gradiente, calculando la intensidad de la imagen en cada pixel.

Si no sabemos que es el gradiente, podemos explicarlo decir que es un vector, donde nos muestra la dirección en la que un determinado punto crece más rápido.

Aplicado
Para poder detectar los bordes de una imagen ocupamos la combinación de tres cosas: imagen a escala de grises + cualquier filtro en la imagen + máscara(puede ser Sobel, Prewitt ó alguna otra). En mi caso el tipo de Filtro que apliqué en la imagen es la de Blur y utilicé ambas máscaras.

Sobel
Esta máscara es de un tamaño de 3x3, donde tendremos dos matrices una aplicada en Gx y otra en Gy (primera imagen), para después combinarlos y tener la magnitud del gradiente (segunda imagen).


[http://es.wikipedia.org/wiki/Operador_Sobel]

Prewitt
Al igual que Sobel es una máscara de 3x3, donde se tienen dos matrices una aplicada en Gx y otra en Gy (primera imagen), para después combinarlas y tener su gradiente (segunda imagen).


[http://en.wikipedia.org/wiki/Prewitt_operator]

Código
A continuación les dejo el código con una breve explicación donde menciona las fórmulas empleadas mencionadas anteriormente, al igual dejo la liga de mi git.



Resultados
Con los resultados obtenidos, podemos decir que aplicando la mascara de Sobel o Prewitt, no se tiene mucha diferencia en la imagen, más que la imagen un poco más opaca que la otra.

[imagen original]

[imagen escala de grises]

[imagen filtro blur 5 iteraciones]

[imagen Sobel]

[imagen Prewitt]

Jugando un Poco
Jugando un poco con las imagenes y que otros resultados podemos tener, ya sea aplicando el gradiente en x, y o al igual si se toma la imagen sin el filtro. Podemos decir que en x podemos observar los bordes que se tienen en horizontal y en y los que tenemos en vertical.

[gradiente en X]

[gradiente en Y]

[sin filtro Sobel]

[sin filtro Prewitt]

Referencias
http://es.wikipedia.org/wiki/Operador_Sobel
http://en.wikipedia.org/wiki/Prewitt_operator
http://www.songho.ca/dsp/convolution/convolution2d_example.html
http://docs.gimp.org/es/plug-in-convmatrix.html

1 comentario: