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.
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 variablernerows
ogcols
; - Beregn centrumspunktet og gem i
crow
ogccol
; - Definér
low_mask
som et array af nuller med formen(rows, cols)
og typennp.uint8
; - Vælg det 20x20 centrale område af
low_mask
og udfyld det med1
. - Definér
high_mask
som et array af ettaller med formen(rows, cols)
og typennp.uint8
; - Vælg det 20x20 centrale område af
high_mask
og udfyld det med0
; - Anvend
low_mask
oghigh_mask
pådft_shift
og gem de filtrerede frekvenser i henholdsvislowpass_dft_filtered
oghighpass_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 shifting og gem i
- 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
.
- Udfør invers shifting og gem i
Løsning
Tak for dine kommentarer!