2010-08-24 37 views
8

Im essayer de mettre en œuvre un flou gaussien avec l'utilisation de FFT et pourrait trouver ici la recette suivante.flou gaussien avec FFT

Cela signifie que vous pouvez prendre la transformée de Fourier transformée de l'image et le filtre , multiplier les (complexes) résultats, puis prendre la transformée de Fourier inverse .

J'ai un noyau K, une matrice 7x7 et une image I, une matrice 512x512.

Je ne comprends pas comment multiplier K par I. Est-ce que la seule façon de le faire est de rendre K aussi grand que I (512x512)?

Répondre

15

Oui, vous devez rendre K aussi grand que moi en le remplissant de zéros. En outre, après le remplissage, mais avant de prendre la FFT du noyau, vous devez le translater avec une enveloppe, de sorte que le centre du noyau (le sommet du Gaussien) soit à (0,0). Sinon, votre image filtrée sera traduite. Alternativement, vous pouvez traduire l'image filtrée résultante une fois que vous avez terminé.

Un autre point: pour les petits noyaux n'utilisant pas la FFT peut être plus rapide. Un noyau gaussien 2D est séparable, ce qui signifie que vous pouvez le séparer en deux noyaux 1D pour x et y. Ensuite, au lieu d'une convolution 2D, vous pouvez faire deux convolutions 1D dans les directions x et y dans le domaine spatial. Pour les noyaux plus petits, cela peut s'avérer plus rapide que de faire la convolution dans le domaine fréquentiel en utilisant la FFT.

2

Si vous êtes à l'aise avec pixel shader et si FFT n'est pas votre objectif principal, mais convolution avec un noyau de flou gaussien, - alors je peux recommander mon tutoriel on what convolution is

salutations.