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 Essentials

bookLavpas- og Højpasfiltre

En af de vigtigste fordele ved Fourier-transformationen er, at den muliggør high-pass og low-pass filtrering.

Efter vi har anvendt Fourier-transformationen:

dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)

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 
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: 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 (nær 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)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
  • 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 (lavfrekvent område) 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

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: 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-transformation 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:

  • Find formen på image-matricen og gem den i variablerne rows og cols;
  • Beregn centrumspunktet og gem det 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

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 3
single

single

Spørg AI

expand

Spørg AI

ChatGPT

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

Suggested prompts:

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?

close

Awesome!

Completion rate improved to 3.45

bookLavpas- og Højpasfiltre

Stryg for at vise menuen

En af de vigtigste fordele ved Fourier-transformationen er, at den muliggør high-pass og low-pass filtrering.

Efter vi har anvendt Fourier-transformationen:

dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)

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 
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: 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 (nær 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)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
  • 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 (lavfrekvent område) 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

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: 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-transformation 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:

  • Find formen på image-matricen og gem den i variablerne rows og cols;
  • Beregn centrumspunktet og gem det 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
single

single

some-alt