Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lavpas- og Højpasfiltre | Billedbehandling med OpenCV
Computer Vision Grundlæggende

Stryg for at vise menuen

book
Lavpas- og Højpasfiltre

En af de vigtigste fordele ved Fourier-transformationen er, at den gør det muligt at udføre high-pass og low-pass filtrering.

Efter vi har anvendt Fourier-transformationen:

vi skal oprette en filtrerings-maske

Low-pass filtrering (Sløring)

Et low-pass filter fjerner højfrekvente komponenter, hvilket resulterer i et sløret billede. Low-pass maske:

  • rows, cols = image.shape: henter antallet af rækker og kolonner fra gråtonebilledet;

  • crow, ccol = rows // 2, cols // 2: beregner billedets centrumkoordinater;

  • mask = np.zeros((rows, cols), np.uint8): opretter en maske af nuller med samme dimensioner som billedet;

  • mask[crow-30:crow+30, ccol-30:ccol+30] = 1: sætter et 60×60 kvadratisk område i midten af masken til 1, hvilket kun tillader lavfrekvente komponenter (tæt på centrum af frekvensdomænet) at passere igennem, mens højfrekvente detaljer filtreres fra.

Højpasfiltrering (kantdetektion)

Et højpasfilter fjerner lavfrekvente komponenter og fremhæver kanter. Højpasmaske:

  • highpass_mask = np.ones((rows, cols), np.uint8): initialiserer en maske af ettaller med samme dimensioner som billedet, hvilket betyder, at alle frekvenser i starten får lov at passere;

  • highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0: sætter et lille 10×10 kvadrat i midten (lavfrekvensområdet) til nul, hvilket effektivt blokerer disse frekvenser.

Anvendelse af filteret

Efter oprettelse af masken skal vi anvende et filter og transformere vores billede tilbage til det rumlige domæne:

  • dft_filtered = dft_shift * mask: anvender frekvensdomænemasken (f.eks. low-pass eller high-pass) ved elementvis multiplikation med det forskudte DFT af billedet;

  • dft_inverse = np.fft.ifftshift(dft_filtered): ophæver det tidligere anvendte skift for at bringe frekvenskomponenterne tilbage til deres oprindelige positioner;

  • image_filtered = np.fft.ifft2(dft_inverse): beregner den inverse Fourier-transform for at konvertere de filtrerede frekvensdata tilbage til det rumlige domæne;

  • image_filtered = np.abs(image_filtered): tager den absolutte værdi for at fjerne eventuelle resterende imaginære komponenter, hvilket resulterer i et realværdigt filtreret billede.

Opgave

Swipe to start coding

Du har fået et billede af fåret i variablen image og et billede i frekvensdomænet i variablen dft_shift:

  • Hent formen på image-matricen og gem den i variablerne rows og cols;
  • Beregn centrumspunktet og gem i crow og ccol;
  • Definér low_mask som et array af nuller med formen (rows, cols) og typen np.uint8;
  • Vælg det 20x20 centrale område af low_mask og udfyld det med 1.
  • Definér high_mask som et array af ettaller med formen (rows, cols) og typen np.uint8;
  • Vælg det 20x20 centrale område af high_mask og udfyld det med 0;
  • Anvend low_mask og high_maskdft_shift og gem de filtrerede frekvenser i henholdsvis lowpass_dft_filtered og highpass_dft_filtered;
  • Udfør invers transformation for lowpass_dft_filtered:
    • Udfør invers shifting og gem i lowpass_dft_inverse;
    • Udfør invers transformation og gem billedet i image_lowpass;
    • Fjern negative værdier for image_lowpass.
  • Udfør invers transformation for highpass_dft_inverse:
    • Udfør invers shifting og gem i lowpass_dft_inverse;
    • Udfør invers transformation og gem billedet i image_highpass;
    • Fjern negative værdier for image_highpass.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 3

Spørg AI

expand
ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

book
Lavpas- og Højpasfiltre

En af de vigtigste fordele ved Fourier-transformationen er, at den gør det muligt at udføre high-pass og low-pass filtrering.

Efter vi har anvendt Fourier-transformationen:

vi skal oprette en filtrerings-maske

Low-pass filtrering (Sløring)

Et low-pass filter fjerner højfrekvente komponenter, hvilket resulterer i et sløret billede. Low-pass maske:

  • rows, cols = image.shape: henter antallet af rækker og kolonner fra gråtonebilledet;

  • crow, ccol = rows // 2, cols // 2: beregner billedets centrumkoordinater;

  • mask = np.zeros((rows, cols), np.uint8): opretter en maske af nuller med samme dimensioner som billedet;

  • mask[crow-30:crow+30, ccol-30:ccol+30] = 1: sætter et 60×60 kvadratisk område i midten af masken til 1, hvilket kun tillader lavfrekvente komponenter (tæt på centrum af frekvensdomænet) at passere igennem, mens højfrekvente detaljer filtreres fra.

Højpasfiltrering (kantdetektion)

Et højpasfilter fjerner lavfrekvente komponenter og fremhæver kanter. Højpasmaske:

  • highpass_mask = np.ones((rows, cols), np.uint8): initialiserer en maske af ettaller med samme dimensioner som billedet, hvilket betyder, at alle frekvenser i starten får lov at passere;

  • highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0: sætter et lille 10×10 kvadrat i midten (lavfrekvensområdet) til nul, hvilket effektivt blokerer disse frekvenser.

Anvendelse af filteret

Efter oprettelse af masken skal vi anvende et filter og transformere vores billede tilbage til det rumlige domæne:

  • dft_filtered = dft_shift * mask: anvender frekvensdomænemasken (f.eks. low-pass eller high-pass) ved elementvis multiplikation med det forskudte DFT af billedet;

  • dft_inverse = np.fft.ifftshift(dft_filtered): ophæver det tidligere anvendte skift for at bringe frekvenskomponenterne tilbage til deres oprindelige positioner;

  • image_filtered = np.fft.ifft2(dft_inverse): beregner den inverse Fourier-transform for at konvertere de filtrerede frekvensdata tilbage til det rumlige domæne;

  • image_filtered = np.abs(image_filtered): tager den absolutte værdi for at fjerne eventuelle resterende imaginære komponenter, hvilket resulterer i et realværdigt filtreret billede.

Opgave

Swipe to start coding

Du har fået et billede af fåret i variablen image og et billede i frekvensdomænet i variablen dft_shift:

  • Hent formen på image-matricen og gem den i variablerne rows og cols;
  • Beregn centrumspunktet og gem i crow og ccol;
  • Definér low_mask som et array af nuller med formen (rows, cols) og typen np.uint8;
  • Vælg det 20x20 centrale område af low_mask og udfyld det med 1.
  • Definér high_mask som et array af ettaller med formen (rows, cols) og typen np.uint8;
  • Vælg det 20x20 centrale område af high_mask og udfyld det med 0;
  • Anvend low_mask og high_maskdft_shift og gem de filtrerede frekvenser i henholdsvis lowpass_dft_filtered og highpass_dft_filtered;
  • Udfør invers transformation for lowpass_dft_filtered:
    • Udfør invers shifting og gem i lowpass_dft_inverse;
    • Udfør invers transformation og gem billedet i image_lowpass;
    • Fjern negative værdier for image_lowpass.
  • Udfør invers transformation for highpass_dft_inverse:
    • Udfør invers shifting og gem i lowpass_dft_inverse;
    • Udfør invers transformation og gem billedet i image_highpass;
    • Fjern negative værdier for image_highpass.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 3
Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Vi beklager, at noget gik galt. Hvad skete der?
some-alt