2010-11-03 7 views
3

Je veux faire un lissage à une image dans le domaine fréquentiel. Quand j'utilise Google pour voir des articles, il a donné des codes Matlab dont je n'ai pas besoin. je pourrais faire des FFT à une image mais je ne sais pas comment implémenter des techniques de lissage (ILPF, BLPF, IHPF, BHPF) dans le domaine fréquentiel. Si vous pouvez fournir des exemples de code pour l'une des techniques ci-dessus SANS utiliser de bibliothèques de traitement d'image, ce sera vraiment utile et C# est préférable.Comment implémenter le lissage dans le domaine fréquentiel?

Merci,

+0

Vous obtenez un flou très bon marché en redimensionnant simplement l'image. Faites-le plus petit puis redimensionnez à la taille d'origine. –

Répondre

2

Pourriez-vous définir ce que vous entendez par «lissage dans le domaine de fréquence? Vous pouvez générer une image spectrale en utilisant FFT et multiplier l'image par une fonction quelconque pour atténuer des fréquences particulières, puis convertir le spectre en une image en utilisant la FFT inverse. Cependant, pour ce type de filtrage (multiplication par une fonction de mise à l'échelle en fréquence), vous pouvez obtenir le même résultat plus rapidement en convoluant avec la double fonction dans le domaine spatial.

Dans tous les cas, si vous souhaitez l'implémenter vous-même, lisez sur FFT (la transformée de Fourier rapide) et la convolution. Vous pouvez également consulter un manuel de traitement du signal, si vous êtes intéressé, car la théorie derrière le filtrage discret est assez profonde. Les algorithmes n'auront pas beaucoup de sens sans cette théorie, bien que vous puissiez certainement les appliquer sans les comprendre.


Si vous souhaitez implémenter vos propres algorithmes DSP, consultez this book en ligne. En particulier, Ch 33 décrit les mathématiques et l'algorithme derrière la conception du filtre Butterworth. Ch 12 décrit comment implémenter FFT.

+0

en fait, je veux mettre en œuvre un algorithme de lissage d'image dans le domaine fréquentiel. comme le filtre passe-bas idéal, filtre passe-bas Butterworth ou un filtre passe-haut – Keshan

+0

@Keshan, il existe des algorithmes bien définis qui peuvent être utilisés pour générer des noyaux de convolution approximatifs pour les différents filtres. Nous parlons de la façon dont ces filtres se comportent dans le domaine fréquentiel (comme c'est un moyen pratique d'y penser), mais presque toutes les implémentations DSP les appliquent directement dans le domaine spatial (ou temporel) plutôt que sur le spectre. En effet, les performances et la perte de qualité associées aux transformations FFT sont pires que ce que vous pouvez réaliser avec la convolution. –

0

Pour toute image/traitement du signal. Je recommande OpenCV

Ceci a un gestionnaire C# géré: Emgu.

http://www.emgu.com/wiki/index.php/Main_Page

+0

en fait, je veux l'implémenter sans utiliser de bibliothèque de traitement d'image. – Keshan

+0

Il est open source, vous pouvez lire, comprendre et ensuite vous implémenter. Ce n'est pas une tâche triviale, alors bonne chance. – Aliostad

1
+1

Désolé, je viens de me rendre compte qu'il ne s'agit pas de lisser dans le domaine fréquentiel, néanmoins cela pourrait être intéressant pour vous ou pour les autres qui viendront sur cette page, donc je ne supprimerai pas ma réponse. –

1

Keshan, c'est simple. Imaginez la FFT est un autre deux images où les basses fréquences se trouvent dans les moyennes et hautes fréquences loin du milieu. Si les pixels sont numérotés de -w/2 à w/2 et -h/2 à h/2, vous pouvez simplement mesurer la distance à partir du milieu comme un (x, y) = sqrt (x^2 + y^2) . Prenez ensuite une fonction décroissante monotone arbitraire comme f (x) = 1/(1 + x) et multipliez chaque point du fft avec f (a (x, y)). Puis, retournez en utilisant la FFT.

Il y a différents choix pour f (x) qui auront l'air différents. Par exemple une fonction gaussienne ou bessel ou autre. Je l'ai fait pour mon premier cycle et c'était très amusant. Si vous m'envoyez un mail je vous enverrai mon programme :-).

Une mise en garde d'un bit est la sortie de commande du fft. Les tableaux qu'il génère peuvent être classés de façon étrange. Il est important que vous trouviez quel index de tableau correspond à quelle position x/y dans la transformée de Fourier "analytique"!

Questions connexes