Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lavpass- og Høypassfiltre | Bildebehandling med OpenCV
Grunnleggende Datamaskinsyn

Sveip for å vise menyen

book
Lavpass- og Høypassfiltre

En av hovedfordelene med Fourier-transformasjonen er at den gjør det mulig å utføre høy-pass og lav-pass filtrering.

Etter at vi har brukt Fourier-transformasjonen:

vi må lage en filtreringsmaske

Lav-pass filtrering (uskarphet)

Et lav-pass filter fjerner høyfrekvente komponenter, noe som resulterer i et uskarpt bilde. Lav-pass maske:

  • rows, cols = image.shape: henter antall rader og kolonner fra gråskalabildet;

  • crow, ccol = rows // 2, cols // 2: beregner sentrumskordinatene til bildet;

  • mask = np.zeros((rows, cols), np.uint8): lager en maske med nuller med samme dimensjoner som bildet;

  • mask[crow-30:crow+30, ccol-30:ccol+30] = 1: setter et 60×60 kvadratisk område i midten av masken til 1, slik at kun lavfrekvente komponenter (nær sentrum av frekvensdomenet) slipper gjennom, mens høyfrekvente detaljer filtreres bort.

Høy-passfiltrering (kantdeteksjon)

Et høy-passfilter fjerner lavfrekvente komponenter og fremhever kanter. Høy-passmaske:

  • highpass_mask = np.ones((rows, cols), np.uint8): initialiserer en maske med ener med samme dimensjoner som bildet, noe som betyr at alle frekvenser i utgangspunktet får passere;

  • highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0: setter et lite 10×10 kvadrat i midten (lavfrekvensområdet) til null, og blokkerer dermed disse frekvensene.

Påføring av filteret

Etter å ha opprettet masken, må vi bruke et filter og transformere bildet vårt tilbake til det romlige domenet:

  • dft_filtered = dft_shift * mask: bruker frekvensdomene-masken (for eksempel lavpass eller høypass) ved elementvis multiplikasjon med det forskjøvne DFT-bildet;

  • dft_inverse = np.fft.ifftshift(dft_filtered): reverserer forskyvningen som ble brukt tidligere for å bringe frekvenskomponentene tilbake til sine opprinnelige posisjoner;

  • image_filtered = np.fft.ifft2(dft_inverse): beregner den inverse Fourier-transformasjonen for å konvertere de filtrerte frekvensdataene tilbake til det romlige domenet;

  • image_filtered = np.abs(image_filtered): tar den absolutte verdien for å fjerne eventuelle gjenværende imaginære komponenter, noe som gir et reelt filtrert bilde.

Oppgave

Swipe to start coding

Du har fått et bilde av sauen i variabelen image og et bilde i frekvensdomenet i variabelen dft_shift:

  • Hent formen til image-matrisen og lagre den i variablene rows og cols;
  • Beregn sentrumspunktet og lagre i crow og ccol;
  • Definer low_mask som et array av nuller med form (rows, cols) og typen np.uint8;
  • Velg det 20x20 store sentrale området i low_mask og fyll det med 1.
  • Definer high_mask som et array av ettall med form (rows, cols) og typen np.uint8;
  • Velg det 20x20 store sentrale området i high_mask og fyll det med 0;
  • Bruk low_mask og high_maskdft_shift og lagre de filtrerte frekvensene i henholdsvis lowpass_dft_filtered og highpass_dft_filtered;
  • Utfør invers transformasjon for lowpass_dft_filtered:
    • Utfør invers forskyvning og lagre i lowpass_dft_inverse;
    • Utfør invers transformasjon og lagre bildet i image_lowpass;
    • Fjern negative verdier for image_lowpass.
  • Utfør invers transformasjon for highpass_dft_inverse:
    • Utfør invers forskyvning og lagre i lowpass_dft_inverse;
    • Utfør invers transformasjon og lagre bildet i image_highpass;
    • Fjern negative verdier for image_highpass.

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 3
Vi beklager at noe gikk galt. Hva skjedde?

Spør AI

expand
ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

book
Lavpass- og Høypassfiltre

En av hovedfordelene med Fourier-transformasjonen er at den gjør det mulig å utføre høy-pass og lav-pass filtrering.

Etter at vi har brukt Fourier-transformasjonen:

vi må lage en filtreringsmaske

Lav-pass filtrering (uskarphet)

Et lav-pass filter fjerner høyfrekvente komponenter, noe som resulterer i et uskarpt bilde. Lav-pass maske:

  • rows, cols = image.shape: henter antall rader og kolonner fra gråskalabildet;

  • crow, ccol = rows // 2, cols // 2: beregner sentrumskordinatene til bildet;

  • mask = np.zeros((rows, cols), np.uint8): lager en maske med nuller med samme dimensjoner som bildet;

  • mask[crow-30:crow+30, ccol-30:ccol+30] = 1: setter et 60×60 kvadratisk område i midten av masken til 1, slik at kun lavfrekvente komponenter (nær sentrum av frekvensdomenet) slipper gjennom, mens høyfrekvente detaljer filtreres bort.

Høy-passfiltrering (kantdeteksjon)

Et høy-passfilter fjerner lavfrekvente komponenter og fremhever kanter. Høy-passmaske:

  • highpass_mask = np.ones((rows, cols), np.uint8): initialiserer en maske med ener med samme dimensjoner som bildet, noe som betyr at alle frekvenser i utgangspunktet får passere;

  • highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0: setter et lite 10×10 kvadrat i midten (lavfrekvensområdet) til null, og blokkerer dermed disse frekvensene.

Påføring av filteret

Etter å ha opprettet masken, må vi bruke et filter og transformere bildet vårt tilbake til det romlige domenet:

  • dft_filtered = dft_shift * mask: bruker frekvensdomene-masken (for eksempel lavpass eller høypass) ved elementvis multiplikasjon med det forskjøvne DFT-bildet;

  • dft_inverse = np.fft.ifftshift(dft_filtered): reverserer forskyvningen som ble brukt tidligere for å bringe frekvenskomponentene tilbake til sine opprinnelige posisjoner;

  • image_filtered = np.fft.ifft2(dft_inverse): beregner den inverse Fourier-transformasjonen for å konvertere de filtrerte frekvensdataene tilbake til det romlige domenet;

  • image_filtered = np.abs(image_filtered): tar den absolutte verdien for å fjerne eventuelle gjenværende imaginære komponenter, noe som gir et reelt filtrert bilde.

Oppgave

Swipe to start coding

Du har fått et bilde av sauen i variabelen image og et bilde i frekvensdomenet i variabelen dft_shift:

  • Hent formen til image-matrisen og lagre den i variablene rows og cols;
  • Beregn sentrumspunktet og lagre i crow og ccol;
  • Definer low_mask som et array av nuller med form (rows, cols) og typen np.uint8;
  • Velg det 20x20 store sentrale området i low_mask og fyll det med 1.
  • Definer high_mask som et array av ettall med form (rows, cols) og typen np.uint8;
  • Velg det 20x20 store sentrale området i high_mask og fyll det med 0;
  • Bruk low_mask og high_maskdft_shift og lagre de filtrerte frekvensene i henholdsvis lowpass_dft_filtered og highpass_dft_filtered;
  • Utfør invers transformasjon for lowpass_dft_filtered:
    • Utfør invers forskyvning og lagre i lowpass_dft_inverse;
    • Utfør invers transformasjon og lagre bildet i image_lowpass;
    • Fjern negative verdier for image_lowpass.
  • Utfør invers transformasjon for highpass_dft_inverse:
    • Utfør invers forskyvning og lagre i lowpass_dft_inverse;
    • Utfør invers transformasjon og lagre bildet i image_highpass;
    • Fjern negative verdier for image_highpass.

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 3
Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Vi beklager at noe gikk galt. Hva skjedde?
some-alt