Las técnicas clásicas de detección de orillas se basan en diferenciar a la imagen, esto es, encontrar la derivada respecto a los ejes x y y, o gradiente. El gradiente de una funcion f(x, y) se define como:
La magnitud del gradiente (∇f) se calcula como:
En el caso discreto, podemos aproximar la derivada tomando simplemente la diferencia entre dos valores contiguos. Si consideramos una seccion de 2 × 2 de la imagen como sigue:
Entonces, una posible aproximación discreta al gradiente en dicha región es:
Otra posible alternativa para construir el operador de derivada en una mascara de 2x2 es tomar las
diferencias cruzadas:
Donde ( ∂f /∂x ) es el gradiente horizontal y ( ∂f/ ∂y ) es el gradiente vertical. También podemos extender esta aproximación a un área de la imagen de 3 × 3, como sigue:
Aproximando el gradiente en este caso como:
Estas operaciones pueden ser implementadas mediante mascaras u operadores. En particular, los últimos dos se conocen como los operadores de Roberts y Prewitt, y se implementan con mascaras de 2×2 y 3×3, respectivamente.
Para obtener estos dos tipos de operadores de una imagen es necesario realizar operaciones con ciertas mascaras.
En el siguiente algoritmo se muestran los pasos para obtener los 2 tipos de operadores de bordes de una imagen.
Algoritmo.
1-Leer la imagen original, en tonos de grises.
2-Obtenemos el tamaño de la imagen original.
2-Obtenemos el tamaño de la imagen original.
3-Creamos 3 matrices renglón-columna de la imagen original (r, c), para guardar las coordenadas X, Y y la imagen resultante, las tres de tipo uint8.
4-Se crean dos arreglos una para el eje X: [-1,-1,-1],[0,0,0],[1,1,1] y otra para el eje Y: [-1,0,1],[-1,0,1],[-1,0,1] de tipo float, que representaran la matriz de la mascara, esto para el operador de Prewitt .
5-Recorremos la imagen original en renglón-columna (r, c). Esto se hará de pixel a pixel, esto quiere decir, que en el recorrido se ira tomando una parte de la imagen original que sera como una subimagen o submascara de 3x3 y cada pixel de la subimagen y de la mascara (arreglo eje X) en la misma posición se multiplicaran y se irán sumando cada resultado y así sucesivamente. El resultado final se elevara al cuadrado y se le sacara su raíz. Esto se hará para el eje X.
5-Recorremos la imagen original en renglón-columna (r, c). Esto se hará de pixel a pixel, esto quiere decir, que en el recorrido se ira tomando una parte de la imagen original que sera como una subimagen o submascara de 3x3 y cada pixel de la subimagen y de la mascara (arreglo eje X) en la misma posición se multiplicaran y se irán sumando cada resultado y así sucesivamente. El resultado final se elevara al cuadrado y se le sacara su raíz. Esto se hará para el eje X.
6-Para el eje Y se hará el mismo procedimiento anterior (5), con la diferencia que ahora se tomara la mascara del arreglo del eje Y.
7-Recorremos la imagen original en renglón-columna, y uniremos las matrices resultantes que serán la del eje X y Y.
7-Recorremos la imagen original en renglón-columna, y uniremos las matrices resultantes que serán la del eje X y Y.
8-Mostramos las imágenes resultantes del operador de Prewitt.
9-Guardamos las imágenes.
10-Para el operador de Roberts se hará el mismo procedimiento (1-9), con la diferencia que en la creación de los dos arreglos sera, para el eje X: [1,0],[0,-1] y para el eje Y: [0,1],[-1,0]. En el recorrido (5) en vez de ser una subimagen o submascara de la imagen original de 3x3 sera ahora de 2x2.
10-Para el operador de Roberts se hará el mismo procedimiento (1-9), con la diferencia que en la creación de los dos arreglos sera, para el eje X: [1,0],[0,-1] y para el eje Y: [0,1],[-1,0]. En el recorrido (5) en vez de ser una subimagen o submascara de la imagen original de 3x3 sera ahora de 2x2.
Ejemplo
Referencia
http://ccc.inaoep.mx/~esucar/Libros/vision-sucar-gomez.pdf
http://www.songho.ca/dsp/convolution/convolution2d_example.html
No hay comentarios.:
Publicar un comentario