single
Alipäästö- ja Ylipäästösuodattimet
Pyyhkäise näyttääksesi valikon
Yksi Fourier-muunnoksen keskeisistä eduista on, että sen avulla voidaan suorittaa yläpäästö- ja alipäästösuodatusta.
Kun Fourier-muunnos on suoritettu:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
seuraavaksi täytyy luoda suodatusmaski
Alipäästösuodatus (Sumennus)
Alipäästösuodatin poistaa korkean taajuuden komponentit, mikä johtaa sumeaan kuvaan. Alipäästömaski:
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: hakee harmaasävykuvan rivien ja sarakkeiden määrän;crow, ccol = rows // 2, cols // 2: laskee kuvan keskipisteen koordinaatit;mask = np.zeros((rows, cols), np.uint8): luo maskin, joka koostuu nollista ja jonka koko vastaa kuvan kokoa;mask[crow-30:crow+30, ccol-30:ccol+30] = 1: asettaa 60×60 kokoisen neliön maskin keskelle arvoon 1, jolloin vain matalataajuiset komponentit (lähellä taajuusalueen keskustaa) pääsevät läpi ja korkeataajuiset yksityiskohdat suodatetaan pois.
Korkeataajuussuodatus (Reunojen havaitseminen)
Korkeataajuussuodatin poistaa matalataajuiset komponentit ja korostaa reunoja. Korkeataajuusmaski:
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): alustaa maskin, joka sisältää ykkösiä ja on saman kokoinen kuin kuva; kaikki taajuudet pääsevät aluksi läpi;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0: asettaa pienen 10×10-ruudun keskelle (matalataajuisen alueen) nollaksi, jolloin kyseiset taajuudet estetään.
Suodattimen käyttö
Maskin luonnin jälkeen suodatin täytyy soveltaa ja kuva muuntaa takaisin spatiaaliseen (avaruudelliseen) esitykseen:
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: soveltaa taajuusalueen maskia (esim. matalapäästö- tai ylipäästösuodatin) kertomalla siirretty DFT-kuva maskilla alkioittain;dft_inverse = np.fft.ifftshift(dft_filtered): kumoaa aiemmin tehdyn siirron palauttaen taajuuskomponentit alkuperäisille paikoilleen;image_filtered = np.fft.ifft2(dft_inverse): laskee käänteisen Fourier-muunnoksen muuntaen suodatetun taajuusdatan takaisin spatiaaliseen esitykseen;image_filtered = np.abs(image_filtered): ottaa itseisarvon poistaakseen mahdolliset imaginaariosat, jolloin tuloksena on reaalilukuinen suodatettu kuva.
Swipe to start coding
Sinulle on annettu kuva lampaasta muuttujassa image ja kuva taajuusalueella muuttujassa dft_shift:
- Hanki
image-matriisin muoto ja tallenna se muuttujiinrowsjacols; - Laske keskipiste ja tallenna se muuttujiin
crowjaccol; - Määrittele
low_masknollista koostuvana taulukkona, jonka koko on(rows, cols)ja tyyppinp.uint8; - Valitse 20x20 kokoinen keskialue
low_mask-taulukosta ja täytä se arvoilla1. - Määrittele
high_maskykkösistä koostuvana taulukkona, jonka koko on(rows, cols)ja tyyppinp.uint8; - Valitse 20x20 kokoinen keskialue
high_mask-taulukosta ja täytä se arvoilla0; - Käytä
low_maskjahigh_masksuodattiminadft_shift-kuvaan ja tallenna suodatetut taajuudet muuttujiinlowpass_dft_filteredjahighpass_dft_filteredvastaavasti; - Suorita käänteismuunnos
lowpass_dft_filtered-datalle:- Suorita käänteinen siirto ja tallenna tulos muuttujaan
lowpass_dft_inverse; - Suorita käänteinen muunnos ja tallenna kuva muuttujaan
image_lowpass; - Poista negatiiviset arvot
image_lowpass-kuvasta.
- Suorita käänteinen siirto ja tallenna tulos muuttujaan
- Suorita käänteismuunnos
highpass_dft_inverse-datalle:- Suorita käänteinen siirto ja tallenna tulos muuttujaan
lowpass_dft_inverse; - Suorita käänteinen muunnos ja tallenna kuva muuttujaan
image_highpass; - Poista negatiiviset arvot
image_highpass-kuvasta.
- Suorita käänteinen siirto ja tallenna tulos muuttujaan
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme