Exemple : Filtrage sur le domaine de la transformée de Fourier
Utilisez les fonctions funconv, matconv, funcdeconv et matdeconv pour effectuer la convolution ou la déconvolution d'une image avec une fonction f ou un masque E, en multipliant les deux ensemble en fréquence spatiale (domaine de la transformée de Fourier). Le filtrage sur le domaine de fréquences peut entraîner diverses opérations de lissage, de détection de contour et de réduction périodique du bruit, suivant la fonction ou le masque choisi. Il est souvent mathématiquement plus efficace de filtrer dans le domaine de la transformée, ou plus facile de définir des filtres, qu'avec la convolution dans le domaine d'images.
Utilisez cette fonction pour filtrer une image M avec une fonction en fréquence spatiale. La fonction réelle f est utilisée pour construire un masque N de même taille que M. M subit une transformée de Fourier, puis est multipliée terme à terme par le masque.
Le masque est construit en passant des arguments à f, qui représentent la distance normalisée à partir du coin supérieur gauche de M. Ce processus continue vers le centre du masque, où le masque est copié en quatre parties symétriquement. Ce processus est utilisé car le coin supérieur gauche est CC (fréquence zéro).
1. Commencez à construire un masque en définissant la matrice d'image M.
2. Déterminez le pixel représentant le centre de la matrice d'image.
3. Créez de nouvelles variables de plage représentant les valeurs du coin supérieur gauche au centre de l'image.
4. Utilisez les variables de plage définies ainsi qu'une fonction de masquage pour créer le quadrant supérieur gauche du masque.
L'entrée (0, 0) est f(0) et l'entrée (r, c) est f(1).
Le masque est construit en passant des arguments (distance normalisée à partir du coin supérieur gauche de M) à f. Ce processus continue vers le centre du masque, où le masque est copié en quatre parties symétriquement. Ce processus est utilisé car le coin supérieur gauche est CC (fréquence zéro).
5. Construisez le reste de la matrice masque à l'aide de funconv.
Si la convolution augmente l'échelle de l'image, vous pouvez adapter l'échelle de la matrice de sortie à la plage [0, 255].
funcdeconv
Cette fonction de déconvolution prend une image du domaine de fréquences et une fonction du domaine de fréquences, et elle effectue leur déconvolution.
Le dernier argument e de funcdeconv est un petit terme qui est ajouté aux dénominateurs de toutes les expressions lors de l'exécution de la routine. En guise de point de départ, tapez une valeur égale à 0 pour e. Si un message de division par zéro apparaît, tapez une faible valeur pour e.
1. Appelez la fonction funcdeconv.
2. Evaluez DE pour afficher le résultat de funcdeconv et comparez avec la matrice d'origine.
matconv
La fonction matconv effectue les mêmes multiplications et transformées de domaines de fréquences que funconv, mais elle accepte un masque en guise d'entrée au lieu d'une fonction. La taille du masque doit être identique à celle de l'image d'origine. Vous n'avez fourni que le quadrant supérieur gauche du masque.
1. Lisez dans un échantillon d'image.
2. Comptez le nombre de lignes et de colonnes dans la matrice d'image.
3. Définissez les dimensions d'un masque.
4. Définissez le masque C.
Vous pouvez essayer le filtre passe-haut suivant pour C :
5. Appliquez matconv à R et C.
R
C
W
(times.bmp)
(matrix_ii_jj.bmp)
(times_mat.bmp)
matdeconv
Utilisez matdeconv pour récupérer l'image d'origine. La déconvolution pouvant impliquer la division par des éléments d'intensité zéro, la valeur e est ajoutée au dénominateur de chaque division afin d'éviter ce problème.
(matdeconv.bmp)
Vous pouvez également expérimenter d'autres fonctions de filtres, tout en gardant à l'esprit que le coin supérieur gauche du masque correspond aux basses fréquences et que le coin inférieur droit correspond aux hautes fréquences. Essayez différentes images.