Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Alipäästö- ja Ylipäästösuodattimet | Kuvankäsittely OpenCV:llä
Tietokonenäön Perusteet

bookAlipää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.
Tehtävä

Swipe to start coding

Sinulle on annettu kuva lampaasta muuttujassa image ja kuva taajuusalueella muuttujassa dft_shift:

  • Hanki image-matriisin muoto ja tallenna se muuttujiin rows ja cols;
  • Laske keskipiste ja tallenna se muuttujiin crow ja ccol;
  • Määrittele low_mask nollista koostuvana taulukkona, jonka koko on (rows, cols) ja tyyppi np.uint8;
  • Valitse 20x20 kokoinen keskialue low_mask-taulukosta ja täytä se 1.
  • Määrittele high_mask ykkösistä koostuvana taulukkona, jonka koko on (rows, cols) ja tyyppi np.uint8;
  • Valitse 20x20 kokoinen keskialue high_mask-taulukosta ja täytä se 0;
  • Käytä low_mask- ja high_mask-suotimia dft_shift-kuvaan ja tallenna suodatetut taajuudet muuttujiin lowpass_dft_filtered ja highpass_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ää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.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 3
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

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?

close

Awesome!

Completion rate improved to 3.45

bookAlipää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.
Tehtävä

Swipe to start coding

Sinulle on annettu kuva lampaasta muuttujassa image ja kuva taajuusalueella muuttujassa dft_shift:

  • Hanki image-matriisin muoto ja tallenna se muuttujiin rows ja cols;
  • Laske keskipiste ja tallenna se muuttujiin crow ja ccol;
  • Määrittele low_mask nollista koostuvana taulukkona, jonka koko on (rows, cols) ja tyyppi np.uint8;
  • Valitse 20x20 kokoinen keskialue low_mask-taulukosta ja täytä se 1.
  • Määrittele high_mask ykkösistä koostuvana taulukkona, jonka koko on (rows, cols) ja tyyppi np.uint8;
  • Valitse 20x20 kokoinen keskialue high_mask-taulukosta ja täytä se 0;
  • Käytä low_mask- ja high_mask-suotimia dft_shift-kuvaan ja tallenna suodatetut taajuudet muuttujiin lowpass_dft_filtered ja highpass_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ää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.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 3
single

single

some-alt