2010-08-24 15 views
8

Estoy tratando de implementar un desenfoque gaussiano con el uso de FFT y pude encontrar aquí la siguiente receta.desenfoque gaussiano con FFT

Esto significa que usted puede tomar la transformada de Fourier de la imagen y el filtro , multiplicar los (complejo) resultados, y luego tomar la transformada de Fourier inversa .

Tengo un núcleo K, una matriz de 7x7 y una imagen I, una matriz de 512x512.

No entiendo cómo multiplicar K por I. ¿Es la única manera de hacerlo haciendo K tan grande como I (512x512)?

Respuesta

15

Sí, necesitas hacer K tan grande como yo rellenando con ceros. Además, después del relleno, pero antes de tomar la FFT del kernel, debe traducirlo con un envolvente, de modo que el centro del núcleo (el pico del gaussiano) esté en (0,0). De lo contrario, su imagen filtrada será traducida. Alternativamente, puede traducir la imagen filtrada resultante una vez que haya terminado.

Otro punto: para los granos pequeños que no usan la FFT en realidad puede ser más rápido. Un kernel Gaussiano 2D es separable, lo que significa que puede separarlo en dos kernels 1D para xey. Entonces, en lugar de una convolución 2D, puede hacer dos circunvoluciones 1D en las direcciones x e y en el dominio espacial. Para núcleos más pequeños que pueden terminar siendo más rápidos que hacer la convolución en el dominio de frecuencia usando la FFT.

2

Si se siente cómodo con el sombreado de píxeles y si FFT no es su principal objetivo en este caso, pero con el núcleo de convolución desenfoque gaussiano, - entonces puedo recomendar mi tutorial on what convolution is

respecto.