Alipäästö- ja Ylipäästösuodattimet
Yksi Fourier-muunnoksen keskeisistä eduista on, että sen avulla voidaan suorittaa ylipäästö- ja alipäästösuodatusta.
Kun Fourier-muunnos on suoritettu:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
on tarpeen 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 nollista koostuvan maskin, jonka mitat vastaavat kuvaa;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: asettaa 60×60 kokoisen neliöalueen maskin keskelle arvoon 1, jolloin vain matalataajuiset komponentit (lähellä taajuustason 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, eli kaikki taajuudet sallitaan aluksi;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
: asettaa pienen 10×10-ruudun keskelle (matalataajuiselle alueelle) nollaksi, jolloin nämä taajuudet estetään.
Suodattimen käyttö
Kun maski on luotu, suodatin täytyy käyttää ja kuva palauttaa takaisin spatiaaliseen tilaan:
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)
: palauttaa aiemmin tehdyn siirron, jolloin taajuuskomponentit palaavat alkuperäisille paikoilleen;image_filtered = np.fft.ifft2(dft_inverse)
: laskee käänteisen Fourier-muunnoksen, joka muuntaa suodatetun taajuusdatan takaisin spatiaaliseen esitykseen;image_filtered = np.abs(image_filtered)
: ottaa itseisarvon poistaakseen mahdolliset imaginaariosat, jolloin tuloksena on reaalinen 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
-taulukosta ja täytä se1
. - Määrittele
high_mask
ykkösistä koostuvana taulukkona, jonka koko on(rows, cols)
ja tyyppinp.uint8
; - Valitse 20x20 kokoinen keskialue
high_mask
-taulukosta ja täytä se0
; - Käytä
low_mask
- jahigh_mask
-suotimiadft_shift
-kuvaan ja tallenna suodatetut taajuudet muuttujiinlowpass_dft_filtered
jahighpass_dft_filtered
vastaavasti; - 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
Can you explain the difference between high-pass and low-pass filtering in more detail?
How do I choose the size of the mask for filtering?
What are some practical applications of these filters in image processing?
Awesome!
Completion rate improved to 3.45
Alipäästö- ja Ylipäästösuodattimet
Pyyhkäise näyttääksesi valikon
Yksi Fourier-muunnoksen keskeisistä eduista on, että sen avulla voidaan suorittaa ylipäästö- ja alipäästösuodatusta.
Kun Fourier-muunnos on suoritettu:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
on tarpeen 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 nollista koostuvan maskin, jonka mitat vastaavat kuvaa;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: asettaa 60×60 kokoisen neliöalueen maskin keskelle arvoon 1, jolloin vain matalataajuiset komponentit (lähellä taajuustason 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, eli kaikki taajuudet sallitaan aluksi;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
: asettaa pienen 10×10-ruudun keskelle (matalataajuiselle alueelle) nollaksi, jolloin nämä taajuudet estetään.
Suodattimen käyttö
Kun maski on luotu, suodatin täytyy käyttää ja kuva palauttaa takaisin spatiaaliseen tilaan:
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)
: palauttaa aiemmin tehdyn siirron, jolloin taajuuskomponentit palaavat alkuperäisille paikoilleen;image_filtered = np.fft.ifft2(dft_inverse)
: laskee käänteisen Fourier-muunnoksen, joka muuntaa suodatetun taajuusdatan takaisin spatiaaliseen esitykseen;image_filtered = np.abs(image_filtered)
: ottaa itseisarvon poistaakseen mahdolliset imaginaariosat, jolloin tuloksena on reaalinen 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
-taulukosta ja täytä se1
. - Määrittele
high_mask
ykkösistä koostuvana taulukkona, jonka koko on(rows, cols)
ja tyyppinp.uint8
; - Valitse 20x20 kokoinen keskialue
high_mask
-taulukosta ja täytä se0
; - Käytä
low_mask
- jahigh_mask
-suotimiadft_shift
-kuvaan ja tallenna suodatetut taajuudet muuttujiinlowpass_dft_filtered
jahighpass_dft_filtered
vastaavasti; - 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