1, kun m = 0 ja n = 0, 0, muulloin.



Samankaltaiset tiedostot
Digitaalinen signaalinkäsittely Kuvankäsittely

Kaksiluokkainen tapaus, lineaarinen päätöspinta, lineaarisesti erottuvat luokat

Neuroverkkojen soveltaminen vakuutusdatojen luokitteluun

SGN Signaalinkäsittelyn perusteet Välikoe Heikki Huttunen

Yhtälön oikealla puolella on säteen neliö, joten r. = 5 eli r = ± 5. Koska säde on positiivinen, niin r = 5.

Kompleksiluvut signaalin taajuusjakauman arvioinnissa

Johdatus tekoälyn taustalla olevaan matematiikkaan

4 Yleinen potenssifunktio ja polynomifunktio

TEEMU ROOS (KALVOT MUOKATTU PATRIK HOYERIN LUENTOMATERIAALISTA)

Tee-se-itse -tekoäly

Suorista ja tasoista LaMa 1 syksyllä 2009

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

Ei välttämättä, se voi olla esimerkiksi Reuleaux n kolmio:

Tekijä Pitkä matematiikka

Matematiikan tukikurssi, kurssikerta 3

y=-3x+2 y=2x-3 y=3x+2 x = = 6

ImageRecognition toteutus

3 Suorat ja tasot. 3.1 Suora. Tässä luvussa käsitellään avaruuksien R 2 ja R 3 suoria ja tasoja vektoreiden näkökulmasta.

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

, on säännöllinen 2-ulotteinen pinta. Määrää T x0 pisteessä x 0 = (0, 1, 1).

Diskriminanttianalyysi I

2 Pistejoukko koordinaatistossa

Tekijä Pitkä matematiikka Pisteen (x, y) etäisyys pisteestä (0, 2) on ( x 0) Pisteen (x, y) etäisyys x-akselista, eli suorasta y = 0 on y.

Matematiikan tukikurssi

BM20A0700, Matematiikka KoTiB2

Kohdeyleisö: toisen vuoden teekkari

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

Mitä on konvoluutio? Tutustu kuvankäsittelyyn

y x1 σ t 1 = c y x 1 σ t 1 = y x 2 σ t 2 y x 2 x 1 y = σ(t 2 t 1 ) x 2 x 1 y t 2 t 1

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on

Aki Taanila YHDEN SELITTÄJÄN REGRESSIO

Moniulotteisia todennäköisyysjakaumia

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

MATEMATIIKAN KOE, PITKÄ OPPIMÄÄRÄ HYVÄN VASTAUKSEN PIIRTEITÄ

Tekijä MAA2 Polynomifunktiot ja -yhtälöt = Vastaus a)

Aluksi Kahden muuttujan lineaarinen yhtälö

Kognitiivinen mallintaminen Neuraalimallinnus, luento 1

Ilkka Mellin Todennäköisyyslaskenta Osa 3: Todennäköisyysjakaumia Moniulotteisia todennäköisyysjakaumia

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

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

Lineaarinen optimointitehtävä

Logistinen regressio, separoivat hypertasot

Lineaarinen yhtälöryhmä

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

Johdatus tekoälyn taustalla olevaan matematiikkaan

Kognitiivinen mallintaminen. Nelli Salminen

z 1+i (a) f (z) = 3z 4 5z 3 + 2z (b) f (z) = z 4z + 1 f (z) = 12z 3 15z 2 + 2

Luento 8: Epälineaarinen optimointi

Matematiikan tukikurssi

Tällä kerralla ohjelmassa. Kognitiivinen mallintaminen Neuraalimallinnus Kertausta: Perseptronin oppimissääntö

Talousmatematiikan perusteet: Luento 13. Rajoittamaton optimointi Hessen matriisi Ominaisarvot ja vektorit Ääriarvon laadun tarkastelu

Demo 1: Simplex-menetelmä

MAB3 - Harjoitustehtävien ratkaisut:

2 Yhtälöitä ja epäyhtälöitä

Matriisilaskenta Laskuharjoitus 1 - Ratkaisut / vko 37

Matematiikan tukikurssi

MS-A0204 Differentiaali- ja integraalilaskenta 2 (ELEC2) Luento 6: Ääriarvojen luokittelu. Lagrangen kertojat.

Lineaariset luokittelumallit: regressio ja erotteluanalyysi

Moniulotteisia todennäköisyysjakaumia. Moniulotteisia todennäköisyysjakaumia. Moniulotteisia todennäköisyysjakaumia: Mitä opimme?

Matematiikan peruskurssi 2

1 Ensimmäisen asteen polynomifunktio

1. Lineaarinen optimointi

Valokuvien matematiikkaa

Tekoäly ja koneoppiminen metsävaratiedon apuna

2.2 Neliöjuuri ja sitä koskevat laskusäännöt

Johdatus todennäköisyyslaskentaan Moniulotteisia todennäköisyysjakaumia. TKK (c) Ilkka Mellin (2005) 1

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

Johdatus tekoälyyn. Luento : Koneoppiminen. Patrik Hoyer. [ Kysykää ja kommentoikaa luennon aikana! ]

Vektoreiden virittämä aliavaruus

läheisyydessä. Piirrä funktio f ja nämä approksimaatiot samaan kuvaan. Näyttääkö järkeenkäyvältä?

Matematiikan tukikurssi

4.1 Kaksi pistettä määrää suoran

Yhtälöryhmät 1/6 Sisältö ESITIEDOT: yhtälöt

Datatähti 2019 loppu

Diplomi-insinööri- ja arkkitehtikoulutuksen yhteisvalinta 2017 Insinöörivalinnan matematiikan koe , Ratkaisut (Sarja A)

JOHDATUS TEKOÄLYYN TEEMU ROOS

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 1 / vko 44

12. Hessen matriisi. Ääriarvoteoriaa

Johdatus tn-laskentaan torstai

Matematiikan tukikurssi

Matikkaa KA1-kurssilaisille, osa 3: suoran piirtäminen koordinaatistoon

Oletetaan ensin, että tangenttitaso on olemassa. Nyt pinnalla S on koordinaattiesitys ψ, jolle pätee että kaikilla x V U

MAB3 - Harjoitustehtävien ratkaisut:

Tekstuurintunnistuksen lyhyt oppimäärä. Ts. pari tapaa erottaa tiiliseinä pensaasta.

1.4 Funktion jatkuvuus

811120P Diskreetit rakenteet

Lineaarialgebra ja matriisilaskenta I, HY Kurssikoe Ratkaisuehdotus. 1. (35 pistettä)

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Suora 1/5 Sisältö ESITIEDOT: vektori, koordinaatistot, piste

Ratkaisuehdotukset LH 7 / vko 47

Käy vastaamassa kyselyyn kurssin pedanet-sivulla (TÄRKEÄ ensi vuotta ajatellen) Kurssin suorittaminen ja arviointi: vähintään 50 tehtävää tehtynä

Topologia Syksy 2010 Harjoitus 4. (1) Keksi funktio f ja suljetut välit A i R 1, i = 1, 2,... siten, että f : R 1 R 1, f Ai on jatkuva jokaisella i N,

Inversio-ongelmien laskennallinen peruskurssi Luento 4

Transkriptio:

Luku 1 Digitaalinen kuvankäsittely Tässä kappaleessa luodaan lyhyt katsaus digitaaliseen kuvankäsittelyyn ja joihinkin sen sovelluksiin. Yksinkertaisimmillaan kuvankäsittelyä voidaan pitää perusmenetelmien laajennuksena kahteen ulottuvuuteen. Koska kuvien rakenne sekä havaitsemismekanismi kuitenkin poikkeavat selvästi esimerkiksi äänisignaalien vastaavista, ovat kuvankäsittelyn menetelmät usein selvästi poikkeavia tähän mennessä opituista yksiulotteisten signaalien käsittelymenetelmistä. Arkikielessä kuvankäsittely viittaa usein käsin tapahtuvaan kuvien sisällön tai ulkoasun muokkaamiseen; kuvamanipulaatioon. Tässä kappaleessa tarkasteltavat menetelmät ovat kuitenkin pääosin automaattisia tietokoneella toteutettavia algoritmeja, joiden pääasiallinen käyttökohde on kuvan ulkoasun muokkaaminen käyttötarkoituksen mukaan. 1.1 Kaksiulotteiset järjestelmät Monet restaurointityökalut perustuvat kaksiulotteisiin lineaarisiin järjestelmiin sekä kaksiulotteisen Fourier-muunnoksen käyttöön. Seuraavaksi määritellään kaksiulotteisten lineaaristen järjestelmien peruskäsitteet. Kaksiulotteisesta diskreettiaikaisesta signaalista käytetään merkintää x(m, n), missä m, n Z. Kuva on kaksiulotteinen signaali, joka on määritelty vain tietyissä pisteissä (esim. m {,1,...,M 1} ja n {,1,...,N 1}). Indeksi m kertoo kuvapisteen (pikselin) pystykoordinaatin ja indeksi n kuvapisteen vaakakoordinaatin kuvan vasemmasta ylälaidasta lukien. Äärimmäisenä vasemmassa yläkulmassa oleva pikseli on x(,). Kaksiulotteinen impulssi δ(m, n) määritellään seuraavasti δ(m,n) = { 1, kun m = ja n =,, muulloin. Kaksiulotteinen järjestelmä muuntaa kaksiulotteisen signaalin toiseksi vastaavaksi signaaliksi. Jos järjestelmä on lineaarinen ja aikainvariantti, sen impulssivaste h(m, n)

154 SIGNAALINKÄSITTELYN MENETELMÄT määrää järjestelmän täydellisesti (aivan kuten yksiulotteisessa tapauksessakin). Tällöin vaste y(m, n) on herätteen x(m, n) ja impulssivasteen h(m, n) kaksiulotteinen konvoluutio y(m,n) = h(m,n) x(m,n) = h(j,k)x(m j,n k). j= k= Kaksiulotteisesta impulssivasteesta h(m, n) käytetään usein englanninkielistä nimeä point spread function; PSF, koska se kertoo kuinka yksittäinen valkoinen piste (eli esimerkiksi impulssi δ(m,n)) leviää kulkiessaan järjestelmän läpi. 1.1.1 Kaksiulotteinen diskreetti Fourier-muunnos Kaksiulotteinen diskreetti Fourier-muunnos muuntaa kuvan x(m, n) (m {, 1,..., M 1} jan {,1,...,N 1}) toiseksi kuvaksix(m,n) (m {,1,...,M 1} jan {,1,...,N 1}) kaavalla X(m,n) = M 1 j= N 1 k= x(j,k)w jm M w kn N, missä w N on ykkösen N:s juuri (w N = e πi/n ). Käänteismuunnos määritellään kaavalla x(m,n) = 1 MN M 1 j= N 1 k= X(j,k)w jm M wkn N, Vastaavalla tavalla voidaan määritellä Fourier-muunnoksen, Fourier-sarjan ja diskreettiaikaisen Fourier-muunnoksen kaksiulotteiset yleistykset. Kaksiulotteinen DFT on separoituva, eli se voidaan laskea kahden yksiulotteisen DFT:n avulla. Tämä nähdään muokkaamalla kaksiulotteisen DFT:n kaavaa seuraavasti. X(m,n) = = M 1 j= M 1 j= N 1 k= w jm M x(j,k)w jm M w kn N ( N 1 k= x(j,k)w kn N ) Nyt havaitaan, että sulkujen sisällä oleva lauseke on kuvan j:nnen vaakarivin DFT. Jos tästä käytetään merkintää N 1 X j (n) = x(j,k)w kn N, saa X(m, n) muodon k= N 1 X(m,n) = X j (n)w jm N, j= mikä on jonon X j (n) yksiulotteinen DFT. Käänteismuunnokselle voidaan johtaa vastaava menetelmä, joka käyttää yksiulotteisia käänteisiä muunnoksia.

1. DIGITAALINEN KUVANKÄSITTELY 155 Kaksiulotteinen DFT saadaan siis muuntamalla kuvan jokainen vaakarivi yksiulotteisella DFT:llä (käytännössä tietysti FFT:llä) ja muuntamalla tuloksen jokainen pystyrivi yksiulotteisella DFT:llä. Alla vasemmalla olevan kuvan jokainen vaakarivi on muunnettu ja tulos on nähtävissä oikealla olevassa kuvassa. Vaaleammat pisteet kuvaavat suuria arvoja. Muunnoksesta nähdään selvästi mm. alkuperäisen kuvan yläosassa olevan taivaan vaikutus muunnokseen. Yläosan harmaasävy on miltei vakio, ja näinollen kyseiset vaakarivit sisältävät pääosin pieniä taajuuksia. Pienet taajuudet on kuvattu kuvan vasemmassa laidassa (ja symmetrisyyden vuoksi myös oikeassa), mihin yläosan energia selvästi keskittyykin. 5 5 1 1 15 15 5 5 3 3 35 35 4 4 45 45 5 5 1 15 5 3 35 4 45 5 5 5 1 15 5 3 35 4 45 5 Vaakarivimuunnosten jälkeen muunnetaan jokainen pystyrivi. Tulos on alla vasemmalla. Nyt nollataajuus on vasemmassa yläkulmassa ja suurin taajuus aivan kuvan keskellä. Muunnoksen itseisarvo on vaaka- ja pystysuunnassa symmetrinen, kuten yksiulotteisen DFT:n yhteydessä opittiin. Muunnoskuvan havainnollisuuden lisäämiseksi on yleensä tapana siirtää nollataajuus kuvan keskelle, kuten oikeanpuoleisessa kuvassa on tehty. 5 5 1 1 15 15 5 5 3 3 35 35 4 4 45 45 5 5 1 15 5 3 35 4 45 5 5 5 1 15 5 3 35 4 45 5 Muunnoskuvasta nähdään, että nollataajuus ja sen lähellä olevat pienet taajuudet ovat voimakkaimpia. Siirryttäessä nollataajuuden kohdalta vaakasuoraan oikealle nähdään kuin-

156 SIGNAALINKÄSITTELYN MENETELMÄT ka paljon kuvassa on eritaajuisia vaakasuoria värähtelyjä. Toisaalta nollataajuudesta ylöspäin löytyvät pystysuorat värähtelyt. Tämä näkyy selvästi alla vasemmalla olevan keinotekoisen testikuvan Fourier-muunnoksesta. Kuva muodostuu pelkästään vaakasuorasta värähtelystä, joten oikealla olevassa DFT:ssä nähdään ainoastaan yksi taajuus nollataajuuden oikealla puolella. Fourier-muunnoksen itseisarvon symmetrisyydestä johtuen kuvassa on myös toinen piste vastaavan negatiivisen taajuuden kohdalla. 1 1 3 3 4 4 5 5 6 6 1 3 4 5 6 1 3 4 5 6 Kaksiulotteinen DFT voidaan esittää myös matriisien avulla. Aiemmin määriteltiin Fouriermuunnoksen muunnosmatriisi N:n mittaiselle signaalille w N w N w N... w N w N w 1 N w N... w (N 1) N F N = w N w N w 4 N... w (N 1) N........... w (N 1) N w N w (N 1) N w (N 1) N Jos kuvan pikseliarvot muodostavat matriisin X: x(,) x(,1) x(,n 1) x(1,) x(1,1) x(1,n 1) X =......, x(m 1,) x(m 1,1) x(m 1,N 1) saadaan vaakarivit muunnettua kertomalla kuva X muunnosmatriisilla F N oikealta 1, s.o., XF N. Tämän jälkeen saadaan pystyrivit muunnettua kertomalla matriisi XF N muunnosmatriisilla F M vasemmalta. Näin ollen kuvan X kaksiulotteinen DFT on matriisien avulla esitettynä yksinkertaisesti F M XF N. 1 Itse asiassa kertolasku tehdään muunnosmatriisin transpoosilla, mutta symmetrian vuoksi transpoosi voidaan jättää pois.

1. DIGITAALINEN KUVANKÄSITTELY 157 Esimerkiksi 4 4-kuvan 43 8 1 36 X = 59 195 114 189 155 117 158 45 14 5 3 14 DFT saadaan matriisikertolaskulla 1 1 1 1 43 8 1 36 1 1 1 1 F 4 XF 4 = 1 i 1 i 59 195 114 189 1 i 1 i 1 1 1 1 155 117 158 45 1 1 1 1 1 i 1 i 14 5 3 14 1 i 1 i 385 14 + 9i 147 14 9i = 44 11i 69+56i 16+49i 141 14i 399 164 157i 133 164 + 157i. 44+11i 141+14i 16 49i 69 56i Käänteismuunnos saadaan vastaavasti. Ainoa ero on muunnosmatriisi, jonka eksponentit ovat tällöin positiivisia, ja jonka kertoimena on 1 MN. 1. Dekonvoluutio Kuvassa olevien häiriöiden syntyä mallinnetaan usein kaksiulotteisella LTI-järjestelmällä. Tällöin siis havaittu kuva y(m, n) on kulkenut jonkin lineaarisen järjestelmän läpi ja samalla sen laatu on heikentynyt. Tällöin siis ajatellaan, että on olemassa ns. ideaalikuva x(m, n), jonka laatu on täydellinen. Jos mainitun lineaarisen järjestelmän impulssivaste on h(m,n), on voimassa relaatio y(m,n) = h(m,n) x(m,n). Yksiulotteisessa tapauksessa lineaarisen järjestelmän aiheuttamaa vääristymää korjattiin Fourier-muunnosten avulla. Samaa menetelmää voidaan käyttää myös nyt. Ottamalla Fourier-muunnos yllä olevan yhtälön molemmista puolista, muuttuu konvoluutio kertolaskuksi ja saadaan yhtälö Y(m,n) = H(m,n)X(m,n). Näin ollen ideaalikuvan DFT saadaan teoriassa yhtälöstä X(m,n) = Y(m,n) H(m,n). Ongelmaksi tässä jakolaskussa tulee kuitenkin mahdolliset nollalla jakamiset. Kirjallisuudessa esitetään useita ratkaisuja tähän ongelmaan. Yksi mahdollisuus on lisätä pieni positiivinen luku impulssivasteen DFT:hen, eli arvoida ideaalikuvan DFT:tä kaavasta X(m,n) = Y(m,n) H(m,n)+ǫ,

158 SIGNAALINKÄSITTELYN MENETELMÄT missä ǫ on pieni positiivinen reaaliluku. Tällöinkin nimittäjässä voi toki teoriassa olla nolla, mutta käytännössä se on hyvin epätodennäköistä. Toinen ratkaisu on tehdä jakolasku normaalisti nollasta poikkeaville funktion H(m, n) arvoille ja nolla-arvojen tapauksessa sijoittaa funktion X(m, n) arvoksi nolla. Kaavamuodossa tämä esitetään seuraavasti: X(m,n) = { Y(m,n), josh(m,n), H(m,n), josh(m,n) =. Tästä menetelmästä käytetään nimitystä pseudoinverssi tai yleistetty käänteissuodin. Yleisimmin käytetty menetelmä on ns. Wiener-suodin, jossa käänteissuotimen DFT:tä arvioidaan tieteellisemmin; havaitun kuvan ja siinä olevan kohinan tilastollisiin ominaisuuksiin perustuen. Konvoluutiolla on menestyksekkäästi mallinnettu esimerkiksi väärin tarkennetun linssin ja kameran tärähtämisen vaikutusta. Alla vasemmalla on digitaalikameralla otettu kuva, jossa kamera on liikkunut vasemmalle kuvaa otettaessa. Kameran nopeutta voidaan arvioida kuvassa olevien terävien reunojen kohdille piirtyneistä varjokuvista; varjot näyttäisivät olevan noin 3 pikseliä pitkiä. 5 1 15 5 3 35 4 45 Tällöin havaittu kuva on muotoa 1 3 4 5 6 y(m,n) = h(m,n) x(m,n), missä x(m, n) on tärähtämätön kuva ja h(m, n) on liikkuvan kameran vaste impulssille. Jos liikkuvalla kameralla otetaan kuva yksittäisestä kirkkaasta pisteestä mustalla taustalla, lopputuloksena on yksittäinen viiva, tässä tapauksessa vaakasuora viiva, jonka pituus on

1. DIGITAALINEN KUVANKÄSITTELY 159 noin 3 pikseliä. Siis { 1, kun n = ja m =,1,...,9, 3 h(m,n) =, muilla arvoilla m {,1,...,479} ja n {,1,...,639}. Huomaa, että impulssivastekuvasta tehdään samankokoinen kuin havaitusta kuvasta, jotta Fourier-tasossa tapahtuva jakolasku olisi mahdollinen. Vakioarvon 1 sijasta voidaan 3 käyttää kasvavia tai laskevia arvoja, jos kameran liike on kiihtyvää tai hidastuvaa. Tässä tapauksessa paras tulos saavutettiin laskevilla arvoilla. Seuraavaksi sekä impulssivasteesta h(m, n) että havaitusta kuvasta y(m, n) otetaan kaksiulotteinen DFT. Tämän jälkeen kuvan DFT:n Y(m, n) jokainen piste jaetaan impulssivasteen DFT:n H(m, n) vastaavalla pisteellä. Nollalla jakamiselta vältyttiin tässä esimerkissä lisäämällä vakio.5 impulssivasteen DFT:hen: X(m,n) = Y(m, n) H(m,n)+.5. Kun tuloksesta otetaan vielä käänteinen kaksiulotteinen DFT, lopputulos on alla olevan näköinen. Vaikka liikkeen vaikutusta ei aivan täysin voitukaan eliminoida, on tulos silti selvästi alkuperäistä parempi. Erityisesti kuvassa olevat pienet yksityiskohdat (esimerkiksi kirjojen selkämysten teksti) tulivat selvemmiksi. 5 1 15 5 3 35 4 45 1 3 4 5 6 1.3 Piste-ehostus Kaksiulotteisia muistittomia järjestelmiä kutsutaan pisteoperaatioiksi (engl. point operation) tai piste-ehostukseksi. Näiden järjestelmien vaste riippuu ainoastaan yhdestä herätteen arvosta, eli ne soveltavat samaa funktiota yhteen kuvan pisteeseen kerrallaan. Useimmiten

16 SIGNAALINKÄSITTELYN MENETELMÄT piste-ehostus lasketaan nimensä mukaisesti kuuluvaksi kuvaa ehostavien operaatioiden joukkoon. Yleisesti käytettyjä pisteoperaatioita ovat mm. gammakorjaus (engl. gamma correction) ja histogrammin ekvalisointi (engl. histogram equalization). 1.3.1 Gammakorjaus Tietokoneen monitoreilla ja televisioilla on tapana vääristää kirkkautta siten, etteivät kuvat näytä ruudulla luonnollisilta. Tätä efektiä kompensoidaan ns. gammakorjauksella. Useimmiten kuvaputkella näkyvän pisteen intensiteetti riippuu kuvattavan kohteen kirkkaudesta epälineaarisesti noudattamalla jotain potenssifunktiota. Jos siis videosignaalin jännite on u, ruudulla havaittu intensiteetti I on suunnilleen muotoa I = u γ. Eri järjestelmissä (PAL, NTSC, jne.) eksponentti gamma vaihtelee ja lisäksi mittauksilla saatu funktio voi olla hieman yllä olevaa monimutkaisempi. Radioalan standardointijärjestö ITU-R esittää suosituksessaan BT.79: "Basic parameter values for the HDTV standard for the studio and for international programme exchange" funktion I = { u 4.5, kun u.81, ( u+.99 1.99 ) 1.45, kun u >.81. Tämän funktion kuvaaja on esitetty alla olevassa kuvassa. 1.8 Intensiteetti.6.4..1..3.4.5.6.7.8.9 1 Jännite Jotta kuvat näyttäisivät luonnollisilta, tehdään tallennettavaan tai lähetettävään videosignaaliin gammakorjaus. Gammakorjaus korjaa monitorin aiheuttaman vääristymän soveltamalla havaittuun kuvaan yllä olevan funktion käänteisfunktiota, joka on f(x) = { 4.5x, kun x.18, 1.99x.45.99, kun x >.18. Gammakorjaus on mahdollista useimmissa kuvankäsittelyohjelmissa. Toteutuksesta riippuen ohjelmalle annetaan joko monitorin gamma (yo. esimerkissä 1 ) tai käänteisfunktion gamma (yo. esimerkissä.45). Yleensä funktion kuvaajaa on mahdollistä vielä.45 muokata hiirellä. Mahdollisuus muokata gammakäyrää käsin avaa luonnollisesti uusia mahdollisuuksia käyttää gammakorjausta kuvan ulkoasun parantamiseen. Kuvankäsittelyohjelmissa operaation käyttötarkoitus ei yleensä liity lainkaan menetelmän alkuperäiseen ideaan eli monitorin vääristymien kompensoimiseen. Alla vasemmalla on kuva sellaisena kuin se näkyisi ruudulla ilman gammakorjausta, kun monitorin gamma on γ = 1 =.. Oikealla on gammakorjattu kuva..45

1. DIGITAALINEN KUVANKÄSITTELY 161 5 5 1 1 15 15 5 5 3 3 35 35 4 4 45 45 5 5 1 15 5 3 35 4 45 5 5 5 1 15 5 3 35 4 45 5 1.3. Histogrammin ekvalisointi Histogrammi on käyrä, joka esittää kuvan eri harmaasävyjen määrää. Histogrammin ekvalisoinnilla pyritään saamaan histogrammi mahdollisimman tasaiseksi siten, että se levittäytyy mahdollisimman laajalle harmaasävyalueelle. Tällöinhän kuvan kontrasti paranee, koska vaaleat ja tummat pisteet erottuvat toisistaan paremmin. Esimerkki kuvasta, joka on ekvalisoinnin tarpeessa löytyy alta. Vasemmalla on ekvalisoimaton kuva ja sen histogrammi, josta nähdään valtaosan pikseleistä olevan harmaasävyalueella 1. Näin ollen koko harmaasävyalue ei tule tehokkaasti käytetyksi ja kuvan kontrasti on huono. 5 5 1 1 15 15 5 5 5 1 15 5 5 1 15 5 3 3 Pisteiden lukumäärä 5 15 1 5 Pisteiden lukumäärä 5 15 1 5 5 1 15 5 Harmaasävy 5 1 15 5 Harmaasävy

16 SIGNAALINKÄSITTELYN MENETELMÄT Oikealla olevan kuvan histogrammi on ekvalisoitu, eli se on muunnettu lähemmäksi tasaista histogrammia, jolloin kuvan kontrasti on parantunut. Ekvalisointi tapahtuu muuntamalla kuvan jokaisen pisteen harmaasävy n uudeksi harmaasävyksi n kaavalla n n k= = (L 1) H(k) L 1 (1.1) k=h(k), missä H(k), k =,1,,...,L 1, on kuvan histogrammi ja L on kuvan harmaasävyjen lukumäärä (yllä olevassa esimerkissä L = 56). Luonnollisesti tuloksena saatavat arvot on pyöristettävä lähimpään kokonaislukuun. Menettely tasoittaa histogrammin, koska uusi harmaasävyarvo riippuu nykyistä harmaasävyä tummempien pisteiden määrästä. Tarkastellaan esimerkiksi yllä olevan ekvalisoimattoman kuvan histogrammia. Nyt vaikkapa harmaasävyn 5 vasemmalla puolella on 5868 pistettä, eli näin monta pistettä kuvassa on harmaasävyä5 tummempia. Kuvassa on kaikkiaan 65536 pistettä, joten 89.5 prosenttia pisteistä on harmaasävyarvon 5 vasemmalla puolella. Jotta histogrammista tulisi tasainen, täytyisi myös 89.5 prosenttia harmaasävyistä jäädä vasemmalle puolelle. Tämä onnistuu muuntamalla harmaasävy 5 harmaasävyksi.895 55 8. Tekemällä sama operaatio kaikille 56:lle harmaasävyarvolle saadaan seuraava kuvaus vanhan ja uuden harmaasävyarvon välille. Uusi harmaasävy n 3 5 15 1 5 5 1 15 5 Alkuperäinen harmaasävy n Vaaka-akselilla on alkuperäisen kuvan harmaasävyarvo ja pystyakselilla on ekvalisoidun kuvan harmaasävyarvo. Kuvan ekvalisoinnin viimeinen vaihe on muuntaa harmaasävyt piste kerrallaan yllä olevan kuvauksen avulla. Koska kaikkia tietyn harmaasävyn pisteitä käsitellään samalla tavalla, ei histogrammista tule aivan tasainen vaan siinä on erillisiä piikkejä. Tämä saattaa näkyä kuvassa rajoina harmaasävyalueiden välillä, jos harmaasävyjä on vain vähän ja kuvassa on suuria tasaisia alueita. Tämän ilmiön vaikutusta voidaan vähentää satunnaistamalla harmaasävyjen muunnos, eli esimerkiksi arpomalla kussakin pisteessä vanhan harmaasävyn 5 tilalle jokin harmaasävy väliltä 6,..., 3 kiinteän arvon 8 asemesta. Tarkkaan ottaen tummempien tai yhtä tummien pisteiden määrästä.

1. DIGITAALINEN KUVANKÄSITTELY 163 5 5 1 1 15 15 5 5 1 15 5 5 5 1 15 5 Harjoitustehtäviä 1.1. (Matlab) Laadi Matlab-rutiini joka ekvalisoi annetun kuvan histogrammin. Jos kuva on muuttujassa X, niin ekvalisointi tapahtuu komennolla Y=heq(X); Kuvan X histogrammin voi laskea komennolla H=hist(double(X(:)),:55); Vertaa lopuksi tulosta valmiin histeq-komennon tulokseen. Käytä kuvaa, jonka saat osoitteesta http://www.cs.tut.fi/kurssit/sgn-1/patsas.jpg. Saat ladattua kuvan Matlabiinimread-komennolla. 1.. Laske matriisin kaksiulotteinen Fourier-muunnos. 1 1 X = 1 1 1 1.3. (Matlab) Luo kahdesta taajuudesta koostuva keinotekoinen kuva muuttujaan X: n = :511; x1 = cos(.**pi*n); x = sin(.5**pi*n); X = x1 *x; Katso kuva imshow-komennolla. Laske sen kaksiulotteinen FFT (komento fft), ota tuloksesta itseisarvo ja muunna se desibeleiksi. Siirrä lopuksi nollataajuus kuvan keskelle komennollafftshift ja tulosta kuva ruudulle. Mitä näet? 1.4. (Matlab) Tutustutaan Matlabin valmiiseen dekonvoluutiofunktioon deconvblind. Funktio toteuttaa ns. sokean dekonvoluution, joka pyrkii arvioimaan häiriön aiheuttaneen suotimen impulssivasteen itse.

164 SIGNAALINKÄSITTELYN MENETELMÄT Lataa kuva http://www.cs.tut.fi/kurssit/sgn-11/blurred.jpg Matlabiin komennolla imread. Kuvassa on simuloitu kameran pystysuuntaista tärähdystä kuvanottohetkellä. Kokeile poistaa liike-epäterävyys kuvasta I komennoilla PSF = rand(3, 1); [J, P] = deconvblind(i, PSF, 3); Menetelmä etsii sopivaa impulssivastetta, jolla dekonvoluutio palauttaisi tiettyjen kriteerien mukaisen järkevän kuvan. Tuloksena saadaan sekä terävä kuva että impulssivaste. Menetelmä on iteratiivinen ja alustaa impulssivasteen satunnaiseksi 3 näytteen mittaiseksi pystysuoraksi viivaksi. Tulosta ruudulle tuloskuva J ja impulssivaste P. Tässä tapauksessa simuloitu impulssivaste oli todellisuudessa tarkalleen 3 näytteen mittainen pystysuora viiru. Menetelmä on herkkä alkuarvaukselle. Kokeile mitä tapahtuu, jos impulssivaste alustetaan pidemmäksi kuin se todellisuudessa on ollut: PSF = rand(4, 1);. Millainen on dekonvoluution tulos? Entä jos impulssivaste on näytteen mittainen? Entä jos impulssivaste on x neliö?

Luku 11 Oppivat järjestelmät Tässä kappaleessa tutustutaan ns. oppiviin järjestelmiin, joille opetetaan laskennallinen ongelma esimerkkien avulla. Yksi merkittävä osa tähän luokkaan kuuluvia järjestelmiä ovat ns. luokittelijat, joiden täytyy esimerkkien perusteella oppia luokittelemaan moniulotteinen data (x 1, x,..., x N R n ) äärelliseen määrään luokkia: y 1,y,...,y N {1,,...,M}. Oppivien järjestelmien sovelluskohteisiin signaalinkäsittelyssä kuuluvat mm. tekstintunnistus ja puheentunnistus. Näiden lisäksi menetelmiä käytetään esimerkiksi hakukoneissa, lääketieteellisessä diagnostiikassa sekä mm. sähköpostisuodattimissa. Kaikille näille järjestelmille on yhteistä, että ne oppivat luokittelun esimerkkien avulla: esimerkiksi tekstintunnistuksessa luokittelijalle näytetään kustakin kirjaimesta satoja tai tuhansia esimerkkejä, joiden perusteella opetusalgoritmi valitsee luokittelijalle sopivat parametrit. Esimerkiksi käsinkirjoitettujen merkkien tunnistuksessa yleisesti käytetty MNIST-tietokanta koostuu yhteensä noin 7 käsinkirjoitettua kirjainta esittävästä bittikartasta. Yleisesti käytettyihin luokittelumenetelmiin kuuluvat mm. Fisherin lineaarinen erottelija, tukivektorikone sekä hermoverkko. Menetelmiä tarkastellaan jatkossa esimerkin avulla, jossa alla olevan kuvan mukaisten kaksiulotteisten joukkojen (punaiset ristit ja vihreät ympyrät) avulla pitäisi oppia päättelysääntö uusien näytteiden luokittelemiseksi (kuten kuvan musta pallo). 8 6 Kumpaan luokkaan tämä näyte kuuluu? 4 x 4 5 5 1 x 1 Ensinäkemältä ongelma saattaa vaikuttaa helpolta, koska tässä kaksiulotteisessa tapauksessa kuka tahansa osaa piirtää kohtuullisen hyvän rajan joukkojen välille. Ongelmasta tulee kuitenkin haasteellisempi kun joukkojen dimensio kasvaa ja ne menevät osin

166 SIGNAALINKÄSITTELYN MENETELMÄT päällekkäin. Esimerkiksi edellä mainitun MNIST-tietokannan näytteet ovat pikselin kokoisia kuvia, joten avaruus on 4-ulotteinen. Tärkeitä käsitteitä luokittelussa sekä yleensäkin koneoppimisessa ovat opetusjoukko ja testijoukko. Opetusjoukkoa käytetään nimensä mukaisesti järjestelmän opetuksessa, mutta lopputuloksen toimivuutta arvioidaan erillisen testijoukon avulla. Todellisessa tilanteessahan luokittelija luokittelee enimmäkseen opetusjoukkoon kuulumattomia näytteitä, joten opetusjoukon luokitteluvirhe ei ole luotettava mittari. Esimerkiksi edellä mainittu MNISTtietokannan 7 merkkiä on jaettu 6:n opetusmerkkiin ja 1:n testikuvaan. 11.1 Lähimmän naapurin luokittelija Yksinkertainen ja helposti toteutettava ratkaisu luokitteluongelmaan on niin sanottu lähimmän naapurin luokittelija (engl. Nearest Neighbor Classifier; NN-classifier). Nimensä mukaisesti menetelmä etsii opetusaineistosta samankaltaisimman näytteen ja valitsee luokiteltavan pisteen luokan sen perusteella. Yleisempi versio tästä varsin intuitiivisesta luokittelijasta on ns. k-nn-luokittelija, joka etsii opetusdatasta k samankaltaisinta näytettä ja valitsee näiden joukosta yleisimmän luokan. Menetelmä ei siis vaadi erillistä opetusvaihetta, vaan se muistaa koko opetusmateriaalin sellaisenaan. Tämä on myös menetelmän suurin ongelma: uuden näytteen luokkaa pääteltäessä täytyy koko aineisto käydä läpi ja etsiä sieltä lähimpänä olevat. Lisäksi koko aineiston täytyy olla muistissa, mikä voi tulla ongelmaksi suurilla aineistoilla. Pienille opetusdatan määrille k-nn sen sijaan toimii yleensä yhtä hyvin kuin mikä tahansa muukin luokittelija, ja onkin usein käytetty helpohkoissa luokitteluongelmissa, joissa luokat erottuvat toisistaan selvästi. Alla olevassa kuvassa on piirretty k-nn-luokittelijan luokkarajat aiemmin esillä olleen kahden luokan testidatan tapauksessa. Vasemmanpuoleisessa kuvassa on 1-NN-luokittelijan tulos ja oikeanpuoleisessa 9-NN-luokittelijan tulos. Kuvasta nähdään, että suuremmilla parametrin k arvoilla menetelmästä tulee epäherkempi yksittäisille poikkeaville näytteille. Oikeanpuoleisessa kuvassa oikeanpuolimmaiset vihreät ympyrät eivät vaikuta luokkarajaan yhtä paljon, koska ne ovat melko irrallisia muista näytteistä ja näin ollen sattuman tulosta. 6 6 4 4 x x 4 4 6 4 4 6 8 1 x 1 6 4 4 6 8 1 x 1 Jos luokat ovat enemmän päällekkäin, tulee 1-NN-luokittelijan luokkarajasta melko rikkonainen. Alla on esimerkki tällaisesta tilanteesta. Vasemmalla olevassa 1-NN-luokitteli-

11. OPPIVAT JÄRJESTELMÄT 167 jan tuloksessa jokainen näytepiste vaikuttaa lopputulokseen, ja luokkaraja koostuu monesta irrallisesta osasta. Oikealla olevassa 9-NN-luokittelijan kuvassa luokkaraja on yhtenäinen ja luultavasti paremmin toimiva. 6 6 4 4 x x 4 4 4 4 6 8 1 1 x 1 4 4 6 8 1 1 x 1 Seuraavaksi tutustutaan monimutkaisempiin luokittelijoihin, joiden esitysmuoto on k- NN-luokittelijaa kompaktimpi. Kompakti esitys voi olla esimerkiksi funktio f(x), jonka arvo (esim. positiivinen vai negatiivinen) määrää näytteen x luokan. Tällöin luokan valinta on nopeampaa, mutta hyvän funktion f päättely vie enemmän aikaa. Tämä on yleensä toivottu toimintatapa, koska opetusvaihe ei ole reaaliaikainen eikä opetuksen kesto ole niin kriittinen tekijä kuin itse luokittelun. 11. Lineaarinen erottelija Fisherin lineaarinen erottelija eli lineaarinen diskriminantti (Linear Discriminant Analysis; LDA) on julkaistu jo vuonna 1936, mutta on edelleen yleisesti käytetty ratkaisu pääasiassa yksinkertaisuutensa vuoksi. Perusideana on ratkaista se suora, jolle projisoitu moniulotteinen data maksimoi luokkien välisen varianssin (eli vie luokat mahdollisimman kauas toisistaan). Ensimmäinen mieleen tuleva ratkaisu on vetää raja suunnilleen joukkojen puoliväliin. Kaksiulotteiselle datalle tämä voidaan määrittää käsinkin, mutta esim. sataulotteiselle datalle tarvitaan automaattinen menetelmä rajan (eli ns. päätöspinnan) määräämiseksi. Yksinkertaisin ratkaisu on piirtää jana joukkojen massakeskipisteiden välille, ja vetää (ortogonaalinen) päätöspinta niiden puoliväliin. Tämä ratkaisu on esitetty alla olevassa kuvassa.

168 SIGNAALINKÄSITTELYN MENETELMÄT 6 4 Päätöspinta Väärin luokittuvia pisteitä x 4 Massakeskipisteet 5 5 1 x 1 Tuloksesta nähdään, että ratkaisu ei ole paras mahdollinen, jos luokat ovat vähänkään limittäin. Nyt nimittäin vääriä päätöksiä jää valittiinpa rajan sijainti miten hyvänsä, jos suunta on kuvan mukainen. Parempi ratkaisu olisi suora, jolle projisoitaessa pistejoukot tulevat toisistaan erillisiksi yksiulotteisiksi joukoiksi. Esimerkiksi alla olevassa kuvassa on edellä olleet kaksi pisteparvea projisoitu eräälle tällaiselle suoralle. 1 8 6 4 x 4 6 4 4 6 8 1 1 x 1 Kuvion perusteella havaitaan, ettei erottelun kannalta ole väliä missä suora sijaitsee, ainoastaan sen suunnalla on merkitystä. Tämän vuoksi riittää tarkastella pelkästään suoran suunnan määrävää vektoria w. Pisteen x projektio vektorille w määritellään kaavalla proj w (x) = w x w w. Projisoidun pisteen sijainti suoralla määräytyy pistetulon w x perusteella, joten yksinkertaisuuden vuoksi riittää tarkastella pelkästään sitä. Suureen w x jakauma on esitetty alla olevassa kuvassa. 1 Muistin virkistämiseksi: pisteen projektio kuvaa sen lähimmäksi suoralla olevaksi pisteeksi.

11. OPPIVAT JÄRJESTELMÄT 169 Lukumäärä 3 5 15 1 5 3 5 15 1 5 5 1 15 w x Näyttäisi siis, että käytetty suora on hyvä valinta, ja esimerkiksi seuraava yksinkertainen algoritmi vaikuttaisi olevan hyvä luokittelija kyseiselle datalle: { vihreä ympyrä, jos w x 7.5, Pisteen x luokka = punainen risti, jos w x < 7.5. Kuinka vektori w sitten valitaan? Tässä yksinkertaisessa tapauksessa se onnistuu käsinkin, mutta 1-ulotteisten osin päällekkäin olevien luokkien tapauksessa automaattinen menetelmä on tarpeen. Fisher muotoili kysymyksen optimointiongelman muotoon: mikä on se vektori w, jolle projisoitaessa luokkien välinen varianssi maksimoituu suhteessa luokkien sisäiseen varianssiin. Kyseinen vektori saadaan ratkaistua kirjoittamalla Fisherin määritelmän mukaiset lausekkeet auki ja sieventämällä tulos. Melko suoraviivaisen matriisilaskennan avulla voidaan osoittaa että tämä suure saa muodon J(w) = luokkien välinen varianssi luokkien sisäinen varianssi = wt (µ 1 µ )(µ 1 µ ) T w, w T (C 1 + C )w missä µ 1 ja µ ovat luokkien keskipisteet ja C 1 ja C niiden otoskovarianssimatriisit. Etsimällä gradientin nollakohta voidaan osoittaa, että tämän lausekkeen maksimoiva vektori w on w = (C 1 + C ) 1 (µ 1 µ ). Edellä olleen esimerkin tapauksessa kovarianssimatriiseilla ja keskipisteillä on seuraavat arvot ( ) ( ) ( ) ( ).4775 1.371.666 1.7515.933 6.399 C 1 =, C 1.371 1.139 =, µ 1.7515.1657 1 =, µ.699 = 1.758 jolloin w = [ 3.477,.8695] T, joka on aiemmassa kuvassa olleen projektiosuoran suuntavektori. Huomaa, että kaikki samansuuntaiset (ja vastakkaissuuntaiset) vektorit kelpaavat yhtä lailla. Usein onkin tapana normalisoida vektori ykkösen mittaiseksi: w = w/ w. Näin saadun luokittelijan ohjelmallinen toteutus on äärimmäisen yksinkertainen. Uuden näytteen x = (x(1), x()) luokka päätellään laskemalla pistetulo x w = 3.477x(1)+.8695x() ja vertaamalla tulosta kynnysarvoon c (esim. edellä ollut raja c = 7.5). Todellisessa tilanteessa kynnyksen valinta "kuvasta katsomalla"on liian epätarkkaa, joten tähänkin tarvitaan automaattinen menetelmä. Paras tapa on valita c niin, että väärin menneiden opetusnäytteiden osuus on mahdollisimman pieni (esimerkin tapauksessa kaikki kynnykset väliltä c [ 8.967, 5.6639] tuottavat nollavirheen, joten ne kaikki kelpaisivat). Yksinkertaisempi tapa on valita kynnys joukkojen keskipisteiden puolivälistä (ks. harjoitus 11.3), jolloin saadaan arvo c = 5.7984. Huomaa, että kaavassa käytetään pistetulon kanssa yhtäpitävää matriisituloa w x = w T x.

17 SIGNAALINKÄSITTELYN MENETELMÄT Tällä kynnysarvolla saatava päätöspinta on alla olevassa kuvassa. Kuvasta nähdään menetelmän jakavan opetusjoukot kahtia täysin oikein. 8 Projektiosuora 6 4 x 4 Päätöspinta 5 5 1 x 1 Päätöspinnan lähellä on kuitenkin nyt kaksi vihreää pistettä, jotka luokittuvat juuri ja juuri oikein. Tätä ratkaisua turvallisemmalta tuntuisikin valinta, jossa marginaali päätöspinnan molemmin puolin olisi mahdollisimman suuri. Tähän ajatukseen perustuvat tukivektorikoneet, joita käsitellään seuraavaksi. 11.3 Tukivektorikoneet Tukivektorikone (engl. support vector machine (SVM)) kehitettiin alunperin 196-luvulla Moskovassa 3, mutta laajempi suosio syntyi vasta 199-luvun lopulla tehokkaiden laskentamenetelmien sekä kehittyneemmän teorian myötä. Menetelmän ideana on valita se päätöspinta, joka maksimoi luokkien väliin jäävän marginaalin (eli on mahdollisimman keskellä pisteparvien välissä). Esimerkiksi yllä ollut LDA:n päätöspinta on piirretty luokkien keskipisteiden puoliväliin, mutta se sattuu olemaan lähempänä vihreitä ympyröitä kuin punaisia ristejä. SVM piirtää päätöspinnan niin, että etäisyys molempien luokkien lähimpiin alkioihin on mahdollisimman suuri. Tukivektoreiden ja päätöspinnan ratkaisu on varsin matemaattinen ja tulee vastaan myöhemmillä kursseilla. SVM:stä on kuitenkin useita toteutuksia, joita voi käyttää vaikka algoritmin toiminta ei olisikaan täysin selvä 4. Optimiratkaisu on kuvattu alla olevassa kuvassa. Kuvan sininen katkoviiva kuvaa LDA:n päätöspintaa ja musta yhtenäinen viiva SVM:n päätöspintaa, joka lepää ns. tukivektoreiden varassa. Kaikkiin kolmeen tukivektoriin on nyt sama etäisyys (eli marginaali) ja tukivektorit on merkitty mustilla neliöillä. 3 V. Vapnik ja A. Lerner, "Pattern recognition using generalized portrait method," Automation and Remote Control, 1963. 4 Suosittuja toteutuksia ovat mm. LibSVM sekä Matlabin Bioinformatics-toolboxin toteutus.

11. OPPIVAT JÄRJESTELMÄT 171 8 6 LDA päätöspinta 4 x 4 Tukivektorit SVM päätöspinta 5 5 1 x 1 Tukivektorikoneet siis maksimoivat päätöspinnan ympärille jäävän marginaalin ja valitsevat tukivektorit sen mukaan. Tämä ominaisuus ei pääse täysin oikeuksiinsa lineaarisen päätöspinnan tapauksessa, koska LDA:n päätöspinta on usein melko lähellä SVM:n pintaa. Marginaalin maksimointi kuitenkin korostuu kun data on korkeampiulotteista, ja marginaalit tyypillisesti suuremmat. Tähän havaintoon perustuu SVM:n suosio ns. kernelitempun (engl. kernel trick) yhteydessä, joka esiteltiin jo vuonna 1964 käytettäväksi LDA:n kanssa. 5 Se ei kuitenkaan saavuttanut merkittävää suosiota, koska se ei toimi LDA:n kanssa erityisen hyvin. Kernelitempun idea on kuvata data korkeampiulotteiseen avaruuteen ns. kernelin eli ytimen avulla. Ytimeksi sopii mikä tahansa tietyt ehdot toteuttava funktio, ja tarkoituksena on että data olisi luokiteltavissa korkeammassa ulottuvuudessa lineaarisen päätöspinnan avulla. Ratkaisua kutsutaan tempuksi sen vuoksi, että sen toteuttamiseksi dataa ei tarvitse eksplisiittisesti siirtää korkeampaan ulottuvuuteen, vaan riittää pelkästään korvata kaikki algoritmin pistetulot sopivalla funktiolla. Menetelmää voidaan näin ollen käyttää kaikilla menetelmillä, jotka perustuvat vektoreiden pistetuloon (kuten mm. LDA ja SVM). Ytimiä ja sitä kautta erilaisia kuvauksia on olemassa lukuisia. Yksinkertaisimmat ytimet ovat ns. polynomiytimiä, jotka muodostetaan nostamalla pistetulo johonkin kokonaislukupotenssiin. Esimerkiksi toisen asteen polynomiydin vastaa normaalin pistetulon korvaamista sen toisella potenssilla: k(x i, x j ) = (x i x j ). Esimerkin tapauksessa data oli kaksiulotteista, joten vektoreiden x i = (x i (1), x i ()) ja x j = (x j (1), x j ()) pistetulo määritellään kaavalla x i x j = x i (1)x j (1)+x i ()x j (). 5 M. Aizerman, E. Braverman, and L. Rozonoer, "Theoretical foundations of the potential function method in pattern recognition learning". Automation and Remote Control, 1964.

17 SIGNAALINKÄSITTELYN MENETELMÄT Pistetulon toinen potenssi on näin ollen lauseke k(x i, x j ) = [ x i (1)x j (1)+x i ()x j () ] = [ x i (1)x j (1)+x i ()x j () ] [x i (1)x j (1)+x i ()x j () ] = x i(1)x j(1)+x i()x j()+x i (1)x j (1)x i ()x j () = x i(1)x j(1)+x i()x j()+( x i (1)x i ()) ( x j (1)x j ()) = (x i(1), x i(), x i (1)x i ()) T (x j(1), x j(), x j (1)x j ()) T Kernelitempun idea on siis hoksata, että tämäkin lauseke on eräs pistetulo kolmiulotteisessa avaruudessa. Kuten viimeisestä lausekkeesta nähdään, niin samaan tulokseen päästään kuvaamalla alkuperäinen -ulotteinen vektori x = (x(1), x()) kolmiulotteiseen avaruuteen kuvauksella ( ) x(1) x() x(1) x() x(1)x(). (11.1) Johtopäätöksenä voidaan siis todeta, että pistetulojen nostaminen toiseen potenssiin vastaa normaalia SVM:ää kolmiulotteisessa tapauksessa, jossa näytteet on saatu kaavalla 11.1. Alla oleva kuva esittää luokittelun tulosta. 8 6 4 x 4 5 5 1 x 1 Edellisessä tapauksessa sama luokittelija olisi voitu toteuttaa ilman kernelitemppuakin, yksinkertaisesti suunnittelemalla kolmiulotteinen SVM-luokittelija kuvauksen 11.1 jälkeiselle datalle. Eksplisiittinen kuvaus korkeampaan dimensioon ei kuitenkaan ole mahdollista, jos dimensio on kovin suuri. Tällainen tilanne syntyy esimerkiksi käytettäessä epähomogeenista polynomiydintä k(x i, x j ) = (x i x j +1) d, joka tuo mukaan kaikki enintään astetta d olevat monomit. Kuvaus 11.1 muuttuisi tässä tapauksessa muotoon x(1) x() ( ) x(1) x(1)x() x() x(1). (11.) x() 1

11. OPPIVAT JÄRJESTELMÄT 173 Jos nyt esimerkiksi alkuperäinen data olisikin viisiulotteista ja esim. d = 8, suoraan kuvaukseen tulisi kymmeniä termejä ja kernelitemppu alkaa vaikuttaa entistä houkuttelevammalta. Äärimmäisenä esimerkkinä kernelitempun mahdollisuuksista on yleisesti käytetty ns. RBF-ydin (radial basis function), joka vastaa kuvausta ääretönulotteiseen avaruuteen. RBFydin korvaa vektoreiden pistetulon x i x j funktiolla k(x i, x j ) = exp( γ x i x j ), missä parametri γ >. Voidaan osoittaa, että tämä temppu vastaa lineaarisen päätöspinnan hakua ääretönulotteisessa avaruudessa. Alla olevassa kuvassa on esimerkki päätöspinnasta RBF-ydintä käytettäessä tapauksessa γ = 1. 8 6 4 x 4 5 5 1 x 1 Vaikka edellä oletettiinkin, että luokat ovat eroteltavissa toisistaan lineaarisella päätöspinnalla (jotta marginaali olisi ylipäätään olemassa), ei käytännössä näin useinkaan ole. Tämän vuoksi SVM-algoritmi on yleistetty myös tilanteisiin joissa joukot menevät päällekkäin, ja kaikki järkevät toteutukset tukevat tätä. SVM on saavuttanut huomattavan suosion, mikä johtuu ensisijaisesti sen tavasta maksimoida luokittelumarginaali. Tämä nimittäin helpottaa opetusta ja saa luokittelijan toimimaan hyvin jo pienilläkin opetusjoukoilla. Muilla luokittelijoilla on nimittäin vaarana ns. ylioppiminen, josta on esimerkki hermoverkkojen yhteydessä. Yleisen käsityksen mukaan SVM ei ole yhtä herkkä opetusjoukon koolle kuin muut luokittelijat. 11.4 Logistinen Regressio Logistinen regressio on kolmas lineaarinen luokittelumenetelmä. Kaikilla kolmella on siis lineaarinen luokkaraja (eli esitettävissä muodossa w T x > b), mutta niiden opetusalgoritmit (ja siis tuloksena saatavat luokkarajat) ovat erilaiset. Logistisen regression erikoispiirre on sen tilastollinen luonne, eli tuloksena saadaan itse luokan lisäksi myös kunkin luokan todennäköisyys. Logistiseen regressioon saadaan liitettyä myös piirteenvalintaominaisuuksia, joiden avulla luokittelu osaa valita ennustuksen kannalta parhaan osajoukon kaikista piirteistä. Kahden luokan tapauksessa logistinen regressiomalli mallintaa toisen luokan todennä-

174 SIGNAALINKÄSITTELYN MENETELMÄT köisyyttä kaavalla: f(x) = 1 1+exp( w T x b), missä w on aineistosta opittu kerroinvektori, x luokiteltava näyte, b reaaliluku. Tuloksena saadaan siis yhden luokan todennäköisyys, ja kahden luokan tapauksessa toisen luokan todennäköisyys on tämän komplementti (1 f(x)). Todennäköisyys saadaan siis pistetulosta w T x kuvaamalla se niin sanotun logistisen funktion σ(x) = 1/(1 + exp( x)) läpi. Funktion kuvaaja on alla, ja sen roolina voidaan ajatella olevan rajata ulostulo todennäköisyydeksi nollan ja yhden välille. 1 Logistinen funktio.8.6.4. 5 4 3 1 1 3 4 5 Useamman kuin kahden luokan tapaus mallintaa luokan c {1,,...,C} todennäköisyyttä kaavalla exp(w T c P(c x) = x+b c) C k=1 exp(wt k x+b k), missä mallin parametrit w k andb k (k = 1,,...,C) opitaan opetusaineistosta. Luokittelutulos aiemmin esillä olleelle testidatalle on kuvattu alla. Kuten nähdään luokkaraja on hyvin samanlainen kuin kahdella aiemmalla lineaarisella luokittelijalla. Erona on nyt se, että jokaiselle pisteelle arvioidaan nyt myös todennäköisyys kuulua punaisiin rukseihin. Luokkaraja sijaitsee kohdassa, jossa molemmat luokat ovat yhtä todennäköisiä (eli P( + ) = P( ) =.5. 6 4 P( + ) pienenee x 4 P( + ) =.5 P( + ) kasvaa 6 4 4 6 8 1 x 1 11.5 Hermoverkot Hermoverkkojen historia on pitkä ja polveileva. Ensimmäiset ajatukset aivojen toiminnan mallintamisesta tietokoneella syntyivät hyvin pian ensimmäisten tietokoneiden kehittämisen jälkeen. Teollisesti käyttökelpoiseksi menetelmäksi hermoverkko kehittyi 198-

11. OPPIVAT JÄRJESTELMÄT 175 199-luvuilla, jonka voi katsoa olleen hermoverkkojen ensimmäinen nousukausi. Verkkojen suuren laskentatarpeen vuoksi tekniikka jäi kuitenkin vähemmälle huomiolle, kunnes ne kokivat uuden läpimurron 1-luvun alussa. Tuolloin GPU-korttien laskentateho oli kasvanut uuteen kertaluokkaan, ja niitä alettiin hyödyntää hermoverkkojen opetuksessa. Perusmuodossaan hermoverkon voidaan ajatella koostuvan peräkkäisistä ja rinnakkaisista toisiinsa kytketyistä logistisista regressio-luokittimista. Jokainen hermoverkon solmu on siis logistinen regressiomalli, ja sitä kutsutaan tässä yhteydessä neuroniksi. Neuroverkoista on olemassa myös variantteja, joissa solmu ei käytä logistisen regression logistista funktiota vaan jotain muuta funktiota sen sijaan. x (1) y (1) x () y () x (3) y ( K ) x ( M ) Yllä on kuva keinotekoisesta hermoverkosta. Hermoverkko koostuu kerroksista (layer), joiden jokaisesta neuronista on yhteys jokaiseen seuraavan kerroksen neuroniin. Jokainen neuroni suorittaa parametriensa määräämän laskentaoperaation ja välittää saamansa tiedon eteenpäin seuraavalle kerrokselle. Kuvassa vasemmalla on herätekerros (input layer), jonka solmut vain välittävät lukuarvot x(1), x(),..., x(m) hermoverkon ensimmäiselle kerrokselle. Ensimmäisen, toisen ja kolmannen (piilokerros, hidden layer) kerroksen solmut suorittavat eräitä laskuoperaatioita näille luvuille ja välittävät saamansa lukuarvot edelleen, kunnes ne lopulta saapuvat ulostulokerrokselle (output layer) oikealla. Neuronin rakenne on kuvattu alla. Kuviosta havaitaan, että rakenne on itse asiassa tuttu FIR-suotimesta: herätearvot x 1,x,...,x m kerrotaan painoilla w 1,w,...,w m ja saadut tulos summataan yhteen. Erona FIR-suotimeen on summauksen jälkeen tuleva epälineaarinen aktivaatiofunktio, joka simuloi luonnossa neuronien välittämää aktivaatiota (yksinkertaistettuna hermosolu välittää muille tiedon onko se aktivoitunut vai ei). Lisäksi summauksessa on aina mukana vakiotermi b. w x 1 w 1 x w x 3 w 3 Aktivaatio funktio y k x m w m

176 SIGNAALINKÄSITTELYN MENETELMÄT Yksittäisen neuronin toimintaa voidaan siis kuvata kaavalla ( ) m y k = ψ b+ w k x k, missä ψ( ) on aktivaatiofunktio. Useimmiten aktivaatiofunktiona käytetään jotain S-kirjaimen muotoista, ns. sigmoidifunktiota. Tällainen funktio on esimerkiksi hyperbolinen tangentti ja logistinen funktio: k=1 tanh(x) = ex e x e x +e x ψ(x) = 1 1+e ax, missä parametri a määrää kuinka jyrkästi funktio nousee origon lähellä. Jatkossa keskitymme näistä funktioista jälkimmäiseen. Logistisen funktion kuva kolmella eri kertoimen a arvolla on alla. 1.8.6 a =.5 a = 1..4. a =. 5 4 3 1 1 3 4 5 Kertoimen a kasvaessa funktio lähestyy jatkuvaa askelfunktiota {, kun x <, u(x) = 1, kun x. Näin ollen aktivaatiofunktio päättää aktivoituuko neuroni vai ei, eli onko neuroniin tulevien ärsykkeiden määrä riittävän suuri. Toisin sanoen, toteuttaako herätteiden painotettu summa ehdon: m w k x k b. k=1 Tämä tulkinta tulee erityisen hyvin selville äärimmäisessä tapauksessa a, jossa aktivaatiofunktiosta tulee askelfunktio ja neuronin toiminta saa yksinkertaisen muodon: {, kun m k=1 y k = w kx k < b, 1, kun m k=1 w kx k b. Neuroni siis aktivoituu, jos siihen kohdistuu riittävästi ärsykkeitä edellisen tason neuroneilta. Edelleen, kukin neuroni välittää tiedon aktivoitumisestaan seuraavan tason neuroneille ja vaikuttaa omalta osaltaan niiden aktivoitumiseen.

11. OPPIVAT JÄRJESTELMÄT 177 Koska hermoverkko koostuu suuresta määrästä yksinkertaisia laskentayksiköitä, on hermoverkon parametrien määrä yleensä hyvin suuri. Jos hermoverkossa on esimerkiksi kolme piilokerrosta (kuten sivun 175 kuvassa), ja eri kerroksilla on solmuja1,1,1 ja 3 kappaletta, saadaan parametrien kokonaismääräksi huikeat 11 1+11 1+11 3 = 33 kerrointa. Tällaista kerroinmäärää varten tarvitaan luonnollisesti automaattinen laskentamenetelmä. Yleisimmin käytetty painojen laskentamenetelmä on englanninkieliseltä nimeltään backpropagation algorithm, josta käytetään joskus suomenkielistä käännöstä takaisinlevitysmenetelmä. Menetelmän juuret ovat LMS-algoritmissa, ja tässäkin tapauksessa virhefunktion minimi haetaan korjaamalla painoja gradientin minimin suuntaan. Hermoverkkojen opetus on erillinen prosessi, joka tapahtuu ennen kuin verkkoa aletaan käyttää tuotantokäytössä. Tällaisesta opetuksesta käytetään nimitystä off-line -oppiminen vastakohtana esimerkiksi LMS-algoritmin on-line -oppimiseen, missä painot muuttuvat suodatuksen mittaan. Yleensä off-line -oppimiseen käytetään runsaasti aikaa; tavallinen hermoverkon opetus voi viedä tunteja tai jopa vuorokausia prosessoriaikaa. Opetukseen kuluva aika ei kuitenkaan ole ongelma: järjestelmän muuhun kehitystyöhön verrattuna aika on häviävän pieni, ja opetus voidaan tehdä esimerkiksi yöllä tai viikonloppuna. Aiemmin esillä olleen kaksiulotteisen datan luokittelu voidaan tehdä alla olevan kuvan mukaisella verkolla. Herätteenään verkko saa kaksi lukua, koordinaatit x 1 ja x, jotka syötetään keskellä olevalle piilokerrokselle. Näiden solmujen laskennan tulokset syötetään edelleen ulostulokerroksen kahdelle solmulle, jotka kertovat kumpaan luokkaan näyte kuuluu: tavoitteena on nyt opettaa verkko niin, että luokan 1 näytteen tapauksessa y(1) > y() ja luokan tapauksessa y() > y(1). 6 x (1) y (1) x () y () Opetusta varten tarvitaan opetusjoukko, jossa on valmiiksi luokiteltuja esimerkkejä. Edellisen esimerkin tapauksessa verkolle näytetään kaksiulotteisia näytteitä ja sen ulostuloa verrataan haluttuihin ulostuloarvoihin. Esimerkiksi vihreän tähden tapauksessa halutut ulostulot voisivat olla d(1) =.9 d() =.1 6 Toinen vaihtoehto verkon rakenteeksi olisi käyttää vain yhtä ulostulosolmua, jonka arvo olisi suuri luokan näytteille ja pieni luokan 1 näytteille. Esimerkin kahden ulostulossolmun rakenne toimii kuitenkin myös kun luokkia on enemmän kuin kaksi.

178 SIGNAALINKÄSITTELYN MENETELMÄT ja punaisen ristin tapauksessa d(1) =.1 d() =.9. Halutuksi ulostuloksi ei kannata valita vektoria (1, ), koska sigmoidi saavuttaa ääriarvot ja 1 vasta kun summa on ±. Käytännössä tämä ilmenisi siten, ettei verkko oppisi luokittelua kunnolla. Halutun ulostulon d(n) määräämisen jälkeen voidaan laskea verkon virhe jokaiselle opetusjoukon näytettä vastaavalle ulostulolle y(n) kaavalla e(n) = d(n) y(n), kaikille n = 1,,...,K. Itse virhefunktio on tavallisesti puolet virhevektorin neliösummasta: E = 1 K k=1 e (n). Virhefunktio E riippuu jokaisesta verkon painosta, ja on mahdollista johtaa kaavat funktion osittaisderivaatoille kunkin painon suhteen: E w jk, missä w jk tarkoittaa kerroksen j painoa k. 7. Kun virhe on laskettu, voidaan verkon kaikkia painoja päivittää negatiivisen gradientin suuntaan (eli sinne mihin virhe pienenee). Päivitys tehdään oikealta vasemmalle, eli lähempänä ulostuloa olevat painot päivitetään ensin taso kerrallaan. Myöhäisempien tasojen painokertoimet vaikuttavat nimittäin aikaisempien tasojen osittaisderivaattoihin, joten päivityksen täytyy alkaa ulostulon suunnasta. Painojen päivitys voidaan tehdä jokaisen esimerkin esittämisen jälkeen tai vasta kun kaikki opetusjoukossa olevat näytteet on ajettu verkon läpi. Hermoverkon opetuksen tulos riippuu näytteiden esitysjärjestyksestä, joka on useimmissa toteutuksissa satunnainen. Näin ollen kahta samanlaista hermoverkkoa ei käytännössä voi saada peräkkäisillä opetuskerroilla. Tämä tulee hyvin ilmi alla olevista kolmella peräkkäisellä opetuskerralla saatavista päätöspinnoista aiemmin esillä olleessa kaksiulotteisessa tapauksessa. Esimerkin tapauksessa piilokerroksella on 1 solmua. 8 8 8 6 6 6 4 4 4 x x x 4 4 4 5 5 1 x 1 5 5 1 x 1 5 5 1 x 1 Edellä olleet menetelmät muodostivat varsin erilaisia päätöspintoja. Yksinkertaisimmillaan päätöspinta on suora ja monimutkaisimmillaan se voi mutkitella hyvinkin paljon. Mitä monimutkaisempi luokittelija on, sitä monimutkaisempia alueita se kykenee erottelemaan toisistaan. Tällöin on kuitenkin pidettävä mielessä ylioppimisen vaara. 7 Kaavat löytyvät esimerkiksi kirjasta: Haykin, Simon: Neural networks: a comprehensive foundation, Prentice Hall, 1999.

11. OPPIVAT JÄRJESTELMÄT 179 Alla oleva esimerkki havainnollistaa ylioppimista. Tässä tapauksessa luokat ovat lähempänä toisiaan ja menevät osin päällekkäin. Vasemmalla on LDA-luokittelijan päätöspinta ja oikealla on hermoverkon päätöspinta. Hermoverkko on tässä tapauksessa valittu tarkoituksella melko monimutkaiseksi, eli siinä on kaksi kahdenkymmenen solmun piilokerrosta peräkkäin. Kuvista nähdään, että hermoverkko oppii luokittelemaan opetusjoukon täydellisesti: monimutkainen päätöspinta jakaa kaikki vihreät ja punaiset näytteet omille puolilleen. 6 6 4 4 x x 4 4 6 6 4 4 6 8 1 4 4 6 8 1 x 1 x 1 Suora päätöspinta toimii kuitenkin uudelle datalle tässä tapauksessa paremmin kuin hermoverkon monimutkaisempi käyrä. Päätöspinta tekee koukkaukset muutaman sattumalta mukaan tulleen poikkeuksellisen näytteen vuoksi, joita tuskin kannattaisi ottaa huomioon; seuraavassa näytteessä näitä näytteitä tuskin on ainakaan samoilla kohdilla. 11.6 Esimerkki: merkkien luokittelu Tarkastellaan hermoverkon opetusta esimerkkitapauksessa, jossa hermoverkko tunnistaa bittikarttamuodossa olevia kirjaimia ja numeroita. Verkon rakenne tässä tapauksessa voi olla esimerkiksi alla olevan kuvan mukainen. x (1) y (1) x () y () x (3) x (1) y ( 34) Kuvassa verkon herätteiden lukumääräksi on valittu 1, mikä vaatii kaikkien luokiteltavien kirjainten skaalaamisen 1 1-kokoon. Mikä tahansa muukin määrä on mahdollinen, mutta hyvin suuri herätteiden määrä tuottaa jo laskennallisiakin ongelmia. Verkolla

18 SIGNAALINKÄSITTELYN MENETELMÄT on 34 ulostuloa, mikä vastaa englannin kielen kirjainten ja numeroiden lukumäärää ( 1 ja I sekä ja O tulkitaan samoiksi luokiksi). Ulostulon lukuarvot voidaan tulkita varmuudeksi siitä kuuluuko kirjain luokkaan 1,, 3,..., 34. Jos esimerkiksi y(1) on suuri ja muut ulostulot pieniä, tarkoittaa tämä merkin olevan. Ulostulo y() vastaa merkkiä 1, y(11) vastaa merkkiä A,y(1) merkkiä B ja y(34) merkkiä Z. Opetusjoukon lisäksi on hyvä olla pienempi testijoukko, jonka avulla hermoverkon tehokkuutta arvioidaan. Testijoukko koostuu samanlaisista näytteistä kuin opetusjoukkokin, ja käytännössä se saadaan jakamalla opetusjoukko satunnaisesti kahtia esimerkiksi suhteessa 1:9. Opetuksen edetessä testijoukkokin luokitellaan säännöllisin väliajoin senhetkisellä hermoverkolla. Luokittelutuloksen virhe lasketaan ja näin saadaan arvio siitä, kuinka hyvin verkko osaa luokitella sellaiset näytteet, joita ei ole käytetty opetuksessa. Tällaisessa tilanteessahan verkkoa tullaan todellisuudessa käyttämään. Testijoukkoa käyttämällä voidaan välttää hermoverkon ylioppiminen, joka ilmenee erityisesti pienillä opetusjoukoilla. Tällöin nimittäin hermoverkko alkaa oppia opetusjoukon epäolennnaisia piirteitä, joita ei ole joukon ulkopuolisilla näytteillä. Alla olevassa kuvassa on tyypillinen virhekäyrä ylioppimistapauksessa. Tässä esimerkissä hermoverkko opetettiin luokittelemaan 1 1 pikselin kokoisia bittikarttoja kirjaimiksi. Opetusjoukossa oli 5 ja testijoukossa 1 etukäteen käsin luokiteltua kirjainta. 1 1 1 Hermoverkon opetus 5 näytteellä Testijoukon virhe Opetusjoukon virhe Neliövirhe 1 1 3 1 4 5 1 15 5 3 35 4 45 5 Kierros Kuvassa alempi käyrä esittää opetusjoukon näytteiden luokitteluvirhettä. Koska hermoverkon kertoimia muutetaan aina negatiivisen gradientin suuntaan, pienenee opetusjoukon virhe kierros kierrokselta. Ylempi käyrä esittää testijoukon näytteiden luokitteluvirhettä. Koska näitä näytteitä ei käytetä opetuksessa, luokitteluvirhe ei laskekaan monotonisesti, vaan voi jopa kasvaa ajoittain. Tällöin opetusjoukko on liian pieni tai huonosti valittu, koska opetusjoukon ja testijoukon virheet käyttäytyvät eri tavalla. Tällaisessa tapauksessa verkko oppii opetusjoukon liian hyvin, ja alkaa käyttää hyväkseen piirteitä, joita ei välttämättä ole opetusjoukon ulkopuolella. Verkko ei toimi testijoukossa läheskään yhtä hyvin kuin opetusjoukossa, ja virhe jää melko suureksi vaikka opetusta jatketaan. Usein testijoukon virhe alkaa vieläpä uudelleen kasvaa, kun ylioppiminen etenee riittävän pahaksi. Ylioppimiselta voidaan välttyä käyttämällä suurempaa ja edustavampaa opetusjoukkoa. Jos tämä ei ole mahdollista, paras vaihtoehto on keskeyttää opetus ennen kuin verkko on liian ylioppinut. Seuraavassa kuvassa on sama testi tapauksessa, jossa opetusjoukon ja koko on kasvatettu moninkertaisiksi: opetusjoukossa on nyt 1 näytettä ja testijoukossa samat 1 näytettä kuin aikaisemminkin. Tässä tapauksessa ylioppiminen on vähäisempää, mutta joukkojen käyrien välillä on edelleen selvä ero.

11. OPPIVAT JÄRJESTELMÄT 181 1 1 1 Hermoverkon opetus 1 näytteellä Testijoukon virhe Opetusjoukon virhe Neliövirhe 1 1 3 1 4 5 1 15 5 3 35 4 45 5 Kierros Kasvattamalla opetusjoukkoa edelleen ero opetusjoukon ja testijoukon välillä pienenee. Alla olevassa kuvassa on käytetty 5 näytteen opetusjoukkoa ja samaa testijoukkoa kuin aikaisemminkin. Ero käyrien välillä on aiempaa pienempi ja käyrät ovat hyvin lähellä toisiaan. Opetusjoukon virhe jää myös suuremmaksi kuin edellisessä tapauksessa, koska verkko ei opi luokittelua helpottavia vain opetusjoukossa olevia epäolennaisia piirteitä. 1 1 1 Hermoverkon opetus 5 näytteellä Testijoukon virhe Opetusjoukon virhe Neliövirhe 1 1 3 1 4 5 1 15 5 3 35 4 45 5 Kierros Neljännessä testissä opetusjoukon kokoa kasvatettiin 1:n näytteeseen. Tulos on alla ja se on melko samanlainen kuin puolta pienemmällä opetusjoukolla. Testijoukon virhe kuitenkin pienenee edelleen. 1 1 1 Hermoverkon opetus 1 näytteellä Testijoukon virhe Opetusjoukon virhe Neliövirhe 1 1 3 1 4 5 1 15 5 3 35 4 45 5 Kierros Esimerkki opetetun hermoverkon ulostulovektorista on alla olevassa kuvassa oikealla Tässä tapauksessa sisään meni vasemmalla oleva bittikartta, joka tunnistettiin oikein kolmanteen (merkkiä Y vastaavaan) luokkaan. 1.8 Verkon ulostulo.6.4. 1 3 4 5 6 7 8 9 A B C D E F G H J K L M N P Q R S T U V W X Y Z

18 SIGNAALINKÄSITTELYN MENETELMÄT Toisena esimerkkinä on numero 3, joka on alla olevassa kuvassa vasemmalla. Oikealla on ulostulovektori, josta näkyy selvästi verkon oppineen luokittelun erinomaisesti myös näillä opetusjoukon ulkopuolisilla näytteillä. 1.8.6.4. 1 3 4 5 6 7 8 9 A B C D E F G H J K L M N P Q R S T U V W X Y Z Harjoitustehtäviä 11.1. (Matlab) Toteutetaan tässä tehtävässä lineaarinen erottelija kaksiulotteiselle keinotekoiselle datalle. Tehtävässä 11.5 sovelletaan menetelmää kuvankäsittelyyn. Lataa kurssin sivuilta tiedosto http://www.cs.tut.fi/kurssit/sgn-151/testdata_fisher.mat Tiedosto sisältää kaksi kaksiulotteista dataa sisältävää matriisia, joista kumpikin esittää yhtä luokkaa. Lataa tiedosto komennolla load testdata_fisher.mat jonka jälkeen Matlabissa on kaksi uutta muuttujaa: X1 R 1 sisältää 1 kaksiulotteista datapistettä luokan 1 alkioita ja X R 1 saman määrän luokan alkioita. Molempien ensimmäinen sarake sisältää alkioiden x-koordinaatit ja toinen sarake y-koordinaatit. Tulosta samaan kuvaan matriisin X1 pisteet punaisilla palloilla ja matriisin X pisteet vihreillä risteillä olevan kuvan mukaisesti. 3 1 1 3 4 4 3 1 1 3 4 5

11. OPPIVAT JÄRJESTELMÄT 183 11.. (Matlab) Edellisen tehtävän kaksi luokkaa on tarkoitus nyt luokitella Fisherin diskriminantin avulla. Kyseinen menetelmä projisoi kaksiulotteisen datan sille suoralle, jossa joukot erottuvat toisistaan mahdollisimman hyvin. Tämän jälkeen ne on helppo erotella jakamalla vain suora kahteen osaan sopivasti. Paras mahdollinen suora määritellään vektorina seuraavasti: w = (C 1 + C ) 1 (µ 1 µ ) missä C 1 ja C ovat luokkien -kokoiset kovarianssimatriisit jaµ 1 jaµ ovat luokkien keskipisteet 1-vektoreina. Laske vektori w. Kovarianssi saadaan funktiolla cov ja keskipiste funktiolla mean. Piirrä vektori ruudulle komennolla line. Komento hold on ennen piirtokomentoa pitää edellisen tehtävän kuvan mukana vertailun vuoksi. Anna myös komentoaxis equal, jotta koordinaatistosta tulisi neliö ja vertailusta helpompaa. 11.3. (Matlab) Jatkoa edelliseen tehtävään. Projektiosuoran suunnan lisäksi tarvitaan kohta, johon luokkien välinen raja vedetään. Yksinkertaisin tapa on sijoittaa se luokkien massakeskipisteiden puoliväliin. Käytännössä tämä tapahtuu projisoimalla data suoralle ja vertaamalla tulosta kynnysarvoon c R: { Näyte x kuuluu luokkaan 1, jos w x < c Näyte x kuuluu luokkaan, jos w x c Laske kynnysarvo c seuraavasti: Laske mille arvolle µ 1 projisoituu. Laske mille arvolle µ projisoituu. Luku c on näiden keskiarvo. 11.4. (Matlab) Laske montako prosenttia näytteistä saatiin luokiteltua oikein tehtävän 11. suuntavektorilla w ja tehtävän 11.3 kynnyksellä. 8 11.5. (Matlab) Sovelletaan Fisherin diskriminanttia todellisen datan käsittelyyn. Lataa kurssin sivulta tiedosto http://www.cs.tut.fi/kurssit/sgn-151/canoe.jpg Lataa se Matlabiin ja katso kuva: imorig = imread( canoe.jpg ); imshow (imorig, []); 8 Huomaa, että tositilanteessa virhe täytyisi arvioida muulla kuin opetusdatalla. Nythän esim. 1-NNluokittelija saa täydellisen tuloksen testattaessa samalla datalla kuin opetuksessa, mikä ei silti tarkoita että se olisi hyvä millekään muulle näytejoukolle.

184 SIGNAALINKÄSITTELYN MENETELMÄT Kuvan kanootti on hyvin selkeästi erottuva punaisen värinsä vuoksi. Projisoidaan se Fisherin diskriminantilla sopivasti, jotta punainen erottuu muista väreistä mahdollisimman hyvin. Tätä varten tarvitaan opetusjoukko, joka saadaan kuvasta osoittamalla. Komento[x,y] = ginput(1); palauttaa kuvasta hiirellä osoitetun pisteen koordinaatit. Tee tämä kaksi kertaa niin että saat kaksi opetusjoukkoa: toisen kanootin alueelta ja toisen esimerkiksi veden pinnasta. Olkoot näin saadut koordinaatit vektoreissa x1, y1 ja x, y. Irrota näin saatujen pisteiden ympäriltä 7 7-neliö, joiden pisteet muodostavat kaksi opetusluokkaa: window1 = imorig(y1-3:y1+3, x1-3:x1+3,:); window = imorig(y-3:y+3, x-3:x+3,:); Huomaa, että data on nyt kolmiuloitteista: väri-informaatio esitetään RGB-arvoina, jonka dimensio on 3. Jotta tämä saataisiin Fisherin diskriminantin vaatimaan3 49- matriisimuotoon, anna seuraavat komennot: X1 = double(reshape(window1, 49, 3)) ; X = double(reshape(window, 49, 3)) ; 11.6. (Matlab) Käytä tehtävän 8. ohjelmakoodia saadaksesi kolmiulotteisen vektorin, joka kuvaa parasta projektiota annetun kahden värin optimaaliseksi erotteluksi. Mikä kyseinen vektori on? 11.7. (Matlab) Itse projektio tehdään kertomalla vektorin w komponenteilla kuvan R, G ja B -komponentit, esim. näin: imgray = w(1)*double(imorig(:,:,1)) +... w()*double(imorig(:,:,)) +... w(3)*double(imorig(:,:,3)); Katso tuloskuva. Osoittamasi punaisen alueen pitäisi hohtaa kirkkaan valkoisena ja jälkimmäisenä osoitetun alueen miltei mustana. Yritä erottaa punainen alue muista kynnystämällä tiettyä arvoa suuremmat arvot valkoisiksi ja muut mustiksi. Matlabissa on komento imshow(imgray > kynnys, []); Komennossa oleva parametri kynnys on raja, jota vaaleammat pisteet tulevat valkoisiksi ja muut mustiksi. Saatko kanootin irrotettua taustastaan?

11. OPPIVAT JÄRJESTELMÄT 185 11.8. Suunniteltaessa lineaarista luokittelijaa kaksiulotteiselle datalle saadaan opetusdatasta kahden luokan kovarianssimatriiseiksi ja keskiarvoiksi seuraavat: C 1 = µ 1 = ( ) ( ).1 3 C.1.4 = ( ) ( ) 1 7 µ 1 = Laske projektiosuoran määräävä vektori w. Älä käännä matriisia koneella, vaan käsin muistisäännöllä ( ) 1 ( ) a b 1 d b =. c d ad bc c a 11.9. Jatkoa edelliseen tehtävään. Projektiosuoran suunnan lisäksi tarvitaan kohta, johon luokkien välinen raja vedetään. Yksinkertaisin tapa on sijoittaa se luokkien massakeskipisteiden puoliväliin. Käytännössä tämä tapahtuu projisoimalla data suoralle ja vertaamalla tulosta kynnysarvoon c R: { Näyte x kuuluu luokkaan A, jos w x < c Laske kynnysarvo c seuraavasti: Laske mille arvolle µ 1 projisoituu. Laske mille arvolle µ projisoituu. Luku c on näiden keskiarvo. Näyte x kuuluu luokkaan B, jos w x c 11.1. (Matlab) Kokeillaan tukivektorikoneen toimintaa luokittelussa. Lataa kurssin sivuilta tiedosto http://www.cs.tut.fi/kurssit/sgn-151/testdata_svm.mat Kuten tehtävässä 11.1, tiedosto sisältää kaksi kaksiulotteista dataa sisältävää matriisia, joista kumpikin esittää yhtä luokkaa. Lataa tiedosto komennolla load testdata_svm.mat jonka jälkeen Matlabissa on kolme uutta muuttujaa: X1 R sisältää kaksiulotteista datapistettä luokan 1 alkioita jax R saman määrän luokan alkioita. Tulosta pisteet ruudulle eri väreillä kuten tehtävässä 11.1. SVM-luokittelijan opetus tapahtuu Matlabin Bioinformatics-toolboxin komennolla svmtrain. Funktiota varten data täytyy muokata seuraavasti: training = [X1, X] ; classes = [ones(length(x1), 1); zeros(length(x), 1)];

186 SIGNAALINKÄSITTELYN MENETELMÄT Tämän jälkeen SVM-luokittelija opetetaan komennolla svmstruct = svmtrain(training, classes, showplot, true); SVM-luokittelun tulos saadaan komennolla result = svmclassify(svmstruct, training); Nyt siis muuttujassa classes on todelliset luokat ja muuttujassa result SVM:n ennustamat luokat. Laske montako prosenttia opetusnäytteistä meni oikein. 11.11. (Matlab) Funktiollesvmtrain voi määritellä eri kerneleitä seuraavasti: svmstruct = svmtrain(training, classes,... showplot, true,... kernel_function, linear ); Viimeinen termi on oletuksena linear, mutta muita vaihtoehtoja ovat mm. quadratic : Neliöity kerneli polynomial : Polynomikerneli rbf : RBF-kerneli Kokeile näitä kolmea kerneliä edellisen tehtävän tapaukseen ja laske montako prosenttia opetusnäytteistä menee oikein kussakin tapauksessa. Toisinaan SVM-opetus ei konvergoi riittävän nopeasti ja svmtrain antaa ilmoituksen Unable to solve the optimization problem... Tämä korjautuu yleensä lisäämällä iteraatioiden määrää, mikä voidaan tehdä muuttujalla quadprog_opts. Tällöin loitsu on koko komeudessaan esim. muotoa svmstruct = svmtrain(training, classes,... showplot, true,... kernel_function, linear,... quadprog_opts, optimset( MaxIter, 1));

Luku 1 Audiodatan kompressio Tässä kappaleessa esitetään tärkeimmät periaatteet digitaalisen audion pakkaamisessa. Erityisesti tarkastellaan huomattavan suosion saanutta MPEG-standardin äänikoodauksen osuutta. Kyseinen äänikoodauksen standardi jaetaan kolmeen tasoon (layer) niiden kompressiotehon mukaan. Taso 1 tuottaa huonoimman kompressiosuhteen, mutta on yksinkertaisin toteuttaa ja tehovaatimukset ovat pienimmät. Jos laitteistotehoa riittää eikä reaaliaikainen pakkaaminen ole välttämätöntä, voidaan käyttää korkeampia tasoja. Suurempi kompressioteho vaatii suunnittelijoilta enemmän paneutumista enkooderin ohjelmointiin (enemmän ohjelmakoodia) sekä laitteistolta enemmän laskentatehoa. Standardin määrittelyn mukaan ensimmäisen tason on määrä tuottaa suunnilleen CD-tasoinen ääni käyttäen 384 kilobittiä sekuntia kohti. Tasoille ja 3 tämä bittimäärä on 19 kb/s ja 18 kb/s. Äänen laatu mitataan kuuntelutesteissä, ja tulos on CD-tasoinen, jos kuuntelijoiden havaitsema ero alkuperäisen ja pakatun version välillä ei ole tilastollisesti merkittävä. Konetehon kasvaessa käytännön standardiksi useissa sovelluksissa on muodostunut taso 3 sen alhaisemman bittimäärän vuoksi. Reaaliaikaiset sovellukset käyttävät alempaa tasoa; esimerkiksi digitaaliradio (DAB) perustuu tasoon. 1.1 Kuulokäyrä Kuuntelutesteissä on havaittu ihmisen kuuloaistin herkkyyden noudattavan suunnilleen seuraavien kuvien mukaista kuulokäyrää. 1 1 1 1 Äänenvoimakkuus (db) 8 6 4 Äänenvoimakkuus (db) 8 6 4 1 1 1 1 3 1 4 Taajuus (Hz)..4.6.8 1 1. 1.4 1.6 1.8 Taajuus (Hz) x 1 4

188 SIGNAALINKÄSITTELYN MENETELMÄT Vasemmanpuoleinen kuva esittää kuulokäyrää logaritmisella asteikolla. Oikeanpuoleisessa kuvassa sama käyrä on esitettynä lineaarisella asteikolla. Logaritminen asteikko on yleisemmin käytetty, koska se kykenee kuvaamaan kuuloaistin toimintaa havainnollisemmin. Kuvien pystyakseli esittää pienintä havaittua äänenpainetta kullakin taajuudella. Esimerkiksi puhdas sinisignaali taajuudella 5 Hz on mahdollista kuulla, jos sen äänenpäine on vähintään 5 db. Käyrän alapuolelle jääviä taajuus-äänenvoimakkuus-yhdistelmiä ei ihmiskorva kuule. Pystyakselilla on desibeleissä ilmaistu äänenvoimakkuus. Äänenvoimakkuudet ilmaistaan suhteessa pienimpään kuultavissa olevaan ääneen, jonka voimakkuus on näin ollen db (n. 1-3 khz taajuudella, vaihtelee lähteen mukaan). Toisinaan käytetään merkintää "db SPL", jossa SPL on lyhenne sanoista sound pressure level. Nimi viittaa äänenpainetasoon ja sitä kautta äänen intensiteettiin, jonka yksikkö on W/m. Nolla desibeliä määritellään intensiteetiksi 1 1 W/m. Näin ollen esimerkiksi lukeman 5 db tarkoittama intensiteetti saadaan yhtälöstä x 1 log 1 = 5, 1 1 eli x = 1 7 W/m. Kuulokäyrää hyväksi käyttämällä voitaisiin jo säästää bittejä jättämällä kaikki sen alle jäävät äänet tallentamatta. Alla oleva kuva vertaa erään näytesignaalin taajuuskomponentteja kuulokynnykseen. Kuviosta nähdään, että hyvin pienet ja hyvin suuret taajuudet jäävät kuulokynnyksen alapuolelle ja voidaan näin ollen esimerkiksi suodattaa pois signaalista. Suodatuksen tuloksena on yksinkertaisempi signaali, mikä näkyy entropian pienenemisenä. Todellisuudessa tilanne ei ole aivan näin yksinkertainen, sillä kuulokynnystä kuvaava käyrä pätee puhtaille siniäänille, joilla on siis vain yksi taajuuskomponentti. Esimerkin puhesignaalin taajuussisältö on monimutkaisempi, jolloin jotain saattaa jäädä kuuluviin. Lisäksi käyrän alle jäävät komponentit tulevat esiin, jos käyttäjällä on mahdollista kontrolloida äänenvoimakkuutta. Näin ollen on tarkasteltava samanaikaisten äänten yhteisvaikutusta kuulohavaintoon. 1 1 Äänenvoimakkuus (db) 8 6 4 1 1.5.5 3 3.5 4 Taajuuden (Hz) 1 kantainen logaritmi

1. AUDIODATAN KOMPRESSIO 189 1. Peittoilmiö Koodauksen kannalta kuulokynnystä hyödyllisempi kuuloaistin ominaisuus on peittoilmiö (maskeeraus, masking effect). Tuomainen 1 määrittelee peittoilmiön toisen signaalin (maskeeraajan, maskin) aiheuttamaksi häirinnäksi kohdesignaalin havaitsemisessa. Maskaajasignaali on siis voimakkaampi ääni, joka peittää heikomman äänen alleen. Käytännössä tämä ilmenee esimerkiksi siten, että kovaäänisen musiikin (maski) soidessa normaali puhe (kohdesignaali) ei kuulu. Yleensä peittoilmiö jaetaan kahteen eri tyyppiin, samanaikaiseen ja ei-samanaikaiseen. Samanaikaisessa peittoilmiössä sekä maskaajasignaali että kohdesignaali kuullaan yhtäaikaa. Jos maskaajasignaali on kohdesignaalia voimakkaampi, kohdesignaali peittyy kuulumattomiin. Samalla peittyy osa maskaajasignaalia ympäröivistä taajuuksista oheisen kuvan mukaisesti. Kuvassa on esitetty yksi voimakas taajuuspiikki taajuudella 1.5 178 Hz. Tällöin kuulokynnys muuttuu siten, että korva ei kuule ympäröiviä taajuuksia kuulokynnyksen mukaisesti vaan huonommin. Nyt kaikki kuvan yhtenäisen viivan alle jäävät äänet (taajuusvoimakkuusyhdistelmät) jäävät kuulumattomiin. Älykäs koodausmenetelmä ymmärtää tällöin koodata kyseiset taajuudet pienemmällä tarkkuudella ja säästää näin bittejä. Yksittäisen äänen muodostama maskikuvio riippuu myös äänen luonteesta. Kohinatyyppiset ja laajakaistaiset äänet peittävät muita ääniä alleen tehokkaammin kuin säännölliset äänet. 1 1 Äänenvoimakkuus (db) 8 6 4 1 1.5.5 3 3.5 4 Taajuuden (Hz) 1 kantainen logaritmi Ei-samanaikainen peittoilmiö tarkoittaa sitä, että voimakas yksittäinen ääni peittää muita lähitaajuuksilla olevia ääniä myös jonkin aikaa sen jälkeen kun maskaajaääni itse on loppunut. Tämä johtunee siitä, että korva ei ehdi aivan heti palautua entiselleen eikä havaitse heikkoja lähitaajuuksien ääniä aivan täydellisesti. Ei-samanaikaisen peittoilmiön kesto on kymmenien tai satojen millisekuntien luokkaa. Esimerkiksi 8 ms =.8 s vastaa 44.1 khz:n näytteenottotaajuudella 358 näytettä. Näin ollen muutaman tuhannen seuraavan näytteen kyseiset taajuudet voidaan koodata pienemmällä tarkkuudella. Bittisäästö voi 1 J. Tuomainen, "Psykoakustiikka: akustiikan ja havainnon välinen suhde", teoksessa Revonsuo et al. (toim.), Mieli ja aivot: kognitiivinen neurotiede, Kognitiivisen neurotieteen tutkimusyksikkö, Turun yliopisto, Turku, 1996.

19 SIGNAALINKÄSITTELYN MENETELMÄT näin muodostua merkittäväksi. Ei-samanaikainen peittoilmiö ei kuitenkaan ole yhtä voimakasta kuin samanaikainen, eikä sen avulla voida näin ollen saavuttaa yhtä merkittäviä bittisäästöjä. Yllättävä havainto on, että ei-samanaikainen peittoilmiö toimii myös toiseen suuntaan. Tällöin voimakas maskaajaääni peittää lähitaajuudet myös ennen alkamistaan. Tuomainen viittaa selitysmalliin, jonka mukaan ilmiö johtuu lyhytaikaisen sensorisen muistin (ns. kaikumuistin) toiminnasta. Riippumatta syistä, ilmiötä on helppo hyödyntää ohjelmistotasolla samaan tapaan kuin peittoilmiötä yleensäkin. 1.3 Peittoilmiön hyväksikäyttö audion koodauksessa Molempiin peittotyyppeihin on olemassa matemaattiset mallit, jotka toimivat kohtuullisen hyvin. MPEG-standardikin määrittelee kaksi ohjelmarutiinia, jotka laskevat annetun signaalin kokonaismaskin. Kokonaismaski tarkoittaa eri taajuuskomponenttien yhteisvaikutusta. MPEG-standardin malli 1 on yksinkertaisempi ohjelmoitava ja nopeampi laskettava, mutta toisaalta epätarkempi. Näin ollen se soveltuu tilanteisiin, joissa laskennan on oltava nopeaa ja bittimäärän ei tarvitse olla optimaalinen. Malli on monimutkaisempi ja tarkempi. Eräs peruslähtökohdista MPEG-standardointityössä on ollut jättää mahdollisimman paljon vapauksia enkooderin sunnittelijalle. MPEG määrittelee vain bittivirran, mutta ei menetelmiä sen luomiseksi. Standardin mallit ovat vain (hyviä) esimerkkejä. Mikään ei pakota pakkausohjelman suunnittelijaa käyttämään kumpaakaan niistä. Nopea (joskin tuhlaileva) ratkaisu on olla käyttämättä kumpaakaan psykoakustisista malleista. Toisaalta kehittyneiden pakkausohjelmien algoritmit perustuvat viritettyihin psykoakustisiin malleihin, jotka ovat standardimalleja tarkempia. Mitä tarkempi malli on, sitä enemmän bittejä voidaan jättää pois ilman kuuluvaa eroa alkuperäiseen. Lisätietoja aiheesta löytyy verkosta vaikkapa hakusanoilla "psychoacoustic model MPEG". 1.4 Taajuusalueiden erottelu Jotta peittoilmiötä voitaisiin käyttää tehokkaasti hyväksi, äänisignaali jaetaan ensin eri taajuuskomponentteihin. MPEG-standardin mukaan tämä tapahtuu 3:lla kaistanpäästösuotimella, joiden päästökaistat ovat yhtä leveät ja erilliset. Jos esimerkiksi näytteenottotaajuus on 3 khz, jokaisen suotimen päästökaistan leveys on 16/3 = 5 Hz. Ensimmäisen suotimen päästökaista on siis 5 Hz, toisen 5 1 Hz ja niin edelleen. Tällaisesta suodinkokoelmasta käytetään nimeä suodinpankki (filter bank) ja erään suodinpankin suodinten amplitudivasteet on esitetty alla olevassa kuvassa. 1.4 1. 1.8.6.4. 4 6 8 1 1 14 16 Taajuus (Hz)

1. AUDIODATAN KOMPRESSIO 191 Äänisignaali suodatetaan jokaisella suodinpankin suotimella, ja tuloksena saadaan 3 signaalia joista kukin esittää yhtä taajuuskaistaa. Näiden 3:n signaalin näytteenottotaajuus pudotetaan kertoimella 3 eli yhteen kilohertsiin. Tällöin korkeammat taajuudet laskostuvat taajuusalueelle 5 Hz. Tämä ei kuitenkaan haittaa, sillä tuon taajuusalueen informaatio suodatettiin pois aiemmin. Näin ollen laskostuminen ei sekoita taajuusinformaatiota ja alkuperäinen signaali voidaan palauttaa moduloimalla desimoitua versiota. Alla olevassa kuvassa on yksi 5 Hz levyinen kaista alkuperäisestä signaalista esitettynä aika- sekä taajuusalueella..3..1.1..3 Yhden taajuuskaistan alkuperäinen signaali.4 5 1 15 5 3 Yhden taajuuskaistan alkuperäinen spektri 15 1 5 4 6 8 1 1 14 16 Kuvasta nähdään, että kapeakaistaisuudesta johtuen signaali on melko yksinkertainen suureen näytteenottotaajuuteen nähden. Kun signaali desimoidaan kertoimella 3, taajuusalue 3 35 Hz laskostuu taajuuksille 5 Hz. Samalla näytteiden määrä putoaa yhteen kolmaskymmeneskahdesosaan alkuperäisestä. Tulos on esitetty alla olevassa kuvassa..4 Signaali alinäytteistyksen jälkeen...4 1 3 4 5 6 7 8 9 6 Spektri alinäytteistyksen jälkeen 5 4 3 1 4 6 8 1 1 14 16 Lopputuloksena on siis 3 signaalia, joiden näytteenottotaajuus on 1 khz ja joista kukin esittää yhtä taajuuskaistaa alkuperäisestä signaalista. Näytteet on esitetty 16:lla bitillä kuten aiemminkin. Periaatteessa tässä vaiheessa alkuperäinen signaali on vielä täydellisesti rekonstruoitavissa. Lisäksi näytearvojen lukumäärä on sama kuin ennen jakoa eri taajuus-

19 SIGNAALINKÄSITTELYN MENETELMÄT kaistoille (alussa yksi signaali näytteenottotaajuudella 3 khz, nyt 3 signaalia näytteenottotaajuudella 1 khz). Enkooderi tallentaa signaalin nimenomaan tässä esitysmuodossa pienennettyään ensin kunkin taajuuskaistan bittimäärää seuraavan kappaleen periaatteiden mukaan. Tästä voidaan dekoodausvaiheessa saada palautettua miltei tarkalleen alkuperäinen signaali. Ensimmäisessä vaiheessa interpoloidaan kertoimella 3, jolloin saadaan alla olevan kuvan mukainen signaali..4 Signaali interpoloinnin jälkeen...4 5 1 15 5 3 Spektri interpoloinnin jälkeen 15 1 5 4 6 8 1 1 14 16 Tämän jälkeen signaali moduloidaan kosinisignaalilla, jonka taajuus on 3 Hz. Kertolasku aikatasossa vastaa konvoluutiota taajuustasossa, ja nyt konvoluutio otetaan siis signaalin spektrin ja kosinin spektrin (yksi piikki taajuudella 3 Hz) välillä. Tuloksena alkuperäinen spektri siirtyy 3 Hz suuremmalle taajuudelle. Tulos näkyy alla olevassa kuvassa..4 Signaali moduloinnin jälkeen...4 5 1 15 5 3 1 Spektri moduloinnin jälkeen 8 6 4 4 6 8 1 1 14 16 Spektristä nähdään, että myös negatiiviset taajuudet siirtyvät taajuusasteikolla 3 Hz ylöspäin, mutta ne voidaan poistaa ylipäästösuodatuksella. Tulos on esitetty alla ja se on hyvin lähellä alkuperäistä. Vähäiset muutokset johtuvat desimoitaessa tapahtuvasta laskostumisesta. Todellisessa järjestelmässä nekin kumoutuvat muiden taajuuskaistojen laskostumisilmiöiden kanssa.

1. AUDIODATAN KOMPRESSIO 193.4 Signaali suodatuksen jälkeen...4 5 1 15 5 3 Spektri suodatuksen jälkeen 15 1 5 4 6 8 1 1 14 16 Rekonstruktiovaihetta voidaan yksinkertaistaa jättämällä modulointi pois. Tämä onnistuu tarkastelemalla näytteenottotaajuuden kasvattamista (lohkokaaviossa N ) lähemmin. Tämän operaation jälkeen (ennen interpoloinnin jälkeistä alipäästösuodatusta) signaalin spektri näyttää seuraavalta..4 Desimoitu signaali nollien lisäämisen jälkeen...4 5 1 15 5 3 6 Spektri nollien lisäämisen jälkeen 5 4 3 1 4 6 8 1 1 14 16 Kuten interpoloinnin yhteydessä havaittiin, nollien lisääminen muodostaa kopioita alkuperäisestä spektristä korkeammille taajuuksille. Koska alkuperäinen taajuuskaista sijaitsi korkeammalla taajuudella, voidaan yhtä hyvin käyttää siellä valmiiksi olevaa kopiota. Alipäästösuodatuksen ja moduloinnin asemesta voidaan siis käyttää vain yhtä kaistanpäästösuodatusta, joka erottelee kaistalla 3 Hz 35 Hz olevan kopion. Tulossignaali spektreineen on alla.

194 SIGNAALINKÄSITTELYN MENETELMÄT.4 Kaistanpäästösuodatettu signaali...4 5 1 15 5 3 Kaistanpäästösuodatetun signaalin spektri 15 1 5 4 6 8 1 1 14 16 Joka toinen spektrin kopio on alkuperäisen spektrin peilikuva. Tämä ei kuitenkaan haittaa, sillä samat spektrit peilautuivat jo kerran laskostuessaan näytteenottotaajuutta pienennettäessä. Näin ollen niiden spektrit ovat todellisen spektrin peilikuvia silloin, kun näytteenottotaajuutta aletaan nostaa. Peilautuessaan toisen kerran nollia lisättäessä ne kääntyvät automaattisesti oikein päin. Suodinpankin lohkokaavio on alla olevassa kuvassa. Vasemmalla signaali x(n) jaetaan N:llä kaistanpäästösuotimella taajuuskaistoihin ja yksittäisiä taajuuskaistoja esittävien signaalien näytteenottotaajuus pudotetaan kertoimella N. Taajuuskaistoja esittävät signaalit voidaan nyt pakata, eli ne voidaan esittää pienemmällä tarkkuudella kuten seuraavassa kappaleessa esitetään. Kun alkuperäinen signaali halutaan palauttaa kompressoidusta versiosta, nostetaan taajuuskaistojen näytteenottotaajuudet ensin nollia lisäämällä samaksi kuin alkuperäisellä signaalilla. Näin saaduista signaaleista irrotetaan oikea taajuuskaista kaistanpäästösuodatuksella. Tässä voidaan käyttää samaa suodinta, jolla kaista alunperin erotettiin signaalista x(n). On tosin mahdollista käyttää muutakin suodinta, mutta suotimet H 1 (z),h (z),...,h N (z) kelpaavat yhtä hyvin. Näin saadut taajuuskaistat summataan yhteen ja saadaan signaalin x(n) approksimaatio y(n). x(n) H (z) N... H (z) 3 H (z) H (z) 1 N... N N N K V A N T I S O I N T I N... N N N H (z) N... Pakkaamisen kannalta olennaisin vaihe on seuraava. Siinä taajuuskaistojen esittämiseen tarvittavia bittimääriä aletaan vähentää. Bittivähennys tapahtuu siitä esitysmuodosta, jossa on 3 yhden kilohertsin näytetaajuudella olevaa signaalia. H (z) 3 H (z) H (z) 1 y(n)

1. AUDIODATAN KOMPRESSIO 195 1.5 Kvantisointikohinan peittyminen ja bittien jakaminen eri taajuuksille Tässä vaiheessa on käytössä rutiini (psykoakustinen malli), joka laskee kokonaismaskin parametrina saamansa signaalin perusteella. Tätä mallia voidaan verrata signaalin taajuussisältöön. Alla olevista kuvista vasemmanpuoleinen esittää erään signaalin spektriä (pystypylväät) sekä siitä ja kuulokäyrästä laskettua kokonaismaskia (yhtenäinen käyrä). Oikeanpuoleisessa kuvassa on kokonaismaski. Kokonaismaski noudattaa siis kuulokäyrän muotoa, mutta signaalin voimakkailla taajuuksilla nousee hieman ylemmäs. Kokonaismaskista nähdään kullakin taajuusalueella voimakkain signaali, joka alkuperäiseen voidaan lisätä ilman että kuuntelija havaitsee sitä. Näin ollen kuvaaja ilmaisee myös, kuinka suuri määrä kvantisointikohinaa signaalin eri taajuuksilla voi olla. Tästä voidaan päätellä pienin bittimäärä jolla kukin 3:sta eri taajuuskaistoilla olevasta signaalista täytyy esittää ilman havaittavaa laadun heikkenemistä. Äänenvoimakkuus (db) 8 6 4 4 6 8 1 1 14 16 Taajuus (Hz) Äänenvoimakkuus (db) 7 6 5 4 3 1 4 6 8 1 1 14 16 Taajuus (Hz) Signaalin sisältämiä taajuuksia on tapana vertailla kokonaismaskiin tarkastelemalla näiden erotusta. Seuraavassa kuvassa on kyseinen erotus (siis ylhäällä vasemmassa kuvassa olevat pylväät miinus oikeassa kuvassa olevat pylväät). Tästä erotuksesta käytetään nimeä signaali-maski-suhde (signal-to-mask ratio, SMR). SMR (db) 4 4 6 8 4 6 8 1 1 14 16 Taajuus (Hz) Signaali-maski-suhdetta voidaan vertailla siihen signaali-kohina-suhteeseen, joka syntyy esitettäessä signaalib:llä bitillä. Käytetään tästä merkintää SNR(b). Tällöin riittävä ehto sille, ettei bittivähennyksestä seuraava kvantisointikohina kuulu, on SMR < SNR(b). (1.1) Signaali-kohina-suhde riippuu signaalin amplitudista, mutta tässä esimerkissä voidaan olettaa vastaava malli kuin kappaleessa??. Tuolloin päädyttiin kaavaan SNR(b) 6.b 1.5. Sijoittamalla tämä lauseke kaavaan (1.1), saadaan epäyhtälö SMR < 6.b 1.5. Esimerkin signaali on todellinen äänisignaali, mutta kokonaismaski on vain esimerkki eikä sitä ole laskettu millään käytössä olevalla rutiinilla.

196 SIGNAALINKÄSITTELYN MENETELMÄT Tästä on helppo ratkaista b: b > SMR+1.5. 6. Tämän kaavan mukaiset minimibittimäärät eri taajuuskaistoille on esitetty seuraavassa kuvassa. 6 5 Bittien lukumäärä 4 3 1 4 6 8 1 1 14 16 Taajuus (Hz) Käytännön tilanteissa voisi olla varminta antaa bittejä hieman avokätisemmin myös korkeille taajuuksille. Jos kokeeksi kullekin taajuudelle annetaan yksi ylimääräinen bitti yllä olevien lisäksi, saadaan koodauksen ja dekoodauksen jälkeen seuraava taajuussisältö. Tehospektri (db) 5 1 15.1..3.4.5.6.7.8.9 1 Taajuus (Hz) Ylempi kuvaaja esittää alkuperäisen signaalin spektriä ja alempi häviöllisen koodauksen tulossignaalin spektriä. Bittejä on nyt koko 3 näytteen mittaiseen signaaliin käytetty 6, eli 1.88 bittiä/näyte alkuperäisen 16 bittiä/näyte sijasta 3. Ero näkyy selvästi, ja on myös kuultavissa äänisignaalissa, mutta se on yllättävän pieni ottaen huomioon kompressiosuhteen ja miltei arvaamalla valitun kokonaismaskin. Tämän lisäksi näyte oli pitkä verrattuna todellisten koodereiden käyttämiin ikkunoihin (mp3:ssa tyypillinen ikkunan pituus on 64 14 näytettä). Siksi myös taajuudet olivat enemmän hajallaan. Esimerkissä bittejä jaettiin signaalin taajuussisällön mukaan. Tästä seuraa, että bittitarve vaihtelee ajan myötä. Tällaisesta koodauksesta käytetään MPEG:in yhteydessä nimeä variable bitrate (VBR) ja sopiva suomennos voisi olla vaihtuvan bittinopeuden koodaus. Useissa mp3-koodereissa ei kuitenkaan ole sen hyödyllisyydestä huolimatta mahdollisuutta VBR:n käyttöön, vaan bittinopeus on kiinnitetty etukäteen. Jos bittinopeus on kiinnitetty, kooderilla on käytössään tietty bittimäärä kullekin ikkunalle. Tällöin ne jaetaan taajuuksien kesken iteratiivisesti luovuttamalla yksi bitti kerrallaan sille kaistalle, jonka SMR:n ja SNR:n erotus 4 kulloinkin on suurin. Toisinaan bittejä on enemmän kuin tarvitaan ja toisinaan niitä voitaisiin käyttää enemmänkin. MPEG:in tasot 1 ja eivät vaadi dekoodereilta mahdollisuutta VBR:n käyttöön, mutta jokaisen tason 3 dekooderin täytyy tukea VBR:ää. 3 Entropiakoodaus parantaa kompressiosuhdetta edelleen. 4 Tästä erotuksesta käytetään nimeä noise-to-mask ratio: NMR = SMR SNR(b).

1. AUDIODATAN KOMPRESSIO 197 Harjoitustehtäviä 1.1. Kun kapeakaistainen signaali x(n) halutaan siirtää korkeammalle taajuusalueelle, käytetään modulointia. Tällöin signaali x(n) kerrotaan pisteittäin kantoaallolla c(n) = cos(πf c n), missä f c kertoo kuinka paljon signaalin x(n) taajuuksia halutaan nostaa (esimerkiksi arvolla f c =.5 taajuudet nousevat puolella Nyquistin rajataajuudesta). Millainen spektri on tuloksena, kun signaali x(n) = sin(.1 πn) moduloidaan kantoaallolla, missäf c =.3? Piirrä tilanteesta vastaavat kolme kuvaajaa kuin kuvassa (kuvassa normalisoidun taajuudenf c tilalla on kulmataajuusω c, joten on muistettava, että ω c = πf c ). Vapaaehtoinen lisäkysymys: osaatko sanoa mikä DFT:n ominaisuus selittää modulaation? (a) iω X(e ) (b) π... π π ω M C(e iω) ω M π π π π ω... (c) π π+ω c ω c iω Y(e ) ω c π ω c ω M π ω c π π+ ω c ω...... π π+ ω c ω c ω c π ω c π π+ ω c ω ω c ω M ω c + ω M 1.. Jotta signaalin spektri pysyisi muuttumattomana, eivät vierekkäiset spektrin kopiot saa mennä päällekkäin modulaatiossa. Mitkä kaksi epäyhtälöä kuvan muuttujienω c jaω M välillä täytyy tällöin olla voimassa? Jos haluat, voit muotoilla epäyhtälöt myös muuttujien f c ja f M avulla, missä ω c = πf c ja ω M = πf M. 1.3. (Matlab) Kopioi itsellesi tiedostohttp://www.cs.tut.fi/kurssit/sgn-151/ seiska.mat ja lataa se Matlabiin. Ääninäytteen näytteenottotaajuus on 16 Hz. Suunnittele fir1-rutiinilla alipäästösuodin (n. sata kerrointa), jonka rajataajuus on kahdeksasosa näytteenottotaajuudesta eli neljäsosa Nyquistin rajataajuudesta. Suodata muuttujassa x oleva signaali suunnitellulla suotimella. Tällöinhän tulossignaalin taajuudet ovat välillä khz ja välillä 8 khz on tyhjää tilaa (katso spektrogrammi). Tehtävän 1. merkinnöillä ilmaistuna f M = 1. Minkä muodon tehtävän 8 1. kaksi ehtoa nyt saavat ja missä rajoissa kantoaallon taajuuden f c tulee olla? Moduloi nyt suodattamasi signaali samanmittaisella kantoaallolla c(n) = cos(πf c n), missä f c on mainittujen rajojen välissä, ja katso spektrogrammi. Modulointi nosti signaalin spektriä ylöspäin siten, että nollataajuus nousi f c :n verran korkeammalle. Tee remez tai fir1-rutiinilla suodin, joka poistaa negatiiviselta puolelta taajuuksille f c tulleet haamutaajuudet. Kuuntele tulos ja katso spektrogrammi. Tee samat testit myös muutamalla muulla sopivalla muuttujan f c arvolla. 1.4. (Matlab) Edellisen tehtävän moduloidut signaalit saadaan palautettua alkuperäisiksi demoduloimalla ne, eli käytännössä kertomalla ne uudelleen kantoaallolla ja poista-

198 SIGNAALINKÄSITTELYN MENETELMÄT malla muut kuin alkuperäisessä signaalissa olleet taajuudet [,f M ]. Tee testit edellisen tehtävän kantoaalloilla ja vertaa demoduloinnin tulosta alkuperäiseen spektrogrammissa ja kuuntelemalla. 1.5. (Matlab) Laaditaan MPEG-standardin mukainen suodinpankki, jota voidaan käyttää taajuuksien erottelussa 3:lle kaistalle. Oletetaan, että näytteenottotaajuus on 3 khz, jolloin yksi taajuuskaista on 5 Hz. Luo ensin prototyyppisuodin, jonka perusteella muut suotimet suunnitellaan 5. Kyseinen suodin on alipäästösuodin, joka päästää läpi taajuudet -5 Hz ja poistaa muut (negatiiviselta puolelta mukaan tulevat haamutaajuudet -5- Hz, siis yhteensä 5 Hz). Otetaan siis päästökaistaksi -18 Hz ja estokaistaksi 3-16 Hz. Suunnittele Remez-algoritmilla tällainen suodin, jossa on 51 kerrointa (siis 51 on kerrointen lkm., ei aste). Kaistojen painot voit itse valita. Kerro lopuksi kaikki kertoimet kahdella. Jos em. suotimen kertoimista käytetään merkintää h(n), kun n =,1,...,511, saadaan j:nnellä taajuuskaistalla oleva suodin kaavasta ( ) (j 1)(n 16)π h j (n) = h(n) cos, 64 missä j = 1,, 3,..., 3. Kyseessä on siis prototyyppisuotimen modulointi. Muodosta näin saaduista suotimista 3 51-matriisi, jossa kullakin 3:lla vaakarivillä on j:nnen suotimen 51 kerrointa. Ensin kannattanee luoda sopivan kokoinen nollamatriisi (help zeros) ja sitten for-silmukassa täyttää rivi kerrallaan. Tulosta kokeeksi muutaman suotimen taajuusvaste. Alla olevassa kuvassa on esimerkiksi kaistoilla 1 (-5 Hz), (5-1 Hz), 1 (45-5 Hz) sekä (95-1 Hz) operoivien suodinten amplitudivasteet. Amplitudivaste (db) 4 6 8 4 6 8 1 1 14 16 Taajuus (Hz) 1.6. (Matlab) Lataa signaali handel ja ota siitä sekunnin mittainen näyte alusta (819 näytettä). Irrota sen yhdeksäs taajuuskaista edellisessä tehtävässä suunnittelemallasi suotimella. (Näytteenottotaajuus on toinen, joten taajuusalue on alempana kuin aikaisemmassa tehtävässä. Tällä ei ole tämän tehtävän kannalta olennaista merkitystä.) Tulosta tuloksen spektri ruudulle. Voit nyt hätätapauksessa tehdä spektriestimaatin pelkällä FFT:llä. Ota tuloksesta talteen ainoastaan joka 3:s näyte (vaikkapa kaksoispisteen avulla,help colon) 6. Interpoloi tämä signaali alkuperäisen mittaiseksi, ts. kertoimella 3 (help interp). Tulosta spektri ruudulle. Moduloi lopuksi viimei- 5 Standardin prototyyppisuodin ei ole juuri tämä suodin, mutta vastaava. 6 Tämä olisi nyt yksi niistä signaaleista, jotka talletetaan.

1. AUDIODATAN KOMPRESSIO 199 sintä signaalia kosinisignaalilla ( ) 9 1 c(n) = cos 3 πn. Luku 9 viittaa yhdeksänteen taajuuskaistaan ja 3 on kaistojen yhteismäärä. Tulosta moduloidun signaalin spektri ruudulle. Huomaat, että mukaan on tullut myös spektrin peilikuva negatiiviselta puolelta. Suodata saamasi signaali alkuperäisellä suotimella, jolloin peilikuvan pitäisi poistua spektristä (tämä on yksi mahdollinen tapa päästä eroon peilikuvasta, muitakin on). 1.7. (a) Erään signaalin taajuuskaistalla 5 Hz 55 Hz oleva äänenvoimakkuus on 13.5 db. Kyseisen kaistan kokonaismaski on puolestaan 5. db. Montako bittiä/näyte tarvitaan (monisteen mukaisilla kaavoilla) taajuuskaistalla olevan signaalin koodaamiseen, jotta eroa alkuperäiseen ei kuulla? (b) Taajuuskaistalla 7 Hz 75 Hz oleva äänenvoimakkuus on 14.1 db ja kaistan kokonaismaski on 16. db. Montako bittiä tarvitaan, jotta eroa alkuperäiseen ei kuulla? 1.8. (Matlab) Tehtävässä 1.5. suunniteltiin suodinpankki, joka jakaa signaalissa olevat taajuudet 3:een eri taajuuskaistaan. Suunnittele tällä skriptillä kyseinen suodinpankki. Lataa signaali handel muuttujaan y käskyllä load handel ja jaa se taajuusalueisiin suodinpankillasi (for-silmukassa, tms.). Muodosta suodatustuloksista matriisi, jossa on 3 kappaletta 73113 näytteen mittaisia signaaleita. 1.9. (Matlab) Ilman psykoakustista mallia jokaista kaistaa käsitellään samalla tavalla. Kokeillaan tässä tehtävässä psykoakustisen mallin vaikutusta. Lataa kurssin kotisivulta tiedosto http://www.cs.tut.fi/kurssit/sgn-151/bittijakauma.mat ja lataa se Matlabiin komennollaload. Vektoriinbits latautuu tällöin 3 kokonaislukua, jotka on esitetty alla olevassa kuvassa. Kvantisoi kukin tehtävän 1.8 tulossignaaleista vektorin bits ilmoittamaan määrään ja summaa tulokset yhteen. Kvantisointia ennen kukin kaista täytyy skaalata välille[,1]. Esim. kaistalla k oleva signaali x kvantisoidaan y:ksi tähän tapaan: M = max(abs(x)); y = M * quant(x / M, ^(-bits(k))); Näin saatu tulos on siis kvantisoitu keskimäärin 3.9688 bittiin / näyte. Kuuntele tulos ja vertaa sitä siihen mitä saadaan jos kvantisoidaan alkuperäinen signaali suoraan neljään bittiin ilman jakoa 3 kaistaan. Ero ei ole suuri, mutta pitäisi selvästi kuulua.

SIGNAALINKÄSITTELYN MENETELMÄT 7 Keskimäärin 3.9688 bittiä / näyte 6 5 4 3 1 1 3 4 5 6 7 8 9 Taajuus / Hz