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ä
Konenäön Perusteet

Pyyhkäise näyttääksesi valikon

book
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.

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-matriisista ja täytä se arvolla 1;
  • Määrittele high_mask ykkösistä koostuvana taulukkona, jonka koko on (rows, cols) ja tyyppi np.uint8;
  • Valitse 20x20 kokoinen keskialue high_mask-matriisista ja täytä se arvolla 0;
  • Käytä low_mask ja high_mask -maskeja 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ää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ää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.

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
Pahoittelemme, että jotain meni pieleen. Mitä tapahtui?

Kysy tekoälyä

expand
ChatGPT

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

book
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.

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-matriisista ja täytä se arvolla 1;
  • Määrittele high_mask ykkösistä koostuvana taulukkona, jonka koko on (rows, cols) ja tyyppi np.uint8;
  • Valitse 20x20 kokoinen keskialue high_mask-matriisista ja täytä se arvolla 0;
  • Käytä low_mask ja high_mask -maskeja 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ää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ää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.

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
Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Pahoittelemme, että jotain meni pieleen. Mitä tapahtui?
some-alt