Alipäästö- ja Ylipäästösuodattimet
Yksi Fourier-muunnoksen keskeisistä eduista on, että sen avulla voidaan suorittaa ylipäästö- ja alipäästösuodatusta.
Kun olemme soveltaneet Fourier-muunnosta:
meidän 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
: 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 nollista koostuvan maskin, jonka mitat vastaavat kuvaa;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)
: alustaa maskin, jossa on ykkösiä ja jonka mitat vastaavat kuvan kokoa; kaikki taajuudet sallitaan aluksi;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
: asettaa pienen 10×10-ruudun keskelle (matalataajuusalue) nollaksi, jolloin kyseiset taajuudet estetään.
Suodattimen käyttö
Maskin luomisen jälkeen suodatin täytyy käyttää ja kuva muuntaa takaisin spatiaaliseen tilaan:
dft_filtered = dft_shift * mask
: soveltaa taajuusalueen maskia (esim. matalapäästö- tai ylipäästösuodatin) kertomalla kuvan siirretty DFT 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 muotoon;image_filtered = np.abs(image_filtered)
: ottaa itseisarvon poistaen 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 muuttujiinrows
jacols
; - Laske keskipiste ja tallenna se muuttujiin
crow
jaccol
; - Määrittele
low_mask
nollista koostuvana taulukkona, jonka koko on(rows, cols)
ja tyyppinp.uint8
; - Valitse 20x20 kokoinen keskialue
low_mask
-matriisista ja täytä se arvolla1
; - Määrittele
high_mask
ykkösistä koostuvana taulukkona, jonka koko on(rows, cols)
ja tyyppinp.uint8
; - Valitse 20x20 kokoinen keskialue
high_mask
-matriisista ja täytä se arvolla0
; - Käytä
low_mask
jahigh_mask
-maskejadft_shift
-kuvaan ja tallenna suodatetut taajuudet muuttujiinlowpass_dft_filtered
jahighpass_dft_filtered
vastaavasti; - Suorita käänteismuunnos
lowpass_dft_filtered
-datalle:- Suorita käänteissiirto 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äänteissiirto ja tallenna tulos muuttujaan
- Suorita käänteismuunnos
highpass_dft_inverse
-datalle:- Suorita käänteissiirto 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äänteissiirto ja tallenna tulos muuttujaan
Ratkaisu
Kiitos palautteestasi!