Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Filtres Passe-Bas et Passe-Haut | Traitement d'Images avec OpenCV
Principes Fondamentaux de la Vision par Ordinateur

Glissez pour afficher le menu

book
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.

Tâche

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 variables rows et cols ;
  • Calculez le point central et stockez-le dans crow et ccol ;
  • Définissez low_mask comme un tableau de zéros de forme (rows, cols) et de type np.uint8 ;
  • Sélectionnez la région centrale 20x20 de low_mask et remplissez-la avec 1.
  • Définissez high_mask comme un tableau de uns de forme (rows, cols) et de type np.uint8 ;
  • Sélectionnez la région centrale 20x20 de high_mask et remplissez-la avec 0 ;
  • Appliquez low_mask et high_mask à dft_shift et stockez les fréquences filtrées dans lowpass_dft_filtered et highpass_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 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.

Solution

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 3
Nous sommes désolés de vous informer que quelque chose s'est mal passé. Qu'est-il arrivé ?

Demandez à l'IA

expand
ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

book
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.

Tâche

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 variables rows et cols ;
  • Calculez le point central et stockez-le dans crow et ccol ;
  • Définissez low_mask comme un tableau de zéros de forme (rows, cols) et de type np.uint8 ;
  • Sélectionnez la région centrale 20x20 de low_mask et remplissez-la avec 1.
  • Définissez high_mask comme un tableau de uns de forme (rows, cols) et de type np.uint8 ;
  • Sélectionnez la région centrale 20x20 de high_mask et remplissez-la avec 0 ;
  • Appliquez low_mask et high_mask à dft_shift et stockez les fréquences filtrées dans lowpass_dft_filtered et highpass_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 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.

Solution

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 3
Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Nous sommes désolés de vous informer que quelque chose s'est mal passé. Qu'est-il arrivé ?
some-alt