CONVOLUCIÓN EN 2D

download CONVOLUCIÓN EN 2D

of 5

Transcript of CONVOLUCIÓN EN 2D

CONVOLUCIN EN 2D Por: Andrs Camilo Jimnez A. La idea de realizar una convolucin en dos dimensiones (x, y) es en el de realizar filtrado directamente en cada uno de los pixeles de la imagen, este tipo de filtrado se conoce como Filtrado Lineal Espacial, o por su nombre en ingls Linear Spatial Filtering. La convolucin consiste en multiplicar un coeficiente (conocido como mascara, mascara de filtrado, filtro de convolucin, kernel o ventana) por cada pixel de la imagen y sus vecinos, para luego sumarlos y obtener la respuesta en cada punto (x, y), si el vecindario es de tamao m x n, se dice entonces que se debe tener m.n coeficientes. A continuacin se da un ejemplo de un kernel w de 3 x 3: w(-1,- 1) w(0,-1) w(1,-1) w(-1,0) w(0,0) w(1,0) w(-1,1) w(0,1) w(1,1)

Este kernel w de dimensiones m x n con centro w(0,0) se tiene que ir moviendo (respecto a su centro) por cada uno de los pixeles de la imagen f(x, y) y realizar una SOP (por sus siglas en ingls Sum Of Products), para as realizar el filtrado de la imagen; para poder obtener el centro del kernel w(m, n) de forma sencilla se recomienda que m= 2a + 1 y n = 2b + 1, en donde a y b son enteros positivos, de no elegir estos valores para m (columnas) y n (filas), encontrar el centro de un kernel puede llegar a ser ambiguo por ejemplo, suponga un kernel con m = 4 y n = 5 el centro podra ser cualquiera de los que se muestran a continuacin en azul:

Para poder entender la convolucin en dos dimensiones, primero se debe entender la convolucin en una dimensin; suponga una seal de entrada f(x) la cual pasa por un sistema con respuesta impulso w(x) y se obtiene una salida h(x), la convolucin se describe como el rea del producto entre la seal f(x) y la versin reflejada en el eje y desplazada de g(x). Por lo tanto la convolucin se puede expresar como: ( ) ( ) ( ) ( ) ( )

En donde la variable temporal x se reemplaza por X (la cual refleja la seal original), y en este caso x representa el desplazamiento en el eje desde - hasta . Para entender mejor la convolucin (en vectores discretos) supongamos una funcin en una dimensin f(x) = [0 0 0 1 1 0 0 0] la cual tiene como tamao m = 8, y un kernel w = [1 2 3 4 0] con un tamao m = 5,

en primer lugar se refleja el kernel dando w(-x) = [0 4 3 2 1], y posteriormente se realiza el desplazamiento del kernel con respecto a la seal para obtener el resultado de la convolucin, a continuacin se muestra cada uno de los pasos para obtener el resultado: 1. Cuando x = 1: [0 0 0 1 1 0 0 0] [0 4 3 2 1] Para aproximar ms este proceso a un algoritmo de computacin se debe llenar la funcin con ceros para tener una correcta relacin en los tamaos sin afectar el resultado de la convolucin, dando como resultado: [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0] 2. Cuando x = 2: [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0 0] 3. Cuando x = 3: [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0 0 0] 4. Cuando x = 4: [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0 0 0 1] 5. Cuando x = 5:

[0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0 0 0 1 3] 6. Cuando x = 6: [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0 0 0 1 3 5] 7. Cuando x = 7: [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0 0 0 1 3 5 7] 8. Cuando x = 8: [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0 0 0 1 3 5 7 4] 9. Cuando x = 9: [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0 0 0 1 3 5 7 4 0] 10. Cuando x = 10: [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0 0 0 1 3 5 7 4 0 0]

11. Cuando x = 11: [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0 0 0 1 3 5 7 4 0 0 0] 12. Y finalmente cuando x = 12: [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0] [0 4 3 2 1]

Resultado [0 0 0 1 3 5 7 4 0 0 0 0] Como se pudo apreciar el ejemplo en la funcin f(x) el origen se resalt en rojo y el final se resalt en morado. Luego de entender este procedimiento en una dimensin se prosigue con la convolucin en dos dimensiones; de igual manera esta maneja una seal de entrada f(x,y), la cual entra a un sistema con una respuesta impulso en dos dimensiones g(x,y) para obtener una salida w(x,y), la convolucin en dos dimensiones se describe como el rea del producto entre la seal f(x,y) y la versin reflejada en el eje y desplazada de g(x,y). Por lo tanto la convolucin se puede expresar como:

(

)

(

)

(

)

(

) (

)

En donde la variable temporal x y y se reemplaza por X y Y (la cual refleja la seal original en los dos ejes), y en este caso x y y representan el desplazamiento de los ejes desde - hasta . Para entender mejor esto suponga las siguientes funciones f(x,y) y w(x,y): ( ) [ ] ( ) [ ]

En donde la funcin reflejada de w(x,y) es w(-x,-y) y es igual a: ( ) [ ] ( ) [ ]

Luego de hacer el reflejo de la respuesta impulso en las dos dimensiones se prosigue con el desplazamiento en los dos ejes, lo cual para cada caso toca aplicar una SOP.

1. En primer lugar se ubica en el origen de la funcin f(x,y) el centro de la matriz del kernel, para realizar esta operacin y aproximarlo a un algoritmo computacional, la funcin de rellena de ceros como se muestra a continuacin:

( [ ]

)

[

]

[

]

De igual forma que en la convolucin de una dimensin se hace la SOP por cada desplazamiento en los ejes dando como resultado final y(x,y):

[

]