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.
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 variablenerows
ogcols
; - Beregn sentrumspunktet og lagre i
crow
ogccol
; - Definer
low_mask
som et array av nuller med form(rows, cols)
og typennp.uint8
; - Velg det 20x20 store sentrale området i
low_mask
og fyll det med1
. - Definer
high_mask
som et array av ettall med form(rows, cols)
og typennp.uint8
; - Velg det 20x20 store sentrale området i
high_mask
og fyll det med0
; - Bruk
low_mask
oghigh_mask
pådft_shift
og lagre de filtrerte frekvensene i henholdsvislowpass_dft_filtered
oghighpass_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 forskyvning og lagre i
- 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
.
- Utfør invers forskyvning og lagre i
Løsning
Takk for tilbakemeldingene dine!