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 :
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
il est nécessaire de créer un masque de filtrage
Filtrage Passe-bas (Flou)
Un filtre passe-bas supprime les composantes haute fréquence, ce qui donne une image floue. Masque passe-bas :
rows, cols = image.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
rows, cols = image.shape
: récupère le nombre de lignes et de colonnes de l'image en niveaux de gris ;crow, ccol = rows // 2, cols // 2
: calcule les coordonnées du centre de l'image ;mask = np.zeros((rows, cols), np.uint8)
: crée un masque de zéros ayant les mêmes dimensions que l'image ;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: définit une région carrée de 60×60 au centre du masque à 1, ce qui permet uniquement le passage des composantes basses fréquences (près du centre du domaine fréquentiel) tout en filtrant les détails haute fréquence.
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)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
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é 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 est nécessaire d'appliquer un filtre et de transformer la photo dans le domaine spatial :
dft_filtered = dft_shift * mask
dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
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 afin de 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
Can you explain the difference between high-pass and low-pass filtering in more detail?
How do I choose the size of the mask for filtering?
What are some practical applications of these filters in image processing?
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 :
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
il est nécessaire de créer un masque de filtrage
Filtrage Passe-bas (Flou)
Un filtre passe-bas supprime les composantes haute fréquence, ce qui donne une image floue. Masque passe-bas :
rows, cols = image.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
rows, cols = image.shape
: récupère le nombre de lignes et de colonnes de l'image en niveaux de gris ;crow, ccol = rows // 2, cols // 2
: calcule les coordonnées du centre de l'image ;mask = np.zeros((rows, cols), np.uint8)
: crée un masque de zéros ayant les mêmes dimensions que l'image ;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: définit une région carrée de 60×60 au centre du masque à 1, ce qui permet uniquement le passage des composantes basses fréquences (près du centre du domaine fréquentiel) tout en filtrant les détails haute fréquence.
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)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
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é 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 est nécessaire d'appliquer un filtre et de transformer la photo dans le domaine spatial :
dft_filtered = dft_shift * mask
dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
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 afin de 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