Lavpas- 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.
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 variablernerowsogcols; - Beregn centrumspunktet og gem det i
crowogccol; - Definér
low_masksom et array af nuller med formen(rows, cols)og typennp.uint8; - Vælg det 20x20 centrale område af
low_maskog udfyld det med1. - Definér
high_masksom et array af ettaller med formen(rows, cols)og typennp.uint8; - Vælg det 20x20 centrale område af
high_maskog udfyld det med0; - Anvend
low_maskoghigh_maskpådft_shiftog gem de filtrerede frekvenser i henholdsvislowpass_dft_filteredoghighpass_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!
single
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 3.45
Lavpas- 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.
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 variablernerowsogcols; - Beregn centrumspunktet og gem det i
crowogccol; - Definér
low_masksom et array af nuller med formen(rows, cols)og typennp.uint8; - Vælg det 20x20 centrale område af
low_maskog udfyld det med1. - Definér
high_masksom et array af ettaller med formen(rows, cols)og typennp.uint8; - Vælg det 20x20 centrale område af
high_maskog udfyld det med0; - Anvend
low_maskoghigh_maskpådft_shiftog gem de filtrerede frekvenser i henholdsvislowpass_dft_filteredoghighpass_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!
single