Filtres Passe-Bas et Passe-Haut
L'un des principaux avantages de la transformation de Fourier est qu'elle permet d'effectuer des filtres passe-haut et passe-bas.
Après avoir appliqué la transformation de Fourier :
il est nécessaire de créer un masque de filtrage
Filtrage Passe-Bas (Flou)
Un filtre passe-bas élimine les composantes haute fréquence, ce qui entraîne une image floue. Masque passe-bas :
rows, cols = image.shape
: retrieves the number of rows and columns from the grayscale image;crow, ccol = rows // 2, cols // 2
: computes the center coordinates of the image;mask = np.zeros((rows, cols), np.uint8)
: creates a mask of zeros with the same dimensions as the image;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: sets a 60×60 square region at the center of the mask to 1, allowing only the low-frequency components (near the center of the frequency domain) to pass through while filtering out high-frequency details.
Filtrage passe-haut (Détection des contours)
Un filtre passe-haut supprime les composantes basses fréquences et met en valeur les contours. Masque passe-haut :
highpass_mask = np.ones((rows, cols), np.uint8)
: initialise un masque de uns avec les mêmes dimensions que l'image, ce qui signifie que toutes les fréquences sont initialement autorisées à passer ;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
: définit un petit carré de 10×10 au centre (région des basses fréquences) à zéro, bloquant ainsi effectivement ces fréquences.
Application du filtre
Après avoir créé le masque, il faut appliquer un filtre et transformer la photo de nouveau dans le domaine spatial :
dft_filtered = dft_shift * mask
: applique le masque du domaine fréquentiel (par exemple, passe-bas ou passe-haut) par multiplication élément par élément avec la DFT décalée de l'image ;dft_inverse = np.fft.ifftshift(dft_filtered)
: annule le décalage appliqué précédemment pour ramener les composantes fréquentielles à leurs positions d'origine ;image_filtered = np.fft.ifft2(dft_inverse)
: calcule la Transformée de Fourier Inverse pour reconvertir les données fréquentielles filtrées dans le domaine spatial ;image_filtered = np.abs(image_filtered)
: prend la valeur absolue pour éliminer toute composante imaginaire résiduelle, produisant ainsi une image filtrée à valeurs réelles.
Swipe to start coding
Vous disposez d'une image de mouton dans la variable image
et d'une image dans le domaine fréquentiel dans la variable dft_shift
:
- Obtenez la forme de la matrice
image
et stockez-la dans les variablesrows
etcols
; - Calculez le point central et stockez-le dans
crow
etccol
; - Définissez
low_mask
comme un tableau de zéros de forme(rows, cols)
et de typenp.uint8
; - Sélectionnez la région centrale 20x20 de
low_mask
et remplissez-la avec1
. - Définissez
high_mask
comme un tableau de uns de forme(rows, cols)
et de typenp.uint8
; - Sélectionnez la région centrale 20x20 de
high_mask
et remplissez-la avec0
; - Appliquez
low_mask
ethigh_mask
àdft_shift
et stockez les fréquences filtrées danslowpass_dft_filtered
ethighpass_dft_filtered
respectivement ; - Effectuez la transformation inverse pour
lowpass_dft_filtered
:- Effectuez le décalage inverse et stockez le résultat dans
lowpass_dft_inverse
; - Effectuez la transformation inverse et stockez l'image dans
image_lowpass
; - Supprimez les valeurs négatives de
image_lowpass
.
- Effectuez le décalage inverse et stockez le résultat dans
- Effectuez la transformation inverse pour
highpass_dft_inverse
:- Effectuez le décalage inverse et stockez le résultat dans
lowpass_dft_inverse
; - Effectuez la transformation inverse et stockez l'image dans
image_highpass
; - Supprimez les valeurs négatives de
image_highpass
.
- Effectuez le décalage inverse et stockez le résultat dans
Solution
Merci pour vos commentaires !
single
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Résumer ce chapitre
Expliquer le code dans file
Expliquer pourquoi file ne résout pas la tâche
Awesome!
Completion rate improved to 3.45
Filtres Passe-Bas et Passe-Haut
Glissez pour afficher le menu
L'un des principaux avantages de la transformation de Fourier est qu'elle permet d'effectuer des filtres passe-haut et passe-bas.
Après avoir appliqué la transformation de Fourier :
il est nécessaire de créer un masque de filtrage
Filtrage Passe-Bas (Flou)
Un filtre passe-bas élimine les composantes haute fréquence, ce qui entraîne une image floue. Masque passe-bas :
rows, cols = image.shape
: retrieves the number of rows and columns from the grayscale image;crow, ccol = rows // 2, cols // 2
: computes the center coordinates of the image;mask = np.zeros((rows, cols), np.uint8)
: creates a mask of zeros with the same dimensions as the image;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: sets a 60×60 square region at the center of the mask to 1, allowing only the low-frequency components (near the center of the frequency domain) to pass through while filtering out high-frequency details.
Filtrage passe-haut (Détection des contours)
Un filtre passe-haut supprime les composantes basses fréquences et met en valeur les contours. Masque passe-haut :
highpass_mask = np.ones((rows, cols), np.uint8)
: initialise un masque de uns avec les mêmes dimensions que l'image, ce qui signifie que toutes les fréquences sont initialement autorisées à passer ;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
: définit un petit carré de 10×10 au centre (région des basses fréquences) à zéro, bloquant ainsi effectivement ces fréquences.
Application du filtre
Après avoir créé le masque, il faut appliquer un filtre et transformer la photo de nouveau dans le domaine spatial :
dft_filtered = dft_shift * mask
: applique le masque du domaine fréquentiel (par exemple, passe-bas ou passe-haut) par multiplication élément par élément avec la DFT décalée de l'image ;dft_inverse = np.fft.ifftshift(dft_filtered)
: annule le décalage appliqué précédemment pour ramener les composantes fréquentielles à leurs positions d'origine ;image_filtered = np.fft.ifft2(dft_inverse)
: calcule la Transformée de Fourier Inverse pour reconvertir les données fréquentielles filtrées dans le domaine spatial ;image_filtered = np.abs(image_filtered)
: prend la valeur absolue pour éliminer toute composante imaginaire résiduelle, produisant ainsi une image filtrée à valeurs réelles.
Swipe to start coding
Vous disposez d'une image de mouton dans la variable image
et d'une image dans le domaine fréquentiel dans la variable dft_shift
:
- Obtenez la forme de la matrice
image
et stockez-la dans les variablesrows
etcols
; - Calculez le point central et stockez-le dans
crow
etccol
; - Définissez
low_mask
comme un tableau de zéros de forme(rows, cols)
et de typenp.uint8
; - Sélectionnez la région centrale 20x20 de
low_mask
et remplissez-la avec1
. - Définissez
high_mask
comme un tableau de uns de forme(rows, cols)
et de typenp.uint8
; - Sélectionnez la région centrale 20x20 de
high_mask
et remplissez-la avec0
; - Appliquez
low_mask
ethigh_mask
àdft_shift
et stockez les fréquences filtrées danslowpass_dft_filtered
ethighpass_dft_filtered
respectivement ; - Effectuez la transformation inverse pour
lowpass_dft_filtered
:- Effectuez le décalage inverse et stockez le résultat dans
lowpass_dft_inverse
; - Effectuez la transformation inverse et stockez l'image dans
image_lowpass
; - Supprimez les valeurs négatives de
image_lowpass
.
- Effectuez le décalage inverse et stockez le résultat dans
- Effectuez la transformation inverse pour
highpass_dft_inverse
:- Effectuez le décalage inverse et stockez le résultat dans
lowpass_dft_inverse
; - Effectuez la transformation inverse et stockez l'image dans
image_highpass
; - Supprimez les valeurs négatives de
image_highpass
.
- Effectuez le décalage inverse et stockez le résultat dans
Solution
Merci pour vos commentaires !
Awesome!
Completion rate improved to 3.45single