Säätötekniikan ja signaalinkäsittelyn työkurssi



Samankaltaiset tiedostot
Säätötekniikan ja signaalinkäsittelyn työkurssi

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Valitse ruudun yläosassa oleva painike Download Scilab.

Mitä on konvoluutio? Tutustu kuvankäsittelyyn

SGN-1200 Signaalinkäsittelyn menetelmät Välikoe

Harjoitus 1: Matlab. Harjoitus 1: Matlab. Mat Sovelletun matematiikan tietokonetyöt 1. Syksy 2006

SGN Signaalinkäsittelyn perusteet Välikoe Heikki Huttunen

Digitaalinen signaalinkäsittely Kuvankäsittely

TL5503 DSK, laboraatiot (1.5 op) Suodatus 2 (ver 1.0) Jyrki Laitinen

Zeon PDF Driver Trial

Matriisit ja vektorit Matriisin käsite Matriisialgebra. Olkoon A = , B = Laske A + B, , 1 3 3

S Laskennallinen Neurotiede

Mediaanisuodattimet. Tähän asti käsitellyt suodattimet ovat olleet lineaarisia. Niille on tyypillistä, että. niiden ominaisuudet tunnetaan hyvin

SGN-1200 Signaalinkäsittelyn menetelmät Välikoe

TL5503 DSK, laboraatiot (1.5 op) Kuvasignaalit. Jyrki Laitinen

TL5503 DSK, laboraatiot (1.5 op) Suodatus 1 (ver 1.0) Jyrki Laitinen

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

Matlab-perusteet. Jukka Jauhiainen. OAMK / Tekniikan yksikkö. Hyvinvointiteknologian koulutusohjelma

Vektoreiden virittämä aliavaruus

Harjoitustyö: virtuaalikone

1 Olkoon suodattimen vaatimusmäärittely seuraava:

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Tuntematon järjestelmä. Adaptiivinen suodatin

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

Alipäästösuotimen muuntaminen muiksi perussuotimiksi

Ohjelmoinnin peruskurssi Y1

Laskuharjoitus 9, tehtävä 6

Neljän alkion kunta, solitaire-peli ja

Tietotyypit ja operaattorit

Lineaarialgebra b, kevät 2019

Kompleksiluvut signaalin taajuusjakauman arvioinnissa

Kokonaislukuaritmetiikka vs. logiikkaluupit

Signaalien tilastollinen mallinnus T (5 op) Syksy 2006 Harjoitustyö

Säätötekniikan matematiikan verkkokurssi, Matlab tehtäviä ja vastauksia

Valokuvien matematiikkaa

Digitaalinen signaalinkäsittely Desibeliasteikko, suotimen suunnittelu

T Digitaalinen kuvatekniikka Kevät 2015 Harjoitus 1: Kameran kuvanprosessointi

1 Kannat ja kannanvaihto

Solmu 3/2001 Solmu 3/2001. Kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa oli seuraava tehtävä:

Sisältö. 2. Taulukot. Yleistä. Yleistä

SGN Signaalinkäsittelyn perusteet Välikoe Heikki Huttunen

Muuttujan sisällön näet kirjoittamalla sen nimen ilman puolipistettä

Oikosulkumoottorikäyttö

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

Matlabin perusteita Grafiikka

Matlab-tietokoneharjoitus

1. Lineaarinen optimointi

1 Vastaa seuraaviin. b) Taajuusvasteen

S Laskennallinen Neurotiede

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Matematiikan tukikurssi

SGN-1251 Signaalinkäsittelyn sovellukset Välikoe Heikki Huttunen

ELEC-C6001 Sähköenergiatekniikka, laskuharjoitukset oppikirjan lukuun 10 liittyen.

Johdatus tekoälyn taustalla olevaan matematiikkaan

1.4 Funktion jatkuvuus

Matriiseista. Emmi Koljonen

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

T Sovellusohjelmat Matlab osa 4: Skriptit, funktiot ja kontrollirakenteet

Lineaarikuvauksen R n R m matriisi

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ratkaisuehdotukset LH 3 / alkuvko 45

Matlabperusteita, osa 1. Heikki Apiola Matlab-perusteita, osa 1. Heikki Apiola. 12. maaliskuuta 2012

Toinen harjoitustyö. ASCII-grafiikkaa

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

Puzzle SM Pistelasku

Vaatimusten versiointi DOORSissa

6. Analogisen signaalin liittäminen mikroprosessoriin Näytteenotto analogisesta signaalista DA-muuntimet 4

6. Harjoitusjakso II. Vinkkejä ja ohjeita

S Signaalit ja järjestelmät

Insinöörimatematiikka D

Ohjelmoinnin perusteet Y Python

IIR-suodattimissa ongelmat korostuvat, koska takaisinkytkennästä seuraa virheiden kertautuminen ja joissakin tapauksissa myös vahvistuminen.

Laskuharjoitus 2 ( ): Tehtävien vastauksia

811120P Diskreetit rakenteet

BL40A0000 Säätötekniikan ja signaalinkäsittelyn

SGN-1200 Signaalinkäsittelyn menetelmät, Tentti

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

LOPPURAPORTTI Lämpötilahälytin Hans Baumgartner xxxxxxx nimi nimi

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

A* Reitinhaku Aloittelijoille

Synteesi-analyysi koodaus

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö

Python-ohjelmointi Harjoitus 2

Elektroniikka, kierros 3

MICROSOFT EXCEL 2010

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

1 Matriisit ja lineaariset yhtälöryhmät

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Sisältö. 22. Taulukot. Yleistä. Yleistä

8. Yhtälöiden ratkaisuja Newtonilla, animaatioita

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Tiedonkeruu ja analysointi

Teknillinen korkeakoulu T Tietojenkäsittelyopin ohjelmatyö. Testitapaukset - Koordinaattieditori

Yhtälöryhmä matriisimuodossa. MS-A0007 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Matematiikan kotitehtävä 2, MAA 10 Todennäköisyys ja tilastot

Luku 3. Listankäsittelyä. 3.1 Listat

Matriisilaskenta Laskuharjoitus 1 - Ratkaisut / vko 37

Transkriptio:

Säätötekniikan ja signaalinkäsittelyn työkurssi Työ D104: Kuvien suodatus 0.9 op. Julius Luukko Lappeenrannan teknillinen yliopisto Sähkötekniikan osasto/säätötekniikan laboratorio

Sisältö 1 Johdanto 1 2 Työn sisältö 1 3 Työn tausta 1 3.1 Digitaalisten kuvien esittäminen.................. 1 3.2 Kuvien piirtäminen.......................... 2 3.3 Kuvien suodatus........................... 3 4 Harjoitustyön osat 3 4.1 Lämmittelyosa............................. 3 4.2 Harjoitusosa.............................. 5 4.2.1 Yksiulotteinen suodattaminen............... 5 4.2.2 Kuvan sumentaminen.................... 6 4.2.3 Muita suodattimia...................... 7 4.2.4 Kuvan taajuussisältö..................... 7 4.2.5 Synteettisten suurten taajuuksien käyttäminen...... 8 4.2.6 Epälineaariset suodattimet................. 10 4.2.7 Reunojen etsiminen..................... 10 4.2.8 Muutoskynnysfunktio.................... 10 5 Työssä tarvittavat funktiot ja muut tiedostot 12 Tämä versio: 10. toukokuuta 2010 kello 11:46 i

1 Johdanto Kuvankäsittely on yksi digitaalisen signaalinkäsittelyn sovellus. Tässä työssä tutustutaan digitaalisten kuvien ali- ja ylipäästösuodatukseen sekä reunojen etsintään kuvasta. Työssä tarvittavat teoreettiset perusteet löytyvät oppikirjan [1] luvuista 2-4. Työn laajuus on 0.9 opintopistettä. Tämä työohje löytyy html-muodossa osoitteesta http://www.ee.lut.fi/courses/sa2730600/d104/index.html sekä pdf-muodossa osoitteesta http://www.ee.lut.fi/courses/sa2730600/ D104/D104.pdf. 2 Työn sisältö Työ jakaantuu kahteen osaan, lämmittelyyn ja harjoitusosaan. Lämmittelyosassa harjoitellaan kuvien piirtämistä Matlabilla. Harjoitusosassa tarkastellaan kuvien sumeuttamista ja terävöittämistä sekä reunojen etsintää Matlabilla. Lämmittelyosa suoritetaan hyväksymismenettelyllä ja harjoitusosasta palautetaan raportti, joka arvostellaan. Lämmittelyosan suorittamisen varmistamiseksi ohjaaja täyttää tämän ohjeen liitteenä olevan varmistuslomakkeen. Varmistuslomake liitetään harjoitusosan raporttiin. 3 Työn tausta 3.1 Digitaalisten kuvien esittäminen Kuva voidaan esittää kahden muuttujan funktiona x(t 1, t 2 ), missä t 1 edustaa vaakakoordinaattia ja t 2 pystykoordinaattia. Harmaasävykuvassa x(t 1, t 2 ) on skaalaarifunktio, mutta värikuvassa x(t 1, t 2 ) on esimerkiksi kolmesta komponentista muodostuva vektorifunktio (esim. RGB-koodaus). Liikkuvissa kuvissa funktio olisi lisäksi ajan funktio. Tässä harjoitustyössä keskitytään pelkästään paikoillaan oleviin kuviin. Näytteistetty harmaasävykuva esitetään kaksiulotteisena lukutaulukkona x(m, n) x(mt 1, nt 2 ), 1 m M, 1 n N. (3.1) M ja N ovat usein kakkosen potensseja, esim. 256 tai 512. Matlabissa kuva esitetään M N-kokoisena matriisina x. Matriisin alkio x(m,n), pikseli, edustaa siis näytettä (m, n). Harmaasävykuvissa pikselien arvot ovat aina ei-negatiivisia ja suuruudeltaan tietyn arvon sisällä 0 x(m, n) X max. (3.2) Tämä johtuu siitä, että kuvat muodustuvat heijastuneen tai emittoidun valon intensiteettiä kuvaavista luvuista, jotka ovat aina positiivisia ja suuruudeltaan Tämä versio: 10. toukokuuta 2010 kello 11:46 1

äärellisiä. Kun kuvan näytteet talletetaan tietokoneen muistiin, x(m, n):n arvot skaalataan siten, että ne voidaan esittää esimerkiksi 8-bittisinä kokonaislukuina. Silloin suurin mahdollinen arvo on X max = 2 8 1 = 255 ja siten voidaan esittää 256 eri harmaan sävyä. 3.2 Kuvien piirtäminen Kuvien piirtäminen näytölle voi olla hankalaa varsinkin sen jälkeen, kun kuvia on käsitelty esimerkiksi digitaalisella suodattimella. Seuraavat kohdat kannattaa pitää mielessä: 1. Kaikkien kuvan alkioiden arvon pitää olla ei-negatiivisia. Suodattaminen saattaa luoda myös negatiivisia arvoja, jolloin niille on tehtävä jotain ennen kuvan piirtämistä. 2. Useimpien harmaasävykuvien talletusmuoto on 8-bittinen, jolloin kuvan alkioiden arvot ovat välillä 0 x(m, n) 255 = 2 8 1. 3. Kuvan alkioiden suurimman ja pienimmän arvon etsimiseen voi käyttää Matlabin funktioita max ja min. 4. Kuvan alkioiden arvot voidaan kvantisoida kokonaisluvuiksi funktioilla round, fix ja floor. 5. Kuva voidaan piirtää ruudulle Matlabin sisäänrakennetulla funktiolla image tai imagesc. Se miten lukuarvot muuttuvat väreiksi voidaan määrätä ns. värikartalla. Esimerkiksi harmaasävykuva saadaan seuraavasti image(x) colormap(gray(256)) Valitettavasti image-funktio ei tulosta kuvaa siten, että yksi kuvapiste olisi ruudullakin yksi kuvapiste. Image Processing Toolboxissa olisi funktio truesize, joka tekisi tämän. Image Processing Toolbox ei kuitenkaan käytetä tässä työssä. Saman toiminnon saa aikaan laboratoriotyötä varten tehty funktio trusize. Siten kuvan piirtäminen ruudulle tapahtuu kolmella funktiolla image(x) colormap(gray(256)) trusize; Nämä funktiokutsut on koottu labratyötä varten funktioon showimg, jota voidaan käyttää tässä laboratoriotyössä. Yksinkertaisesti siis showimg(x); 6. Jos kuvassa on kuvapisteitä, joiden lukuarvot ovat alueen 0... 255 ulkopuolella tai jos kuvan lukuarvot on skaalattu pienelle välille, kuvan laatu voi olla huono. Kuvan sisältämien arvojen joukkoa ja lukumäärää voi tarkastella Matlabin funktiolla hist, joka piirtää kuvaajan (ns. histogrammi), josta näkyy kuinka monta kertaa tietty lukuarvo esiintyy parametrina annettavassa matriisissa. Tämä versio: 10. toukokuuta 2010 kello 11:46 2

Histogrammin perusteella kuvan lukuarvoja voidaan muokata ennen kuvan piirtämistä. Tähän on kaksi tapaa: 7. Lukuarvojen "leikkaaminen". Jos jotkin lukuarvoista ovat alueen 0... 255 ulkopuolella, mutta lukuarvojen skaalaus pitää säilyttää, lukuarvot pitää leikata, ts. kaikki negatiiviset arvot asetetaan nollaksi ja 255:tä suuremmat arvot 255:ksi. Tätä laboratoriotyötä varten on tätä operaatiota varten tehty funktio clip. 8. Kuvan automaattinen skaalaus. Kuvapisteiden arvot x(m, n) kuvataan lineaarisella kuvauksella uusiksi arvoiksi x s (m, n) = x(m, n), jotka ovat sallitulla alueella 0... 255 x s (m, n) = αx(m, n) + β (3.3) Skaalauskertoimet α ja β saadaan Matlabin funktioiden min ja max avulla ja koko kuvaus on x s (m, n) = 256 x(m, n) x min, (3.4) x max x min missä merkintä r tarkoittaa luvun r kokonaisosaa. 3.3 Kuvien suodatus Kuvasignaaleja voidaan suodattaa kuten yksiulotteisia signaaleja. Kuvissa intensiteetti vaihtelee pikseli pikseliltä aivan samoin kuten esimerkiksi audiosignaali vaihtelee ajan funktiona. Yksiulotteisen signaalin aikaa vastaa siis kuvapisteen paikka. Yksiulotteisen signaalin ajan käänteisarvo on taajuus. Kuvien tapauksessa käytetään termiä "avaruudellinen taajuus". Suuri avaruudellinen taajuus tarkoittaa, että kuvassa intensiteetti muuttuu nopeasti siirryttäessä kuvapisteestä toiseen, esimerkiksi raidallinen paita. Pieni avaruudellinen taajuus tarkoittaa, että intensiteetti muuttuu hitaasti. Kuva 1 havainnollistaa taajuuden käsitettä. Yksinkertainen tapa kaksiulotteisen kuvan suodattamiseen on suodattaa ensin jokainen rivi yksiulotteisesti ja suodattaa näin saatava tulos vielä sarakkeittain. Näin toimitaan tässä laboratoriotyössä. 4 Harjoitustyön osat 4.1 Lämmittelyosa Tässä osassa harjoitellaan kuvien piirtämistä Matlabilla. Samalla varmistetaan, että kaikki harjoitusosassa tarvittavat funktiot ovat käytettävissä. Työssä tarvittavat kuvat on tallennettu Matlabin mat-muotoon ja ne voidaan lukea Matlabiin komennolla load. Tiedoston sisältö ladataan saman nimiseen Tämä versio: 10. toukokuuta 2010 kello 11:46 3

Kuva 1: Avaruudellinen taajuus. Vasemmanpuoleisessa kuvassa on suuri taajuus, oikeanpuoleisessa pienempi. muuttujaan, josta ne on tallennettu. Muuttujan nimi ja kuvan koko selviää komennolla whos, esimerkiksi ladataan kuva lenna.mat 1 >> load lenna >> whos Name Size Bytes Class xx 256x256 524288 double array Grand total is 65536 elements using 524288 bytes >> Pääte mat voidaan jättää pois. Kuva on siis talletettu matriisiin xx ja sen koko on 256 256 kuvapistettä. Matlabissa on lisäksi funktio imread, jolla voidaan lukea useilla eri tallennustavoilla talletettuja kuvia. Tuettuja tapoja ovat mm. jpeg, tiff ja bmp. Vastaavasti kuvat voidaan tallettaa funktiolla imwrite samoilla tuetuilla muodoilla. Edellä työn taustaa kuvaavassa osassa kerrottiin, että kuva voidaan piirtää ruudulle image-funktiolla. Käytön helpottamiseksi tässä laboratoriotyössä voidaan käyttää funktiota showimg, joka siis ei ole Matlabiin tai mihinkään Toolboxiin kuuluva funktio. help showimg näyttää ohjeen funktion käytöstä SHOWIMG display an image with possible scaling usage: ph = showimg(img, figno, scaled, map) img = input image figno = figure number to use for the plot if 0, re-use the same figure if omitted a new figure will be opened 1 Kuvalla "lenna" on erityinen historia kuvankäsittelyn ja -pakkaamisen tutkimuksen historiassa, kts. http://www.lenna.org Tämä versio: 10. toukokuuta 2010 kello 11:46 4

optional args: scaled = 1 (TRUE) to do auto-scale (DEFAULT) not equal to 1 (FALSE) to inhibit scaling map = user-specified color map ph = figure handle Funktiolle voi antaa 1-4 parametria. Jos parametrina on vain kuvamatriisi img, funktio avaa uuden kuvaikkunan, skaalaa arvot välille 0... 255 ja käyttää harmaasävyvärikarttaa. Jos haluaa piirtää useita kuvia samaan kuvaikkunaan (esim. funktion subplot avulla), voi toisena parametrina antaa kuvan numeron tai 0, jolloin käytetään aktiivista ikkunaa. Testataan seuraavaksi, että onnistut piirtämään kuvan ruudulle Matlabilla: 1. Generoi testikuva matriisiin pic, jonka koko on 256 256. Tee kuvan jokaisesta rivistä diskreetti sinisignaali, jonka jakso on 50 näytettä ja amplitudi 1 (siis arvot välillä 1... 1). Kumpi indekseistä merkitsee vaaka-akselia ja kumpi pystyakselia? 2. Erota kuvasta yksi rivi ja piirrä sen kuva plot-käskyllä. Kuvan pitäisi olla diskreetti sinisignaali 3. Käytä funktiota showimg kuvan piirtämiseen ruudulle. Selitä, miksi kuvassa on kuvan mukainen harmaasävykuvio. Miten showimg on muuttanut kuvapisteiden arvoja, jotta kuvan on voinut piirtää, ts. mikä kokonaisluku vastaa mustaa ja mikä valkoista? 4. Lataa kuva lenna.mat ja piirrä se ruudulle. 5. Piirrä kuvan 200. rivi. Millä välillä arvot ovat? 6. Miten voit piirtää kuvan negatiivin, ts. mikä on yhtälön 3.3 mukainen skaalaus mustan muuttamiseksi valkoiseksi ja valkoisen mustaksi? 4.2 Harjoitusosa 4.2.1 Yksiulotteinen suodattaminen Yksi rivi kuvasta, esim. 50. rivi, on N-pisteen pituinen sekvenssi xx(50,n). Tämän sekvenssin voi suodattaa yksiulotteisella suodattimella vaikka funktiolla conv. Mutta miten suodatetaan koko kuva? Tähän kysymykseen etsitään vastausta seuraavassa: 1. Lataa muistiin kuva echart.mat. Erota kuvan 34. viimeinen rivi omaksi sekvenssiksi komennolla x1 = echart(256-33,:); Suodata x1 7-pisteen liukuvan keskiarvon suodattimella ja piirrä sekä x1 että suodatettu signaali samaan kuvaan subplotin avulla. Kuvaile suodatettua signaalia verrattuna suodattamattomaan joko adjektiivilla tasaisempi tai karkeampi. Selitä miksi näin. Tämä versio: 10. toukokuuta 2010 kello 11:46 5

Säilytä suodatettu sekvenssi myöhempää käyttöä varten. 2. Erota kuvasta 99. sarake ja suodata se ensimmäinen differenssi -suodattimella (kts. työ 102). Selitä suodatetun signaalin muoto. 4.2.2 Kuvan sumentaminen Kuten varmaan arvaat, koko kuvan suodattaminen onnistuu siten, että jokainen rivi suodatetaan erikseen. Matlabissa tämä onnistuu for-luupin avulla. Rivi m suodatetaan siten 7-pisteen liukuvan keskiarvon suodattimella seuraavasti: y 1 (m, n) = 1 6 7 x(m, n l), 1 m M. (4.1) l=0 Näin menetellessä kuva suodatetaan vain vaakasuunnassa. Sarakkeet voidaan suodattaa toisella for-luupilla: y 2 (m, n) = 1 7 6 y 1 (m k, n), 1 n N. (4.2) k=0 Siten y 2 (m, n) on kuva, joka on suodatettu sekä vaaka- että pystysuunnissa 7- pisteen liukuvan keskiarvon suodattimella. Matlabissa on myös funktio, joka tekee yhtälön 4.1 operaation ilman silmukkaa, conv2. conv2:lla voidaan tehdä myös paljon monimutkaisempia operaatioita, mutta tässä työssä sitä käytetään vain tähän yksinkertaiseen konvoluutioon rivi riviltä tai sarake sarakkeelta. Tee seuraavat operaatiot: 1. Toteuta yhtälöiden 4.1 ja 4.2 operaatiot käyttäen for-silmukoita ja funktiota filter funktion conv sijasta. Piirrä alkuperäinen ja suodatettu kuva funktioilla subplot ja showimg samaan kuvaan vierekkäin. Käytetään tätä kuvaa seuraavien kohtien tulosten vertailuun. 2. Suodatetaan kuva conv2:lla. Määrittele 7-pisteen liukuvan keskiarvon suodatin. Jos olet sen jo edellä määritellyt, varmista, että se on rivivektori, ei sarakevektori. Funktiota conv2 käytetään sitten seuraavasti y1 = conv2(x,b); missä x on kuvan muodostava matriisi ja b suodattimen kerroinrivivektori. Yo. operaatio suodattaa kuvan kaikki rivit matriisiin y1. Huomaa, että vektorin voi pakottaa rivivektoriksi operaatiolla b=b(:). Piirrä alkuperäinen ja suodatettu kuva funktioilla subplot ja showimg samaan kuvaan vierekkäin. Kuvaile kuvien eroa. Erota suodatetusta kuvasta alhaalta lukien 34. rivi ja vertaa sitä edellä sekvenssistä x1 suodatettuun vastaavaan riviin. Piirrä molemmat kahden kuvan subplotiin. Selitä mahdolliset erot. Tämä versio: 10. toukokuuta 2010 kello 11:46 6

3. Suodata y1 pystysuunnassa. Tämä tapahtuu siten, että suodattimen kertoimet ovat pystyvektorissa kutsuttaessa funktiota conv2. Pystyvektoriksi vaakavektorin saa Matlabissa transpoosioperaattorilla, esim. b. Toinen vaihtoehto pystyvektoriksi pakottamiseen on b(:). Piirrä alkuperäinen (echart) ja suodatettu kuva y2 funktioilla subplot ja showimg samaan kuvaan vierekkäin. Kuvaile kuvien eroa. Vertaa myös välitulos y1:een. 4. Mitä kuvalle tapahtuu, jos suodatin vaihdetaan 21-pisteen liukuvan keskiarvon suodattimeen? Kokeile ja kuvaile. 4.2.3 Muita suodattimia 1. Lataa kuva lenna ja piirrä kuva showimg:llä. 2. Suodata kuva seuraavilla suodattimilla sekä riveittäin että sarakkeittain ellei toisin pyydetä. Piirrä jokainen kuva ja kuvaile suodattimen aikaansaannosta. (a) a1=[1 1 1]/3; (b) a2=ones(1,7)/7; (c) a3=[1-1]; Suodata vain rivit. Huomaa, että tämä suodatin saa aikaan negatiivisia arvoja. Ennen kuvan piirtämistä, arvot on skaalattava sallitulle alueelle (showimg tekee tämän automaattisesti, kokeile myös kuvan piirtämistä suoraan funktiolla image ilman skaalausta). (d) a4=[-1 3-1]; Suodata vain rivit. (e) a5=[-1 1 1 1-1]; Tarkastele kuvia ja vastaa seuraaviin kysymyksiin: Mitkä suodattimista ovat alipäästösuodattimia? Mitä alipäästösuodatin tekee kuvalle? Mitkä suodattimet ovat ylipäästösuodattimia? Älä käytä pelkästään taajuusvastekuvaajia yo. kysymysten vastauksiksi, vaan kuvaile sanallisesti kuvan perusteella. 4.2.4 Kuvan taajuussisältö Edellä havaittiin, että alipäästösuodatus sumentaa kuvaa. Tässä osassa havaitaan, että ylipäästö- tai kaistanpäästösuodatuksella kuvaa voidaan terävöittää. Jäljempänä ylipäästösuodattimia käytetään myös reunojen selvittämiseen. 1. Luo Matlabilla alipäästösuodatin, jonka kertoimet määritellään yhtälöllä 1.1, kun k = 10 b k = e 0.075(k 10)2, kun k = 0, 1, 2,..., 20, k = 10 (4.3) 0, muualla Tämä versio: 10. toukokuuta 2010 kello 11:46 7

Huomaa, että Matlabin indeksointi alkaa 1:stä, joten yo. yhtälöä pitää tältä osin muuttaa. Piirrä subplotin avulla samaan kuvaan suodattimen taajuusvasteen itseisarvo plotilla ja impulssivaste stemillä. 2. Luo Matlabilla kaistanpäästösuodatin, jonka kertoimet määritellään yhtälöllä { cos [0.4π(k 10)] e b k = 0.075(k 10)2, kun k = 0, 1, 2,..., 20 (4.4) 0, muualla Piirrä samalla tavalla kuin edellä samaan kuvaan suodattimen taajuusvasteen itseisarvo plotilla ja impulssivaste stemillä. Miksi suodatin on kaistanpäästösuodatin? 3. Lataa testikuva baboon.mat. Suodata kuva sekä riveittäin että sarakkeittain alipäästösuodattimella {b k } ja talleta tulos matriisiin y. Piirrä kuva nähdäksesi suodattimen vaikutus kuvaan. Totea, onko suodatetun kuvan taajuussisältö pääasiassa matala- vai korkeataajuinen. 4. Suodata baboon sekä riveittäin että sarakkeittain kaistanpäästösuodattimella { b k } ja talleta tulos matriisiin v. Piirrä kuva nähdäksesi suodattimen vaikutus kuvaan. Totea, onko suodatetun kuvan taajuussisältö pääasiassa matala- vai korkeataajuinen. Huomautus! Kuvan piirtäminen suoraan edes showimg:llä ei ole järkevää (kokeile!). Syynä on se, että suodatetussa kuvassa on pieniä ja suuria arvoja, joita on vain hyvin vähän. showimg skaalaa automaattisesti pienimmän ja suurimman arvon 0:ksi ja 255:ksi. Suurin osa informaatiosta jää kuitenkin melko pienelle alueelle, jolloin kuvassa kontrastierot eivät erotu hyvin. Muokkaa siksi kuvaa siten, että kyllästät tiettyä arvoa suuremmat ja pienemmät arvot tiettyyn rajaan. Etsi sopiva arvo piirtämällä histogrammi v:stä komennolla hist(v(:)). 5. Sumeutettua kuvaa y(m,n) voidaan parantaa (terävoittää) lisäämälle osa kaistanpäästösuodatetusta kuvasta v (tai kyllästetty versio v:stä). Kuvan 2 esittämä lohkokaavio toteuttaa seuraavan lineaarisen kombinaation (1 α)y(m, n) + αv(m, n) (4.5) missä 0 α 1 on kerroin, joka määrää, kuinka suuri osa tuloksesta tulee kaistanpäästösuodatetusta kuvasta. Etsi sellainen arvo α:lle, jolla saat mahdollisimman paljon alkuperäistä kuvaa muistuttavan lopputuloksen. Kokeile v:n paikalla sekä muokattua että muokkaamatonta v:tä. Miksi kuva näyttää terävämmältä kuin y(m,n)? Piirrä subplotin avulla samaan kuvaan (2x2) alkuperäinen kuva (siis subplot(2,2,n)), alipäästösuodatettu, kaistanpäästösuodatettu ja terävöitetty 4.2.5 Synteettisten suurten taajuuksien käyttäminen Kuvan tarkentaminen on melko vaikeaa, mutta edellisen kohdan perusteella voidaa yleisesti todeta, että kuvan tarkentamiseksi siihen on lisättävä suurtaajuista dataa. Tämä versio: 10. toukokuuta 2010 kello 11:46 8

1 α LPF y(m, n) x(n) α + Terävöitetty kuva BPF v(m, n) Kuva 2: Terävöittäminen lisäämällä osa kaistanpäästösuodatettua kuvaa alipäästösuodatettuun kuvaan. Edellä kuvattua terävöittämistapaa ei voida suoraan käyttää, jos lähtökohtana on epätarkka kuva. Edellähän suurtaajuinen data saatiin kaistanpäästösuodattamalla alkuperäistä terävää kuvaa. Reaalisessa tilanteessahan käytettävissä on ainoastaan epätarkka kuva. Terävöittämiseksi kuvaan on jotenkin saatava suurtaajuista dataa. Yksi tapa on käyttää synteettisiä suuria taajuuksia. Tätä esittää kuva 3. 1 α Alipäästökanava x(n) α + Terävöitetty kuva HPF w(m, n) Kuva 3: Sumeaan kuvaan lisätään synteettisiä suuria taajuksia. Suuret taajuudet on luotu sumeasta kuvasta ylipäästösuodatettamalla. Tutkitaan menetelmän toimivuutta seuraavasti: 1. Luo toisen differenssin suodatin, jonka siirtofunktio on H(z) = Piirrä suodattimen taajuusvasteen itseisarvo. ( 1 z 1) 2. (4.6) 2. Laske synteettinen suuritaajuinen kuva suodattamalla toisen differenssin suodattimella edellä luodusta sumeasta kuvasta y(m,n). Talleta tulos matriisiin w(m,n). Muista suodattaa sekä rivit että sarakkeet. 3. Selitä w(m,n):n taajuussisältö sillä perusteella, että se on luotu alkuperäisestä terävästä kuvasta ensin alipäästösuodattamalla ja sitten suodat- Tämä versio: 10. toukokuuta 2010 kello 11:46 9

tamalla se toisella differenssisuodattimella. Piirrä tämän kaskadisuodattimen taajuusvaste. Vihje: kahden polynomin tulon voi muodostaa funktiolla conv. 4. Terävöitä kuvaa synteettisten suurten taajuuksien avulla. Käytä samaa lineaarista kombinaatiota kuin edellä: (1 α)y(m, n) + αw(m, n), (4.7) missä 0 α 1. Etsi sopiva α:n arvo, jolla saat kuvan mahdollisimman teräväksi. Kokeile, kannattaako w:n arvot leikata samoin kuin v:n arvot edellä. Huomaa, että terävöittäminen voi todellakin olla vaikeaa. 4.2.6 Epälineaariset suodattimet Edellä on käytetty lineaarisia FIR-suodattimia kuvien muokkaamisessa. Kuvankäsittelyssä voidaan käyttää myös toisenlaisia suodattimia. Epälineaarisilla suodattimilla kuvan taajuussisältöä voidaan muuttaa dramaattisesti säilyttäen kuitenkin visuaalinen yhdennäköisyys kuvien välillä. Reunojen etsiminen on yksi sovellus, jossa voidaan käyttää epälineaarista suodatusta. 4.2.7 Reunojen etsiminen Esineen reuna näkyy usein värin tai harmaasävyn äkillisenä muuttumisena. Valkoisella pohjalla olevan mustan esineen reuna on siten niiden pisteiden joukko, joiden viereiset pisteet ovat harmaasävyltään suuresti poikkeavia. Harmaasävyn muuttuminen jonkin esineen sisällä on tavallisesti asteittaista, mutta reunoilla muutos on paljon nopeampaa. Siksi voidaan olettaa, että yksinkertaisella ylipäästösuodattimella voidaan havaita reunat. Kokeillaan ylipäästösuodatusta yksinkertaiseen kuvaan, jossa on vain mustaa ja valkoista: 1. Lataa testikuva echart.mat. Piirrä kuva. 2. Suodata kuva sekä vaaka- että pystysuunnassa ensimmäisen differenssin suodattimella b n = {1, 1}. Piirrä tuloksena saatava kuva showimg:llä ilman skaalausta (kolmas parametri nolla) ja negatiivisena (miten?). Miten hyvin suodatin erottaa pystysuorat reunat? Entä vaakasuorat ja vinot reunat? Miksi näin? 4.2.8 Muutoskynnysfunktio Jos hyväksymme oletuksen, että värin tai harmaasävyn muuttuminen nopeasti merkitsee reunaa, reunojen havaitseminen voidaan tehdä helpoksi. On vain merkittävä ne pisteet, joiden ympärillä olevissa pisteissä sävyllä on suuri ero. Yhtä pistettä tarkasteltaessa tämä tarkoittaa pisteen sävyarvon vertaamista sen Tämä versio: 10. toukokuuta 2010 kello 11:46 10

naapureihin. Jos eron itseisarvo mihin tahansa suuntaan on suurempi kuin asetettu kynnysarvo, piste on oletettavasti reunapiste. Kuvassa 4 on esimerkki tällaisesta reunojen etsimisestä. Kuva 4: Kuvasta tools etsityt reunat Seuraavassa tarkastelemme, miten tällaisen kuvan saa aikaan. Edellä selostettu vertailu naapureiden kesken on tehtävä kuvan kaikille pisteille. On siis luotava matriisi, joka sisältää pisteiden välisten sävyjen erot ja sitten tätä matriisia verrataan kynnysarvoon. Tällainen operaatio on helppoa ensimmäisen differenssin suodattimella. Suodatetaan ensin vaakasuunnassa matrisiin yh. Suodatetaan sitten alkuperäinen kuva ensimmäisen differenssin suodattimella pystysuunnassa matriisiin yv. Viimeinen osa on vertailu kynnysarvoon. Matlabin loogiset operaatiot, esim. a>b, b==a, jne. tuottavat tuloksenaan joko 1 (tosi) tai 0 (epätosi) riippuen vertailun tuloksesta. Nyt haluamme juuri tällaisen tuloksen, 1 jos piste on reunalla tai 0 jos piste ei ole reunalla. Piste on reunalla, jos muutos pystysuunnassa tai vaakasuunnassa on suurempi kuin kynnysarvo. Matlabilla kaikkien pisteiden vertailu voidaan tehdä matriisivertailuna yhdellä rivillä y = (abs(yh)>thr) (abs(yv)>thr); missä thr on kynnysarvo. On muistettava, että ensimmäisen differenssin suodattimen ulostuloarvot voivat olla kuvapisteiden arvojen sallitun alueen ulkopuolella, joten yh:lle ja yv:lle on syytä suorittaa skaalaus ja/tai negatiivisten ja ylisuurten arvojen leikkaus. Huomaa, että jos käytössä on harmaasävyvärikartta gray(256), vastaa 0 mustaa. Jos kuva halutaan piirtää ruudulle, on havainnollisempaa useimmiten piirtää reunat mustalla ja muu alue valkoisella. Sitä varten vertailun tulos pitää kääntää toisinpäin esimerkiksi negaatio-operaattorilla. Lisäksi, 0 ja 1 ovat arvoina liian lähekkäin ja ne molemmat näkyvät mustana. Jotta 1 muuttuisi valkoiseksi, on y vielä kerrottava vähintään 200:lla. Jos kynnysarvo thr on nolla, merkitään reunaan kuuluvaksi kaikki pisteet, joi- Tämä versio: 10. toukokuuta 2010 kello 11:46 11

den vieressä ei ole sävyarvoltaan samansuuruinen piste. Tämä on useimmiten liian pieni kynnysarvo. Jos kynnysarvo on liian suuri, ei esimerkiksi harmaan esineen reunaa havaita, jos se on mustan taustan ympäröimä. Jotta thr:n arvo olisi helposti valittavissa, pitää myös matriisit yh ja yv olla skaalattu sopivasti, esim. välille 0... 255. Silloin voidaan kokeilla thr:lle esimerkiksi arvoja välillä 8... 20. Yritä saada aikaan kuvan 4 kaltainen tulos: 1. Lataa kuva tools.mat. Piirrä kuva 1x2 subplotiin. 2. Muodosta ensimmäisen differenssin suodatin ja suodata tools vaakasuunnassa matriisiin yh. Selvitä, miten saat funktiolla conv2 samankokoisen tuloksen kuin lähtömatriisi. 3. Suodata alkuperäinen kuva, ei yh, pystysuunnassa matriisiin yv. Käytä conv2 siten, että yv:stä tulee samankokoinen kuin yh (ja alkuperäinen kuva). 4. Skaalaa ja/tai leikkaa negatiiviset ja ylisuuret arvot yh:ssa ja yv:ssä. Mieti tarkkaan, mitä teet, sillä tämä vaikuttaa paljon reunojen löytymiseen! 5. Muodosta reunakuva edellä kuvatulla matriisivertailulla, negaatiolla ja skaalauksella. Kokeile eri kynnysarvoja. Piirrä tulos alkuperäisen viereen. 6. Tee samat operaatiot kuville echart ja lenna. 5 Työssä tarvittavat funktiot ja muut tiedostot Työssä tarvitaan funktioita, jotka eivät ole osa Matlabia. Ne voi ladata työn kotisivulta osoitteesta http://www.ee.lut.fi/courses/sa2730600/d104/. showimg trusize clip Työssä suodatetaan seuraavia kuvia, jotka on myös ladattavissa työn kotisivulta: baboon echart lenna tools Tämä versio: 10. toukokuuta 2010 kello 11:46 12

Viitteet [1] J. G. Proakis and D. G. Manolakis, Digital Signal Processing Principles, Algorithms, and Applications. Prentice-Hall, Inc., 3 ed., 1996. Tämä versio: 10. toukokuuta 2010 kello 11:46 13

Työ D104: Kuvien suodatus Ohjaajan varmistus lämmittelyosan suorittamisesta Liitä tämä sivu harjoitusosan raporttiin Ryhmän jäsenet: Ohjaaja täyttää seuraavat kohdat: 1. 2. 3. 4. 5. 6. Päiväys: Ohjaaja: