Harmaasävykuvien häviöttömästä tiivistyksestä

Koko: px
Aloita esitys sivulta:

Download "Harmaasävykuvien häviöttömästä tiivistyksestä"

Transkriptio

1 Harmaasävykuvien häviöttömästä tiivistyksestä TURUN YLIOPISTO Informaatioteknologian laitos Tietojenkäsittelytiede Pro gradu tutkielma Marko Männistö

2 SISÄLLYSLUETTELO SISÄLLYSLUETTELO JOHDANTO KUVANTIIVISTYKSEN PERUSTEITA TIIVISTYSMENETELMIEN JAOTTELU KUVIEN JAOTTELU KUVIEN ESITTÄMINEN KÄSITTEITÄ KUVANTIIVISTYSMENETELMIEN TOIMINTA TOIMINTAPERIAATE TILASTOLLINEN TIIVISTYS Entropia Mallintajan suunnittelu MALLINNUS Ennustaminen Kontekstimallinnus Perusteet Kontekstin valinta Kontekstien määrä Kontekstimallinnuksen toimintakaavio KOODAUS Huffman-koodaus Golomb-Rice koodaus Aritmeettinen koodaus Toimintaperiaate Implementoinnista WAVELET-MUUNNOSTEN PERUSTEITA SIGNAALIN ESITYS TAAJUUSALUEELLA KUVASIGNAALIN SAMANAIKAINEN ESITYS AJAN JA TAAJUUDEN FUNKTIONA WAVELET-MUUNNOS Jatkuva wavelet-muunnos Diskreetit wavelet-funktiot MONIRESOLUUTIOESITYS Skaalausfunktio Osakaistasuodatus

3 4.5 DISKREETIN WAVELET-MUUNNOKSEN SOVELTAMINEN KUVANTIIVISTYKSEEN LOCO-I / JPEG-LS TOIMINTAPERIAATE MALLINNUS Vakiot ja kontekstikohtaiset laskurimuuttujat Ennusteen laskenta Kontekstin valinta Ennusteen adaptiivinen korjaus Ennustevirheen laskenta Kontekstikohtaisten muuttujien päivitys KOODAUS Laplace-jakauman kuvaus geometriseksi jakaumaksi Golomb-Rice parametrin määritys Golomb-Rice parametrin laskenta JPEG-LS:ssä Esityksen pituuden rajoittaminen JAKSON PITUUDEN KOODAUS Toimintamoodin valinta Jakson pituuden esittäminen Jakson katkaisevan kuvapisteen esitys CALIC TOIMINTAPERIAATE MALLINNUS Ennusteen laskenta Ennusteen skaalaus kuvan värisyvyyden perusteella Kontekstin valinta Ennustevirheen suuruusluokan arviointi Konteksteihin jako tekstuurin perusteella Ennusteen korjaus Toimintaperiaate Toteutustapa Ennustevirheiden hajonnan pienentäminen KOODAUS Ennustevirheiden kuvaus Todennäköisyysmallin valinta Suurten ennustevirheiden koodaaminen BINAARINEN TOIMINTAMOODI

4 7 JPEG WAVELET-MUUNNOS MQ-KOODAAJA Toimintaperiaate Symbolien todennäköisyyksien arviointi WAVELET-KERROINTEN MALLINNUS Kerrointen jako bittitasoihin Merkitsevyyden levitysvaihe Merkitsevien kerrointen koodausvaihe Viimeistelyvaihe Kontekstien käyttö MENETELMIEN VERTAILUA KÄYTETYT TOTEUTUKSET JA VERTAILUAINEISTON KUVAUS TIIVISTYSTULOKSET Tulokset yksittäisillä vertailuaineiston kuvilla Tulokset yhdistetyillä kuvilla Kohinan vaikutuksesta tiivistystulokseen JPEG-LS:n parametrien vaikutuksesta tiivistystulokseen MENETELMIEN MUISTA OMINAISUUKSISTA YHTEENVETO...89 LÄHTEET...93 LIITE 1: KÄYTETTY VERTAILUAINEISTO...96 LIITE 2: TULOKSET VERTAILUAINEISTON KUVILLA LIITE 3: KÄYTETYT TIIVISTYSMENETELMIEN TOTEUTUKSET

5 1...JOHDANTO Viime vuosikymmenen aikana tietokoneiden ja tietokoneverkkojen kehittymisen myötä kuvien käsittely ja siirto digitaalisessa muodossa on yleistynyt huomattavan paljon. Digitaalisten kuvien tilan tarve on yleensä suuri, ja se on kasvanut entisestään kuvien laadun parantuessa. Kuvien varastointi ja siirtokapasiteetin tarvetta on kuitenkin voitu vähentää huomattavasti kehittämällä menetelmiä kuvatiedostojen tiivistykseen. Useasti digitaalisia kuvia käytetään esimerkiksi www-sivuilla tai muissa sellaisissa yhteyksissä, joissa vähäisten muutosten syntyminen esitettäviin kuviin ei juurikaan haittaa. Luopumalla mahdollisuudesta palauttaa tiivistetty kuva täysin alkuperäistä vastaavaksi voidaan kuvalle muodostaa paljon lyhyempi tiivistetty esitys kuin muuten olisi mahdollista. On kuitenkin myös sellaisia tilanteita, joissa kuvan käyttötarkoituksen vuoksi ei voida sallia muutoksien syntymistä kuvaan tiivistys-purkuprosessissa. Tällöin kuvatiedostot pitää joko jättää tiivistämättömään muotoon tai käyttää sellaista tiivistysmenetelmää, joka ei muuta kuvaa millään tavalla. Jos kuvat ovat hyvin suuria tai niitä pitää usein siirtää verkossa, jälkimmäinen tapa saattaa olla selvästi taloudellisempi. Tässä työssä esitellään kolme kehittynyttä menetelmää, jotka soveltuvat kaksiulotteisten harmaasävykuvien häviöttömään tiivistykseen. Kaksi esitetyistä menetelmistä, LOCO-I ja CALIC, perustuvat kuvapisteiden välisten riippuvuuksien hakemiseen tiivistettävästä kuvasta. Näiden keskenään melko samanlaisten menetelmien toiminta on esitetty yksityiskohtaisesti. Lisäksi kuvataan yleisemmällä tasolla JPEG 2000 standardiin sisältyvä häviötön tiivistys. JPEG 2000 poikkeaa edellisistä menetelmistä siten, että se tulkitsee digitaalisen kuvan signaalina ja tekee tälle signaalille wavelet-muunnoksen. Wavelet-muunnettu signaali voidaan esittää tiivistetyssä muodossa helpommin kuin alkuperäinen kuva. Wavelet-muunnos voidaan tehdä kadottamatta informaatiota, ja tällöin käänteinen muunnos palauttaa tarkalleen alkuperäisen kuvan. Työn tavoitteena on myös selvittää esitettyjen menetelmien soveltuvuutta erilaisten kuvien tiivistykseen. Vertailukohteeksi on otettu erityisesti tiivistyssuhde. Myös tiivistettyyn kuvaan mahdollisesti syntyvien virheiden vaikutusta käsitellään lyhyesti. Työn tekstisisältö on jaettu suurempiin kokonaisuuksiin siten, että luvuissa 2, 3 ja 4 käsitellään kuvantiivistyksen teoriaa puuttumatta yksityiskohtaisesti minkään yksittäisen tiivistysmenetelmän toimintaan. Luvuissa 5, 6 ja 7 esitellään edellä mainitut tiivis- 5

6 tysmenetelmät, ja lopuksi luku 8 sisältää käsiteltyjen tiivistysmenetelmien vertailun. Yksityiskohtaisemmin kuvattuna tekstilukujen sisältö on seuraava: Luvussa 2 esitetään sellaisia digitaalisiin kuviin ja tiedon tiivistykseen liittyviä perusasioita ja käsitteitä, joihin viitataan useasti työn myöhemmissä luvuissa. Luvussa 3 selvitetään kuvantiivistyksen vaiheet yleisellä tasolla sekä entropian käsite, johon pohjautuen esitellään tiivistyksen koodaus ja mallinnusvaiheen tavoitteet. Luvussa tarkastellaan erityisesti kontekstimallinnusta sekä kolmea tiivistysmenetelmissä yleisesti käytettyä koodausta. Kaikkien tässä työssä esitettyjen kuvantiivistysmenetelmien toiminta pohjautuu kokonaan tai osittain tässä luvussa käsiteltyyn teoriaan. Luvussa 4 käsitellään wavelet-muunnosten perusteita ja annetaan esimerkki waveletmuunnoksen soveltamisesta kuvantiivistykseen. Wavelet-muunnosten teoria on varsin laaja, eikä sitä pyritä käsittelemään erityisen yksityiskohtaisesti tämän työn puitteissa. Wavelet-muunnos on JPEG 2000 tiivistysmenetelmän keskeinen osa, ja luku 4 toimii pohjustuksena luvussa 7 käsiteltävälle JPEG 2000 tiivistyksen toiminnalle. Luvussa 5 esitellään yksityiskohtaisesti kontekstimallinnukseen pohjautuva LOCO-I algoritmi, joka on osa JPEG-LS tiivistysmenetelmää. JPEG-LS:n tiedostorakennetta ja muita tämän työn aihepiirin kuulumattomia ominaisuuksia ei kuitenkaan käsitellä. Luvussa 6 on tarkasteltu CALIC-tiivistysmenetelmän toimintaa melko yksityiskohtaisella tasolla. Menetelmä on melko samanlainen kuin LOCO-I. Luvussa 7 esitellään JPEG 2000-standardin mukaisen häviöttömän tiivistyksen toimintaperiaate. Koska JPEG 2000:n suunnittelussa on tarkoituksena ollut laatia mahdollisimman yleiskäyttöinen menetelmä kuvien tiivistämiseen, menetelmän määritys on varsin laaja. Tässä työssä ei ole pyritty yksityiskohtaiseen kuvaukseen, vaan antamaan yleiskuva siitä, miten JPEG 2000 luo kuvalle häviöttömän, tiivistetyn esityksen. Luvussa 8 on vertailtu esitettyjä tiivistysmenetelmiä käyttäen lähinnä valokuvista koottua vertailuaineistoa. Vertailukohteena on erityisesti tiivistyssuhde. Lisäksi on pyritty selvittämään kuvien yhdistämisen, kuvissa mahdollisesti esiintyvän kohinan sekä JPEG-LS menetelmän tapauksessa käyttäjän määriteltävissä olevien parametrien valinnan vaikutusta tiivistystulokseen. Lopuksi lukuun 9 on koottu lyhyt yhteenveto kuvantiivistyksen toiminnasta, esitellyistä menetelmistä sekä tehdyissä kokeissa saaduista tiivistystuloksista ja esiteltyjen tiivistysmenetelmien soveltuvuudesta erilaisiin käyttötarkoituksiin. 6

7 2 KUVANTIIVISTYKSEN PERUSTEITA Tässä luvussa esitetään yksi tapa jaotella tiedon tiivistysmenetelmiä ja tiivistettäviä kuvia. Lisäksi määritellään kuvien esittämiseen ja tiedon tiivistykseen liittyviä käsitteitä, joihin viitataan myöhemmissä luvuissa esiteltäessä kuvantiivistyksen teoriaa ja erilaisia tiivistysmenetelmiä. 2.1 Tiivistysmenetelmien jaottelu Tiedon tiivistysmenetelmät voidaan jakaa sisältöriippumattomiin tiivistysmenetelmiin sekä menetelmiin, jotka olettavat jotakin syötetiedosta ja käyttävät tätä tietoa hyväkseen tiivistyksessä. Edellisten etuna on yleiskäyttöisyys, mutta parempiin tiivistystuloksiin päästään, kun syötetiedon tietoalkioiden voidaan olettaa olevan jollakin tietyllä tavalla riippuvia toisistaan. Esimerkiksi digitaalisissa kuvissa yksittäisen kuvapisteen kirkkausarvo ei useinkaan poikkea paljonkaan naapurikuvapisteidensä kirkkausarvoista ja tätä voidaan hyödyntää kuvan tiivistyksessä. Sisältöriippuvat tiivistysmenetelmät voidaan jakaa edelleen häviöttömiin ja häviöllisiin menetelmiin. Häviöllisiä menetelmiä voi käyttää, kun tiivistettyä tietoa ei tarvitse koskaan palauttaa täsmälleen samanlaisena kuin se oli tiivistettäessä. Esimerkkinä tästä on monet häviöllisesti tiivistetyt digitaaliset kuva ja äänitiedostot, joissa tiivistys perustuu ihmisen aistien kyvyttömyyteen havaita pieniä virheitä informaatiossa. Häviöttömiä tiivistysmenetelmiä pitää sen sijaan käyttää aina, kun on tärkeää, että tietosisältö ei muutu tiivistys-purkuprosessissa mitenkään. Yleisimpiä esimerkkejä tällaisesta tiedosta ovat ihmisen luettavaksi tarkoitettu teksti tai tietokoneen suoritettavaksi tarkoitettu ohjelmakoodi, mutta usein myös kuvia on tarpeellista tallentaa häviöttömästi. Esimerkiksi kuvankäsittelyssä voidaan tuottaa välituloksia, jotka myöhemmin luetaan uudelleen käsiteltäviksi. Jos jokainen välivaihe hävittää kuvasta informaatiota, virheet kertautuvat ja lopputulos voi olla hyvinkin huono. Jatkossa tässä työssä käsitellään vain kuvien häviötöntä tiivistystä. 2.2 Kuvien jaottelu Kun digitaalinen kuva esitetään bittikarttana, sen jokaiselle kuvapisteelle annetaan oma esitys. Kuva voitaisiin esittää myös muilla tavoin, esimerkiksi matemaattisina vektoreina, mutta tässä työssä käsitellään vain bittikarttakuvia. 7

8 Toinen tapa jaotella kuvia (tässä erityisesti bittikarttakuvia) on jakaa ne värikuviin, harmaasävykuviin ja mustavalkokuviin. Harmaasävykuva on värikuvan erikoistapaus ja mustavalkokuva taas harmaasävykuvan erikoistapaus, jossa esiintyy vain kahta väriä olevia kuvapisteitä. Laatimalla tiivistysmenetelmä vain erikoistapaukselle voidaan saada parempi tulos kuin yleisempää tiivistysmenetelmää käytettäessä. 2.3 Kuvien esittäminen Bittikarttakuvien esitystapa riippuu siitä, onko kyseessä värikuva vai harmaasävykuva. Harmaasävykuvien kohdalla riittää esittää vain kunkin kuvapisteen kirkkausarvo. Kun yhden kuvapisteen kirkkausarvon esittämiseen käytetään β bittiä, voidaan esittää α = 2 β eri kirkkausarvoa. Värisyvyyden β yksikkö on bpp = bits per pixel. Värikuvan kuvapisteen arvo taas koostuu useasta komponentista, jotka yhdessä määräävät kuvapisteen värin ja kirkkauden. Komponentteihin jako, värimalli, voi olla esimerkiksi RGB, jolloin kuvapisteen arvon yksi komponentti esittää punaisen, yksi vihreän ja yksi sinisen värin määrää. Näitä yhdistämällä saadaan esitettyä kaikki käytettävissä olevat värit ja kuvapisteen kirkkaus. RGB-värimallia (Red, Green, Blue) käytettäessä komponentit riippuvat usein toisistaan jollakin tavalla, joten parempaan tiivistykseen päästään käyttämällä värimallia, jossa on vähemmän komponenttien välisiä riippuvuuksia. Tällaisia ovat esimerkiksi HSL (Hue, Saturation, Luminance), jossa kunkin kuvapisteen väri esitetään kirkkausarvona, värisävynä ja värin puhtautena, ja JPEG-menetelmän käyttämä samantapainen YCbCr-malli. Tässä työssä käsitellään vain harmaasävykuvien tiivistystä, mutta esitettyjä menetelmiä voi helposti soveltaa myös värikuvien tiivistykseen. 2.4 Käsitteitä Tietokoneella käsiteltävän tiedon voi ajatella koostuvan sarjasta symboleja, joista jokainen esitetään vaihtelevan tai kiinteän kokoisena sarjana bittejä yksikäsitteisellä tavalla. Esimerkiksi tiivistämätön 8-bittinen harmaasävykuva koostuu peräkkäisistä kahdeksan bitin jonoista, joista kukin määrää kuvan yksittäisen kuvapisteen harmaasävyn, kun kuvan korkeus ja leveys sekä kuvapisteiden esitysjärjestys on määrätty. Tällöin luonnollinen tapa määritellä yksi syötetiedon symboli on määritellä se yksittäisen kuvapisteen harmaasävyn arvoksi. Kuitenkin yhtä hyvin yksi symboli voisi kuvata vaikkapa kahden 8

9 rivijärjestyksessä peräkkäisen kuvapisteen harmaasävyjen yhdistelmää. Tällöin yksi symboli esitettäisiin 16 bitillä. Digitaalinen kuva voidaan ajatella myös signaalina. Jos esimerkiksi asetetaan kuvan kaikki vaakarivit peräkkäin ensimmäisestä alkaen, t:nnen kuvapisteen arvon voi ajatella signaalin tasoksi ajanhetkellä t. Sekä t:n että kuvan pisteiden mahdollisten arvojen joukko ovat molemmat numeroituvia, joten aika ja signaalin taso eivät voi muuttua portaattomasti. Kun tarkastellaan signaalin tasoa ajanhetkellä t, sanotaan, että otetaan signaalista näyte ajanhetkellä t. Samoin kuvan yksittäisen kuvapisteen arvoa voidaan sanoa näytteeksi. Redundanssilla tarkoitetaan informaation välityksen kannalta tarpeetonta toistoa [11]. Esimerkiksi luonnollisen kielen mukainen teksti sisältää paljon redundanssia. Kieleen kuuluvissa sanoissa kirjaimia ei ole voitu valita täysin toisistaan riippumatta, mistä johtuen sanoissa esiintyy usein tiettyjä kirjainten yhdistelmiä, kun taas muita esiintyy vain harvoin tai ei lainkaan. Varsinkin ihmiselle redundanssi on tiedon sujuvan käsittelyn kannalta välttämätöntä, mutta kun tietoa varastoidaan tai siirretään laitteiden välillä digitaalisessa muodossa redundantin tiedon tallennusta ja siirtoa välttämällä saadaan tallennus tai siirtokapasiteetti tehokkaammin käyttöön. Kuvien kohdalla redundanssin vähentäminen perustuu siihen, että jos kuva esittää jotakin, kuten oletetaan, jokaisella tarkasteltavaksi valitulla riittävän pienellä alueella kuvan pisteiden arvojen voi olettaa riippuvan toisistaan jollakin tavalla. Poistamalla kuvapisteiden välisiä riippuvuuksia mallintamalla syötekuva jollakin menetelmällä osa redundanssista poistuu ja voidaan luoda kuvalle tiivistetty esitys. 9

10 3 KUVANTIIVISTYSMENETELMIEN TOIMINTA Kaikkien kuvantiivistysmenetelmien keskeisiä osia ovat mallinnus ja mallinnetun kuvan esittäminen tiivistetyssä muodossa. Tässä luvussa esitetään kuvantiivistysmenetelmien yleinen toimintaperiaate. Tämän jälkeen perehdytään tilastolliseen tiivistykseen ja esitellään entropian käsite, jota käyttäen johdetaan kuvan mallinnuksen tavoitteet. Erityisesti käsitellään kontekstimallinnusta, jota kaikki tässä työssä esiteltävät tiivistysmenetelmät soveltavat. Luvun lopuksi käydään vielä läpi kolmen entropiakoodauksen toiminta. Entropiakoodausta käytetään kuvan tiivistyksen esityksen luomiseen. 3.1 Toimintaperiaate Kuvassa 1 on esitetty häviöttömien kuvantiivistysmenetelmien toiminta yleisellä tasolla. Tiivistysprosessissa tehdään ensin syötteelle jokin muunnos, jonka tarkoituksena on muuntaa syöte helpommin tiivistettävään muotoon. Tämän jälkeen mallinnusvaiheessa pyritään vähentämään syötteen symbolien välisiä riippuvuuksia, jolloin osa syötteen redundanssista poistuu. Lopuksi luodaan tiivistetty tuloste koodaamalla mallinnuksen tuottamat symbolit sopivalla tavalla. Kuva 1: Tiivistys ja purkuprosessin periaatekaavio. Tiivistyksen purku on käänteinen prosessi tiivistykseen nähden. Syöte dekoodataan ja palautetaan tiivistyksessä poistettu redundanssi mallintamalla saatu syöte. Lopuksi tehdään käänteismuunnos, joka palauttaa alkuperäisen kuvan. 10

11 Tiivistysprosessissa voidaan jättää syötteen muunnos tekemättä, jolloin mallinnus saa syötteekseen tiivistettävän kuvan muuntamattomana. Tällöin myöskään käänteismuunnosta ei tehdä purkuprosessissa. Tässä työssä esitettävät kontekstipohjaiset tiivistysmenetelmät LOCO-I ja CALIC toimivat tällä tavalla. JPEG 2000 tekee tiivistyksessä kuvalle wavelet-muunnoksen ja purkuvaiheessa tämän käänteismuunnoksen. Kohdassa 3.2 esitellään tilastollisen tiivistyksen perusteita, joiden pohjalta johdetaan tavoitteita koodauksen ja mallinnuksen toiminnalle. Kohdassa 3.3 käsitellään kontekstipohjaisten tiivistysmenetelmien mallinnuksen toimintaa ja kohta 3.4 esittelee kolme tiivistysmenetelmissä yleisesti käytettyä koodausta. Wavelet-muunnosten perusteita esitellään myöhemmin luvussa Tilastollinen tiivistys Kun syötteestä poistetaan symbolien välisiä riippuvuuksia jollakin mallinnusmenetelmällä, saadaan tulokseksi jono mallinnuksen tuottamia symboleja. Mallintaja tuottaa jokaiselle symbolille myös todennäköisyysmallin, josta voidaan laskea jokaiselle mallintajan maalijoukon symbolille todennäköisyys sille, että tuotettu symboli on juuri tämä symboli. Mallintajan tuottamia symboleja ei voida tulostaa käyttäen jokaiselle symbolille kiinteän mittaista binaarista esitystä, sillä mallintajasta riippuen tuotettujen symbolien joukko saattaa olla jopa suurempi kuin mallintajan syötesymbolien joukko, jolloin esitys pidentyisi tiivistymisen sijaan. Tämän vuoksi annetaan symboleille vaihtelevan mittainen esitys, jolloin ajatuksena on käyttää useammin toistuville symboleille lyhyempiä bittijonoja kun harvemmin esiintyville. Jotta vaihtelevanmittaiset bittijonot voidaan vastaanotettaessa erottaa toisistaan, niiden pitää muodostaa koodi. Koodi on sovittu kieli, jonka kielioppisääntöjä käyttäen kieleen sisältyvät ilmaukset voidaan tulkita yksikäsitteisesti. Jos esimerkiksi sovitaan, että kunkin bittijonon kolmen ensimmäisen bitin muodostama binaariluku kertoo, montako seuraavaa bittiä kuuluu vielä tähän samaan jonoon, tällaiset vaihtelevanmittaiset jonot muodostavat koodin. Esimerkin hyvin yksinkertaisella koodilla voitaisiin esittää luku nolla kolmella bitillä, mutta luvun 255 esittämiseen tarvittaisiin 11 bittiä. Yleisestikin, jotta symbolijoukon joillekin symboleille voidaan antaa lyhyempi esitys kiinteän mittaiseen esitykseen nähden, pitää joidenkin symbolien esityksen pidentyä. Siksi päätetään seuraavassa kohdassa esitettävällä tavalla todennäköisyysmallin avulla, millainen 11

12 esitys pitää millekin symbolille antaa, jotta tuotettujen bittien määrän odotusarvo olisi mahdollisimman pieni Entropia Kun oletetaan, että symbolien s 1, s 2, s 3,..., s n esiintymistodennäköisyydet ovat p 1, p 2, p 3,..., p n (tässä siis arvot p i, 1 i n, muodostavat käytetyn todennäköisyysmallin), näiden symbolien muodostamalle joukolle voidaan määritellä entropia H(p 1, p 2, p 3,..., p n ). Shannon [11] määrittelee symbolijoukon entropian niin, että sen pitää toteuttaa seuraavat kolme ehtoa: i) H:n pitää olla jatkuva jokaisen p i :n suhteen. ii) Jos kaikki p i :t ovat yhtäsuuria, eli p i = 1 / n kaikilla 1 i n, H:n pitää olla n:n monotonisesti kasvava funktio. iii) Jos symbolien joukko jaetaan m:ään (m n) osajoukkoon, joiden leikkaus on tyhjä, ja määritellään kunkin osajoukon i esiintymistodennäköisyys p' i osajoukkoon kuuluvien symbolien esiintymistodennäköisyyksien summana, pitää alkuperäisen H:n arvon olla sama kuin summa, joka saadaan, kun lasketaan yhteen H(p' 1,..., p' m ) ja kaikki tulot p' i H i, joissa H i on osajoukolle i laskettu entropia. Kunkin arvon H i laskennassa pitää käyttää osajoukon i symbolien ehdollisia todennäköisyyksiä ehdolla, että joukko i on valittu, eli alkuperäiset symbolien todennäköisyydet pitää jakaa p' i :llä. Toisin sanoen H:n pitää toteuttaa yhtälö (1) jossa todennäköisyydet p j (j = 1,..., n) ja p' i (i = 1,..., m) on määritelty kuten edellä ja k i ilmaisee osajoukon ensimmäisen ja l i viimeisen p j -arvon indeksin. Lähteessä [11] on esitetty, että ainoa H:n määrittely, joka täyttää nämä ehdot on (2) 12

13 kun määritellään p i log 2 p i = 0 niillä i:n arvoilla, joilla p i = 0. Kaikki edellä esitetyt ehdot täyttyvät, kun valitaan kaavassa esiintyvät vakiot K ja z siten, että K > 0 ja z > 1. Kun entropian kaavassa (2) valitaan K = 1, saadaan odotusarvo yksittäiselle symbolille s annettavan z-arisen esityksen pituudelle, kun koodataan optimaalisella tavalla jono toisistaan riippumattomia, joukkoon { s 1, s 2, s 3,..., s n } kuuluvia symboleja, joiden esiintymistodennäköisyydet jonossa määrittelee todennäköisyysmalli {p 1, p 2, p 3,..., p n }. Vakio K määrittelee vain entropian arvolle käytettävän yksikön [11], joten käytännössä voidaan aina valita K = 1. Laskettaessa odotusarvoa symbolille annettavan binaarisen esityksen pituudelle valitaan siis kaavassa esiintyvät vakiot niin, että K = 1 ja z = 2. Edellä esitetyn mukaisesti entropian arvo on siis eräänlainen toisistaan riippumattomiksi oletettujen symbolien jonon sisältämän ei-redundantin informaation tiheyden mittari. Tämän avulla voi perustella Shannonin määritelmää entropialle. Määritelmän järkevyyden kannalta kohta i) on hyvin ilmeinen. Kohdassa ii) n:n arvon kasvaessa on tehtävä valinta yhä useamman yhtä todennäköisen symbolin välillä, jolloin tehdyn valinnan esittäminen vaatii sitä enemmän informaatiota, mitä suurempi n on. Entropian arvon pitää siis kasvaa vastaavasti. Kohta iii) huomioi sen seikan, että symbolin valinnan esittämiseen tarvittavan informaation määrä ei riipu siitä, valitaanko symboli suoraan alkuperäisestä symbolijoukosta vai jaetaanko symbolijoukko toisiaan leikkaamattomiin osajoukkoihin ja tehdään ensin valinta näiden osajoukkojen välillä ja sen jälkeen valitun osajoukon sisällä symbolien välillä. Kuvan 2 esimerkki selventää entropian määritelmän kolmatta kohtaa. Kohdassa a) tehdään valinta suoraan symbolien a, b ja c välillä. Entropian arvoksi saadaan H(1/2, 1/3, 1/6) = - ((1/2)*log 2 (1/2) + (1/3)*log 2 (1/3) + (1/6)*log 2 (1/6)) 1,459, kun K = 1 ja z = 2. Kohdassa b) valitaan ensin toinen yhtä todennäköisistä osajoukoista {a} ja {b, c} ja sen jälkeen tehdään valinta symbolien välillä valitun osajoukon sisällä. Tässä tapauksessa entropian arvoksi saadaan kaavan (1) mukaisesti H(1/2, 1/2) + (1/2) * H( (1/2)/(1/2) ) + (1/2) * H( (1/3)/(1/2), (1/6)/(1/2) ) = 13

14 1 + (1/2) * 0 + (1/2) * H(2/3, 1/3) 1,459, kuten pitikin. Erityisesti termi (1/2) * H((1/2)/(1/2)) saa arvon nolla, koska yksialkioisen joukon {a} valinnan jälkeen ei tarvita lainkaan lisäinformaatiota, jotta osataan valita joukon ainoa alkio a. Kuva 2: Kaksi tapaa tehdä valinta symbolien a, b ja c välillä [11]. Lopuksi on hyvä huomioida, että kaava (2) itse asiassa laskee symboleille annettavien esitysten pituuksien L i = log z p i, painotetun keskiarvon, jossa painotuskertoimet ovat esiintymistodennäköisyydet p i. Tästä nähdään, että määrätyn symbolin T entropia on H(T) = L T = -log z p T. Kun valitaan 2-kantainen logaritmi, saadaan tästä symbolin T esityksen vähimmäispituus bitteinä. Symboleille esitykset antava koodaus on siis optimaalinen, mikäli se tuottaa jokaiselle koodattavalle symbolille T binaarisen esityksen, jonka pituus on H(T) bittiä Mallintajan suunnittelu Edellisessä kappaleessa esiteltiin, kuinka entropian arvo ja siten tiivistysprosessin tulosteen pituus riippuu mallintajan tuottamien symbolien todennäköisyyksien jakaumasta. Nyt voidaan entropian käsitteen avulla johtaa tavoitteita mallintajan toiminnalle. Oletetaan, että symbolijoukossa S symbolien i ja j todennäköisyyksille on voimassa p i > p j. Jos tällöin muutetaan todennäköisyyksien p i ja p j arvoja siten, että erotus p i - p j pienenee, S:n entropia kasvaa [11]. Tämä voidaan todistaa seuraavasti: Oletetaan, että S on n:n (n 2) symbolin joukko {s 1, s 2,..., s n }, joita vastaavat todennäköisyydet ovat {p 1, p 2,..., p n }. Rajoituksetta voidaan olettaa, että valitut symbolit i ja j ovat S:n kaksi ensimmäistä symbolia, sillä jos näin ei ole, voidaan symbolit nimetä 14

15 uudelleen sopivalla tavalla. Oletetaan siis, että i = 1 ja j = 2. Tarvittaessa väite voidaan todistaa yleisellä logaritmin kantaluvulla, mutta oletetaan tässä logaritmin olevan 2- kantainen. Muutetaan nyt todennäköisyyksiä siten, että p 1 :stä vähennetään arvo ε (ε > 0) ja lisätään tämä arvo p 2 :een. Oletusten perusteella nyt on siis voimassa p 1 > p 2 ja ε > 0. Jotta tehtävä muutos ei vaikuttaisi symbolien s 1 ja s 2 todennäköisyyksien suuruusjärjestykseen, rajoitetaan lisäksi ε:n arvoa ylhäältä siten, että p 1 - ε > p 2 + ε ε < (p 1 - p 2 ) / 2. (3) Väite voidaan nyt kirjoittaa muodossa: kun p 1 > p 2 ja 0 < ε < (p 1 - p 2 ) / 2. (4) Kertomalla epäyhtälö (4) -1:llä ja eliminoimalla summalausekkeet saadaan: (p 1 - ε) log 2 (p 1 - ε) + (p 2 + ε) log 2 (p 2 + ε) < p 1 log 2 p 1 + p 2 log 2 p 2 (5) Tätä vastaavan yhtälön (p 1 - ε) log 2 (p 1 - ε) + (p 2 + ε) log 2 (p 2 + ε) = p 1 log 2 p 1 + p 2 log 2 p 2 (6) ratkaisut ovat ε = 0 ja ε = p 1 - p 2. Kun määritellään 0 log 2 0 = 0 samoin kuin entropian määritelmässä (2), epäyhtälön (5) molemmat puolet ovat jatkuvia välillä [0, p 1 - p 2 ] p 2 :n arvosta riippumatta. Lisäksi (5) toteutuu esimerkiksi arvolla ε = (p 1 - p 2 ) / 4, joten erityisesti se toteutuu, kun 0 < ε < (p 1 - p 2 ) / 2, ja siten väite on todistettu. Yleisesti entropia saa maksimiarvonsa, kun jokaisen S:n symbolin todennäköisyys on yhtä suuri, eli p i = 1 / n kaikilla arvoilla i = 1,..., n [11]. Minimiarvo nolla entropialle saadaan, kun yksi todennäköisyyksistä p i on yksi ja muut nollia. Näiden entropian ominaisuuksien perusteella tiivistysprosessin tulosteesta voidaan saada sitä lyhyempi, mitä vinompi mallintajan tuottamien symbolien todennäköisyysmalli on. Käytännössä mallintaja voi ryhmitellä tuotetut symbolit jollakin tavalla, jolloin 15

16 kullekin ryhmälle saadaan oma todennäköisyysmallinsa. Tätä käsitellään tarkemmin kontekstimallinnuksen yhteydessä kohdassa Mallinnus Ennustaminen Edellä esitetyn perusteella mallinnuksessa pyritään siis tuottamaan saadun syötesymbolien jonon perusteella jono tulossymboleja siten, että tulossymbolien entropia on pienempi kuin syötesymbolien entropia. Käytännössä tähän päästään havainnoimalla mahdollisimman useita syötesymbolien välisiä riippuvuuksia, jolloin havaitut riippuvuudet voidaan poistaa. Syötesymbolien välisiä riippuvuuksia poistetaan ennustamalla mallinnettavan symbolin arvo muiden syötteen symbolien perusteella jollakin menetelmällä. Tällöin riittää koodata symbolin numeerisen esityksen todellisen arvon ja saadun ennusteen (prediktio, prediction) erotus, ennustevirhe (prediktiovirhe, prediction error, prediction residual). Jos ennusteen laskenta toimii hyvin, ennustevirheiden hajonta on pieni, eli tuloksena saadaan haluttu vino mallintajan tulostesymbolien jakauma. Edellytyksenä ennusteen laskennan toiminnalle on, että dekoodaajassa voidaan muodostaa kullekin symbolille sama ennuste kuin koodaajassakin. Ratkaisuja tähän on kaksi: joko lähetetään dekoodaajalle erityistä tietoa, jonka perusteella dekoodaaja voi muodostaa ennusteen kulloisenkin symbolin arvolle, tai lasketaan ennuste vain niiden symbolien arvojen perusteella, jotka on jo aikaisemmin koodattu. Jälkimmäistä ratkaisua kutsutaan kausaaliseksi ennusteen laskennaksi ja se on yleisesti käytetty, koska ylimääräisen informaation lähetykseltä vältytään. Ennusteen laskentatapa voi olla kiinnitetty, jolloin ennuste lasketaan samalla tavalla jokaiselle kuvan symbolille tai voidaan käyttää adaptiivista ennusteen laskentaa, joka pyrkii mukautumaan tiivistyksen edetessä niin, että ennustevirheet pysyisivät aina mahdollisimman pieninä. Voidaan käyttää myös näiden yhdistelmiä, jolloin kiinteän ennustimen tuottamia arvoja korjataan adaptiivisesti, kuten kontekstimallinnukseen perustuvissa menetelmissä ennusteen laskenta on toteutettu [15], [16], [20]. Kiinteän ennustimen tapauksessa käytetään kuvapisteen arvon ennustamiseen yleensä vain joitakin ennustettavan kuvapisteen naapurustossa olevia kuvapisteitä. Voidaan olettaa, että ennustettavan kuvapisteen arvo on todennäköisesti melko lähellä naa- 16

17 puriensa arvoja, mutta sen sijaan kauempana olevien kuvapisteiden arvojen perusteella ei voida yleisesti päätellä mitään ennustettavan kuvapisteen arvosta. Vaikka näitä monimutkaisempia, toisistaan kauempana olevien kuvapisteiden välisiä riippuvuuksia esiintyykin, ne ovat hyvin kuvakohtaisia. Kuvassa saattaa esimerkiksi toistua samankaltainen tekstuuri useassa kohdassa. Tätä ei voida mitenkään huomioida vain kiinteää ennusteen laskentamenetelmää käyttäen. Adaptiivinen ennusteen laskenta pyrkii tiivistyksen edetessä tunnistamaan kuvasta edellä mainittuja monimutkaisempia riippuvuuksia, jolloin ne voidaan huomioida mallinnuksessa. Menetelmän haittapuolena on se, että syötetiedosta ei tehdä mitään oletuksia. Tämän vuoksi voidaan poistaa vain ne riippuvuudet, jotka on tunnistettu jo aikaisemmin tiivistysprosessin edetessä. Myös useita hyvin yksinkertaisia riippuvuuksia vierekkäisten kuvapisteiden välillä pitää tunnistaa kuvasta ennen kuin adaptiivinen ennustin voi alkaa poistaa niitä. Varsinkin kuvan alkupuolella (so. yläosassa) tiivistystulos on siten huono. Paras tiivistystulos voidaan saavuttaa yhdistämällä kiinteä ja adaptiivinen ennusteen laskenta. Tällöin adaptiivisen laskennan ei tarvitse tunnistaa kuvasta sellaisia riippuvuuksia, joita oletetaan esiintyvän yleisesti kaikissa tiivistettävissä kuvissa, sillä ne voidaan poistaa kiinteällä ennustimella jo ennen kuin käytetään adaptiivista ennustinta monimutkaisempien riippuvuuksien poistamiseen. Kokeiltaessa ennusteen laskentaa käytännössä on havaittu, että useimmilla harmaasävykuvilla ja ennusteen laskentamenetelmillä ennustevirheiden todennäköisyysjakauma on kaksipuolinen geometrinen jakauma, josta käytetään myös nimeä Laplacejakauma tai akronyymiä TSGD, two-sided geometric distribution [16] Kontekstimallinnus Perusteet Kontekstimallinnus on mallinnusmenetelmä, joka perustuu sekä kiinteän että adaptiivisen ennustimen käyttöön. Mikäli kuvan kaikkien näytteiden kohdalla ennustevirhe lasketaan samalla tavalla ja päivitetään saatujen ennustevirheiden perusteella vain yhtä, koko kuvalle yhteistä todennäköisyysmallia, malli muodostuu helposti liian tasaiseksi, sillä eri osista kuvaa saadaan erilaisia ennustevirheen arvoja. Kuvan niiltä alueilta, joilla on paljon lähes saman- 17

18 arvoisia kuvapisteitä, saadut ennustevirheet ovat todennäköisesti lähellä nollaa, kun taas "epätasaiset" alueet tuottavat usein itseisarvoiltaan suuria ennustevirheitä. Kuvan pisteet kannattaa siksi pyrkiä jakamaan ryhmiin niin, että kun samassa ryhmässä olevien kuvapisteiden arvoja ennustetaan käyttäen kiinteää ennustinta, saadaan mahdollisimman samansuuruisia ennustevirheitä. Tällaista kuvapisteelle valittua ryhmää kutsutaan kuvapisteen kontekstiksi. Kontekstien avulla kiinteän ennustimen tuottamaa ennustetta voidaan korjata adaptiivisesti, koska aikaisemmin saatujen ennustevirheiden keskiarvo tiivistettävälle kuvapisteille valitussa kontekstissa tiedetään. Lisäksi kullekin kontekstille voidaan tuottaa oma todennäköisyysmallinsa. Johtuen tavasta, jolla konteksteihin jako tehdään, kontekstikohtaiset todennäköisyysmallit ovat vinompia jakaumia kuin koko kuvalle muodostettu todennäköisyysmalli. Tämä tulos voidaan johtaa myös Shannonin esittämän ehdollisen entropian käsitteen avulla [11] Kontekstin valinta Jotta kontekstimallinnus toimisi oikein, purettaessa kuvaa pitää kullekin kuvapisteelle valita sama konteksti kuin tiivistettäessä valittiin. Kuvapisteelle valittua kontekstia ei voida eksplisiittisesti lähettää dekoodaajalle, koska tällöin tiivistystulos pidentyisi liikaa. Siksi myös kontekstin valinta on kausaalinen, jolloin valinta tehdään vain niiden syötesymbolien perusteella, jotka on jo aikaisemmin tiivistetty tai purettu. Näin dekoodaaja voi valita näytteelle saman kontekstin kuin koodaajakin ilman lisäinformaation lähetystä. Konteksti valitaan tiivistettävän kuvapisteen naapurikuvapisteiden arvojen perusteella. Toisin kuin kiinteän ennusteen laskennassa, naapurikuvapisteiden absoluuttiset arvot eivät ole merkityksellisiä kontekstin valinnassa. Yleisesti tiedetään, että kiinteän ennustimen ennustevirheen suuruus riippuu jollakin (kuvakohtaisella) tavalla ennustettavan kuvapisteen ympäristössä tapahtuvista muutoksista. Siksi kontekstin valinta pitää tehdä sen mukaan, millaisia arvoja tiivistettävän kuvapisteen naapurikuvapisteet saavat suhteessa toisiinsa. Valinta voidaan tehdä esimerkiksi vähentämällä naapurikuvapisteiden arvoja toisistaan ja kuvaamalla saadut erotukset viittaukseksi kontekstiin. 18

19 Kontekstien määrä Kontekstien määrällä on suuri vaikutus tiivistystulokseen. Liian pieni kontekstien määrä tuottaa helposti epäedullisia todennäköisyysmalleja tiivistyksen edetessä. Myös liian monen kontekstin käyttö huonontaa tiivistystulosta, sillä kunkin kontekstin kohdalla ensimmäiset kontekstiin kuuluvat symbolit tiivistyvät usein huonosti tai symbolien esitykset saattavat jopa pidentyä tiivistymisen sijaan. Tämä johtuu siitä, että kunkin kontekstin todennäköisyysmalli ja siten kontekstien kiinteään ennusteeseen tekemät korjaukset saattavat olla epäedullisia ennen kuin kontekstit on adaptoituneet syötteeseen. Lisättäessä kontekstien määrää syötteen symbolit jakaantuvat useampaan kontekstiin, jolloin kontekstit adaptoituvat hitaammin ja huonosti tiivistyvien symbolien osuus kasvaa [16]. Kontekstien määrään vaikuttaa kontekstin valintaperusteiden määrä. Jotta kontekstien määrä pysyisi tarpeeksi pienenä, kukin valintaan vaikuttava tekijä (esimerkiksi kahden naapurikuvapisteen erotus) kvantisoidaan ennen kuin valintatekijöistä muodostetaan viittaus kontekstiin. Usein kunkin valintatekijän kvantisointi tehdään samalla tavalla. Käyttämällä n:ää kontekstin valintaan vaikuttavaa tekijää, joista kukin kvantisoidaan m:ään alueeseen kontekstien määräksi c saadaan c = n m Kontekstimallinnuksen toimintakaavio Kuvassa 3 on periaatekaavio kontekstimallinnuksen toiminnasta. Aluksi valitaan käytettävä konteksti tiivistettävän kuvapisteen naapurikuvapisteiden perusteella. Kuvassa tätä esittää vasemman ylänurkan katkoviivalla esitetyt nuolet. Tämän jälkeen lasketaan kiinteää ennustinta käyttäen korjaamaton ennuste tiivistettävälle kuvapisteelle. Ennustetta korjataan lisäämällä kontekstin tilastotietojen avulla laskettu korjaustermi ennusteeseen. Ennustevirhe saadaan nyt laskemalla tiivistettävän kuvapisteen todellisen arvon ja korjatun ennusteen erotus. Ennustevirhe sekä kontekstin tilastotietojen perusteella saatu todennäköisyysmalli lähetetään tämän jälkeen koodaajalle. Lopuksi ennustevirhettä käytetään kontekstin tilastotietojen päivitykseen. Tämän jälkeen voidaan mallintaa syötteen seuraava kuvapiste. 19

20 Kuva 3: Kontekstimallinnuksen toimintakaavio. 3.4 Koodaus Tilastollinen tiivistys tehdään koodaamalla mallintajan tuottamat symbolit jollakin tavalla. Tässä on esitetty Huffman-koodauksen periaate, sekä yksityiskohtaisemmin kuvantiivistyksessä yleisemmin käytetyt Golomb-Rice koodaus ja aritmeettinen koodaus Huffman-koodaus Huffman-koodausta käytetään silloin, kun symbolien esiintymistodennäköisyyksien ennustaminen on hyvin vaikeaa ennen kuin kaikki koodattavat symbolit on käyty läpi. Kuvantiivistyksessä näin ei useinkaan ole, joten Huffman-koodaus on lähinnä yleiskäyttöisissä tiivistysalgoritmeissa käytetty koodaustapa. Kuitenkin esimerkiksi PNGkuvatiedostoissa käytetään LZ77-pohjaista tiivistysalgoritmia, joka käyttää Huffmankoodausta. Huffman-koodauksessa symbolille ei muodosteta koodia heti, kun symboli saapuu koodaajalle, vaan tietty määrä symboleja kerätään ensin koodaajan puskuriin. Kun puskuri täyttyy, lasketaan kunkin symbolien esiintymiskertojen määrä. Sen jälkeen kullekin 20

21 symbolille muodostetaan etuliitekoodi niin, että symbolin esityksen pituus päätetään symbolin esiintymiskertojen määrän perusteella. Etuliitekoodaus antaa kullekin symbolille esityksen, jonka etuliite ei ole minkään muun symbolin esitys. Näin symbolit voidaan erottaa toisistaan dekoodauksessa [2]. Kuvassa 4 on osa lähteessä [2] esitetystä Huffman-koodausesimerkistä. Esimerkissä muodostetaan Huffman-koodi sadan symbolin jonolle, jossa symbolien a, b, c, d, e ja f frekvenssit ovat 5, 9, 12, 13, 16 ja 45. Kun koodattavat symbolit esitetään puun lehtisolmuina, voidaan muodostaa binaarinen Huffman-koodipuu vaiheittain yhdistämällä kussakin vaiheessa ne kaksi alipuuta, joihin kuuluvien symbolien frekvenssien summa on pienin. Aluksi kohdassa a) jokainen lehtisolmu muodostaa oman alipuunsa. Yhdistämällä ne alipuut, jotka esittävät symboleja f ja e, saadaan alipuu, jonka symbolien yhteenlaskettu frekvenssi on 14 = Alipuiden yhdistäminen tehdään muodostamalla uusi solmu, jonka vasemmaksi lapseksi asetetaan toinen ja oikeaksi lapseksi toinen yhdistettävistä alipuista. Nyt kuvan kohdassa b) symbolin c sisältävällä alipuulla on pienin symbolien frekvenssien summa ja symbolin b sisältävällä alipuulla seuraavaksi pienin, joten yhdistetään nämä kaksi alipuuta. Näin jatketaan kunnes kaikki alipuut on yhdistetty yhdeksi koodipuuksi, joka on esitetty kuvan kohdassa c). Valmiissa koodipuussa kunkin symbolin binaarinen Huffman-koodisana on polku puun juuresta esitettävää symbolia vastaavaan lehteen. Koska vain puun lehtisolmut esittävät koodattavia symboleja, saatu koodi on etuliitekoodi. 21

22 Kuva 4: Huffman-koodipuun muodostus [2]. Huffman-koodauksen huono puoli on se, että myös symbolien esiintymisfrekvenssit pitää liittää koodaajan tulostukseen, jotta dekoodaus onnistuisi. Voisi ajatella, että laskettaisiin koodaajan puskurin käytön sijaan symbolien esiintymisfrekvenssit tietystä määrästä viimeksi koodattuja symboleja ja asetettaisiin esiintymättömien symbolien frekvenssiksi yksi, jotta myös ne voitaisiin tarvittaessa koodata. Tällöin esiintymisfrekvenssejä ei tarvitsisi lähettää erikseen ja koodaus adaptoituisi syötteen mukaan, mutta uuden Huffman-koodipuun luominen jokaiselle koodattavalle symbolille erikseen olisi hidas operaatio. Golomb-Rice koodaus toteuttaa tämän idean huomattavasti vähemmällä laskennalla, mutta on rajoittuneempi koodattavien symbolien suhteen kuin Huffman-koodaus Golomb-Rice koodaus Golomb-Rice koodaus on Huffman-koodauksen kaltainen aakkoston symbolien esitystapa. Toisin kuin Huffman-koodauksen tapauksessa, kunkin symbolin Golomb-Rice koodi voidaan muodostaa jo ennen kuin koko koodattavien symbolien joukko on muodostettu ja tarkat esiintymisfrekvenssit tiedetään. Myöskään mitään Huffman-kooditaulukkoa vastaavaa rakennetta ei tarvitse liittää koodaajan tulostukseen. Hyvän tiivistys- 22

23 suhteen saavuttamiseksi tiivistettävän tiedon symbolien esiintymistodennäköisyyksien tulee kuitenkin noudattaa mahdollisimman tarkasti geometrista jakaumaa. Golomb-Rice koodaajan toteutus on hyvin yksinkertainen. Kun k on koodaajalle annettu parametri, voidaan jokainen koodattava ei-negatiivinen kokonaisluku n esittää osamäärän q = n / 2 k ja jakojäännöksen r = n (mod 2 k ) yhdistelmänä. Jakolasku, jossa jakaja on muotoa 2 x (tässä x on kokonaisluku), voidaan toteuttaa tehokkaasti bittien siirto-operaationa. Koodi muodostetaan tulostamalla r k-bittisenä binaarilukuna ja q:n unaarinen esitys, eli q kappaletta 0-bittejä, joita seuraa yksi 1-bitti (tai vastaavasti q 1- bittiä, joita seuraa esityksen päättävä 0-bitti). Dekoodaaja toteutetaan vastaavasti [15], [16], [17]. Huffman-koodauksesta poiketen Golomb-Rice koodaus on siis parametrisoitu menetelmä. Lisäksi, jotta koodausta voidaan käyttää, koodattava data pitää esittää sarjana positiivisia kokonaislukuja. Mikäli lukujen esiintymistiheydet noudattavat mahdollisimman hyvin geometrista jakaumaa siten, että luvun nolla esiintymistiheys on suurin, menetelmällä voidaan päästä tilan käytön suhteen lähes optimaaliseen tulokseen [17]. Parametrilla k on suuri vaikutus tiivistystulokseen, joten sen oikea valinta koodattavien lukuarvojen perusteella on tärkeää. Pieni k:n arvo antaa pienille luvuille lyhyemmät esitykset, mutta suurten lukujen esittämiseen vaaditaan useita bittejä. Suuremmalla k:n arvolla suurten lukujen esitys lyhenee, mutta toisaalta (oletuksena useammin esiintyvien) pienten lukujen esitys pidentyy. Optimaalinen k:n arvo siis riippuu geometrisen jakauman muodosta. Golomb-Rice koodausta käyttävät kuvantiivistysmenetelmät muuttavat k:n arvoa tiivistysprosessin edetessä tiettyjen sääntöjen mukaisesti pyrkien näin pitämään tiivistystuloksen mahdollisimman hyvänä [16]. Taulukossa 1 on esimerkki Golomb-Rice koodauksesta parametrin k kolmella eri arvolla. Koodatuissa esityksissä q:n unaarisen esityksen päättää 1-bitti. Sarakkeissa, joissa k = 2 ja k = 4, esityksen q- ja r-osat on erotettu toisistaan välilyönnillä. Kun k = 0, Golomb-Rice koodisanaan sisältyy vain unaarinen q-osa. 23

24 Taulukko 1: Esimerkki Golomb-Rice koodauksesta kolmella parametrin k arvolla. Koodattava arvo k = 0 k = 2 k = Sekä Huffman että Golomb-Rice koodaus tulostavat vähintään yhden bitin jokaista esitettävää arvoa kohti. Mikäli yksittäinen koodattava arvo esiintyy erittäin usein (arvojen jakauma on hyvin vino) molemmat koodit käyttävät enemmän bittejä kuin olisi tarpeellista. Tätä voi tiivistysmenetelmän suunnittelussa pyrkiä välttämään esimerkiksi siirtymällä jakson pituuden koodaukseen, kun havaitaan saman arvon toistuvan usein pitkinä, yhtenäisinä jaksoina [15], [16]. Aritmeettinen koodaus voi käyttää vähemmän kuin yhden bitin yhden symbolin esittämiseen, joten sitä käytettäessä ongelmaa ei ole Aritmeettinen koodaus Aritmeettinen koodaus on kuvantiivistysmenetelmissä usein käytetty informaation koodaustapa. Sen etuja ovat tehokas tiivistys ja se, että erillistä kooditaulukkoa ei tarvitse lähettää koodatun tiedon mukana. Edellinen seuraa siitä, että jokaista symbolia kohti voidaan käyttää r > 0 bittiä, jossa r:n ei tarvitse rajoittua kokonaislukuihin. Symbolia kohden käytettävien bittien määrä olla aina tarkasti kulloinkin koodattavan symbolin entropian suuruinen, toisin kuin esimerkiksi Huffman ja Golomb-Rice koodauksessa. Erityisesti voi olla r < 1. Kooditaulukon käytöltä taas vältytään jos koodaus toteutetaan niin, että päivitetään koodattavien symbolien esiintymistodennäköisyyksiä samalla, kun syötettä koodataan. Tällöin dekoodaaja voi laskea saman todennäköisyyksien jakauman jo koodatusta syötteen osasta. Aritmeettisen koodauksen haittapuolia ovat vaativampi toteutus ja suurempi laskennan tarve muihin esitettyihin koodaajiin verrattuna. Seuraavassa esitetyt aritmeettisen koodaajan toimintaperiaatetta ja käytännön toteutusta käsittelevät kappaleet on kirjoitettu lähteen [8] pohjalta. 24

25 Toimintaperiaate Symbolijonon S aritmeettinen koodi on puoliavoin reaalilukuväli [a, b), jossa 0 a < b < 1. Kun symbolien arvioidut tai todelliset esiintymistodennäköisyydet jonossa (käytetty todennäköisyysmalli) ja koodattavan symbolijonon S pituus tiedetään, tulostettu väli [a, b) esittää tätä jonoa yksikäsitteisesti. Johtuen tavasta, jolla a:n ja b:n arvot tuotetaan, mikä tahansa lukuarvo x, a x < b, riittää kuvaamaan yksikäsitteisesti väliä [a, b), kun koodattavan symbolijonon pituus tiedetään. Siten [a, b):n sijaan voidaan tulostaa vain yksittäinen tällä välillä oleva binaariluku. Jotta tulostettu koodi olisi mahdollisimman lyhyt, valitaan näistä se luku, jonka binaariesitys on lyhin. Merkitään symbolijonossa S esiintyvän symbolin s esiintymistodennäköisyyttä tässä jonossa P(s):llä, 0 P(s) 1. Kun kaikille symboleille s S tiedetään P(s), voidaan reaalilukuväli [0, 1) jakaa eri symboleja vastaaviin osaväleihin niin, että kukin osaväli esittää yksikäsitteistä symbolia. Jokaista symbolia s vastaavan osavälin pituus on P(s). Jako voidaan tehdä miten tahansa, kunhan se tehdään samoin sekä koodaajassa että dekoodaajassa. Jos koodattavat symbolit ovat ei-negatiivisia kokonaislukuja, luonnollinen tapa jaolle on määritellä nollan väliksi [0, P(0)), ykkösen väliksi [P(0), P(0) + P(1)) ja niin edelleen, kunnes viimeisen luvun, n, väliksi saadaan [P(0) + P(1) P(n - 2) + P(n - 1), 1). Kun osaväleihin jako on tehty, valitaan koodattavan jonon ensimmäistä symbolia vastaava osaväli. Merkitään tätä [l 1, h 1 ):llä. Jaetaan seuraavaksi [l 1, h 1 ) edelleen osaväleihin samoin kuin alkuperäinen välikin, mutta nyt jaon ensimmäinen osaväli on [l 1, l 1 + d 1 P(0) ), jossa d 1 :llä on merkitty välin [l 1, h 1 ) pituutta, eli d 1 = h 1 - l 1. Samoin seuraava osaväli on [l 1 + d 1 P(0), l 1 + d 1 (P(0) + P(1)) ) ja viimeinen [l 1 + d 1 (P(0) + P(1) P(n - 2) + P(n - 1) ), h 1 ). Näistä valitaan taas syötteen seuraavaa symbolia vastaava osaväli. Näin jatketaan niin kauan kuin koodattavassa jonossa on jäljellä symboleja. Symbolijonon pituus pitää siis tietää dekoodauksessa tai voidaan käyttää erityistä symbolia loppumerkkinä. Tämä symboli saa esiintyä vain koodattavan jonon lopussa ja sen todennäköisyydeksi asetetaan 1 / jonon pituus. Kuvassa 5 on esitetty symbolijonon BDAB aritmeettinen koodaus, kun symbolien todennäköisyydet ovat P(A) = 0,38, P(B) = 0,08, P(C) = 0,30, P(D) = 0,20 ja P(E) = 0,04. Tuloste on reaalilukuväli [0, ; 0, ). 25

26 Kuva 5: Aritmeettinen koodaus Dekoodaus toteutetaan vastaavasti. Jotta dekoodaus onnistuu, pitää käytetyn todennäköisyysmallin olla sama kuin koodauksessakin, eli pitää joko käyttää kiinteää todennäköisyysmallia sekä koodaajassa että dekoodaajassa tai välittää malli dekoodaajalle jollakin tavalla. Aluksi luetaan dekoodattava reaaliluku x ja jaetaan taas väli [0, 1) osaväleihin symbolien todennäköisyyksien mukaan (samalla tavalla kuin koodaajassakin). Tämän jälkeen tutkitaan, mille osavälille x kuuluu. Tulostetaan tätä osaväliä (l, h) vastaava symboli ja asetetaan sitten x:lle uusi arvo (x - l) / (h - l). Tämän jälkeen dekoodataan seuraava symboli, kunnes koko symbolijono on dekoodattu Implementoinnista Aritmeettista koodaajaa ei voi implementoida suoraan edellä olevan toiminnan kuvauksen mukaan, koska silloin tarvittaisiin paljon tarkempaa liukulukujen esittämistä kuin tietokoneissa on mahdollista. Sen sijaan käytetään (etumerkittömiä) kokonaislukurekistereitä reaaliluvun pelkän desimaaliosan esittämiseen (kokonaisosan tiedetään olevan aina nolla). Voidaan käyttää esimerkiksi 16- tai 32-bittisiä rekistereitä. Koodauksen alkaessa merkitään nykyisen välin pienintä arvoa, nollaa, niin, että kaikki rekisterin l bitit ovat nollia, ja ajatellaan tämän nollien jonon jatkuvan loputtomiin. Samoin merkitään suurinta mahdollista esitettävää lukua 0, (binaarisena ) päättymättömäksi ajatellulla sarjalla ykkösbittejä, joista rekisteriin h siis mah- 26

27 tuu eniten merkitseviä niin monta kuin rekisterin leveys on. Oletetaan tässä, että l ja h ovat 16-bittisiä. Seuraavaksi luetaan koodattavan jonon ensimmäinen symboli s ja asetetaan rekistereihin l ja h uudet arvot luetun symbolin ja todennäköisyysmallin perusteella. Nyt pitää kuitenkin huomata, että koska h:ssa olevaa päättymätöntä ykkösbittien jonoa merkitään äärellisen pituisella binaariluvulla , ei l:n ja h:n määrittämän välin pituus ole (h - l) / 2 16, vaan (h l) / Rekisterin l uusi arvo voidaan asettaa suoraan aiemmin esitetyllä tavalla, mutta h:n uudeksi arvoksi tulee l:n uusi arvo lisättynä P(s) - 1:llä, kun oletetaan, että symbolien todennäköisyydet on myöskin esitetty 16-bittisinä todennäköisyyksien arvojen desimaaliosina. Edellä esitettyä l:n ja h:n arvojen muuttamista luettujen symbolien mukaan voidaan jatkaa jonkin aikaa, mutta koska erotus h - l pienenee asymptoottisesti aina, kun h:ta ja l:ää muutetaan, pitää estää alivuodon syntyminen. Alivuototilanteessa l tai h saa väärän arvon luvun liian pienen esitystarkkuuden vuoksi. Koska erotus h - l ei voi koskaan kasvaa, tiedetään, että jos molempien rekisterien eniten merkitsevät bitit tulevat keskenään samoiksi, ne eivät enää voi muuttua. Tällöin voidaan tulostaa l:n eniten merkitsevä bitti ja vapauttaa tilaa vähemmän merkitsevien bittien esittämiseen siirtämällä molempia rekistereitä yhden bitin verran vasemmalle. Rekisterin h vähiten merkitseväksi bitiksi pitää siirron jälkeen asettaa 1, koska niiden h:n vähiten merkitsevien bittien, joita ei voida esittää, ajatellaan olevan 1-bittejä. Edellä esitetyllä tavalla lukujen esitystarkkuus on riittävä kaikissa tapauksissa yhtä lukuun ottamatta. Koodaus ei toimi oikein silloin, kun h lähestyy arvoa ja l arvoa , mutta arvot lähestyvät toisiaan niin vähän kerrallaan, että molempien rekisterien eniten merkitsevät bitit eivät tule keskenään samoiksi ennen kuin päädytään alivuotoon. Tältä voidaan välttyä tarkistamalla molempien rekisterien toiseksi merkitsevimpien bittien arvot jokaisen sellaisen l:n ja h:n muutoksen jälkeen, josta ei seurannut eniten merkitsevien bittien muuttuminen samoiksi. Jos l:n toiseksi merkitsevin bitti on yksi ja h:n nolla, esitystarkkuus saattaa loppua koodauksen edetessä pidemmälle. Tällöin poistetaan molempien lukujen toiseksi merkitsevimmät bitit ja siirretään tätä vähemmän merkitseviä bittejä yhden bitin verran vasemmalle (taas muuttaen siirron jälkeen h:n vähiten merkitsevä bitti ykköseksi). Tätä toistetaan kunnes l:n toiseksi merkitsevin bitti on nolla tai h:n vastaava bitti yksi. Jokaisella bittien poistolla kasvatetaan laskuria, joka kertoo poistettujen bittien määrän. Kun eniten merkitsevät bitit tulevat 27

28 samoiksi, tulostetaan l:n eniten merkitsevä bitti ensin kerran ja sen jälkeen vielä niin monta kertaa kuin laskuri osoittaa. Lopuksi nollataan laskuri. Kaikki pois jätetyt bitit saavat lopulta välttämättä saman arvon kuin eniten merkitsevä bitti. 28

29 4 WAVELET-MUUNNOSTEN PERUSTEITA Kohdassa 2.4 todettiin, että digitaalinen harmaasävykuva voidaan ajatella diskreettinä signaalina. Kun kuvaa käydään läpi rivijärjestyksessä vasemmalta oikealle, ensimmäisen vaakarivin ensimmäisen kuvapisteen harmaasävy edustaa signaalin tasoa ajanhetkellä t = 0, tämän vieressä oikealla puolella olevan kuvapisteen harmaasävy signaalin tasoa ajanhetkellä t = 1 ja niin edelleen. Toisenlainen samaa kuvaa esittävä signaali saadaan, kun käydään kuva läpi pystyrivien muodostamassa järjestyksessä niin, että kukin pystyrivi käydään läpi ylhäältä alaspäin. Tällaisissa kuvaa esittävissä signaaleissa sekä aika että signaalin taso kullakin ajanhetkellä ovat kvantittuneita, sillä aika vastaa kuvapisteen sijaintia kuvassa ja signaalin taso kuvapisteen harmaasävyä. Tässä luvussa esitetään tällaisen kvantittuneen signaalin muuntamiseen soveltuvan diskreetin waveletmuunnoksen perusteet ja muunnoksen soveltaminen kuvantiivistykseen. 4.1 Signaalin esitys taajuusalueella Fourier-muunnos perustuu siihen, että mille tahansa jaksolliselle signaalille voidaan muodostaa esitys, joka on sini ja kosinifunktioiden summa [12]. Signaalin Fouriermuunnettu esitys sisältää kullekin eritaajuiselle ja vaiheiselle sini ja kosinifunktiolle kertoimen, joka ilmaisee, montako kertaa kyseinen funktio sisältyy edellä mainittuun summaan. Näin signaali esitetään siis taajuuden funktiona tavanomaisen ajan funktiona esityksen sijaan [13]. Kuvasignaalin muunnoksessa taajuusalueelle sovelletaan (2-ulotteista) diskreettiä Fourier-muunnosta. Tällöin muunnoksen tuloksena saadaan äärellinen määrä erivaiheisien ja taajuuksisien sini ja kosinifunktioiden kertoimia, jotka sisältävän saman informaation kuin alkuperäinen signaalikin. Alkuperäinen signaali voidaan siten palauttaa tarkasti Fourier-käänteismuunnoksella. Kuvasignaalin muuntoa taajuusalueelle voidaan hyödyntää signaalin esityksen tiivistyksessä, sillä Fourier-muunnetussa signaalissa suurin osa kuvan informaatiosta sisältyy esityksen matalataajuisiin komponentteihin. Häviöllisen tiivistyksen tapauksessa korkeataajuiset komponentit voidaan jättää koodaamatta ja häviöttömässä tiivistyksessäkin esityksen redundanssin vähentäminen helpottuu informaatiosisällön keskittyessä matalien taajuuksien esityksiin. 29

30 4.2 Kuvasignaalin samanaikainen esitys ajan ja taajuuden funktiona Vaikka Fourier-muunnoksen avulla pystytään erottelemaan kaikki kuvasignaalissa esiintyvät taajuudet, ei kuitenkaan tiedetä, milloin ajan suhteen tarkasteltuna kukin taajuus signaalissa esiintyy. Fourier-muunnettua signaalia voidaan siis tarkastella taajuuden funktiona, mutta samalla menetetään mahdollisuus tarkastella signaalia ajan funktiona. Tämä johtuu siitä, että Fourier-muunnoksen kantafunktiot, sini ja kosinifunktio, eivät ole (signaaleiksi tulkittuina) ajan suhteen paikallisia, vaan jatkuvat äärettömyyksiin [3]. Kuvantiivistyksessä ongelmana on se, että äärettömyyksiin jatkuvat, jaksolliset kantafunktiot eivät sovellu hyvin kuvasignaalin jyrkkien muutosten, esimerkiksi kuvassa olevien terävien reunojen, esittämiseen. Tämän ratkaisemiseksi kuva jaetaan usein pieniin esimerkiksi JPEG-menetelmän tapauksessa 8x8 kuvapisteen kokoisiin lohkoihin, jotka tiivistetään erikseen. Tällöin jyrkkä intensiteetin muutos kuvasignaalissa vaikuttaa vain niiden lohkojen tiivistämiseen, joiden alueelle muutos osuu. Edellä esitetyllä menettelyllä saadaan signaalille esitys sekä ajan että taajuuden funktiona, mutta jako kiinteän kokoisiin lohkoihin on ongelmallinen. Mikäli lohkot ovat liian suuria, kuvassa esiintyvä jyrkkä intensiteetin muutos vaikuttaa hyvin monien kuvapisteiden muunnokseen. Toisaalta, jos kuva jaetaan liian pieniin lohkoihin, kuvasignaalissa esiintyvät matalat taajuudet jakaantuvat tarpeettomasti useiden, Fourier-muunnoksessa täysin toisistaan riippumattomien, lohkojen alueelle, mikä huonontaa tiivistystulosta. Edellistä parempi muunnos saadaan, kun tarkastellaan kuvasignaalia ajan suhteen usealla resoluutiolla, mikä vastaa kuvan jakoa lohkoihin usealla eri tavalla. Kuvan 6 a- kohdassa on käytetty signaalin muunnoksessa kiinteää resoluutiota ajan suhteen, ja b- kohdassa korkeammat taajuudet on esitetty suuremmalla resoluutiolla. Kuvan esityksestä näkyy, että kun resoluutiota ajan suhteen parannetaan, resoluutio taajuuden suhteen välttämättä huononee ja päinvastoin. Pohjimmiltaan aika ja taajuusresoluution keskinäisessä riippuvuudessa (myös jatkuvien signaalien tapauksessa) on kyse Heisenbergin epätarkkuusperiaatteesta, joka määrittelee teoreettisen ylärajan sille, kuinka tarkasti signaalin taajuus ja tämän taajuuden esiintymisaika voidaan mitata samanaikaisesti [13]. Kuvan 6 alkuperäislähde on [3]. 30

31 Kuva 6: Signaalin muunto aika-taajuusalueelle käyttäen a) Fourier-muunnoksen kantafunktioita ja kiinteää resoluutiota ajan suhteen ja b) wavelet-kantafunktioita ja taajuudesta riippuvaa resoluutiota ajan suhteen. [3] 4.3 Wavelet-muunnos Wavelet-muunnos ratkaisee edellisessä kohdassa mainitun signaalin esityksen ongelman käyttämällä muunnoksessa kantafunktiona jaksollisten ja äärettömyyksiin jatkuvien funktioiden sijaan wavelet-emofunktioita, jotka ovat tietynlaisia, ajan suhteen paikallisia aaltofunktiota. Toisin kuin Fourier-muunnoksen tapauksessa, muunnoksessa käytettävät funktiot voidaan siis valita. Erilaisia wavelet-emofunktioita voidaan johtaa äärettömän monta [13]. Koska wavelet-emofunktiot ovat paikallisia, saadaan koko signaali muunnettua emofunktiota siirtämällä. Tällöin emowaveletia voi ajatella ikkunana, jota siirretään yli muunnettavan signaalin. Emowaveletia skaalaamalla voidaan signaalista erottaa erilaiset taajuudet. Kohdan 4.2 esityksen mukaisesti laajennetulla emofunktiolla saadaan muunnettavan signaalin matalat taajuudet ja emofunktion supistetulla versiolla korkeat taajuudet. Seuraavissa kohdissa on esitetty wavelet-muunnosten perusteita. Kohta esittelee lyhyesti jatkuvan wavelet-muunnoksen ja kohdassa esitellään diskreetit waveletit. Kohdassa 4.4 käsitellään signaalin moniresoluutioesitystä sekä esitellään diskreetti wavelet-muunnos ja lopuksi kohdassa 4.5 käsitellään diskreetin waveletmuunnoksen soveltamista kuvantiivistykseen. 31

32 4.3.1 Jatkuva wavelet-muunnos Seuraavassa f(t) esittää signaalin tasoa ajan funktiona. Funktion f(t) jatkuva waveletmuunnos (CWT = continuous wavelet transform), γ(s, τ), määritellään [13] (7) missä s on skaalaustekijä, τ siirron määrä ja ψ * s,τ skaalatun ja siirretyn wavelet-emofunktion kompleksikonjugaatti. Emowaveletin skaalaus ja siirto määritellään [13] (8) Emowavelet ψ(t) voidaan valita muunnoksen käyttötarkoituksen mukaan. ψ(t) ei kuitenkaan voi olla mikä tahansa funktio, vaan sen pitää täyttää wavelet-funktion määrittelevät ehdot. Jotta sekä muunnos että käänteismuunnos voitaisiin tehdä informaatiota kadottamatta, emowaveletin ψ(t) Fourier-muunnokselle Ψ(ω) pitää olla voimassa [13]. (9) Tässä siis ω käy läpi koko taajuusalueen. Jotta kaava (9) toteutuisi, pitää olla voimassa Ψ(ω) 2 = 0, kun ω = 0. Fourier-muunnoksen määritelmän perusteella tämä toteutuu, kun. (10) Funktion ψ kuvaajan ja t-akselin väliin jäävien pinta-alojen pitää siis olla yhtä suuret t- akselin kummallakin puolella, joten ψ(t):n pitää olla aaltofunktio. Jotta informaatio voisi säilyä muunnoksessa, vaaditaan lisäksi, että saatavat waveletkertoimet, γ(s, τ), ovat äärellisiä. Käytännössä kerrointen pitää olla myös itseisarvoiltaan riittävän pieniä ja ne pitää voida esittää äärellisellä tarkkuudella. Tämä asettaa ψ:n saamille arvoille ja välille, jolla ψ:n arvo voi poiketa nollasta, eräitä rajoituksia. Näiden rajoitusten johtaminen vaatisi wavelet-funktioiden teorian syvällistä käsittelyä, eikä rajoituksia siksi johdeta tämän työn puitteissa. Digitaalista kuvaa esittävissä signaaleissa sekä aika että signaalin taso ovat diskreettejä, eikä jatkuvaa wavelet-muunnosta voida suoraan soveltaa kuvantiivistykseen. Jos esimerkiksi oletetaan, että f(t), jossa t = 0, 1,..., 255 ja f(t + r) = f(t) kaikilla reaaliluvuilla r [0, 1), esittää tiivistettävän kuvan yhtä vaakariviä, ja lasketaan f:lle 32

33 wavelet-kertoimet kaikilla arvoilla τ = 0, 1,..., 255 ja s = 1, 2,..., 256 (tarvittaessa f:ää laajentaen siten, että f(t + 256) = f(t) kaikilla t:n arvoilla), saadaan muunnoksen tuloksena = wavelet-kerrointa, jotka sisältävän saman informaation kuin f(t) t:n arvoilla 0, 1,..., 255. Kertoimia tuotetaan siis neliöllinen määrä arvoihin f(t) nähden, mikä ei ole tiivistyksessä toivottavaa. Lisäksi saadut kertoimet eivät välttämättä ole kokonaislukuja, joten kerrointen riittämätön esitystarkkuus voi muodostua ongelmaksi [13] Diskreetit wavelet-funktiot Jotta edellisen kohdan esimerkissä saataisiin vain 256 wavelet-kerrointa, pitää muunnoksessa skaalaus ja siirtoparametrin arvot valita sopivasti. Siirron pitää riippua skaalauksesta siten, että ei tuoteta enempää wavelet-kertoimia kuin signaalin esittämiseksi tarvitaan. Toisaalta pitää huomioida, että informaatiota ei saa kadota muunnoksessa. Muuntamalla kaava (8) muotoon (11) saadaan diskreetit wavelet-funktiot [13]. Tässä skaalaustekijä, j, ja siirron määrä, k, ovat kokonaislukuja. Kun valitaan s 0 = 2 ja τ 0 = 1, signaalin muunnos voidaan tehdä informaatiota kadottamatta, eikä toisaalta tuoteta tarpeettomasti redundantteja waveletkertoimia [13]. Kuvassa 7 on esitetty diskreettien wavelet-funktioiden sijainti siirtoskaalaus koordinaatistossa, mikä saadaan helposti vastaavasta esityksestä aika-taajuus koordinaatistossa. Kuvaa on hieman muokattu lähteen [13] esityksestä. 33

34 Kuva 7: Diskreettien waveletien sijainti siirto-skaalaus koordinaatistossa [13]. Jotta käänteismuunnos olisi mahdollinen, diskreettien wavelet-funktioiden pitää muodostaa ortonormaali joukko, eli funktioiden muodostamassa vektoriavaruudessa jokainen sisätulo (X, Y) on nolla aina, kun X ja Y ovat eri funktioita. Lisäksi avaruuden jokaisen funktion normin pitää olla yksi, joten kaikille funktioille pitää olla (X, X) = 1. Sisätulo määritellään vastaavasti kuin wavelet-kertoimet kaavassa (7). Ortonormaali joukko saadaan, kun emowavelet valitaan sopivasti [13]. Käänteismuunnos voidaan tämän jälkeen suorittaa kaavalla (12) Jotta koko signaali (t = t 0, t 0 + 1,..., t 1 ) saadaan muunnettua (ja käänteismuunnettua), k:lle ja j:lle annettavat arvot pitää valita sopivasti. Siirtoparametrille k annettavien arvojen joukko riippuu muunnettavan signaalin kestosta ja käytettävästä skaalauksesta j. Seuraavassa kohdassa käsitellään signaalin moniresoluutioesitystä, joka ratkaisee käytettävien skaalauksien j valinnan. 4.4 Moniresoluutioesitys Kun signaalista lasketaan wavelet-kertoimet γ(j, k) käyttäen kiinteää j:n arvoa, saadaan esiin signaalin taajuudet, jotka ovat jollakin välillä f 0 :sta f 1 :een [13]. Wavelet-funktio 34

35 ψ(j, k) muodostaa siis digitaalisen kaistanpäästösuodattimen, joka päästää läpi vain signaalin tietyt taajuudet [4]. Vastaavasti voidaan määritellä digitaalisia alipäästösuodattimia, jotka suodattavat signaalista pois tietyn taajuuden f 0 ylittävät taajuudet, ja ylipäästösuodattimia, jotka suodattavat signaalista taajuuden f 0 alittavat taajuudet [4]. Kun resoluutio ajan suhteen kaksinkertaistetaan, eli siirrytään yhden askeleen pienempään skaalaan vähentämällä j:n arvoa yhdellä, wavelet-funktion ψ(j, k) tuottaman taajuuskaistan (f 0 :sta f 1 :een) leveys kaksinkertaistuu ja signaalista saadaan esiin edelliseen skaalaukseen nähden kaksi kertaa korkeammat taajuudet, jotka ovat nyt 2f 0 :n 2f 1 :n määräämällä välillä [13]. Koska kuvasignaalissa esiintyvillä taajuuksilla on ylä ja alaraja, saadaan näin kaikki esiintyvät taajuudet periaatteessa katettua j:n arvoa muuttamalla. Suurin arvo, joka j:lle pitää antaa, on kuitenkin teoriassa ääretön, koska saatavan taajuuskaistan leveys puolittuu aina, kun siirrytään askeleen suurempaan skaalaan. Kuva 8 on esimerkki funktioiden ψ(j, k) kattamista taajuusalueista j:n arvoilla 1, 2, 3 ja 4. Kuvaa on hieman muokattu lähteen [13] esityksestä. Kuva 8: Esimerkki funktioiden ψ(j, k) kattamista taajuusalueista j:n arvoilla 1, 2, 3 ja 4 [13] Skaalausfunktio Edellisessä kohdassa esitetty ongelma voidaan ratkaista niin, että koko taajuusaluetta ei yritetä kattaa waveleteilla [13]. Koska ψ(j, k) muodostaa kaistanpäästösuodattimen, koko taajuusalue on mahdollista kattaa, kun käytetään ψ(j, k):n ohella alipäästösuodatinta, joka päästää läpi kaikki ne taajuudet, jotka ovat matalampia kuin alin ψ(j, k):n läpi päästämä taajuus [13]. Tästä on esimerkki kuvassa 9. Kuva on muokattu lähteen [13] esityksestä. 35

36 Kuva 9: Esimerkki skaalausfunktion φ(t) kattamasta taajuusalueesta [13]. Skaalausfunktio määritellään (13) Nyt signaalin kaikki taajuudet saadaan sisällytettyä muunnokseen, kun esitetään wavelet-kertoimilla kaikki taajuudet johonkin rajaan (skaalaus j < j 0 ) asti ja käytetään skaalausfunktiota tätä matalampien taajuuksien (skaalaus j j 0 ) esittämiseen [13]. Skaalausfunktio määritellään itse asiassa samoin kuin käänteismuunnos diskreeteillä waveleteilla (kaava 12). Näin pitää ollakin, koska jos signaali suodatetaan alipäästösuodattimella, joka päästää läpi kaikki ne taajuudet, jotka ovat matalampia tai yhtä matalia kuin korkein signaalissa esiintyvä taajuus, tuloksena saadaan alkuperäinen signaali. Skaalausfunktion lausekkeessa esiintyy edelleen j. Sekä skaalausfunktio että wavelet-funktio voidaan kuitenkin toteuttaa digitaalisia suodattimia käyttäen (matemaattisia perusteita suodattimien johtamiseen wavelet- ja skaalausfunktioista ei esitetä tämän työn puitteissa), joten signaalille voidaan tehdä wavelet-muunnos seuraavassa kohdassa esitettävällä osakaistasuodatuksella Osakaistasuodatus Skaalausfunktiot voidaan toteuttaa alipäästösuodattimina ja waveletit kaistanpäästösuodattimina, ja signaalissa esiintyvillä taajuuksilla on ala ja yläraja, joten signaalille voidaan tehdä wavelet-muunnos osakaistasuodatuksella. Esimerkki osakaistasuodatuksesta on kuvassa 10. Aluksi kohdassa a saadaan pienintä skaalaa käyttäen erotettua signaalin korkeimmat taajuudet kaistanpäästösuodattimella. Jäljelle jäävä taajuusalueen matalampi puolisko saadaan alipäästösuodattimella. Tämän jälkeen kohdassa b toistetaan kaistanpäästösuodatus ja alipäästösuodatus edellisen kohdan alipäästösuodattimen tuottamalle signaalille. Nyt skaala on kaksinkertainen edelliseen kohtaan verrattuna, jolloin suodattimien tuottamien taajuuskaistojen leveys puolittuu. Seuraavaksi voidaan 36

37 edelleen suodattaa kohdan b alipäästösuodattimen tuottama signaali samalla tavalla. Koska kaistanpäästösuodatinta käytetään kussakin vaiheessa kaikkien jonkin rajataajuuden f 0 ylittävien taajuuksien erottamiseen, kaistanpäästösuodatin voidaan aina korvata ylipäästösuodattimella. Toistoa voidaan jatkaa siihen asti (kohta c), kunnes matalimpien taajuuksien suodattamista ei enää katsota tarpeelliseksi (kohta d). Kussakin vaiheessa sekä ali että ylipäästösuodattimen tuottama signaali alinäytteistetään jättämällä signaalista pois joka toinen näyte. Tämä poistaa vain tulossignaalien redundanssia, eli informaatiota ei kadoteta [13]. Tätä ei perustella formaalisti tässä työssä, mutta alinäytteistyksen tarpeellisuuden näkee esimerkiksi tarkastelemalla diskreettien waveletien sijaintia siirto-skaalaus koordinaatistossa (kuva 7). Kuvaa 10 on muokattu lähteen [13] esityksestä. Kuva 10: Esimerkki osakaistasuodatuksesta [13]. Kuvassa 11 on esimerkki digitaalisen signaalin näytteiden sisältämän informaation siirtymisestä alipäästösuodattimella saadun alinäytteistetyn digitaalisen signaalin näytteisiin. Kuvasta nähdään, että wavelet-muunnoksen kussakin vaiheessa voidaan käyttää samoja ali ja ylipäästösuodattimia. Resoluution puolittuminen ajan suhteen (eli kohdassa esiintyvän j:n arvon lisäys yhdellä) seuraa alinäytteistyksestä. Kuvan nuolien suuntaan siirryttäessä tehdään signaalille alipäästösuodatus ja alinäytteistys kunkin nuolen kohdalla. Harmaa alue kuvaa, kuinka signaalien näytteet vastaavat toisiaan kussakin vaiheessa. 37

38 Kuva 11: Esimerkki digitaalisen signaalin näytteiden sisältämän informaation siirtymisestä alipäästösuodattimella saadun, alinäytteistetyn digitaalisen signaalin näytteisiin. Kun digitaaliselle signaalille tehdään edellä esitetty toistuva jako korkeampiin ja matalampiin taajuuksiin, sanotaan että signaalille tehdään diskreetti wavelet-muunnos [13]. 4.5 Diskreetin wavelet-muunnoksen soveltaminen kuvantiivistykseen Yksinkertaisin diskreetti wavelet-muunnos on S-muunnos, joka voidaan toteuttaa laskemalla kussakin muunnoksen vaiheessa matalat, l[n], ja korkeat, h[n], taajuudet kaavoilla [6]: l[n] = (x[2n] + x[2n + 1] ) / 2 (14) h[n] = x[2n] - x[2n + 1]. (15) Tässä x[n] on muunnettava signaali ja n saa arvot 0, 1,..., N / 2-1, jossa N on muunnettavan signaalin näytteiden määrä. S-muunnoksen käänteismuunnos voidaan tehdä kaavoilla [6]: x[2n] = l[n] + (h[n] + 1) / 2 (16) x[2n + 1] = x[2n] - h[n]. (17) Kuvassa 12 on esimerkki S-muunnoksesta kuudentoista näytteen jonolle, joka on saatu ottamalla 16 vierekkäisen kuvapisteen muodostama osa digitaalisesta kuvasta. Kuvan nuolet kuvaavat jakoa matalataajuuksisiin komponentteihin (vasemmalla) ja 38

39 korkeataajuuksisiin komponentteihin (oikealla). Käänteismuunnos tehdään kulkemalla alhaalta ylöspäin ja yhdistämällä kussakin vaiheessa nuolten osoittamat matala ja korkeataajuiset komponentit. Matalataajuisten komponenttien esitysten taustasävyt esittävät kyseistä komponenttia vastaavan kuvapisteen harmaasävyä. Kuvasta näkyy, että muunnoksessa matalataajuiset komponentit muodostavat alkuperäisen kuvan pienennöksen. Kuva 12: Esimerkki S-muunnoksesta kuudestatoista kuvapisteestä saadulle signaalille. Luvun alussa todettiin, että digitaalinen kuva voidaan esittää signaalina kahdella tavalla. Koska diskreetti wavelet-muunnos tuottaa yhtä monta näytettä kuin muunnettavassa signaalissa on, voidaan digitaalinen kuva muuntaa tekemällä ensin muunnos pystysuunnassa ja sen jälkeen vaakasuunnassa (tai päinvastaisessa järjestyksessä). Kuvassa 13 on esimerkkinä ensimmäinen vaihe kuvan 'peppers' S-muunnoksesta. Kuva 13: Kuvan 'peppers' S-muunnoksen ensimmäinen vaihe. Alkuperäinen kuva on vasemmalla. Keskellä alkuperäiselle kuvalle on tehty pystysuuntainen muunnos. Matalataajuiset (L) komponentit ovat ylhäällä ja korkeataajuiset (H) alhaalla. Oikeanpuoleinen kuva saadaan keskimmäisestä tekemällä muunnos vaakasuunnassa. Kuva LL on alkuperäisen kuvan pienennös, joka voidaan muuntaa edelleen. 39

40 Muunnoksen ensimmäisen vaiheen jälkeen LL on pienennös alkuperäisestä kuvasta. Tämä voidaan muuntaa edelleen, jolloin saadaan kuvan 14 vasen puoli. Toistamalla muunnos vielä kerran saadaan oikeanpuoleinen kuva. Oikeanpuoleiseen kuvaan on merkitty eri vaiheessa saatujen wavelet-kerrointen välinen korrelaatio. Valkoisten nuolten suuntaan kuljettaessa pienemmän osakuvan esittämien kertoimien arvoja voidaan hyödyntää tuotettaessa esityksiä suuremman osakuvan kertoimille [14]. Tämä ominaisuus yhdessä sen kanssa, että monet wavelet-kertoimet saavat lähellä nollaa olevia arvoja, mahdollistaa muunnetun kuvan tiivistämisen entropiakoodauksella. Kuva 14: Kuvan 'peppers' S-muunnoksen kaksi seuraavaa vaihetta (kts. kuva 13). Nuolet kuvaavat osakuvien esittämien wavelet-kerrointen välistä korrelaatiota. Tiivistetty kuva saadaan purettua etenemällä ensin kuvassa 14 oikeanpuoleisesta kuvasta vasemmanpuoleiseen dekoodaamalla tarvittavat wavelet-kertoimet ja tekemällä S- muunnoksen käänteismuunnos. Tästä jatketaan edelleen kuvan 13 oikeanpuolisen esityksen kautta alkuperäiseen kuvaan samalla tavalla. Kussakin vaiheessa kuvasta saadaan edellistä vaihetta tarkempi esitys. Tämä on hyödyllinen ominaisuus esimerkiksi siirrettäessä kuvaa hitaan verkon yli, koska kuvan epätarkka esitys saadaan nopeasti. Lisäksi vastaanottaja voi pysäyttää siirron milloin tahansa, mikäli katsoo, että saadun kuvan esitystarkkuus on jo riittävä. 40

41 5 LOCO-I / JPEG-LS LOCO-I (LOw COmplexity LOssless COmpression for Images) on häviötön kuvantiivistysalgoritmi, jonka hieman muunneltu versio on osana JPEG-LS standardia. Algoritmin suunnittelun lähtökohtina ovat olleet nopea toiminta ja toteutuksen yksinkertaisuus. LOCO-I tiivistys voidaankin käytännössä toteuttaa myös laitteistopohjaisesti. Tästä huolimatta menetelmä pääsee lähes yhtä hyvään tiivistystulokseen kuin parhaat häviöttömät kuvantiivistysmenetelmät. Tässä työssä tarkastellaan lähinnä LOCO-I:n JPEG-LS:ssä käytettyä versiota, mutta JPEG-LS menetelmästä käsitellään vain täysin häviötön tiivistys. Menetelmä sisältää myös lähes häviöttömän tiivistyksen (near-lossless compression), joka on toteutettu tekemällä pieniä muutoksia LOCO-I algoritmiin. Luku 5 on kirjoitettu lähteen [16] pohjalta lukuun ottamatta kohtia, joissa on erikseen mainittu muu lähde. 5.1 Toimintaperiaate LOCO-I:n toiminta voidaan jakaa kahteen itsenäiseen osaan: syötetiedon mallinnukseen mahdollisimman hyvin tiivistyvään muotoon ja mallinnetun tiedon tiivistykseen Golomb-Rice koodauksella. Menetelmä on yksivaiheinen, eli tiivistettävä näyte luetaan vain kerran ja muodostetaan sitä vastaava tuloste ennen seuraavan näytteen lukemista. Syötetietoa käsitellään kuvapiste kerrallaan ja kuvapisteiden läpikäyntijärjestys on vaakariveittäin ylhäältä alas ja vasemmalta oikealle (raster-scan). Kuvaa ei jaeta erikseen tiivistettäviin lohkoihin, koska algoritmi on toteutettu niin, että kullakin hetkellä enintään vain hieman yli yhden vaakarivin pituisen osan kuvasta tarvitsee mahtua työmuistista varattuun puskuriin. Kuvassa 15 on esitetty algoritmin toiminta yleisellä tasolla. Algoritmi saa syötteenä kussakin toimintavaiheessa tiivistettävän kuvapisteen x sekä kuvassa 15 esitettyjen naapurikuvapisteiden arvot. Naapurikuvapisteiden arvojen perusteella valitaan kuvapisteen x konteksti (tämä on esitetty tarkemmin kohdassa 5.2.3) ja toinen kahdesta toimintatavasta (kohta 5.4). Tavanomaisessa toimintamoodissa lasketaan kuvapisteelle x ennuste (kohta 5.2.2), jota korjataan adaptiivisesti (kohta 5.2.4). Korjatun ennusteen ja kuvapisteen x todellisen arvon perusteella lasketaan ennustevirhe (kohta 5.2.4). Ennustevirheen 41

42 avulla ohjataan ennusteen korjausta (kohdat ja 5.2.6) ja Golomb-Rice koodausta (kohta 5.3). Toisessa toimintatavassa käytetään tiivistysalgoritmina jakson pituuden koodausta (kohta 5.4). Kuva 15: LOCO-I / JPEG-LS:n toimintaperiaate 5.2 Mallinnus LOCO-I:n mallinnus perustuu ennusteen laskemiseen kulloinkin käsiteltävän kuvapisteen naapurikuvapisteiden (kuvassa 15 kuvapisteet a, b ja c) arvojen perusteella. Naapurikuvapisteiden arvoja käytetään myös käsiteltävän kuvapisteen kontekstin määrittämiseen, jolloin käytetään myös kuvapistettä d ja alkuperäisessä LOCO-I algoritmissa vielä tämän lisäksi kuvapistettä e. 42

43 5.2.1 Vakiot ja kontekstikohtaiset laskurimuuttujat Seuraavissa kappaleissa viitataan useasti LOCO-I / JPEG-LS:n käyttämiin vakioihin ja kontekstikohtaisiin laskureihin. Näitä ovat vakiot α, β, L max ja N 0, jotka määritellään seuraavasti: α = kuvan symboliaakkoston koko (harmaasävyjen mahdollinen määrä), β = max( 2, log 2 α ), yhden kuvapisteen esityksessä käytettyjen bittien määrä, eli kuvan värisyvyys, L max = 2 ( β + max( 8, β) ), tulostettavan Golomb-Rice koodin suurin sallittu pituus bitteinä ja N 0 = kontekstikohtaisten laskureiden uudelleenalustusvakio (kohta 5.2.6). Lisäksi määritellään kontekstikohtaiset laskurimuuttujat seuraavasti: A: tähän lasketaan saatujen ennustevirheiden itseisarvojen summaa, jota käytetään Golomb-Rice koodaajan parametrin valinnassa (kohdat ja 5.3.2), B: muuttuja, johon lasketaan kontekstin ennustevirheiden summaa, jota käytetään C:n laskentaan (kohdat 5.2.4, ja 5.3.3), C: kontekstin ennustevirheiden adaptoituva korjaustermi (kohdat ja 5.2.6) ja N: kontekstiin kuuluvien näytteiden määrä, jota käytetään Golomb-Rice koodaajan parametrin valinnassa ja C:n laskennassa Ennusteen laskenta LOCO-I:n ennusteen laskenta tehdään kahdessa vaiheessa. Ensin lasketaan ennusteen arvo prosessoitavan kuvapisteen naapurikuvapisteiden perusteella ja tämän jälkeen ennustetta korjataan termillä C. Tässä kappaleessa kuvataan ennusteen alustavan arvon laskenta. Korjaustermin laskenta käsitellään kohdassa LOCO-I:ssä ennuste lasketaan kaavalla, josta käytetään usein nimeä MED = median edge detector tai MAP = median adaptive predictor [9] : min(a, b), jos c max(a, b) x' = max(a, b), jos c min(a, b) (18) a + b - c, jos min(a, b) < c < max(a, b) 43

44 Tässä x' on prosessoitavan kuvapisteen x ennusteen alustava arvo ja a, b ja c ovat kuvapisteen x naapurikuvapisteiden arvot kuvan 15 mukaisesti. Tällainen ennustin kykenee jossain määrin tunnistamaan kuvassa olevia lähes samansävyisten pintojen reunakohtia, joissa lähekkäin sijaitsevien kuvapisteiden arvot poikkeavat jyrkästi toisistaan. Jos c max(a, b), voidaan olettaa, että kuvassa on kuvapisteen x kohdalla vaakasuora reuna, mikäli b:n arvo on suurempi kuin a:n. Tällöin valitaan ennusteen x' arvoksi a:n arvo, joka todennäköisesti on lähimpänä kuvapisteen x arvoa. Jos kuvapisteen a arvo on suurempi kuin b:n, voidaan vastaavasti olettaa kuvassa olevan pystysuora reuna ja valita x':ksi b. Vastaavasti tehdään valinta a:n ja b:n välillä kaavan toisessa kohdassa, kun c min(a, b). Jos min(a, b) < c < max(a, b), voidaan olettaa, että kuvapiste x on osa kauttaaltaan samansävyistä pintaa. Tällöin oletetaan, että a + b = c + x, joten valitaan x' = a + b - c. Koska kuvan reunoilla joitakin kuvapisteistä a, b, c tai d ei ole olemassa, korvataan vastaavat arvot seuraavasti: Kuvan ensimmäisellä rivillä oletetaan b = c = d = 0. Vasemmassa reunassa tehdään sijoitukset a = b ja c = edellisen rivin ensimmäisen kuvapisteen ennusteen laskennassa käytetty a:n arvo. Oikeassa reunassa taas sijoitetaan d = b Kontekstin valinta JPEG-LS:ssä käytetty LOCO-I toteutus jakaa kuvan pisteet 365 kontekstiin pyrkien siihen, että kuhunkin kontekstiin kuuluvat kuvapisteet noudattaisivat mahdollisimman hyvin oman kontekstinsa todennäköisyysmallia. Kunkin kontekstin todennäköisyysmalli on nollakeskinen Laplace-jakauma, mutta jokaisella jakaumalla on oma, mahdollisesti toisista poikkeava hajonta. Hajonta siis on todennäköisyysmallin ainoa vapaa parametri ja riittää määrittämään käytetyn mallin yksikäsitteisesti. Tämä on tärkeää, koska vapaiden parametrien määrän kasvattaminen hidastaa kausaalisesti määräytyvän todennäköisyysmallin adaptoitumista syötteeseen. Lisäksi LOCO-I:ssä käytetty Golomb-Rice koodaus asettaa rajoituksia todennäköisyysmallina käytetylle jakaumalle, joten useamman vapaan parametrin käyttö olisi turhaa. LOCO-I:ssä ei kontekstin hajontaparametrin arvoa esitetä sellaisenaan, vaan toteutuksen yksinkertaistamiseksi (jakolaskujen välttämiseksi) päivitetään jokaisen kuvapisteen prosessoinnin jälkeen kontekstikohtaisia laskurimuuttujia A ja N. Koodaaja voi 44

45 laskea näistä kahdesta arvosta Golomb-Rice parametrin k, jonka arvo vastaa todennäköisyysmallina käytetyn jakauman sen hetkistä hajontaa. Parametrin k laskenta selvitetään koodausta käsittelevässä kappaleessa 5.3. Jotta jokaisen kontekstin ennustevirheiden Laplace-jakauman voi olettaa olevan nollakeskinen, pitää saatuja ennusteita korjata adaptiivisesti tiivistyksen aikana. Tämän korjauksen laskenta on esitetty kohdassa Prosessoitavan kuvapisteen kontekstin valitsemiseksi JPEG-LS:ssä käytetty LOCO- I:n toteutus laskee naapurikuvapisteiden arvojen erotukset, gradientit g 1 = d - b, g 2 = b - c ja g 3 = c - a. Alkuperäinen LOCO-I laskee myös neljännen gradientin g 4 = b - e, mutta JPEG-LS:ssä kontekstien määrää on vähennetty, ja tämän arvon laskenta on jätetty pois. Nämä erotukset kuvaavat prosessoitavan kuvapisteen ympäristössä tapahtuvia harmaasävyn muutoksia. Ne sopivat hyvin kontekstin valintaperusteeksi, koska ennustevirheen todennäköinen suuruus riippuu kuvapisteen ympäristöstä. Kuvan "pehmeillä" alueilla ennustevirheiden itseisarvot ovat pienempiä kuin paljon reunoja sisältävillä alueilla. Kuvapisteille valittua kontekstia voi siis pitää arviona ennusteen onnistumisesta kyseisen kuvapisteen kohdalla. Gradienttien g 1, g 2 ja g 3 arvot voisivat määrätä suoraan kuvapisteen kontekstin, mutta tällöin konteksteja tulisi liikaa. Siksi LOCO-I / JPEG-LS määrittää kontekstin kvantisoimalla erikseen jokaisen gradientin g i, i = 1, 2, 3 arvon jollekin yhdeksästä menetelmässä määritellystä alueesta. Nämä kvantisointialueet on valittu niin, että kvantisoidun arvon sattuminen kullekin välille on suunnilleen yhtä todennäköistä. JPEG-LS:ssä kvantisointialueet kullekin g i :lle ovat {0}, ± {1, T 1-1}, ± { T 1,..., T 2-1}, ± { T 2,..., T 3-1} ja ± { e e T 3 }, jossa kynnysparametrien T 1, T 2 ja T 3 oletusarvot ovat T 1 = 3, T 2 = 7 ja T 3 = 21. Käyttäjä voi kuitenkin halutessaan muuttaa näitä [1]. Alkuperäisessä LOCO-I menetelmässä kvantisointialueet kullekin g i :lle on kiinnitetty, ja ne ovat {0}, ± { 1, 2 }, ± { 3, 4, 5, 6 }, ± { 7, 8,..., 14} ja ± { e e 15 } g 1 :lle, g 2 :lle ja g 3 :lle. Gradientille g 4 alueet ovat g 4 < 5, g 4 5 ja g 4-5. Gradientti g 4 kvantisoidaan vain kolmeen mahdolliseen alueeseen, koska se kuvaa muutoksia etäämpänä mallinnettavan kuvapisteen x ympäristössä kuin muut gradientit [15]. Edellä kuvatun kvantisoinnin tuloskolmikko (q 1, q 2, q 3 ) (alkuperäisen LOCO-I:n tapauksessa otetaan aina mukaan myös q 4 ) ilmaisee suoraan kuvapisteen kontekstin silloin, kun kaikki q i :t ovat ei-negatiivisia. Kuitenkin kontekstien määrän vähentämiseksi edelleen kaikki muotoa (q 1, q 2, q 3 ) olevat kontekstit, joissa jokin q i < 0, liitetään pareit- 45

46 tain yhteen muotoa (-q 1, -q 2, -q 3 ) olevien kontekstien kanssa. Voidaan nimittäin osoittaa, että kaikilla arvoilla q 1, q 2 ja q 3 todennäköisyys sille, että määrätty ennustevirheen arvo sisältyy kontekstiin (q 1, q 2, q 3 ) on sama kuin todennäköisyys sille, että arvo - sisältyy kontekstiin (-q 1, -q 2, -q 3 ). Kontekstien (q 1, q 2, q 3 ) ja (-q 1, -q 2, -q 3 ) ennustevirheiden jakaumat muodostuvat siis tiivistyksen edetessä toistensa peilikuviksi, joten ne kannattaa yhdistää adaptoitumisen nopeuttamiseksi. Tämä tehdään peilaamalla toinen jakaumista vaihtamalla siinä kaikkien ennustevirheiden etumerkit. Käytännössä kontekstien liittäminen tapahtuu niin, että jos järjestyksessä ensimmäinen nollasta poikkeava alkio kontekstin määrittävässä kolmikossa (q 1, q 2, q 3 ) on negatiivinen, vaihdetaan kaikkien alkioiden q i etumerkit sekä saadun ennustevirheen etumerkki. Esimerkiksi ennustevirheen 2 lisääminen kontekstiin (0, -3, 2) muuttuu siten virheen -2 lisäämiseksi kontekstiin (0, 3, -2). Näin kaikki kontekstit ovat aina muotoa, jossa ensimmäinen nollasta poikkeava arvo q 1, q 2, q 3 on positiivinen. Sama q 1 :n, q 2 :n ja q 3 :n sekä luetun ennustevirheen etumerkin vaihtaminen voidaan tehdä myös dekoodaajassa. JPEG-LS:ssä kukin gradientti g i (i = 1, 2, 3) kvantisoidaan neljään positiiviseen ja neljään negatiiviseen alueeseen sekä alueeseen {0}, joten kontekstien kokonaismääräksi saadaan ((2T + 1) 3 + 1) / 2, joka on 365, kun T = 4 (= positiivisten kvantisointialueiden lukumäärä). Alkuperäisessä LOCO-I:ssä gradientit g i (i = 1, 2, 3) kvantisoidaan yhtä moneen alueeseen kuin JPEG-LS:ssäkin ja lisäksi g 4 yhteen positiiviseen ja yhteen negatiiviseen alueeseen sekä alueeseen {0}. Kontekstien määräksi saadaan ((2*4 + 1) 3 * (2*1 + 1) + 1) / 2 = Molemmissa algoritmeissa niillä konteksteilla, joilla (q 1, q 2, q 3 ) = (0, 0, 0), on erikoismerkitys, jota tarkastellaan kohdassa 5.4. Kuvassa 16 on esitetty tiivistettävä esimerkkikuva sekä kiinteän ennustimen tuottamien ennustevirheiden suuruus ja kuvan jako konteksteihin. Tummempi sävy tarkoittaa suurempaa ennustevirheen itseisarvoa (keskellä) tai suurempia paikallisia sävyvaihteluja sisältävää kontekstia (oikealla). 46

47 Kuva 16: Tiivistettävä syötekuva ('peppers', vasemmalla), ennustevirheen korjaamaton arvo (keskellä) ja konteksteihin jako (oikealla) Ennusteen adaptiivinen korjaus Tavasta, jolla kuvan pisteet jaetaan konteksteihin, seuraa, että kaikissa konteksteissa korjaamattomien ennustevirheiden jakauma ei ole nollakeskinen. Koska tästä seuraisi ongelmia ennustevirheiden koodauksessa, jokainen konteksti sisältää ennusteen korjaustermin C, jota päivitetään tiivistyksen edetessä. Korjaustermin päivittämiseksi tarvitaan tieto kontekstiin kuuluvien näytteiden määrästä sekä tähän mennessä saatujen korjattujen ennustevirheiden summasta. Nämä arvot on tallennettu vastaavasti muuttujiin N ja B. JPEG-LS pyrkii korjaustermin laskennassa siihen, että kaikkien Laplace-jakaumien odotusarvo pysyisi aina välillä (-1, 0]. Täksi väliksi olisi voitu valita myös (-½, ½], mutta johtuen tavasta, jolla Laplace-jakaumat kuvataan tavallista yksipuolista geometrista jakaumaa muistuttaviksi jakaumiksi ja Golomb-Rice koodataan, väli (-1, 0] tuottaa hieman paremman tiivistystuloksen [15]. Kuvassa 17 on esimerkkinä Laplace-jakauma, jonka odotusarvo -5/8 kuuluu halutulle välille (-1, 0]. Jatkossa merkitään s:llä sellaisen ennustevirheiden Laplace-jakauman odotusarvon vastalukua, jonka odotusarvon oletetaan olevan tehtyjen ennusteiden adaptiivisten korjausten seurauksena välillä (-1, 0]. Esimerkiksi kuvan 17 jakaumalle s = 5/8. 47

48 Kuva 17: Laplace-jakauma, jonka odotusarvo on -5/8 Koska N sisältää kontekstin näytteiden määrän ja B korjattujen ennustevirheiden kumulatiivisen summan, pitää korjaustermin C arvoa muuttaa silloin, kun B on muuttunut niin, että sen arvo ei enää ole välillä (-N, 0]. Jos B ei ole tällä välillä, korjattujen ennustevirheiden keskiarvo B / N ei enää voi olla halutulla välillä (-1, 0]. Keskiarvoa B / N voitaisiin käyttää suoraan C:n laskennassa, mutta tällöin jouduttaisiin suorittamaan jakolaskuja luvuilla, jotka eivät ole kahden potensseja. Lisäetuna JPEG-LS:ssä käytetty menetelmä ei muuta niin herkästi C:n arvoa yksittäisen, huonosti kontekstiinsa sopivan näytteen vuoksi. Aina, kun C:n arvoa muutetaan, tehdään myös B:n arvoon vastaava muutos niin, että sen arvo palaa jälleen halutulle välille (-N, 0]. Tämä saadaan aikaan lisäämällä B:hen N aina, kun C:n arvoa vähennetään yhdellä ja vastaavasti vähentämällä B:stä N aina silloin, kun C:n arvoa kasvatetaan yhdellä. Jos B:n arvo ei tämän muutoksen jälkeenkään ole palautunut välille (-N, 0], se pakotetaan tälle välille asettamalla B = -N + 1 jos B -N tai B = 0 jos B > 0. Tämä stabiloi C:n arvoa silloin, kun jokin yksittäinen ennustevirheen arvo poikkeaa suuresti muista. Pseudokoodilla esitettynä C:n arvon päivitys tehdään siis seuraavasti: if B - N (* korjatut ennusteet ovat liian suuria *) C C - 1 B B + N if B -N (* pakotetaan B välille (-N, 0] *) B -N + 1 else if B > 0 (* korjatut ennusteet ovat liian pieniä *) C C + 1 B B - N 48

49 if B > 0 (* pakotetaan B välille (-N, 0] *) B Ennustevirheen laskenta Ennustevirheen laskemiseksi pitää tietää näytteen (kuvapisteen) todellinen arvo x, kiinteän ennustimen tuottama arvo x', näytteen konteksti ja tämän kontekstin korjaustermi C sekä arvo σ, joka on -1 jos kontekstin valinnassa järjestyksessä ensimmäinen q i :n arvo oli negatiivinen, ja muutoin σ = 1. Aluksi lasketaan korjattu ennusteen arvo x'', joka saadaan kaavalla: x'' = x' + σc. (19) Jos (C:n laskentavasta johtuen) x'' [0, α - 1], asetetaan x'' = 0 jos x'' < 0 ja x'' = α - 1 jos x'' > α - 1. Tämän jälkeen lasketaan ennustevirheen alustava arvo, ε': ε' = σ(x - x''). (20) Näin laskettu ε' voi saada arvoja väliltä [-(α - 1), α - 1], mutta koska ε' arvo riippuu vain x:stä, x'':sta ja σ:sta, joista x'' ja σ voidaan laskea dekoodaajassa aikaisemmin puretusta kuvan osasta kausaalisesti ja x voi saada vain α eri arvoa, myös ε' voi saada yksittäistä kuvapistettä tarkasteltaessa vain α eri arvoa. Tästä johtuen ε' voidaan kuvata arvoksi ε [ - α / 2, α / 2-1]. LOCO-I:ssä kuvaus tehdään ottamalla ε':n β vähiten merkitsevää bittiä ja tulkitsemalla saatu arvo kahden komplementtiesityksenä. Tämä kuvaus muuntaa itseisarvoltaan hyvin suuret arvot lähelle nollaa, jolloin myös kuvat, joissa on sekä "pehmeitä" alueita että teräviä reunoja, tiivistyvät hyvin. Kuvattujen ε:n arvojen jakauma ei ole aivan Laplace-jakauma, mutta ero ei ole tiivistyksen kannalta merkittävä Kontekstikohtaisten muuttujien päivitys Luetun näytteen mallinnuksen viimeinen vaihe on kontekstikohtaisten muuttujien päivitys. Algoritmin suoritusjärjestyksessä tätä edeltävä Golomb-Rice koodin muodostus käsitellään erikseen kohdassa 5.3. Muuttujien A, B uudet arvot saadaan lisäämällä korjatun ennustevirheen itseisarvo ε A:han ja ε:n (positiivinen tai negatiivinen) arvo B:hen. Tämän jälkeen tarkistetaan, onko 49

50 N saavuttanut uudelleenalustusvakion N 0. Jos näin on, puolitetaan A:n, B:n ja N:n arvot (pyöristäen tarvittaessa alaspäin lähimpään kokonaislukuun). Tällä saadaan aikaan se, että mallintajan ja koodaajan toimintaan vaikuttavat enemmän ne näytteet, jotka ovat lähempänä nykyistä näytettä, kuin kauempana olevat. Algoritmi siis sopeutuu paremmin muutoksiin tiivistettävässä kuvassa. Oletusarvo N 0 :lle JPEG-LS:ssä on 64, mutta sitä voidaan muuttaa tarvittaessa. Esimerkiksi valokuvia ja tekstiä sekaisin sisältävä kuva saattaa tiivistyä paremmin pienemmällä N 0 :n arvolla. Kun edellä kuvatut päivitykset on tehty, lisätään vielä N:n arvoa yhdellä ja suoritetaan kohdassa käsitelty C:n arvon päivittäminen (jolloin myös B:n arvo saattaa vielä muuttua). Tämän jälkeen voidaan siirtyä käsittelemään kuvan seuraavaa näytettä. 5.3 Koodaus Tiivistetty tuloste muodostetaan koodaamalla mallintajan tuottamat ennustevirheet niin, että koko tulosteen bittien kokonaismäärä on mahdollisimman pieni. Paikallisesti voidaan siis koodata yksittäinen kuvapiste jopa suuremmalla määrällä bittejä kuin syötekuvassa on käytetty, mikäli siitä koituu riittävä hyöty muiden kuvapisteiden kohdalla. Koodauksessa käytetään hyväksi tietoa siitä, kuinka useasti kulloinkin koodattavan arvon oletetaan esiintyvän koodattavassa tiedossa. Koodaajalle pitää siis välittää koodattavan arvon lisäksi käytettävä todennäköisyysmalli. Koska JPEG-LS:n tapauksessa todennäköisyysmalli on aina kulloinkin valitun kontekstin nollakeskinen Laplace-jakauma, koodaajalle välitetään vain tämän jakauman hajonta (muuttujien A ja N avulla) ja koodattava ennustevirhe ε. Lisäksi koodaaja tarvitsee kohdan esityksen mukaisesti myös B:n arvon siinä tapauksessa, että valitussa kontekstissa on A N, joten välitetään koodaajalle myös muuttuja B Laplace-jakauman kuvaus geometriseksi jakaumaksi Tehokas Golomb-Rice koodaus edellyttää, että käytetty todennäköisyysmalli on geometrinen jakauma, jossa arvon nolla esiintymistodennäköisyys on suurin. Lisäksi kaikkien koodattavien arvojen pitää välttämättä olla ei-negatiivisia kokonaislukuja. Tämän vuoksi JPEG-LS soveltaa ennen Golomb-Rice koodin muodostusta koodattavalle ennustevirheelle kuvausta, joka muuntaa kaksipuolisen Laplace-jakauman geometrista 50

51 jakaumaa muistuttavaksi. Saatu jakauma ei siis ole aivan tarkasti geometrinen jakauma, mutta ero ei ole käytännön kannalta merkittävä. Jakauman muunnoksessa käytettäviä kuvauksia on kaksi, joista toista käytetään vain silloin, kun ennustevirheiden hajonta on hyvin pieni ja s > ½ (kohta 5.2.4). Useammin käytettävä kuvaus on M(ε) = 2 ε - u(ε), (21) jossa u(ε) on määritelty niin, että ε < 0 u(ε) = 1 ja ε 0 u(ε) = 0. M kuvaa lukusuoran luvut {..., -3, -2, -1, 0, 1, 2, 3,...} luvuiksi {...,5, 3, 1, 0, 2, 4, 6,... }, jolloin lähempänä nollaa olevat luvut kuvautuvat aina pienemmiksi kuin kauempana nollasta olevat. Laplace-jakauma, jolle s ½, kuvautuu näin riittävän paljon geometrista jakaumaa muistuttavaksi. Jos s > ½ voidaan olettaa todennäköisyysmallina käytetyn jakauman keskittyneen -1:n ympärille. Tällöin kuvaus M(ε) ei välttämättä ole riittävän hyvä, varsinkaan jos ε:n arvojen jakauman hajonta on pieni (-1:n kohdalla on terävä huippu). Tällöin käytetään kuvausta M'(ε), M' (ε) = M(-ε - 1), (22) jolloin nollaksi kuvautuva luku on useimmin esiintyvä -1. Kun ε [ - α / 2, α / 2-1], kuvattu arvo M(ε) [0, α - 1]. Myös M' (ε) [0, α - 1], kun α on parillinen. Jos α on pariton, mikä käytännössä on epätavallista, M' (ε) { 0, 1,..., α - 3, α - 2, α } Golomb-Rice parametrin määritys Vielä ennen kuin edellä esitetyllä tavalla ei-negatiiviseksi muunnettu ennustevirheen arvo voidaan koodata algoritmin tulosteeksi, pitää määrittää Golomb-Rice parametrin k arvo. Tämä pitää laskea kontekstin aikaisempien ennustevirheiden perusteella, jotta sama laskenta voidaan tehdä myös dekoodaajassa. Vaihtoehtoja k:n laskemiseksi on kaksi: Voidaan käydä läpi kaikki järkevät k:n arvot ja käyttää niistä sitä, joka antaa lyhimmän tulosteen, kun koodataan sitä käyttäen kaikki ne aikaisemmat ennustevirheen arvot, jotka kuuluvat käytettyyn kontekstiin. Toinen vaihtoehto on käyttää optimaalisen k:n arvon approksimaatiota, joka voidaan laskea, kun 51

52 tiedetään kontekstiin kuuluvien ennustevirheiden määrä N ja niiden itseisarvojen summa A. Edellinen menetelmä on ajatukseltaan yksinkertaisempi, mutta jälkimmäiselle voidaan laatia paljon lyhyempi ja vähemmän laskentaa vaativa toteutus, joten se on valittu käytettäväksi LOCO-I:ssä. Seuraavassa on kuvattu tapa, jolla JPEG-LS valitsee k:n arvon ja käytettävän kuvauksen (M tai M' ) kontekstille y. Käytetyt päättelysäännöt ja menetelmän johto on esitetty lähteissä [7] ja [16]. Merkitään seuraavassa N:llä kontekstiin y tähän mennessä kuuluneiden ennustevirheiden määrää (eli tässä N:llä on sama merkitys kuin algoritmissa y:n kontekstimuuttujalla N), S N :llä näiden ennustevirheiden itseisarvojen summaa, josta on vähennetty negatiivisten ennustevirheiden määrä, N N :llä negatiivisten ennustevirheiden määrää y:ssä (tällöin algoritmissa y:n muuttuja A sisältää arvon S N + N N ) ja φ:llä kultaista leikkausta, eli φ = (5 ½ + 1) / 2. Nyt k:n arvo ja käytettävä kuvaus saadaan seuraavasti: i) Jos S N φn, verrataan arvoja S N, N - N N ja N N : i.1) Jos S N on suurin, valitaan k = 1 ja kuvaus M. i.2) Jos N - N N on suurin, valitaan k = 0 ja kuvaus M. i.3) Jos N N on suurin, valitaan k = 0 ja kuvaus M'. (23) ii) Jos S N > φn, valitaan k = l + 1, k 2 siten, että 1 / (φ f(l) - 1) < S N / N 1 / (φ g(l) - 1), jossa f(l) = 2 -l+1 ja g(l) = 2 -l, ja käytetään kuvausta M. Menetelmän toimivuutta voi perustella niin, että ensin tehdään valinta kohtien i) ja ii) välillä ennustevirheiden jakauman hajonnan perusteella. Koska negatiiviset ε:n arvot (ε on kokonaisluku, joten suurin negatiivinen ε arvo on -1) kasvattavat S N :ää -ε - 1:llä ja ei-negatiiviset arvot ε:llä, pitää tietyn määrän ε:n arvoista olla S N :ää kasvattamattomia, eli joko -1 tai 0, jotta valittaisiin kohta i). Tämä määrä taas riippuu muiden ε:n arvojen tuottamien S N :n lisäyksien summasta. Näin siis valitaan kohta i) silloin, kun ε:n arvojen Laplace-jakauman hajonta on riittävän pieni. Muutoin valitaan kohta ii). Kohdassa ii) tehdään samaan tapaan valinta eri k:n arvojen k 2 välillä. Kohdassa i) verrataan negatiivisten (N N ) ja ei-negatiivisten (N - N N ) ennustevirheiden määrää sekä arvoa S N. Jos S N on suurempi kuin kumpikin arvosta N N ja N - N N, käytetään k:n arvoa 52

53 yksi. Näin tapahtuu helpoimmin silloin, kun N N ja N - N N ovat lähes samansuuruisia, jolloin tiedetään, että ε saa arvoja -1 ja 0 lähes yhtä todennäköisesti (s ½). Kuvaus M (ε) tuottaa siis arvoja 0 ja 1 lähes yhtä todennäköisesti, joten myös arvoja M(ε) 2 saadaan kuvattujen arvojen oletetun geometrisen jakautuman vuoksi niin usein, että on kannattavaa valita k = 1. Kahdessa muussa kohdan i) tapauksessa valitaan k = 0. Tällöin on tärkeää, että mahdollisimman suuri osa ε:n arvoista kuvautuisi nollaksi, koska nollaa vastaavan koodin (1) pituus on vain puolet ykköstä vastaavan koodin (01) pituudesta. Kuvaus M kuvaa 0 0 ja -1 1, kun taas M' kuvaa 0 1 ja Jos N N < N - N N, ei-negatiivisia arvoja (joiden voidaan nyt olettaa olevan suurella todennäköisyydellä arvoja 0) on enemmän kuin negatiivisia, joten oletetaan s ½ ja valitaan kuvaus M. Muussa tapauksessa oletetaan s > ½ ja valitaan kuvaus M' Golomb-Rice parametrin laskenta JPEG-LS:ssä Merkitään S(l):lla osamäärän S N / N alarajaa, joka on annettu edellisen kappaleen kohdassa ii), ja määritellään funktio γ(l) niin, että S(l) = 2 l-1 / ln φ - 1/2 + γ(l), (24) kaikilla kokonaisluvuilla l > 0. Tällöin γ(l) on aidosti vähenevä, joten γ(l):n suurin arvo on γ(1) = φ + ½ - (1 / ln φ) 0,04. Lisäksi γ(l) 0, kun l. Korvaamalla γ(l) vakiolla 1/8 ja 1 / ln φ ( 2,078) 2:lla, saadaan approksimaatio: S(l) 2 l - 1/2 + 1/8. (25) Tämä poikkeaa S(l):n oikeasta arvosta korkeintaan 4%, kun l > 0 [16]. Merkitään S N ' = S N + N / 2 - N / 8. (26) Nyt k:n arvo ja käytettävä ennustevirheiden kuvaus saadaan seuraavasti: i) Jos S N ' 2N, verrataan S N :ää, N N :ää ja N - N N :ää. i.1) Jos S N on suurin, valitaan k = 1 ja kuvaus M. i.2) Jos N - N N on suurin, valitaan k = 0 ja kuvaus M. 53

54 i.3) Jos N N on suurin, valitaan k = 0 ja kuvaus M'. (27) ii) Jos S N ' > 2N, valitaan k = l + 1, k 2 niin, että N 2 l S N ' < N 2 l+1, ja käytetään kuvausta M. Nyt koodaaja voi laskea k:n arvon muuttujien A, B ja N avulla tekemällä vielä muutaman yksinkertaistuksen. Kontekstimuuttuja A vastaa tässä kuvattua arvoa S N + N N. Kun tehdään oletus, että negatiivisten ennustevirheiden määrä on N N = N / 2 - N / 8, A:n arvo vastaa S N ':n arvoa. Nyt k:n arvo voidaan laskea käymällä järjestyksessä läpi kokonaislukuja nollasta ylöspäin ja valitsemalla niistä yllä olevan kohdan ii) mukaisesti ensimmäinen arvo, jolle N 2 k A. Tämä toteuttaa valinnan i):n ja ii):n välillä ja ii):ssä esitetyn k:n laskennan silloin, kun kohta ii) tulee valituksi. Jos tuloksena saadaan k < 2 (eli 2N A), on valittu kohta i). Kun edellä on valittu kohta i), niin k = 0 A N ja k = 1 A > N. Jos oletetaan (toisin kuin edellä), että N N = N / 2, niin nyt S N ' = S N + N / 2. Koska S N ' vastaa A:ta, S N vastaa nyt arvoa A - N / 2 ja molemmat epäyhtälöt S N > N N ja S N > N - N N voidaan nyt kirjoittaa muotoon A - N / 2 > N / 2, eli A > N. Saatiin siis sama ehto kuin arvon k = 1 valinnalle on edellä esitetty, joten k:n arvon valinta tekee myös päätöksen siitä, valitaanko kohta i.1), kun on valittu kohta i). Jos ei päädytty kohtaan ii) tai kohtaan i.1), on vielä tehtävä valinta kohtien i.2) ja i.3) välillä. Molemmissa tapauksissa on k = 0, joten pitää vain valita käytettävä kuvaus sen mukaan, arvioidaanko negatiivisia vai ei-negatiivisia ennustevirheitä olevan enemmän. Tämä arvio voidaan tehdä, kun tiedetään jakauman odotusarvo. Jos odotusarvo on suurempi kuin -½, ei-negatiivisia ennustevirheitä on todennäköisesti enemmän, ja valitaan kuvaus M. Muuten valitaan kuvaus M'. Kohdan mukaisesti jakauman odotusarvo on -s, ja s - B / N. Ehto kuvauksen M valinnalle on siis: -s > -½ -B / N < ½ 2B > -N. (28) Muutoin valitaan kuvaus M' Esityksen pituuden rajoittaminen Joskus kuvassa saattaa olla peräkkäin useita sellaisia kuvapisteitä, joiden esityksistä tulee hyvin pitkiä. Jos dekoodaajan käytössä on hyvin vähän puskurimuistia saapuvalle syötteelle, saattaa tämä aiheuttaa hankaluuksia dekoodauksessa. Siksi Golomb-Rice 54

55 koodin pituus on rajoitettu L max bittiin. Rajoitus on toteutettu siten, että määritellään ensin vakio q max, q max = L max - β - 1. (29) Kun on valittu koodauksessa käytettävä parametri k ja tiedetään ennustevirheen ei-negatiiviseksi kuvattu arvo z (eli z = M(ε) tai z = M'(ε) ), voidaan näistä laskea Golomb- Rice koodauksen tarvitsema osamäärä q, q = 2 -k z. (30) Jos q < q max, tulostetaan saatu Golomb-Rice koodi, jonka pituus ei nyt ole koskaan suurempi kuin L max bittiä. Jos taas q q max, tulostetaan ensin q max unaarisena ja sen jälkeen z - 1 binaarisena β:lla bitillä. Tämän tulosteen pituus on aina q max β = L max bittiä, joten tulostettavan koodin pituus ei koskaan ylitä suurinta sallittua pituutta. 5.4 Jakson pituuden koodaus Golomb-Rice koodaus tulostaa vähintään yhden bitin jokaista koodattavaa symbolia kohti. Siksi edellä kuvattu mallinnus ja koodaus eivät tuota kovin hyvää tiivistystulosta silloin, kun kuvassa on paljon alueita, joissa samaa harmaasävyä kuvaava kuvapisteen arvo toistuu useita kertoja peräkkäin. Jotta nämä kuvan alueet tiivistyisivät paremmin, JPEG-LS:ään on lisätty toinen toimintamoodi, jakson pituuden koodaus. Tällöin esitetään yhden syötekuvan kuvapisteen sijaan useita peräkkäisiä kuvapisteitä yhdellä symbolilla. Jos voidaan esittää peräkkäisten samansävyisten kuvapisteiden määrä määrää lyhyemmällä binaariluvulla, käytetään kuvapisteiden esittämiseen alle yksi bitti kuvapistettä kohti Toimintamoodin valinta Päätös jakson pituuden koodaukseen siirtymisestä pitää tehdä kuvan jo prosessoitujen kuvapisteiden perusteella, koska muuten jouduttaisiin välittämään dekoodaajalle informaatiota siitä, milloin tiivistyksessä on siirrytty jakson pituuden koodaukseen. JPEG- LS:ssä tämä on toteutettu niin, että jakson pituuden koodaukseen siirrytään, kun mallinnettavan kuvapisteen x kontekstiksi saadaan (q 1, q 2, q 3 ) = (0, 0, 0). Tällöin kuvapisteen kaikki neljä kontekstin valinnassa käytettyä naapurikuvapistettä ovat samoja, joten to- 55

56 dennäköisesti myös x ja jotkin prosessointijärjestyksessä x:ää seuraavat kuvapisteet saavat tämän saman arvon. Algoritmin siirtyminen jakson pituuden koodaukseen on siis mahdollista myös silloin, kun edes x ei ole samanarvoinen kuin kontekstin valinnassa käytetyt kuvapisteet. Tästä johtuu, että jakson pituus voi olla myös nolla, mikä on myöskin esitettävä tulosteessa, jotta dekoodaus toimisi oikein. Sääntö jakson pituuden koodaukseen siirtymisestä on kuitenkin niin rajoittava, että näin ei tapahdu kovin usein. Esimerkki kuvasta, jossa päätös jakson pituuden koodaamiseen siirtymisestä tehdään usein huonosti, voisi olla samansävyisten, yhden kuvapisteen levyisten, vaaka ja pystyviivojen muodostama ristikko. Laskettaessa jakson pituutta ei luettujen syötekuvapisteiden kontekstia määritetä. Kun syötteessä esiintyy kuvapiste, joka poikkeaa oletetusta, koodataan ja tulostetaan saatu jakson pituus ja tämän jälkeen lasketaan jakson päättäneen kuvapisteen erotus yläpuolellaan olevan kuvapisteen kanssa. Tämä koodataan ja tulostetaan, jonka jälkeen siirrytään takaisin normaaliin toimintamoodiin. Jos jakson päätti kuvan vaakarivin loppuminen, koodataan pelkkä jakson pituus ja siirrytään suoraan normaaliin toimintamoodiin Jakson pituuden esittäminen Myös jakson pituudet Golomb-Rice koodataan, jotta pituuden esittäminen normaalin kuvapisteittäisen koodauksen sijaan olisi mahdollisimman kannattavaa. Samoin kuin ennustevirheiden koodaus, myös jakson pituuden koodaus vaatii parametrin. Tässä tätä parametria on merkitty m:llä. Parametri m voitaisiin asettaa tähän mennessä havaittujen jaksojen pituuksien keskiarvoksi, mutta JPEG-LS käyttää tehokkaampaa tapaa. Esitetään havaittu jakso bittijonona siten, että 0-bitti tarkoittaa jaksoon kuuluvaa kuvapistettä ja 1-bitti jaksoon kuulumatonta. Ykkösbittejä on siis aina yksi jakson loppumerkkinä, eikä koskaan sitä ennen. Merkitään l:ää peräkkäistä nollabittiä 0 l :llä. Määritellään nyt elementaarinen Golomb-koodi parametrilla m (m = 1, 2, 3,...) siten, että EG m koodaa vaihtelevan pituiset bittijonot { 1, 01, 001,..., 0 m-1 1, 0 m } lyhyemmiksi vaihtelevan pituisiksi bittijonoiksi. Tällainen koodaus saadaan, kun annetaan 0 m :lle koodi 0 ja koodataan muut määrittelyjoukon jonot ykkösbitillä, jota seuraa nollien määrän muunneltu binaarinen esitys. Kun m = 2 g (g = 0, 1, 2,...), muunneltu esitys on sama kuin ta- 56

57 vallinen binaarinen esitys g:llä bitillä, joten yksinkertaisuuden vuoksi rajoitetaan m:n arvo vain kahden potensseihin. Edellä määritelty elementaarinen Golomb-koodaus parametrilla m koodaa saadut jakson pituudet samoin kuin tavallinen Golomb-Rice koodaus parametrilla k, kun m = 2 k. Erona on se, että Golomb-Rice koodaus on määritelty äärettömälle joukolle einegatiivisia kokonaislukuja, kun taas elementaarisen Golomb-koodauksen määrittelyjoukko on äärellinen. Tästä on hyötyä, koska nyt koodaajalle annettavan parametrin m arvoa voidaan muuttaa jakson pituuden koodauksen aikana. Ensimmäistä m:n pituista jakson osaa kohti tulostetaan yksi bitti ja tämän jälkeen k:n arvoa voidaan kasvattaa, jos se arvellaan tarpeelliseksi. Sen jälkeen voidaan taas koodata seuraava m:n kuvapisteen osuus jaksosta yhdellä bitillä jne. Lopuksi tulostetaan jakson jäljelle jääneen osan pituutta vastaava koodi. Tämä koodi on aina k + 1 bittiä pitkä. Jakson pituudelle saadaan tiivis esitys jos osataan muuttaa k:n arvoa koodauksen aikana oikealla tavalla. Parametrin k arvo säilyy jaksojen välillä, joten jos esimerkiksi alustavasti k = 3, eikä arvoa muuteta, koodausjärjestyksessä peräkkäiset kahdeksan kuvapisteen jaksot voidaan koodata kukin yhdellä bitillä. JPEG-LS käyttää k:n arvon määrittämiseen valmiiksi määriteltyä 32-alkioista taulukkoa, jonka alkiot sisältävät k:lle annettavia arvoja. Tähän taulukkoon viitataan indeksillä I run, jota kasvatetaan yhdellä aina, kun koodataan m:n pituinen jakson osa. Kun koodataan lyhyempi kuin m:n pituinen osa, indeksiä vähennetään yhdellä. Taulukko alkaa k:n arvoilla 0, 1, 2 ja 3, joita on kutakin neljä kappaletta peräkkäin. Näiden jälkeen tulevat arvot 4, 5, 6 ja 7, kutakin kaksi kappaletta peräkkäin. Lopuksi on yksi kappale jokaista arvoa välillä [8, 15]. Kaikki arvot ovat ei-laskevassa järjestyksessä [1] Jakson katkaisevan kuvapisteen esitys Kuvapiste, joka päättää jakson (eli ensimmäinen kuvapiste, joka ei enää kuulu jaksoon), mallinnetaan erityisellä tavalla. Kohdassa esitetyn ennustimen sijaan oletetaan jakson päättävän kuvapisteen x olevan samanarvoinen kuin x:n yläpuolella oleva kuvapiste b. Lasketaan ennustevirhe ε kaavalla ε = x - b mod α, (31) 57

58 mutta tavanomaista kontekstin valintaa ei tehdä, eikä siten myöskään käytetä ennustevirheen adaptiivista korjausta. Sen sijaan valitaan kuvapisteelle toinen kahdesta erityisestä, jakson päättäville kuvapisteille varatusta kontekstista. Valinta tehdään sen mukaan, onko voimassa a = b vai a b (a on x:n vasemmalla puolella oleva kuvapiste, eli viimeinen jaksoon kuulunut kuvapiste silloin, kun jakson pituus 1). Molemmissa erityisissä konteksteissa Golomb-Rice parametrin k valinta tehdään samoin kuin tavallisten kontekstienkin kohdalla. Kuitenkin käytettävä kuvaus (M tai M') valitaan laskemalla negatiivisten ennustevirheiden määrää kontekstissa ja tekemällä valinta suoraan sen perusteella, onko negatiivisia vai ei-negatiivisia ennustevirheitä enemmän. Lisäksi siinä kontekstissa, joka valitaan, kun a = b, ei koskaan ole ε = 0, joten korvataan tällöin kuvaukset M ja M' niin, että tämä otetaan huomioon. Uudet kuvaukset ovat siis M:n korvaava M''(ε), M''(ε) = 2 ε + u(ε) - 2 (32) ja M':n korvaava M'''(ε), M'''(ε) = 2 ε - u(ε) - 1, (33) joissa ε < 0 u(ε) = 1 ja ε 0 u(ε) = 0. Kuten tavallisten kontekstienkin kohdalla, puolitetaan A ja N, kun N = N 0. 58

59 6 CALIC CALIC (Context-Based, Adaptive, Lossless Image Coding) on toimintaperiaatteeltaan hyvin samantapainen menetelmä kuin LOCO-I. Molemmat menetelmät käyvät kuvan pisteet läpi samassa järjestyksessä. Kuvapisteiden välisiä riippuvuuksia poistetaan käyttäen kuvan pisteiden intensiteetin hitaaseen muuttumiseen perustuvaa ennustinta ja ennusteen arvoa korjataan jakamalla kuvapisteet useaan kontekstiin. CALIC on suunniteltu niin, että mallintaja ja koodaaja ovat mahdollisimman riippumattomia toisistaan, jolloin voidaan helposti käyttää mitä tahansa koodaajaa. Aritmeettinen koodaaja on yleisesti käytetty. Myös CALIC voidaan toteuttaa laitteistopohjaisena, mutta toteutus vaatii yleisen jakolaskualgoritmin implementoinnin. Tiivistettävää syötekuvapistettä kohti joudutaan myös tekemään useampia operaatioita kuin käytettäessä LOCO-I:tä. Käsiteltäviä menetelmiä on verrattu luvussa 8. Luku 6 on kirjoitettu suurimmaksi osaksi lähteen [20] pohjalta. Muiden lähteiden käyttö on erityisesti merkitty. 6.1 Toimintaperiaate Kuvan pisteet käydään läpi yhdessä vaiheessa. Työmuistista tarvitaan noin kaksi kertaa kuvan vaakarivin pituinen alue, johon syötekuvaa puskuroidaan ennusteen laskentaa ja kontekstien valintaa varten. Lisäksi kontekstien tilastotietojen tallennukseen pitää varata oma tilansa. Koko kuvaa käsitellään yhtenä kokonaisuutena, eikä jakoa erikseen tiivistettäviin lohkoihin yleensä käytetä. Kaavio CALIC-tiivistysmenetelmän toiminnasta on esitetty kuvassa 18. Samoin kuin LOCO-I:ssä, algoritmi saa kussakin vaiheessa syötteenä tiivistettävän kuvapisteen arvon sekä kuvaan merkittyjen naapurikuvapisteiden arvot. Naapurikuvapisteiden arvojen perusteella valitaan joko tavallinen tai binaarinen toimintamoodi (tämän tarkastelu on kohdassa 6.4). Tavanomaisessa toimintamoodissa lasketaan naapurikuvapisteiden avulla tiivistettävän kuvapisteen arvolle ennuste sekä valitaan kuvapisteen konteksti (kohdat ja 6.2.3). Ennustetta korjataan adaptiivisesti valitun kontekstin perusteella (kohta 6.2.4). Saadun ennustevirheen avulla päivitetään valitun kontekstin tilastotietoja. Lopuksi ennustevirheiden hajontaa pienennetään vaihtamalla virheen etumerkki tarvitta- 59

60 essa (kohta 6.2.5) ja saadut ennustevirheet koodataan käyttäen yhtä kahdeksasta mahdollisesta todennäköisyysmallista (kohta 6.3). Käytettävä malli valitaan tavalla, joka on esitetty kohdissa ja Binaariseen toimintamoodiin siirrytään, kun kuvassa havaitaan kaksisävyinen alue. Tällöin alueen kuvapisteet tiivistetään käyttämällä erityistä kontekstimallinnusalgoritmia ja tertiaarista aritmeettista koodaajaa, kuten kohdassa 6.4 on esitetty. Kuva 18: CALIC-menetelmän toimintaperiaate 60

61 6.2 Mallinnus Ennusteen laskenta Samoin kuin LOCO-I, CALIC pyrkii ennusteen laskennassa tunnistamaan kuvassa olevia alueita, joiden kohdalla kuvan pisteiden kirkkaudessa tapahtuu nopea muutos, ja näin välttämään suurten ennustevirheiden syntymistä näillä reuna-alueilla. Ennusteen laskennassa käytetään seitsemää kulloinkin käsiteltävän kuvapisteen naapurikuvapistettä, joiden perusteella arvioidaan paikallista kirkkauden muutosta, kun kuvassa liikutaan pysty ja vaakasuuntaisesti. Näin saatujen paikallisen gradientin pysty ja vaakasuuntaisen komponentin avulla arvioidaan gradientin suuntaa ja suuruutta prosessoitavan kuvapisteen ympäristössä. Saatua tietoa käyttäen lasketaan painotuskertoimet seitsemästä naapurikuvapisteestä neljälle käsiteltävää kuvapistettä lähimmälle kuvapisteelle. Tavoitteena on painottaa enemmän niitä naapurikuvapisteitä, jotka ovat kohtisuorassa gradienttia vastaan, jolloin kuvassa olevan reunan vaikutus ennustevirheen suuruuteen jää mahdollisimman pieneksi. Laskemalla yhteen painotetut naapurikuvapisteiden arvot saadaan lopulta ennusteen arvo. CALIC-menetelmän käyttämästä ennustimesta käytetään nimeä GAP = Gradient- Adjusted Predictor. Mikäli kulloinkin käsiteltävän kuvapisteen I ajatellaan sijaitsevan xy-koordinaatistossa paikassa (i, j) (merkitään tätä I[i, j]), niin kuvapistettä I vastaavat naapurikuvapisteet I n, I w, I ne, I nw, I nn, I ww ja I nne sijaitsevat paikoissa (i, j - 1), (i - 1, j), (i + 1, j - 1), (i - 1, j - 1), (i, j - 2), (i - 2, j) ja (i + 1, j - 2). Tässä käytettävä koordinaatisto on kuvapisteiden paikkojen esityksessä yleisesti käytetty koordinaatisto, jossa x-akseli kasvaa vasemmalle ja y-akseli tavanomaisesta poiketen alaspäin. Paikallisen gradientin vaakasuuntaisen komponentin, d h, arvo määritellään d h = I w - I ww + I n - I nw + I n - I ne, (34) ja vastaavasti pystysuuntaisen komponentin, d v, arvo d v = I w - I nw + I n - I nn + I ne - I nne. (35) Määrittelyissä on samaistettu kuvapiste ja kuvapisteen arvo. Itseisarvojen ottaminen erotuksista on välttämätöntä, jotta vastakkaismerkkiset erotukset eivät kumoaisi toisiaan. Ei myöskään ole missään vaiheessa tarpeellista tietää, mihin suuntaan kuvapistei- 61

62 den kirkkausarvot kasvavat kuljettaessa gradientin pysty tai vaakakomponentin suuntaisesti, joten itseisarvot erotuksista voidaan ottaa. Kuva 19 havainnollistaa käytettävien naapurikuvapisteiden sijaintia ja gradientin arvon laskentaa. Kuva 19: Kuvapisteen I ennusteen laskennassa käytetyt naapurikuvapisteet sekä gradientin laskennassa käytetyt erotukset. Harmaat kuvapisteet kuuluvat jo prosessoituun syötteen osaan. Saadut gradientin komponentit mahdollistavat gradientin suuruuden ja suunnan arvioinnin, ja siten naapurikuvapisteiden painotuksen. Naapurikuvapisteiden painotukset asetetaan gradientin komponenttien erotuksen perusteella taulukon 2 mukaisesti. Tarvittaessa käyttäjälle voidaan antaa mahdollisuus muuttaa painotuskertoimien arvoja eri tapauksissa [19]. Taulukko 2: Reunan luokitus CALIC-menetelmän ennustimella paikallisen gradientin komponenttien d h ja d v avulla sekä ennusteen laskennassa käytetyt naapurikuvapisteiden arvojen painotukset, r( ). d v - d h Arvioitu reuna r(i n ) r(i w ) r(i ne ) r(i nw ) < -80 Jyrkkä pystysuuntainen , <-32 Pystysuuntainen 3/4 1/4 1/8-1/8-32, < -8 Loiva pystysuuntainen 5/8 3/8 3/16-3/16-8, 8 Hyvin loiva reuna tai ei reunaa 1/2 1/2 1/4-1/4 > 8, 32 Loiva vaakasuuntainen 3/8 5/8 3/16-3/16 >32, 80 Vaakasuuntainen 1/4 3/4 1/8-1/8 > 80 Jyrkkä vaakasuuntainen

63 6.2.2 Ennusteen skaalaus kuvan värisyvyyden perusteella Jotta CALIC olisi käyttökelpoinen myös silloin, kun kuvan värisyvyys on muu kuin 8 bpp, jolle menetelmä on alunperin suunniteltu, ennustimen tuottamia arvoja d h ja d v skaalataan tarvittaessa niin, että muut tiivistysprosessin vaiheet toimivat skaalauksen jälkeen ilman muutoksia. Skaalaus tehdään laskemalla kuvan rivin tiivistyksen yhteydessä saatujen ennustevirheiden itseisarvojen keskiarvoa, kun käytetään ennustevirheiden laskennassa korjattua ennusteen arvoa (kohta 6.2.4). Merkitään tätä keskiarvoa σ:lla. Kunkin rivin tiivistyksen alussa lasketaan edelliseltä riviltä saadun σ:n arvon perusteella skaalauskerroin λ d h :lle ja d v :lle kaavalla: λ = 2 f(z, σ), jossa f(z, σ) = - (z - 8) / 2 - max(0, log 2 σ - 5 ) (36) Kaava on johdettu kokeellisesti. Arvo z on kuvan värisyvyys bitteinä kuvapistettä kohti, eli z = log 2 α, kun α syötesymbolien aakkoston koko. Ensimmäisellä vaakarivillä asetetaan λ = Kontekstin valinta CALIC valitsee syötekuvapisteen kontekstin hieman eri tavalla kuin LOCO-I. Valinnassa käytetään hyväksi ennustimen vaatimia lukuisia naapurikuvapisteitä, joiden avulla pyritään tunnistamaan tekstuuri prosessoitavan kuvapisteen ympäristössä. Lisäksi tiedetään, että käytetylle ennustimelle (GAP) on ominaista peräkkäisten, itseisarvoltaan lähes samansuuruisten ennustevirheiden tuottaminen. Tällöin voidaan arvioida kulloinkin saatavaa ennustevirhettä prosessoitavan kuvapisteen ympäristöstä saatujen ennustevirheiden avulla. Tekstuurin perusteella valittavia konteksteja on 144 ja arvioitu ennustevirheen itseisarvon suuruusluokka jaetaan neljään alueeseen. Yhdistämällä molempien jakotapojen tuottamat kontekstijoukot näiden joukkojen karteesisen tulon tuottamaksi kontekstijoukoksi saadaan kontekstien kokonaismääräksi 4 * 144 = 576, eli noin 1,6 kertaa LOCO-I:n kontekstien määrä Ennustevirheen suuruusluokan arviointi Kuten edellä todettiin, kullakin yksittäisellä kuvan vaakarivillä jokainen tuotettu ennustevirhe korreloi edellisen tuotetun ennustevirheen kanssa. Lisäksi on ilmeistä, että käytettäessä ennustinta, joka olettaa kuvan pisteiden intensiteetin vaihtelevan vain vähän 63

64 pienellä alueella, suuret intensiteetin vaihtelut prosessoitavan kuvapisteen ympäristössä johtavat helposti itseisarvoltaan suuriin ennustevirheisiin. Ennustevirheen suuruusluokan arviointiin riittää siis ennustimen laskemat arvot d h ja d v sekä GAP:n tuottaman ennusteen virhe kuvapisteelle I[i - 1, j], kun prosessoitava kuvapiste on I[i, j]. CALIC arvioi ennustevirheen suuruusluokkaa,, seuraavasti: = ad h + bd v + c e ω, (37) jossa vakiokertoimet a = 1, b = 1 ja c = 2 ja e ω on kuvapisteelle I[i - 1, j] aikaisemmin saatu ennustevirhe. Kertoimet a, b ja c on määrätty kokeellisesti käyttäen aineistona useita erilaisia kuvia. Valinta on tehty antamalla kertoimille sellaiset arvot, että (e p - p ) 2 minimoituu, kun e p on kuvapisteen p korjatun ennusteen (kohta 6.2.4) virhe sekä p on :n arvo kuvapisteelle p p:n käydessä läpi kaikkien kuvien kaikki kuvapisteet. Jokaisen kuvan kohdalla kuvapisteiden läpikäyntijärjestys on sama kuin CALICmenetelmässä. Kontekstien määrän vähentämiseksi kvantisoidaan kahdeksaan alueeseen. Kvantisointialueiden määrä on määritetty kokeellisesti. Merkitään kvantisointifunktiota Q:lla, jolloin Q on kuvaus Q: q, q { 0, 1,..., 7 }. (38) Ongelmana on määritellä kvantisointialueet niin, että kuhunkin kvantisointialueeseen (kontekstiin) sisältyy mahdollisimman suurella todennäköisyydellä sellaisia ennustevirheitä, joiden jakauma mahdollistaa pienihajontaisen todennäköisyysmallin käytön kontekstille. Tavoitteeseen päästään minimoimalla ehdollinen entropia, H', (39) kun p käy läpi käytetyn aineiston kuvien kaikki kuvapisteet edellä esitetyllä tavalla, e p sekä p on määritelty kuten edellä ja kullekin q d :lle on määritelty arvo siten, että 0 = q 0 < q 1 <... < q 7 < q 8 =. Kokeellisesti on havaittu, että kun a = b = 1 ja c = 2, arvot (q 1, q 2, q 3, q 4, q 5, q 6, q 7 ) = (5, 15, 25, 42, 60, 85, 140) tuottavat keskimäärin pienimmän ehdollisen entropian arvon. Tarvittaessa käyttäjälle voidaan antaa mahdollisuus muuttaa 64

65 sekä kertoimien a, b ja c että kvantisointialueiden rajojen q d arvoja paremman tiivistystuloksen saavuttamiseksi. Edellä kvantisoidaan kahdeksaan alueeseen, vaikka ennusteen itseisarvon suuruuden perusteella tehdään jako vain neljään kontekstiin. Myöhemmin kuitenkin valitaan :n kvantisoidun arvon perusteella yksi kahdeksasta mahdollisesta todennäköisyysmallista koodattavalle ennustevirheelle, joten kvantisointi kahdeksaan alueeseen on perusteltua Konteksteihin jako tekstuurin perusteella Samoin kuin LOCO-I, CALIC pyrkii tunnistamaan prosessoitavan kuvapisteen ympäristössä olevan tekstuurin, jolloin saadaan arvioitua ennustevirheen suuruus ja voidaan siten korjata saatua ennustetta. Prosessoitavan kuvapisteen ympäristöstä laskettujen gradienttien sijaan tekstuurin määrittämiseen käytetään kuvapisteen naapurustosta saatavia kuvapisteiden arvoja. Valitaan kontekstin määrittämiseen käytetty naapurusto C seuraavasti: C = { x 0, x 1,..., x 7 }= { I n, I w, I nw, I ne, I nn, I ww, 2I n - I nn, 2I w - I ww }. (40) Nyt C voidaan kvantisoida 8-bittiseksi binaariluvuksi kvantisoimalla kukin x k kahteen alueeseen. Alueiden rajana käytetään ennustimen (GAP) tuottamaa arviota nykyisen kuvapisteen intensiteetistä, joten kvantisointi pyrkii jakamaan naapuruston kuvapisteet prosessoitavaa kuvapistettä kirkkaampiin ja tummempiin. Siten kvantisointi ei riipu ympäristön kuvapisteiden absoluuttisista kirkkausarvoista, vaan kunkin kuvapisteen suhteellisesta kirkkaudesta muihin ympäristön kuvapisteisiin nähden. Formaalisti kvantisointi tehdään tuottamalla 8-bittinen binaariluku B = b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0, jossa kukin b k määritellään: 0, jos x k Î[i, j] b k = (41) 1, muutoin. Î[i, j] on ennustimen GAP tuottama arvo prosessoitavalle kuvapisteelle, joka on paikassa (i, j). 65

66 Arvo x 7 lasketaan, jotta voidaan käyttää kontekstin valintaperusteena myös sitä, onko ennustimen tuottama arvo kuvapisteiden I nn ja I n arvojen määrittämän ii-koordinaatiston suoran ylä vai alapuolella. Arvo x 6 tuottaa vastaavan tuloksen pystysuunnassa. Kuva 20 havainnollistaa tilannetta vaakasuuntaisessa tapauksessa. Alavasemmalla olevassa koordinaatistossa arvojen I w ja I ww määräämä suora kulkee suljettujen ympyröiden kautta. Avoimet ympyrät kuvaavat kuvapisteen I ennustevirheen Î[i, j] arvoa tapauksissa A ja B. Tapauksessa A ennusteen arvo on suoran yläpuolella ja intensiteettifunktion voi olettaa alkavan kaartua ylöspäin suoran määräämältä intensiteetin tasolta, kun i kasvaa. Tapauksessa B vastaavanlainen kaartuminen tapahtuu alaspäin suoran määräämältä tasolta. Oikealla puolella on esitetty suurennos todellisesta syötekuvan osasta ja merkitty kaksi sellaista paikkaa, joissa tapaukset A ja B voivat sattua edettäessä kuvassa vaakasuuntaisen nuolen osoittamalla rivillä. Kuva 20: Intensiteettifunktion käyttö kontekstin valintaperusteena. Kvantisoinnin tulos B voi saada vain 144 eri arvoa, koska kaikki joukon C arvot eivät ole riippumattomia toisistaan eivätkä ennustimen tuottamasta arvosta Î[i, j]. Jos x 0 = I n Î[i, j] ja x 4 = I nn < Î[i, j], on aina voimassa x 6 = 2I n - I nn > Î[i, j]. Samoin on aina voimassa x 6 = 2I n - I nn Î[i, j], kun I n < Î[i, j] ja I nn Î[i, j]. Vastaavalla tavalla x 7 riippuu arvoista x 1 = I w, x 5 = I ww ja Î[i, j]. Koska siis b 6 on kiinnitetty, kun b 0 ja b 4 poikkeavat toisistaan, binaarinen esitys b 6 b 4 b 0 voi saada vain kuusi mahdollista arvoa. Samoin b 7 on kiinnitetty, kun b 1 ja b 5 poikkeavat toisistaan, ja esitys b 7 b 5 b 1 voi saada vain kuusi mahdollista arvoa. Riippumattomat bitit b 2 ja b 3 voivat muodostaa neljä kombinaatiota, 66

67 joten B = b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 voi saada 6 * 6 * 4 = 144 erilaista arvoa. (Lähteessä [20] lienee sekaannus viittauksissa luvun B bitteihin riippuvuuksia käsittelevässä kappaleessa V.B.) Ennusteen korjaus Ennustimen (GAP) tuottamien ennustevirheiden entropia on liian suuri, jotta hyvään tiivistystulokseen voitaisiin päästä vain koodaamalla ennustevirheet sopivasti. Kun tiedetään prosessoitavalle kuvapisteelle valittu konteksti, ennusteeseen voidaan tehdä tiivistystulosta parantava korjaus Toimintaperiaate Samoin kuin LOCO-I / JPEG-LS CALIC päivittää tiivistyksen edetessä jokaiselle kontekstille saatujen ennustevirheiden todennäköisyyksien jakaumaa. Kun tiedetään kontekstin ennustevirheiden keskiarvo, saadaan laskettua korjattu ennuste Ï lisäämällä keskiarvo GAP:n tuottamaan ennusteeseen Î. Menetelmä on samantapainen kuin LOCO-I:ssä käytetty, mutta CALIC-menetelmässä kontekstin ennustevirheiden keskiarvo vastaa suoraan LOCO-I:n korjausparametria C, eikä LOCO-I:n C:n laskenta-algoritmin kaltaista algoritmia käytetä ennusteen adaptiivisen korjauksen laskennassa. Toinen poikkeavuus LOCO-I:hin nähden on se, että tietoa kontekstikohtaisesta ennustevirheiden hajonnasta ei tarvitse ylläpitää, koska koodaajalle lähetettävä todennäköisyysmalli muodostetaan toisin kuin LOCO-I:ssä. Lopuksi lasketaan ennustevirhe käytettäessä korjattua ennusteen arvoa ja lisätään tämä virhe käytettyyn kontekstiin. Kontekstiin ei siis koskaan lisätä ennustevirhettä, joka on laskettu suoraan GAP:n tuottamaa ennustetta, Î, käyttäen, sillä tällöin käytetyn kontekstin ennustevirheiden keskiarvo saattaisi muuttua joka lisäyksellä hyvin paljon eikä stabiloituisi ainakaan riittävän nopeasti. Siten kontekstin ennusteisiin Î tekemä adaptiivinen korjaus oskilloisi pitkään halutun arvon ympärillä, millä olisi hyvin kielteinen vaikutus tiivistystulokseen Toteutustapa Ennustevirheiden keskiarvon laskemiseksi kukin konteksti pitää yllä kahta muuttujaa, S ja N. Muuttuja S laskee yhteen kontekstiin kuuluvia ennustevirheitä ja N:ää kasvatetaan yhdellä aina, kun kontekstiin lisätään uusi ennustevirhe. Tällöin tarvittava ennustevir- 67

68 heiden keskiarvo saadaan jakamalla S N:llä. S:n ja N:n vaatiman tilan vähentämiseksi N:n arvon ei sallita kasvaa 127:ää suuremmaksi. Kun N kasvaa liian suureksi, asetetaan N:n arvoksi 64 ja puolitetaan S:n arvo. Tällöin S:n tallentamiseen riittää aina 16 bittiä ja N voidaan tallentaa kahdeksaan bittiin. Toinen usein myönteinen vaikutus on se, että vanhemmat kontekstiin tallennetut ennustevirheet vaikuttavat vähemmän adaptiivisen korjauksen arvoon. Tällöin ennustevirheen korjaus mukautuu tarvittaessa nopeammin Ennustevirheiden hajonnan pienentäminen Ennen korjatun ennustevirheen ε = I[i, j] - Ï[i, j] lähettämistä koodaajalle tutkitaan, onko kontekstin ennustevirheiden keskiarvo S / N < 0. Jos näin on, lähetetään koodaajalle ε:n sijaan arvo -ε, sillä nyt on tapaus ε < 0 on todennäköisempi kuin tapaus ε > 0 ja ε:n vastaluvun ottaminen muuttaa useampia koodaajalle lähetettyjä ennustevirheen negatiivisia arvoja positiivisiksi kuin positiivisia arvoja negatiivisiksi. Tällöin lähetettyjen ennustevirheiden hajonta pienenee, mikä parantaa tiivistystulosta. Dekoodaajassa tiedetään arvot S ja N, joten luetun ennustevirheen alkuperäinen merkki voidaan aina palauttaa. Koodattavan ennustevirheen etumerkin muuntaminen on samantapainen kuin kohdassa esitetty menetelmä, jolla LOCO-I:n tarvitsemien kontekstien määrä puolitetaan. Lähetettyjen ennustevirheiden histogrammin terävöittämistä on käsitelty lähteessä [18]. 6.3 Koodaus CALIC ei kiinnitä käytettävää koodaajaa, vaan menetelmä on toteutettu niin, että koodaaja voidaan valita mahdollisimman vapaasti. Mallintajan tuottamia ennustevirheitä kuitenkin käsitellään ennen koodaajalle syöttämistä. Lisäksi valitaan koodaajalle välitettävä todennäköisyysmalli. Tässä kohdassa käsittellään näitä toimintoja Ennustevirheiden kuvaus Ennen kuin mallintajan tuottamat ennustevirheet koodataan, ne kuvataan välille [0, α), jossa α on tiivistettävän kuvan värisyvyys. Kohdan mukaisesti näin voidaan aina tehdä. Kuvaus tehdään niin, että ennustevirheet järjestyvät todennäköisyydeltään laskevaan järjestykseen. Tällöin siis 0 0, 1 2, -1 3 jne. 68

69 6.3.2 Todennäköisyysmallin valinta LOCO-I valitsee koodaajalle lähettävän todennäköisyysmallin suoraan valitun kontekstin perusteella. CALIC, jossa konteksti valitaan sekä ennustevirheen itseisarvon arvioidun suuruusluokan että tekstuurin pohjalta, ei valitse käytettyä todennäköisyysmallia suoraan mallintajan käyttämän kontekstin perusteella. Sen sijaan valinta tehdään :n arvon perusteella, jolloin mahdollisia todennäköisyysmalleja on kahdeksan. Kukin malli pitää eksplisiittisesti kirjaa erisuuruisten (kuvattujen) ennustevirheiden esiintymiskertojen määrästä, eli kukin malli voidaan toteuttaa α-paikkaisena taulukkona. Aluksi taulukon jokainen alkio alustetaan arvoon 1, jotta mikä tahansa ennustevirhe voidaan tarvittaessa koodata. Todennäköisyysmallien pieni määrä parantaa tiivistystulosta erityisesti pienten kuvien kohdalla, koska menetelmä adaptoituu nopeammin kuin käytettäessä useampia todennäköisyysmalleja Suurten ennustevirheiden koodaaminen Varsinkin silloin, kun on pieni, ongelmaksi tulee se, että todennäköisyysmalleissa kaikkien arvojen todennäköisyydeksi pitää alustaa 1 / α, kun α on kuvan värisyvyys. Muuten kaikkien ennustevirheen arvojen koodaaminen ei olisi mahdollista. Todellisuudessa kuitenkin suuri osa ennustevirheistä on niin lähellä nollaa, että todennäköisyysmallista tulee huono tiivistyksen edetessä. Jos valitaan esimerkin vuoksi α = 256 ja tarkasteltavaksi väliksi [-10, 10] sekä oletetaan, että tällä olevia virheitä on koodattu yhteensä 2100 kappaletta ja välin ulkopuolella olevia ennustevirheitä ei ole esiintynyt lainkaan, saadun todennäköisyysmallin mukaan seuraavaksi koodattava arvo on välillä [-10, 10] vain noin 2100 / ( ) 90 % todennäköisyydellä. Yksi ratkaisu ongelmaan on koota hyvin harvoin esiintyvät ennustevirheen arvot yhdeksi joukoksi ja käyttää tälle joukolle vain yhtä esiintymiskertojen laskuria, jota kasvatetaan, kun jokin joukkoon kuuluva ennustevirhe esiintyy. Joukkoon kuuluvat ennustevirheet koodataan niin, että ensin tulostetaan symboli, joka ilmoittaa seuraavan symbolin kuuluvan tähän joukkoon, ja sen jälkeen symboli, joka ilmaisee, mikä joukkoon kuuluvista ennustevirheistä on kyseessä. Tällöin joukkoon kuuluvia ennustevirheitä vastaavat koodit pitenevät, joten jako useammin ja harvemmin esiintyvien ennustevirheiden välillä pitää tehdä niin, että saavutetaan paras tiivistystulos. 69

70 CALICin toteutuksessa jokaiselle kahdeksasta todennäköisyysmallista asetetaan suurin kuvatun (kohta 6.3.1) ennustevirheen arvo, joka voidaan koodata sellaisenaan. Merkitään tätä N :lla, jossa on käytetty todennäköisyysmalli (0 7). Jos jokin ennustevirhe x on suurempi kuin N, koodataan ensin N, jonka jälkeen koodataan x - N käyttäen todennäköisyysmallia + 1. Lisäksi arvon N koodaamisen jälkeen pitää koodata arvo nolla käyttäen mallia + 1, sillä muuten koodauksen tuloste ei ole yksikäsitteinen. (Lähteen [20] esityksen mukaan määritellään N niin, että N :aa pienemmät ennustevirheen arvot voidaan koodata sellaisenaan ja ennustevirheet, jotka ovat suurempia tai yhtä suuria kuin N koodataan ensin N - 1:nä, jonka jälkeen koodataan x - (N - 1) käyttäen mallia + 1. Tällöin kuitenkin sekä ennustevirheen N että virheen N - 1 esitys alkaa N - 1:n esityksellä, eikä dekoodauksessa tiedetä, seuraako tätä seuraavan ennustevirheen esitys vai nykyisen ennustevirheen jälkimmäinen osa x - (N - 1). Olen siksi poikennut lähteen esityksestä tässä.) Arvot N on etsitty kokeellisesti. Paras keskimääräinen tiivistystulos koeaineistolla on saatu, kun (N 0, N 1,..., N 7 ) = (18, 26, 34, 50, 66, 82, 114, 256) [20]. Edellisen menettelyn lisäksi pidetään kirjaa kunkin todennäköisyysmallin ennustevirheiden keskiarvosta. Jos keskiarvo on suurempi kuin N / 2 + Κ (Κ on vakio, joka voidaan valita), jaetaan koodattava kuvattu ennustevirhe (z - k):hon eniten merkitsevään bittiin ε 1 ja k:hon vähiten merkitsevään bittiin ε 2. Pidetään lisäksi kunkin todennäköisyysmallin kohdalla kirjaa arvojen ε 1 keskiarvosta. Edellä z = log 2 α ja k:ksi valitaan pienin sellainen luku, jolla arvojen ε 1 keskiarvo pysyy pienempänä kuin N / 2, kun uusi ε 1 :n arvo otetaan huomioon keskiarvon laskennassa. Lopuksi ε 1 koodataan normaalilla tavalla käyttäen todennäköisyysmallia ja ε 2 tulostetaan sellaisenaan. Tällä menettelyllä vältytään tiivistystuloksen merkittävältä huononemiselta silloin, kun α on suuri ja saatetaan saada useita ennustevirheen arvoja, jotka muuten vaatisivat koodauksen kahdella symbolilla valittujen arvojen N perusteella. 6.4 Binaarinen toimintamoodi Vastaavalla tavalla kuin LOCO-I / JPEG-LS siirtyy jakson pituuden koodaukseen, kun syötteessä esiintyy mahdollinen yhtenäinen samansävyinen alue, CALIC siirtyy binaariseen toimintamoodin, mikäli syötteessä on alue, jolla esiintyy korkeintaan kahta eri 70

71 harmaasävyä. Tällöin harmaasävyt poikkeavat todennäköisesti paljon toisistaan (kuvassa on esimerkiksi mustaa tekstiä valkoisella pohjalla), eikä kuvan harmaasävyjen hitaita muutoksia hyödyntävä ennusteen laskentamenetelmä toimi tehokkaasti. Binaariseen toimintamoodiin siirrytään jos naapurikuvapisteissä I ww, I w, I nw, I n, I ne ja I nn esiintyy korkeintaan kahta eri arvoa. Silloin, kun binaariseen toimintamoodiin on siirrytty, merkitään s 1 = I w ja s 2 :ksi asetetaan toinen esiintyvistä arvoista tai jokin arvo x, x s 1, jos naapurikuvapisteissä esiintyy vain yhtä arvoa. Nyt prosessoitava kuvapiste I[i, j] voidaan esittää arvona T seuraavasti: 0, jos I[i, j] = s 1 T = 1, jos I[i, j] = s 2 (42) 2, muuten. Prosessoitavat kuvapisteet jaetaan 32 kontekstiin naapuruston C: C = { x 0, x 1,..., x 4 }= { I n, I nw, I ne, I ww, I nn } (43) perusteella muodostamalla 5-bittinen binaariluku B = b 4 b 3 b 2 b 1 b 0 siten, että: 0, jos x k = s 1 b k =, 0 k 4. (44) 1, jos x k = s 2 Kukin konteksti ylläpitää kolmea laskuria, jotka esittävät T:n arvojen esiintymiskertojen määrää kontekstissa. Nyt kukin kuvapiste voidaan koodata kolmea arvoa koodaavalla, tertiaarisella aritmeettisella koodaajalla. Koodattaessa arvo T = 2 dekoodaaja tietää, milloin pitää siirtyä pois binaarisesta moodista. 71

72 7 JPEG 2000 JPEG 2000 on uusi kuvantiivistysmenetelmä, jonka toiminnan keskeinen osa on kuvalle tehtävä wavelet-muunnos. Menetelmä on varsin laaja ja soveltuu useisiin erilaisiin käyttötarkoituksiin. Tässä työssä ei perehdytä menetelmän lukuisiin yksityiskohtiin, eikä käsitellä kuvan tiivistetyn esityksen muotoa yksityiskohtaisesti, vaan esitellään ainoastaan toimintaperiaate tiivistettäessä häviöttömästi harmaasävykuvia. Kohdassa 7.1 esitellään häviöttömässä tiivistyksessä käytetty wavelet-muunnos. Kohta 7.2 käsittelee entropiakoodauksessa käytettävää MQ-koodaajaa, joka perustuu aritmeettiseen koodaukseen. Lopuksi kohdassa 7.3 käydään läpi wavelet-kerrointen mallinnuksessa käytettävä EBCOT-menetelmä. 7.1 Wavelet-muunnos JPEG 2000 käyttää häviöttömässä tiivistyksessä (5, 3) wavelet-muunnosta, jonka tuottamat wavelet-kertoimet ovat aina kokonaislukuja [10]. Tämä on tärkeää, jotta vältytään kerrointen riittämättömän esitystarkkuuden tuottamilta informaatiohäviöiltä. Oletetaan seuraavassa, että x[n] esittää muunnettavaa signaalia. Jotta myös signaalin alun ja lopun näytteet voidaan muuntaa, signaali laajennetaan ennen muunnosta kääntämällä alkuperäinen signaali ajan suhteen takaperin ja liittämällä näin saatu signaali alkuperäisen signaalin alkuun ja loppuun. Liitokset tehdään osittain alkuperäisen signaalin kanssa päällekkäin niin, että signaalin ensimmäinen ja viimeinen näyte eivät kuitenkaan kahdennu [10]. Laajennuksen jälkeen (5,3)-muunnos voidaan suorittaa laskemalla matalan taajuuden komponentit, l[n], ja korkean taajuuden komponentit, h[n], kaavoilla [10]: l[n] = x[2n] + (h[n - 1] + h[n] + 2) / 4 (45) h[n] = x[2n + 1] - (x[2n] + x[2n + 2] ) / 2 (46) Käänteinen muunnos suoritetaan kaavoilla [10]: x[2n] = l[n] - (h[n - 1] + h[n] + 2) / 4 (47) x[2n + 1] = h[n] - (x[2n] + x[2n + 2] ) / 2 (48) 72

73 Kaksiulotteinen muunnos suoritetaan vuorotellen vaaka ja pystysuunnassa. Käänteismuunnoksessa pitää huomata, että vaaka ja pystysuuntaiset käänteismuunnokset pitää tehdä päinvastaisessa järjestyksessä vastaaviin muunnoksiin nähden [10]. Käyttäjä voi valita, kuinka monta kertaa muunnos toistetaan saataville matalataajuisille komponenteille LL. JPEG 2000:n alkuperäinen määritys ei mahdollista muiden osakaistojen (LH, HL ja HH) rekursiivista muuntamista, mutta laajennetun määrityksen mukaisessa toteutuksessa myös tämä on mahdollista [10]. 7.2 MQ-koodaaja Toimintaperiaate MQ-koodaaja on Q-koodaajan pohjalta kehitetty binaarinen aritmeettinen koodaaja, eli se koodaa vain kahta symbolia. Toinen symboleista on todennäköisempi symboli (MPS = more probable symbol) ja toinen vähemmän todennäköinen symboli (LPS = less probable symbol). Mallintaja tuottaa koodaajalle koodattavan bittijonon ja jokaista bittiä kohti tiedon siitä, kumpi bitin arvoista (0 tai 1) vastaa MPS:ää ja kumpi LPS:ää. Koodaajalle ei siten lähetetä bittien todennäköisyyksien arvioita tarkasti, vaan ainoastaan tieto siitä, kumpi koodattavan bitin arvoista on todennäköisempi. [5] Koska MQ-koodaaja koodaa vain kahta symbolia, ei käytettäviä reaalilukuvälejä tarvitse jakaa useampaan kuin kahteen osaan kunkin symbolin koodauksessa. Kertolaskujen välttämiseksi käytetään koodauksen alussa ensimmäisenä välinä tavanomaisen välin [0, 1) sijaan reaalilukuväliä [0, 1.5). Tämän jälkeen väli jaetaan rekursiivisesti osaväleihin samoin kuin tavanomaisen aritmeettisen koodaajan tapauksessakin [5]. Kukin osaväli jaetaan symbolien kesken aina niin, että LPS sijoitetaan välille ennen MPS:ää. Tällöin LPS:n todennäköisyyden avulla voidaan laskea, miten osaväli jaetaan kahteen osaan. Toteutuksessa tarvittavien reaalilukujen approksimaatioissa käytetään 16:ta bittiä siten, että vastaa kymmenjärjestelmän lukua Tällöin vastaa lukua 1.5 [5]. MQ-koodaajan toteutuksessa käytetään kahta rekisteriä, joista toinen sisältää kulloisenkin osavälin jakokohdan ja toiseen kerätään tulosbittejä. Yli ja alivuotojen välttämiseksi ja JPEG 2000:n määrittelyyn sisällytettyjen dekoodausta ohjaavien erikoismerkkien lisäämiseksi tulosbittivirtaan koodaajan toteutus on melko monivaiheinen [5], eikä sitä esitellä yksityiskohtaisesti tässä työssä. 73

74 7.2.2 Symbolien todennäköisyyksien arviointi Koska mallintaja ei lähetä koodattavien symbolien todennäköisyyksien tarkkoja arvoja, koodaajan pitää laskea kussakin vaiheessa käytettävä osavälin jakokohta (eli arvioida LPS:n todennäköisyys) [5]. Tähän käytetään äärellistä automaattia, jolla on 47 tilaa. JPEG 2000:n määritelmässä on annettu kutakin tilaa kohti käytettävä kiinteä arvo LPS:n todennäköisyydelle. Tilasiirtymät tehdään sen perusteella, koodataanko LPS vai MPS. Kun koodataan LPS, siirrytään tilaan, jossa LPS:n todennäköisyys on suurempi. Vastaavasti koodattaessa MPS siirrytään tilaan, jossa LPS:n todennäköisyys on pienempi. Tilat on jaettu kolmeen ryhmään niin, että tilat 0 13 kuuluvat ensimmäiseen, tilat toiseen ja tila 46 kolmanteen ryhmään [10]. Ryhmien välillä voidaan siirtyä vain niin, että siirrytään jostakin ensimmäisestä ryhmän tilasta johonkin toisen ryhmän tilaan [10]. Muut siirtymät ryhmien välillä eivät ole mahdollisia. Ensimmäistä ryhmää (ns. fast-attack tilat) käytetään LPS:n todennäköisyyden arvion nopeaan muuttamiseen tiivistyksen alussa [10]. Ensimmäisen ryhmän tiloissa LPS:n todennäköisyys pienenee suurin askelin alkuarvosta ( ) aina koodattaessa MPS. Riittävän monen LPS:n koodaamisen jälkeen (ja viimeisessä tilassa myös MPS:n koodaamisen jälkeen) siirrytään toisen ryhmän tiloihin, joissa LPS:n todennäköisyyden arvio muuttuu vähemmän tilojen välillä. Toisen ryhmän tiloja käytetään kaikkien jäljellä olevien symbolien koodaamiseen. Kolmanteen ryhmään kuuluu vain erillinen tila 46, jota käytetään, kun tiedetään, että koodattavassa bittivirrassa LPS:n ja MPS:n todennäköisyydet ovat lähes yhtä suuret [10]. Automaatti ei voi tulla tilaan 46 mistään muusta tilasta, eikä poistua siitä, joten tilaa 46 käytetään vain silloin, kun se on määritelty alkutilaksi MQ-koodaajan alustuksessa. Tarkempi esitys MQ-koodaajassa käytetystä automaatista on kuvassa 21. Eri ryhmiin kuuluvat tilat on esitetty erilaisilla taustaväreillä. Koodattaessa MPS siirrytään mustien nuolien suuntaan ja koodattaessa LPS harmaiden nuolien suuntaan. Esityksen yksinkertaistamiseksi tilat on yhdistetty. Näiden välillä siirrytään siten, että koodattaessa LPS siirrytään tilaan n - 1 ja koodattaessa MPS tilaan n + 1, kun oletetaan, että nykyinen tila on n. Samoin tilat on esitetty yhdessä. Näiden välillä siirrytään siten, että LPS:n koodaamisen jälkeen siirrytään tilaan n - 2 ja MPS:n koodaamisen jälkeen tilaan n + 1, kun nykyinen tila on n. Siirryttäessä tilasta 0 tilaan 5 LPS:n todennä- 74

75 köisyyden arvio pienenee noin 0.5:stä kohti nollaa. Arvio muuttuu samoin siirryttäessä tilasta 6 kohti tilaa 13 ja toisessa ryhmässä siirryttäessä tilasta 14 kohti tilaa 45 [5]. Kuva 21: MQ-koodaajaan sisältyvä äärellinen automaatti, jota käytetään koodattavien symbolien todennäköisyyksien arviointiin. 7.3 Wavelet-kerrointen mallinnus Kuvan 14 mukaisesti digitaalisen kuvan wavelet-muunnoksessa eri osakaistojen wavelet-kertoimet korreloivat, ja tätä ominaisuutta voitaisiin hyödyntää tiivistyksessä. JPEG 2000 jakaa kuitenkin saadut kertoimet suorakaiteen muotoisiin lohkoihin (codeblocks), jotka tiivistetään toisistaan riippumatta [10]. Jokaisen koodilohkon käyttämät MQ-koodaajat ovat toisistaan riippumattomia. Koodilohkot eivät voi leikata osakaistojen rajoja, ja siksi osakaistojen välistä korrelaatiota ei voida hyödyntää mallinnuksessa [5]. Tiivistystuloksen huononemisesta huolimatta tällaiseen menettelyyn on päädytty, koska osakaistojen välisen korrelaation hyödyntäminen mallinnuksessa estää hajasaannin tiivistettyyn kuvaan [10]. Hajasaanti on hyödyllinen ominaisuus, mikäli halutaan purkaa suuresta tiivistetystä kuvasta vain pieni osa. Muita etuja ovat se, että voidaan helposti hyödyntää rinnakkaislaskentaa useiden koodilohkojen samanaikaisessa tiivistämisessä ja purkamisessa, ja se, että lohkoihin jaettu bittivirta ei ole niin herkkä virheille kuin sellainen bittivirta, jonka tuottamisessa osakaistojen korrelaatiota on hyö- 75

76 dynnetty. Lisäksi koodilohkoihin jako antaa runsaasti vapauksia valita järjestys, jossa kuvainformaatio tiivistetään [10]. Koodilohkojen wavelet-kertoimet mallinnetaan EBCOT-menetelmällä (Embedded Block Coding with Optimisation Truncation) [10]. Menetelmä perustuu wavelet-kerrointen läpikäyntiin bittitasoittain. Kukin bittitaso käydään läpi erikseen, jolloin voidaan helposti tuottaa tarvittava binaarinen syöte MQ-koodaajalle Kerrointen jako bittitasoihin EBCOT-menetelmässä kunkin wavelet-kertoimen esitys jaetaan etumerkkibittiin ja kertoimen itseisarvoon [10]. Kerrointen itseisarvot esitetään useassa bittitasossa siten, että kunkin kertoimen vähiten merkitsevä bitti sijoitetaan ensimmäiseen bittitasoon, kerrointen seuraavaksi merkitsevimmät bitit toiseen tasoon ja niin edelleen [10]. Bittitasoihin jako on esitetty kuvassa 22. Koska suurin osa wavelet-kertoimista on itseisarvoiltaan pieniä, eniten merkitsevien bittien esittämiseen käytetyt bittitasot sisältävät vain vähän informaatiota [10]. Toinen mallinnuksessa hyödynnettävä ominaisuus on se, että itseisarvoiltaan suuret kertoimet esiintyvät usein lähekkäin esimerkiksi kuvan reunojen kohdilla. Kuva 22: Wavelet-kerrointen itseisarvojen esitys useassa bittitasossa. Eniten merkitsevät bitit on esitetty ylimmässä tasossa. Kuvan etuosan esimerkissä harmaat kuutiot kuvaavat kerrointen itseisarvojen ykkösbittejä. Harmaat suorakaiteet ovat esimerkkejä koodilohkoista. Osakaistojen rajoja leikkaavat koodilohkot käsitellään kahtena tai useampana erillisenä lohkona. 76

77 EBCOT mallintaa bittitasot järjestyksessä alkaen eniten merkitsevien bittien esittämiseen käytetystä tasosta. Aluksi tulostetaan arvo, joka kertoo, montako ensimmäistä tasoa sisältää vain nollabittejä. Tämän jälkeen muut kuin pelkkiä nollabittejä sisältävät tasot käydään läpi kolmessa vaiheessa, jotka on esitetty kohdissa 7.3.2, ja Kohdassa on esitetty tarkemmin eri vaiheissa käytettävät kontekstit. Kussakin vaiheessa bittitasoa käydään läpi juovittaisessa järjestyksessä (stripe-scan) [10], joka on esitetty kuvassa 23. Kunkin juovan korkeus on sellainen, että juovalle mahtuu pystysuunnassa tasan neljä wavelet-kerrointa. Käytettävien koodilohkojen korkeudet pitää aina valita niin, että myös lohkon viimeinen juova on saman korkuinen kuin muut. Jokainen vaihe päätetään tulostamalla koodaajan bittivirtaan erikoismerkki, joka kertoo vaiheen päättyneen. Koska kussakin vaiheessa mallinnettavien wavelet-kerrointen määrä riippuu tiivistettävästä kuvasta, dekoodaus ei olisi mahdollista ilman ohjausmerkkejä. Kuva 23: Koodilohkon läpikäyntijärjestys juovittaisessa järjestyksessä alkaen vasemmasta yläkulmasta Merkitsevyyden levitysvaihe Merkitsevyyden levitysvaihe (significance propagation pass) on ensimmäinen kolmesta mallinnusvaiheesta, joissa bittitason sisältämä informaatio lähetetään MQ-koodaajalle [10]. Jokaisessa vaiheessa välitetään osa tason biteistä. Kaikkien vaiheiden suorituksen jälkeen bittitason kaikki bitit on lähetetty ja voidaan siirtyä seuraavan bittitason mallinnukseen. 77

78 Mallinnuksen aikana kutakin mallinnettavan koodilohkon wavelet-kerrointa kohti pidetään yllä bittiä, joka sisältää tiedon siitä, onko kerroin merkitsevä. Aluksi kaikki kertoimet ovat ei-merkitseviä. Merkitsevyyden levitysvaiheessa käydään läpi kaikki koodilohkon wavelet-kertoimet ja asetetaan merkitseväksi jokainen sellainen kerroin, joka toteuttaa seuraavat kolme ehtoa: i) Kerroin ei vielä ole merkitsevä. ii) Jokin kertoimen kuvan 24 mukaisesta kahdeksasta naapurikertoimesta on merkitsevä. iii) Kertoimen itseisarvon nykyiseen bittitasoon kuuluva bitti on ykkösbitti. Aina, kun kerroin toteuttaa kaksi ensimmäistä ehtoa, lähetetään koodaajalle kertoimen itseisarvon se bitti, joka kuuluu nykyiseen bittitasoon. Bitin koodauksessa LPS:n ja MPS:n määrittelyssä käytetään yhdeksää kontekstia. Konteksti valitaan kuvassa 24 esitettyjen x:n naapurikertoimien (H 0, H 1, V 0, V 1, D 0, D 1, D 2 ja D 3 ) merkitsevyyksien perusteella. Jos jokin naapurikerroin ei kuulu mallinnettavaan koodilohkoon, sen oletetaan olevan ei-merkitsevä. Oletus tehdään, jotta koodilohkot olisivat riippumattomia toisistaan. Jos kaikki edellä esitetyt ehdot täyttyvät, kerroin tulee merkitseväksi, ja koodaajalle lähetetään myös kertoimen etumerkki. Tällöin valitaan jokin viidestä etumerkin koodaukseen käytettävästä kontekstista. Konteksti valitaan naapurikertoimien H 0, H 1, V 0 ja V 1 merkitsevyyksien perusteella. Merkitsevien kerrointen kohdalla huomioidaan myös kertoimen etumerkki kontekstin valinnassa. Kuva 24: Mallinnettavan wavelet-kertoimen x naapurikertoimet, joiden merkitsevyyksiä käytetään kontekstin valinnassa. Edellä esitetyssä on huomioitavaa, että kertoimen tullessa merkitseväksi kertoimen itseisarvon se bitti, joka kuuluu mallinnettavaan bittitasoon, täytyy lähettää ennen ker- 78

79 toimen etumerkkiä. Muussa tapauksessa dekoodauksessa ei tiedetä, pitääkö kertoimen etumerkki lukea tiivistetystä esityksestä. Ne kertoimet, jotka eivät toteuta molempia ehtoja i) ja ii), ohitetaan merkitsevyyden levitysvaiheessa. Käsittelyjärjestyksessä ensimmäisen ykkösbittejä sisältävän bittitason kohdalla ehto ii) ei voi koskaan toteutua, joten merkitsevyyden levitysvaihe voidaan ohittaa kokonaan Merkitsevien kerrointen koodausvaihe Merkitsevien kerrointen koodausvaiheessa (significance refinement pass) lähetetään koodaajalle niiden kerrointen itseisarvojen nykyiseen bittitasoon kuuluvat bitit, jotka ovat jo tulleet merkitseviksi [10]. Poikkeuksena ovat ne kertoimet, jotka ovat juuri tulleet merkitseviksi edellisessä merkityksellisyyden levitysvaiheessa. Näiden kerrointen itseisarvojen eniten merkitsevät bitit on jo lähetetty, joten niitä ei lähetetä uudelleen. Merkitsevien kerrointen itseisarvojen bittien voidaan olettaa olevan tasaisesti jakautuneita, eli LPS:n ja MPS:n todennäköisyys on suunnilleen yhtä suuri. Siksi näiden bittien mallinnuksessa käytetään vain yhtä kontekstia. Poikkeuksena on kunkin kertoimen ensimmäinen bitti, joka lähetetään merkitsevien kerrointen koodausvaiheessa (eli kertoimen itseisarvon toiseksi merkitsevin bitti). Sen arvojen jakauman on havaittu riippuvan kahdeksan naapurikertoimen merkitsevyydestä. Siksi bitin mallinnuksessa naapurikerrointen merkitsevyyksien perusteella valitaan toinen kahdesta kontekstista, jotka on varattu tämän bitin mallinnukseen. Kaiken kaikkiaan merkitsevien kerrointen koodausvaiheessa käytetään siis kolmea kontekstia. Kerrointen erilaisten mallinnustapojen vuoksi mallintajan täytyy pitää kirjaa sekä niistä kertoimista, jotka ovat tulleet merkitseviksi nykyistä bittitasoa mallinnettaessa että niistä, jotka ovat tulleet merkitseviksi edellisellä bittitasolla. Käsittelyjärjestyksessä ensimmäisen ykkösbittejä sisältävän bittitason kohdalla merkitseviä kertoimia ei ole, joten myös merkitsevien kerrointen koodausvaihe voidaan ohittaa Viimeistelyvaihe Viimeistelyvaiheessa (cleanup pass) mallinnetaan ja koodataan kaikkien niiden kerrointen itseisarvojen bitit, joita ei vielä ole koodattu kahdessa edellisessä vaiheessa, ja jotka kuuluvat nykyiseen bittitasoon [10]. Käsittelyjärjestyksessä ensimmäisen ykkös- 79

80 bittejä sisältävän bittitason kohdalla kaikkien bittien arvot mallinnetaan ja koodataan tässä vaiheessa. Viimeistelyvaiheessa koodilohko käydään läpi samoin kuin muissakin mallinnusvaiheissa. Jokaisen, neljän wavelet-kertoimen muodostaman, pystyrivin kohdalla tarkistetaan, ovatko kaikkien rivin kertoimien kaikki naapurikertoimet ei-merkitseviä (harmaataustaiset kertoimet kuvassa 25). Mikäli näin on, siirrytään jakson pituuden koodaukseen. Muussa tapauksessa pystyrivin kertoimet mallinnetaan aivan samoin kuin merkitsevyyden levitysvaiheessa. Kuva 25: Harmaalla taustalla on esitetty ne kertoimet, joiden merkitsevyyden perusteella tehdään päätös siirtymisestä jakson pituuden koodaukseen. Nykyinen juova on esitetty kaksinkertaisella vaakaviivoituksella ja käsiteltävä pystyrivi vahvennetulla pystyviivoituksella. Jakson pituuden koodauksessa koodilohkon bittejä käydään läpi tavanomaisessa järjestyksessä. Kullakin käsiteltävällä juovan pystyrivillä asetetaan merkitseväksi jokainen sellainen kerroin, joka on ei-merkitsevä ja jonka itseisarvon bitti nykyisellä bittitasolla on ykkösbitti. Muussa tapauksessa kertoimen merkitsevyystilaa ei muuteta. Jos pystyrivin läpikäynnin jälkeen minkään kertoimen merkitsevyystila ei muuttunut, koodataan nollabitti ja siirrytään seuraavaan pystyriviin. Koska vain pieni osa wavelet-kertoimista muuttuu merkitseviksi viimeistelyvaiheessa, nollabitin koodauksen todennäköisyys on hyvin suuri. Jos jonkin pystyrivin kertoimen merkitsevyystila muuttui jakson pituuden koodauksessa, koodataan ykkösbitti. Tämän jälkeen koodataan kaksi bittiä, jotka ilmaisevat ylimmäisen merkitseväksi muuttuneen bitin sijainnin pystyrivillä. Sen jälkeen kaikki tämän alapuolella olevat bitit (joita nyt voi olla 0 3 kappaletta) mallinnetaan samoin 80

81 kuin merkitsevyyden levitysvaiheessa. Lopuksi siirrytään pois jakson pituuden koodauksesta. Kun viimeistelyvaihe on suoritettu kokonaan, voidaan siirtyä koodilohkon seuraavan bittitason mallinnukseen Kontekstien käyttö JPEG käyttää wavelet-kerrointen mallinnuksessa yhteensä 18:aa kontekstia. Kontekstit on jaettu siten, että konteksteja 0 8 käytetään koodattaessa todennäköisesti merkitseviksi tulevien wavelet-kerrointen itseisarvojen bittejä. Konteksti 0 on erityisasemassa ja se valitaan vain silloin, kun kaikki mallinnettavan kertoimen naapurikertoimet ovat eimerkitseviä. Näin voi tapahtua vain viimeistelyvaiheessa. Kontekstia 9 käytetään jakson pituuden koodauksessa, ja siinä nollabitin todennäköisyys on suuri. Konteksteja käytetään merkitseväksi tulleen kertoimen etumerkin koodaamisessa. Konteksteja käytetään merkitsevien kerrointen toiseksi merkitsevimpien bittien koodauksessa. Konteksti 17 on käytössä merkitsevien kerrointen muiden kuin kahden merkitsevimmän bitin koodauksessa sekä jakson pituuden koodauksen lopetuksessa esitettäessä juovan ylimmän merkitseväksi muuttuneen kertoimen paikka. [10] Kukin konteksti käyttää omaa MQ-koodaajaansa siten, että kaikki koodaajat kirjoittavat samaan tulosbittivirtaan. Koodaajien alkutilat asetetaan niin, että kontekstissa 0 koodaajan alkutila on 4 (P(LPS) = 0,030053), kontekstissa 9 alkutila on 3 (P(LPS) = 0,063012) ja kontekstissa 17 alkutila on 46 (P(LPS) = 0,503937). Muiden kontekstien koodaajissa alkutila on 0, ja vastaava LPS:n todennäköisyys 0, Kontekstin 17 käyttämä MQ-koodaajaa ei voi poistua tilasta 46. [5] Koska tapa, jolla wavelet-kertoimet riippuvat naapurikertoimistaan, on jokaisessa osakaistassa (LH, HL ja HH) erilainen, valinta kontekstien 0 8 välillä tehdään jokaisen osakaistan mallinnuksessa eri tavalla [5]. Sen sijaan valinta muiden kontekstien välillä tehdään kaikissa osakaistoissa samalla tavalla. Tarkka kuvaus kontekstien valinnasta, kuten myös koko JPEG 2000 tiivistysmenetelmän toiminnasta, on esitetty lähteessä [5]. 81

82 8 MENETELMIEN VERTAILUA Tässä luvussa pyritään vertailemaan esitettyjä menetelmiä erityisesti saavutettavia tiivistyssuhteita vertailuaineistolla, joka on esitetty liitteessä 1. Vertailuaineisto on pyritty valitsemaan siten, että se olisi melko monipuolinen. Selkeä puute tosin on se, että kaikkien vertailuaineiston kuvien värisyvyys on kahdeksan bittiä kuvapistettä kohti. 8.1 Käytetyt toteutukset ja vertailuaineiston kuvaus LOCO-I:n tulokset on saatu laatimalla tiivistysmenetelmän määrittelyn mukainen C++ kielinen toteutus. Kaikki käyttäjän määriteltävissä olevat parametrit on jätetty oletusarvoihinsa ellei muita arvoja ole erikseen mainittu. CALIC-tiivistämiseen on käytetty Xiaolin Wun toteutusta, jossa käytetään Huffman-koodaajaa yleisemmin käytetyn aritmeettisen koodaajan sijaan. JPEG tiivistyksessä on käytetty Jasper-nimistä, C++ kielistä toteutusta. Kaikki JPEG tiivistykset on tehty valitsemalla toteutuksessa käyttöön häviötön tiivistys, mutta muut parametrit on jätetty oletusarvoihinsa. Käytetyt toteutukset on haettu liitteessä 3 esitetyistä verkko-osoitteista. Vertailuaineisto on jaettu neljään ryhmään: Ensimmäisessä ryhmä koostuu valokuvista, joissa ei esiinny merkittävästi tiivistystä häiritseviä erityistekijöitä, kuten kuvaan lisättyä kohinaa. Toisen ryhmän valo ja piirroskuvissa esiintyy kohinaa tai muita tekijöitä, joiden voi olettaa haittaavan tiivistystä. Kolmannessa ryhmässä on röntgenkuvia, satelliittikuvia ja avaruuden kohteista otettuja valokuvia sekä www-sivu ja pieni kuva ihmisen silmästä. Neljännen ryhmän kuvat on saatu yhdistämällä ensimmäisen ja toisen ryhmän kuvia yhdeksi kuvaksi. 8.2 Tiivistystulokset Tulokset yksittäisillä vertailuaineiston kuvilla Liitteessä 2 on esitetty saadut tiivistystulokset ensimmäisen, toisen ja kolmannen ryhmän kuvilla. Kaikkien kuvien värisyvyys on kahdeksan bittiä kuvapistettä kohden. Myös tiivistystulokset on annettu bitteinä kuvapistettä kohden. Tulosten perusteella valokuvien tiivistyksessä CALIC on tiivistyssuhteeltaan tehokkain menetelmä. Myös sellaiset kuvat, joissa on tiivistystä haittaavaa kohinaa, tiivistyvät CALIC-menetelmällä yleensä parhaiten. Sen sijaan röntgenkuvat ja avaruuden kohteista 82

83 otetut kuvat, joissa esiintyy vähän nopeita harmaasävyn vaihteluja, tiivistyvät useimmiten lähes yhtä hyvin LOCO-I:llä ja JPEG 2000:lla kuin CALICillakin. Vaihtamalla CALICin toteutuksessa käytetty Huffman-koodaus aritmeettiseen koodaukseen, CALICin tiivistystulos voisi parantua tämäntyyppisten kuvien tiivistyksessä. Huffmankoodaus ei voi tuottaa alle yhtä bittiä koodattavaa symbolia kohti, mikä saattaa huonontaa erityisesti hitaita harmaasävyn vaihteluja sisältävien kuvien tiivistystulosta. JPEG 2000 tuotti parhaan tiivistystuloksen vain kahdella valitun vertailuaineiston kuvalla. Menetelmän usein huonompi tiivistyssuhde johtuu ainakin osittain JPEG 2000 tiedostojen mutkikkaammasta rakenteesta verrattuna CALIC ja LOCO-I tiedostoihin. JPEG 2000:tta ei ole kehitetty erityisesti harmaasävykuvien häviöttömään tiivistykseen toisin kuin LOCO-I ja CALIC. JPEG 2000 on myös vertailluista tiivistysmenetelmistä ainoa, joka mahdollistaa tiivistetyn kuvan progressiivisen siirron ja kuvan purkamisen tarvittaessa vain osittain. Kuva 'camerag8' on saatu kuvasta 'camera' piirtämällä kuvan päälle mustia, yhden kuvapisteen levyisiä vaaka ja pystyviivoja kahdeksan kuvapisteen välein. Tällaisen kuvan tiivistyksessä LOCO-I algoritmi toisaalta siirtyy useasti turhaan jakson pituuden koodaukseen ja toisaalta pysyy monen kuvapisteen kohdalla tavanomaisessa toimintatilassa, vaikka jakson pituuden koodaus saattaisi tuottaa paremman tuloksen. Tästä huolimatta LOCO-I tiivisti kuvan vertailluista menetelmistä tehokkaimmin. Mustien viivojen ristikon lisääminen kuvan päälle kuitenkin heikensi kaikkien vertailtujen menetelmien tiivistystulosta melko paljon. Kuva 'ylewww' on www-sivu, joka sisältää suurelta osin tekstiä yhdensävyisellä pinnalla. Tällöin LOCO-I:n jakson pituuden koodaus vaikuttaa toimivan tehokkaasti. Tällainen kuva tiivistyy kuitenkin paremmin esimerkiksi GIF-muotoisena (1.55 bpp) tai jollakin yleiskäyttöisellä tiivistysmenetelmällä Tulokset yhdistetyillä kuvilla Vertailuaineiston neljäs ryhmä koostuu kuvista, jotka on saatu yhdistämällä kaksi tai useampia ensimmäisen ja toisen ryhmän kuvia yhdeksi kuvaksi. Tarkoituksena on vertailla yhdistetyn kuvan tiivistyssuhdetta siihen tiivistyssuhteeseen, joka saadaan, kun kuvat tiivistetään erikseen. Kausaalisten kontekstipohjaisten tiivistysmenetelmien toiminta riippuu aina siitä syötteen osasta, joka on luettu aikaisemmin kuin tiivistys on edennyt nykyiseen kohtaansa. Siksi yksittäisten kuvien järjestyksellä yhdistetyssä ku- 83

84 vassa saattaa olla vaikutusta tiivistystulokseen. Taulukossa 3 on esitetty tiivistystulokset viidelle yhdistetylle kuvalle. Yhdistettyjen kuvien asettelu on esitetty liitteen 1 lopussa. Taulukko 3: Tiivistystuloksia yhdistetyillä kuvilla ja vertailu tuloksiin, jotka saadaan, kun kuvat tiivistetään erikseen ja tiivistettyjen kuvien tiedostokoot lasketaan yhteen. Kaikkien kuvien värisyvyys on kahdeksan bittiä kuvapistettä kohti. Myös tiivistystulokset on annettu bitteinä kuvapistettä kohti. 4. ryhmä: Tiivistystulos yhdistetyllä Tiivistystulos vastaavilla erillisillä kuvilla kuvalla Kuva Koko(x,y) LOCO-I CALIC JPEG JPEG LOCO-I CALIC air_pep_h 1024, pep_air_h 1024, air_pep_v 512, pep_air_v 512, bab_pep_ air_h 1536, Näiden tulosten perusteella sillä, kumpi kuvista asetetaan vasemmalle ja kumpi oikealle asetettaessa kuvat vierekkäin, ei ole juurikaan vaikutusta tiivistystulokseen. Tämä tulos oli odotettu. Myöskään silloin, kun kuvat sijoitetaan päällekkäin, tiivistystulos ei näiden tulosten perusteella juurikaan riipu siitä, kumpi kuvista sijoitetaan ylemmäksi ja kumpi alemmaksi. Tämä tulos ei ollut LOCO-I:n ja CALIC-tiivistyksen kohdalla niin odotettava kuin vastaava tulos vaakasuuntaisessa tapauksessa, koska menetelmät käyvät kuvaa läpi rivijärjestyksessä ylhäältä alas. Kuitenkin kuvien asettaminen päällekkäin tuottaa odotetusti LOCO-I:llä ja CALICilla hieman paremman tuloksen kuin kuvien vierekkäin asettelulla saadaan. Ero johtuu siitä, että pystysuuntaisessa tapauksessa menetelmien käyttämien kontekstien ei tarvitse sopeutua kahden erilaisen kuvan kuvapisteiden välisiin riippuvuuksiin samanaikaisesti. LOCO-I:n ja hieman yllättäen myös JPEG 2000:n tiivistystulos huonontui, kun kaksi kuvaa liitettiin yhteen. Sen sijaan CALIC tiivisti kahdesta kuvasta koostuvan yhdistetyn kuvan jopa hieman paremmin kuin erilliset kuvat. Vasta kun yhdistettiin kolme melko erilaista kuvaa vierekkäin yhdeksi kuvaksi (kuva 'bab_pep_air_h'), myös CALIC tiivisti yhdistetyn kuvan huonommin kuin erilliset kuvat. Ero tosin ei vielä tällöinkään ollut 84

85 merkittävän suuri. CALICin LOCO-I:tä parempi toiminta yhdistetyillä kuvilla johtunee ainakin osittain siitä, että CALICissa kontekstit eivät sisällä omia todennäköisyysmallejaan. CALICissa mahdollisia todennäköisyysmalleja on vain kahdeksan, ja todennäköisyysmallin valinta on vain osittain kontekstin valinnasta riippuva. Tällöin menetelmä sopeutuu syötteeseen LOCO-I:tä nopeammin suuremmasta kontekstien määrästä huolimatta Kohinan vaikutuksesta tiivistystulokseen Kohinan vaikutusta tiivistystuloksiin eri menetelmillä selvitettiin käyttämällä vertailuaineiston kuvaa 'lenna'. Kuvaan lisättiin kohinaa poikkeuttamalla kunkin kuvapisteen arvoa, x, siten, että uusi arvo kuuluu välille [x - d - 1, x + d]. Jokainen kokonaislukuarvo tällä välillä on yhtä todennäköinen. Lopuksi ne kuvapisteet, joiden arvot eivät enää kohinan lisäyksen jälkeen olleet välillä [0, 255], pakotettiin tälle välille asettamalla kuvapisteen arvoksi joko 0 tai 255 riippuen siitä, oliko pisteen arvo liian pieni vai suuri. Kuvassa 26 on kaavio, josta näkyy tiivistyssuhteen huononeminen eri tiivistysmenetelmillä d:n arvon kasvaessa. Kaikkien menetelmien tiivistystulos riippuu kohinan määrästä melko samalla tavalla. Menetelmien hyvin samanlainen käyttäytyminen voisi viitata siihen, että kaikki menetelmät pääsevät lähelle parasta mahdollista tiivistystulosta. Runsas kohina näyttäisi haittaavan CALICin tiivistystä hieman enemmän kuin muiden menetelmien. Tämä vaikuttaa ristiriitaiselta, sillä CALIC tuotti hyviä tuloksia kuvilla, joissa esiintyi tiivistystä haittaavia tekijöitä. Saatu tulos saattaisi muuttua jos kuvissa esiintyvää kohinaa simuloitaisiin eri tavalla. Realistisempi kohinan malli voitaisi olla esimerkiksi sellainen, jossa kuvapisteiden arvojen poikkeutusten määrät olisivat Laplace-jakautuneet. 85

86 Kuva 26: Tiivistystulos bitteinä kuvapistettä kohti, kun kuvan kunkin kuvapisteen arvoa x poikkeutettiin siten, että uusi arvo on välillä [max(x - d, 0), min(x + d - 1, 255)]. Jokainen uusi arvo (kokonaisluku) tällä välillä on yhtä todennäköinen. Tulokset on saatu vertailuaineiston kuvalla 'lenna' (8 bpp) JPEG-LS:n parametrien vaikutuksesta tiivistystulokseen JPEG-LS:ssä on neljä parametria, jotka käyttäjä voi valita. Näitä ovat kvantisoinnin kynnysparametrit T 1, T 2 ja T 3 sekä kontekstikohtainen uudelleenalustusvakio N 0, joka määrää sen, kuinka usein kontekstin käytökertojen määrä N ja saatujen ennustevirheiden summalaskurit A ja B puolitetaan. Seuraavassa on pyritty selvittämään N 0 :n valinnan vaikutusta tiivistystulokseen neljällä vertailuaineiston kuvalla. Tulokset ovat kuvassa 27. Saatujen tulosten perusteella N 0 :n valinta vaikuttaa hyvin vähän tiivistystulokseen. Liian pieni N 0 :n arvo heikentää tiivistystulosta jonkin verran. Kuvassa 'baboon' on paljon yksityiskohtia. Tällöin suuremmilla N 0 :n arvoilla tiivistystulos heikentyi hieman, mutta muutos oli jokseenkin merkityksetön. Yhdistetyssä kuvassa 'pep_air_v' suuri N 0 :n arvo ei juurikaan heikentänyt tiivistystulosta, vaikka kuvan ala ja yläosat poikkeavat toisistaan. 86

87 Kuva 27: JPEG-LS:n parametrin N 0 vaikutus tiivistystulokseen neljällä vertailuaineiston kuvalla. Kvantisoinnin kynnysparametrien valinnalla on hieman parametrin N 0 valintaa suurempi vaikutus tiivistyssuhteeseen. Taulukossa 4 on esitetty LOCO-I:n tiivistystulokset viidellä vertailuaineiston kuvalla ja viidellä erilaisella tavalla valita kynnysparametrit. Taulukko 4: LOCO-I:n tiivistystuloksia erilaisilla kynnysparametrien arvoilla (T 1, T 2, T 3 ). Tiivistystulokset on annettu bitteinä kuvapistettä kohti (bpp). Kuva Koko (x,y) (1, 2, 6) (2, 5, 15) (3, 7, 21) (4, 9, 27) (7, 16, 48) pep_air_v 512, baboon 512, galaxy 512, lenna 512, eye 52,

88 8.3 Menetelmien muista ominaisuuksista Tiivistysmenetelmien vaatimaa laskenta-aikaa ei mitattu tarkasti. Yleensä kuitenkin JPEG 2000:lla tiivistäminen ja tiivistetyn kuvan purkaminen vaati selvästi enemmän aikaa kuin CALICilla ja JPEG-LS:llä. JPEG-LS oli hieman nopeampi kuin CALIC, mutta ero ei ollut kovinkaan suuri. Aritmeettisen koodauksen käyttö CALICissa kasvattanee tätä eroa jonkin verran. Virhe JPEG-LS:llä tai CALICilla tiivistetyssä kuvainformaatiossa aiheuttaa lähes poikkeuksetta kuvan muuttumisen ainakin osittain käyttökelvottomaksi. Tämä johtuu menetelmien kausaalisesta kontekstien valinnasta ja ennusteen laskennasta. Virheiden vaikutusta JPEG 2000 tiivistettyyn kuvaan pyrittiin selvittämään tekemällä tiivistettyyn kuvatiedostoon 'lenna' virheitä nollaamalla sata tiedoston satunnaisesti valittua tavua. Koe toistettiin 20 kertaa. Viidellä ajokerralla dekoodattu kuva sisälsi vain vähäisiä muutoksia alkuperäiseen verrattuna. Helposti havaittavia virheitä sisältävä kuva saatiin niinikään viidellä ajokerralla. Kuudella kerralla dekoodatussa kuvassa oli erittäin paljon muutoksia, mutta kuva oli kuitenkin tunnistettavissa. Neljällä ajokerralla dekoodaus päättyi virheeseen, eikä kuvan purkaminen siten onnistunut lainkaan. Hyvin virhesietoinen tiivistysmenetelmä voitaisiin saada aikaan varustamalla JPEG 2000 tiivistys virheiden havainnoinnilla ja mahdollisesti korjauksella. Tällöin edes mahdollisesti korjaamatta jäävät virheet eivät välttämättä estäisi kuvan käyttöä kokonaan. Se, miten purkuprosessin tulisi toimia havaittaessa virheitä tiivistetyssä tiedossa, riippuu kuvan käyttötarkoituksesta. Mikäli tarvitaan häviötöntä tiivistystä, kuvan käyttötarkoitus on todennäköisesti sellainen, että havaituista virheistä on syytä ainakin varoittaa käyttäjää. Kuvan menettäminen kokonaan saattaa olla vähemmän haitallista kuin se, että käytetään virheitä sisältävää kuvaa. 88

89 9 YHTEENVETO Tietotekniikan kehitys on mahdollistanut tarkkojen digitaalisten kuvien käsittelyn, varastoinnin ja siirron. Suurikokoisten kuvatiedostojen tehokas siirto ja varastointi kuitenkin edellyttää kuvien tiivistämistä. Koska kuvatiedostot sisältävät yleensä melko paljon redundanssia, voidaan sopivia tiivistysalgoritmeja käyttäen vähentää varastointi ja siirtokapasiteetin tarvetta huomattavastikin. Kuvia voidaan usein tiivistää häviöllisesti, sillä ihmisen aistit eivät normaalisti havaitse kaikkia kuvan yksityiskohtia, ellei kuvaa katsota erityisen tarkasti. Kadottamalla tarkoituksellisesti se osa kuvan informaatiosta, joka esittää vaikeimmin havaittavia kuvan yksityiskohtia, voidaan päästä erittäin hyviin tiivistyssuhteisiin ilman, että kuvan laatu kärsii havaittavasti. Joissakin tilanteissa tarvitaan kuitenkin häviötöntä tiivistystä. Esimerkiksi lääketieteellisissä kuvissa häviöllisen tiivistyksen käyttö saattaisi johtaa jopa väärään diagnoosiin, mikäli kuvasta katoaisi oleellisia yksityiskohtia tiivistyksessä. Digitaalisten kuvien tiivistykseen on kehitetty erityisiä menetelmiä, sillä yleiskäyttöiset tiivistysmenetelmät toimivat usein huonosti tiivistettäessä kuvia. Yleisestikin erikoistuneempi tiivistysmenetelmä pääsee useammin yleiskäyttöisiä menetelmiä parempiin tiivistystuloksiin. Sekä häviölliset että häviöttömät kuvantiivistysmenetelmät ovat toimintaperiaatteiltaan usein hyvin samankaltaisia. Tiivistys tehdään havaitsemalla mahdollisimman monia kuvapisteiden välisiä riippuvuuksia. Tällöin voidaan tuottaa symbolijono, jossa ei esiinny havaitunlaisia riippuvuuksia symbolien välillä. Symbolijonon tiivistetty esitys voidaan tämän jälkeen luoda entropiakoodauksella. Informaatioteoriaan sisältyvän entropian käsitteen avulla voidaan laskea pienin mahdollinen esityksen pituus sellaiselle symbolijonolle, jossa ei oleteta esiintyvän symbolien välisiä riippuvuuksia. Aritmeettinen koodaaja kykenee tuottamaan tällaiselle symbolijonolle lähes optimaalisen pituisen esityksen. Ennen varsinaista tiivistystä kuvalle voidaan tehdä muunnos, jonka tarkoituksena on helpottaa tiivistystä. Muunnosvaiheessa pyritään keskittämään kuvan informaatiosisältöä, jolloin redundanssin vähentäminen mallinnusvaiheessa helpottuu. Luvussa 4 esitelty wavelet-muunnos on yksi esimerkki tällaisista muunnoksista. Koska waveletmuunnos on helpointa tehdä yksiulotteiselle digitaaliselle signaalille, kuva yleensä tulkitaan tällaisena signaalina. 89

90 Kuvapisteiden tai muunnoksella saadun esityksen riippuvuuksien mallintamiseen on kehitetty useita menetelmiä. Yksinkertaisin kuvapisteiden välillä esiintyvä riippuvuus on se, että lähekkäin esiintyvien kuvapisteiden harmaasävyt eivät useinkaan poikkea paljon toisistaan. Jo tämän huomioimalla kuvalle voidaan luoda lyhyempi esitys. Kuitenkin parempiin tuloksiin pääsemiseksi pitää huomioida myös muunlaisia kuvapisteiden välisiä riippuvuuksia. Kontekstimallinnus kykenee havaitsemaan riippuvuuksia myös sellaisten kuvapisteiden harmaasävyjen välillä, joiden ympäristö on samankaltainen, mutta jotka eivät välttämättä sijaitse lähekkäin kuvassa. Näin tiivistyksessä voidaan huomioida kuvan tekstuurit ja reunakohdat, joissa harmaasävy muuttuu nopeasti. Kontekstimallinnuksessa kuvapisteiden kontekstit pitää valita siten, että purettaessa kuva voidaan valita kontekstit samoin kuin tiivistyksessäkin. Valittuja konteksteja ei voida eksplisiittisesti lähettää dekoodaajalle, sillä tällöin tiivistetty esitys pitenisi liikaa. Siksi kontekstina voidaan käyttää kussakin tiivistyksen vaiheessa vain niitä kuvapisteitä, jotka on jo aikaisemmin esitetty. Kontekstimallinnus vaatii toimiakseen kuvapisteiden välisten riippuvuuksien havaitsemista kuvasta. Tämän vuoksi menetelmä alkaa toimia hyvin vasta, kun kontekstit ovat adaptoituneet tiivistettävän kuvan mukaisesti. Jos konteksteja on vähän, adaptoituminen tapahtuu nopeasti, mutta voidaan havaita vähemmän kuvapisteiden välisiä riippuvuuksia kuin suuremmalla kontekstien määrällä. Toisaalta kontekstien määrän lisääminen voi hidastaa adaptoitumista niin paljon, että tiivistystulos alkaa huonontua. Siksi tiivistysmenetelmän suunnitteluvaiheessa kontekstien määrä ja valintatapa pitää pyrkiä optimoimaan mahdollisimman monipuolista koeaineistoa käyttäen. Ennustamalla kuvapisteiden arvoja naapuripisteiden arvojen perusteella tavalla, joka ei riipu tiivistettävästä kuvasta, saadaan muodostettua tiivistettyjä kuvapisteiden esityksiä jo ennen kuin kontekstit ovat adaptoituneet. Kiinteän ennustimen ja kontekstimallinnuksen käyttö yhdessä perustuu siihen, että kaikissa kuvissa voidaan olettaa lähekkäin sijaitsevien kuvapisteiden harmaasävyjen olevan lähes samoja. Adaptoitumisen nopeuttamiseksi tämä yksinkertainen riippuvuus kannattaa huomioida jo ennen kuin käytetään kontekstimallinnusta. Kun kuvalle tehdään wavelet-muunnos, saadaan muunnoksen tuloksena joukko wavelet-kertoimia. Kuvalle saadaan tiivistetty esitys mallintamalla ja esittämällä tiivistetyssä muodossa tuotetut kertoimet. Kuvaa purettaessa dekoodataan ensin waveletkertoimet ja tehdään sen jälkeen käänteinen wavelet-muunnos. Myös wavelet-kerrointen 90

91 mallinnuksessa voidaan käyttää kontekstimallinnusmenetelmiä. Lisäksi voidaan hyödyntää informaation keskittymistä matalimpien taajuuksien wavelet-kerrointen esityksiin sekä eri osakaistojen kerrointen välistä korrelaatiota. JPEG 2000:n mallinnus ei hyödynnä osakaistojen välistä korrelaatiota, mutta huomioi sen seikan, että samansuuruisia kertoimia esiintyy usein lähellä toisiaan, esimerkiksi kuvan reunojen kohdilla. Kaksi tässä työssä esitetyistä harmaasävykuvien häviöttömistä tiivistysmenetelmistä perustuu kuvapisteiden välisten riippuvuuksien kontekstimallinnukseen. Nämä menetelmät LOCO-I ja CALIC ovat melko samanlaisia. Molemmat menetelmät on kehitetty erityisesti harmaasävykuvien häviöttömään tiivistykseen. Näistä CALIC soveltuu hyvin käytettäväksi silloin, kun tiivistettävät kuvat sisältävät paljon yksityiskohtia ja nopeita harmaasävyn muutoksia. Myös kuvat, jotka on saatu yhdistämällä useita kuvia yhdeksi kuvaksi, näyttäisivät tiivistyvän hyvin CALICilla. JPEG-LS:n käyttämä LOCO- I algoritmi soveltuu erityisesti käytettäväksi silloin, kun tiivistys tai purku halutaan toteuttaa laitteistolla tai menetelmän toimintanopeus on tärkeä valintakriteeri. JPEG-LS on myös hyvin käyttökelpoinen menetelmä silloin, kun tiivistetään kuvia, jotka sisältävät paljon kauttaaltaan samansävyisiä tai lähes samansävyisiä pintoja. JPEG 2000 on uusi, hyvin erilaisiin käyttötarkoituksiin soveltuva kuvantiivistysmenetelmä, joka sisältää myös häviöttömän tiivistyksen. Yleiskäyttöisempänä menetelmänä JPEG 2000 tekee usein hieman isompia tiedostoja kuin LOCO-I ja CALIC. JPEG 2000:n etuna on kuitenkin mahdollisuus purkaa tiivistetty kuva vain osittain. Kuva voidaan myös siirtää niin, että vastaanottaja näkee asteittain tarkentuvan esityksen kuvasta. Myös parempi virhesietoisuus ja se, että tiivistyksessä ja purkuprosessissa voidaan melko helposti hyödyntää rinnakkaislaskentaa, ovat JPEG 2000:n vahvuuksia. Kun käytetään häviötöntä tiivistystä, on usein tärkeää, että kuvaan ei synny virheitä varastoinnin tai siirron aikana. Esitetyt menetelmät eivät sisällä virheiden havainnointia tai korjausta. LOCO-I:tä tai CALICia käytettäessä syntyneet virheet tekevät lähes aina kuvan ainakin osittain käyttökelvottomaksi. JPEG 2000:lla tiivistettyyn kuvaan syntyneet virheet sen sijaan saattavat jäädä huomaamatta. Esitettyjen häviöttömien tiivistysmenetelmien saavuttamat tiivistyssuhteet ovat luultavasti melko lähellä parasta mahdollista. Kontekstimallinnuksen saavuttamaa tiivistyssuhdetta voisi mahdollisesti parantaa siten, että kontekstien määrää ei kiinnitettäisi, vaan määrä kasvaisi tiivistyksen edetessä. Aluksi valinta voitaisiin tehdä vain harvojen kontekstien välillä ja tiivistyksen edetessä kontekstien määrää lisättäisiin esimer- 91

92 kiksi jakamalla olemassa olevia konteksteja kahteen osaan silloin, kun kontekstin tuottamat ennustevirheet olisivat liian suuria. Kontekstin jakaminen tapahtuisi lisäämällä kvantisointialueiden määrää kontekstin valinnassa. Tällöin kontekstit muodostaisivat tiivistyksen edetessä kasvavan puurakenteen. Menetelmän adaptoituminen tapahtuisi aluksi hyvin nopeasti kontekstien vähäisen määrän vuoksi, ja myöhemmin luotavien kontekstien voisi ajatella perivän (karkean) tilastollisen mallin aikaisemmin luodulta ja adaptoituneelta kontekstilta. Uudet, kontekstin jakamisessa syntyneet kontekstit olisivat siten jo osittain adaptoituneet, ja riittäisi vain korjata lapsikontekstien tilastollisia malleja tiivistyksen edetessä. Ongelmaksi tosin voisi muodostua se, milloin puuta tulisi kasvattaa, jotta kulloinkin käytettävien kontekstien määrä olisi mahdollisimman hyvän tiivistystuloksen tuottava. Myös muistin käyttö ja laskennan määrä välttämättä kasvaisivat, joten tiivistyssuhteen pitäisi parantua riittävän paljon. 92

93 LÄHTEET [1] - JPEG-LS-toteutus tiedostopaketissa jpeg_ls_v2.2.tar.gz, [2] - T. H. Cormen, C. E. Leiserson, R. L. Rivest 1998, 20. painos. Introduction to Algorithms. The MIT Press. [3] - A. Graps An Introduction to Wavelets. IEEE Computational Science and Engineering, Summer 1995, Vol. 2, No. 2. Tiivistelmä: [4] - M. Hännikäinen, J. Savolainen. Digitoinnin perusteet, näytteistetyn äänisignaalin käsittelyn perustyökalut ja tunnetuimmat ääniformaatit. < [5] - JPEG 2000 Part I. ISO/IEC International Standard Final Committee Draft Version 1.0, [6] - M. F. López, V. G. Ruiz, J. J. Fernández, I. García. Progressive-Fidelity Image Transmission for Telebrowsing: An Efficient Implementation. Computer Architecture & Electronics Department, University of Almería. < [7] - N. Merhav, G. Seroussi, M. J. Weinberger. Optimal Prefix Codes for Sources with Two-Sided Geometric Distributions [8] - M. Nelson Arithmetic Coding + Statistical Modeling = Data Compression. Dr. Dobb's Journal, February

94 [9] - A. J. Penrose, N. A. Dodgson. Extending Lossless Image Compression. Computer Laboratory, University of Cambridge [10] - M. Rabbani, R. Joshi An overview of the JPEG 2000 still image compression standard. Signal Processing: Image Communication 17 (2002) [11] - C. E. Shannon A Mathematical Theory of Communication. University of Illinois [12] - J. Teuhola. Digitaalisen kuvankäsittelyn perusteet. Luentomoniste, Turun yliopisto. < 10-Frekvenssix6.pdf> [13] - C. Valens. A Really Friendly Guide to Wavelets. < [14] - C. Valens. EZW encoding. < [15] - M. J. Weinberger, G. Seroussi, G. Sapiro LOCO-I: A Low Complexity, Context-Based, Lossless Image Compression Algorithm. Hewlett-Packard Laboratories [16] - M. J. Weinberger, G. Seroussi, G. Sapiro The LOCO-I Lossless Image Compression Algorithm: Principles and Standardization into JPEG-LS. Hewlett- Packard Laboratories [17] - H. E. Williams, J. Zobel Compressing Integers for Fast File Access. The Computer Journal, Vol. 42, No. 3,

95 [18] - X. Wu. Lossless Compression of Continuous-tone Images via Context Selection, Quantization, and Modeling. <ftp://ftp.csd.uwo.ca/pub/from_wu/papers/papero.ps> [19] - X. Wu, N. Memon. CALIC A Context Based Adaptive Lossless Image Codec. < [20] - X. Wu, N. Memon Context-Based, Adaptive, Lossless Image Coding. IEEE Transactions on Communications, Vol. 45, No. 4, April

96 LIITE 1: KÄYTETTY VERTAILUAINEISTO barb, 720 x 576, 8 bpp boats, 720 x 576, 8 bpp 96

97 goldhill, 720 x 576, 8 bpp airplane, 512 x 512, 8 bpp lenna, 512 x 512, 8 bpp bridge, 256 x 256, 8 bpp camera, 256 x 256, 8 bpp tree, 256 x 256, 8 bpp 97

98 baboon, 512 x 512, 8 bpp peppers, 512 x 512, 8 bpp sail, 512 x 512, 8 bpp sunflowr, 253 x 320, 8 bpp 98

99 jupiter, 700 x 700, 8 bpp ylewww, 800 x 600, 8 bpp 99

100 galaxy, 512 x 512, 8 bpp m32, 512 x 512, 8 bpp neworlea, 512 x 512, 8 bpp washdc, 512 x 512, 8 bpp xray, 512 x 512, 8 bpp moon, 512 x 432, 8 bpp 100

101 ridgely, 368 x 468, 8 bpp camerag8, 256 x 256, 8 bpp eye, 52 x 52, 8 bpp air_pep_h, 1024 x 512, 8 bpp pep_air_h, 1024 x 512, 8 bpp air_pep_v, 512 x 1024, 8 bpp pep_air_v, 512 x 1024, 8 bpp bap_pep_air_h, 1536 x 512, 8 bpp 101

Ongelma 1: Onko datassa tai informaatiossa päällekkäisyyttä?

Ongelma 1: Onko datassa tai informaatiossa päällekkäisyyttä? Ongelma 1: Onko datassa tai informaatiossa päällekkäisyyttä? 2012-2013 Lasse Lensu 2 Ongelma 2: Voidaanko dataa tai informaatiota tallettaa tiiviimpään tilaan koodaamalla se uudelleen? 2012-2013 Lasse

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 2. Lukujen esittäminen ja aritmetiikka 2.1 Kantajärjestelmät ja lukujen esittäminen Käytettävät lukujoukot: Luonnolliset luvut IN = {0,1,2,3,... } Positiiviset kokonaisluvut

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 8. Aluekyselyt. 8.1 Summataulukko Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa

Lisätiedot

1. Osoita, että joukon X osajoukoille A ja B on voimassa toinen ns. de Morganin laki (A B) = A B.

1. Osoita, että joukon X osajoukoille A ja B on voimassa toinen ns. de Morganin laki (A B) = A B. HY / Avoin yliopisto Johdatus yliopistomatematiikkaan, kesä 2015 Harjoitus 3 Ratkaisuehdotuksia Tehtäväsarja I Seuraavissa tehtävissä harjoitellaan muun muassa kahden joukon osoittamista samaksi sekä joukon

Lisätiedot

Datatähti 2019 loppu

Datatähti 2019 loppu Datatähti 2019 loppu task type time limit memory limit A Summa standard 1.00 s 512 MB B Bittijono standard 1.00 s 512 MB C Auringonlasku standard 1.00 s 512 MB D Binääripuu standard 1.00 s 512 MB E Funktio

Lisätiedot

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista Matematiikan johdantokurssi, syksy 06 Harjoitus, ratkaisuista. Valitse seuraaville säännöille mahdollisimman laajat lähtöjoukot ja sopivat maalijoukot niin, että syntyy kahden muuttujan funktiot (ks. monisteen

Lisätiedot

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö Algoritmit 2 Luento 9 Ti 17.4.2018 Timo Männikkö Luento 9 Merkkitiedon tiivistäminen Huffmanin koodi LZW-menetelmä Taulukointi Editointietäisyys Algoritmit 2 Kevät 2018 Luento 9 Ti 17.4.2018 2/29 Merkkitiedon

Lisätiedot

Reaalilukuvälit, leikkaus ja unioni (1/2)

Reaalilukuvälit, leikkaus ja unioni (1/2) Luvut Luonnolliset luvut N = {0, 1, 2, 3,... } Kokonaisluvut Z = {..., 2, 1, 0, 1, 2,... } Rationaaliluvut (jaksolliset desimaaliluvut) Q = {m/n m, n Z, n 0} Irrationaaliluvut eli jaksottomat desimaaliluvut

Lisätiedot

1 Aritmeettiset ja geometriset jonot

1 Aritmeettiset ja geometriset jonot 1 Aritmeettiset ja geometriset jonot Johdatus Johdatteleva esimerkki 1 Kasvutulille talletetaan vuoden jokaisen kuukauden alussa tammikuusta alkaen 100 euroa. Tilin nettokorkokanta on 6%. Korko lisätään

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

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

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on 13 Pistetulo Avaruuksissa R 2 ja R 3 on totuttu puhumaan vektorien pituuksista ja vektoreiden välisistä kulmista. Kuten tavallista, näiden käsitteiden yleistäminen korkeampiulotteisiin avaruuksiin ei onnistu

Lisätiedot

Tietotekniikan valintakoe

Tietotekniikan valintakoe Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan

Lisätiedot

Digitaalitekniikan matematiikka Luku 10 Sivu 1 (14) Lukujärjestelmämuunnokset. 2 s s

Digitaalitekniikan matematiikka Luku 10 Sivu 1 (14) Lukujärjestelmämuunnokset. 2 s s Digitaalitekniikan matematiikka Luku 10 Sivu 1 (14) k 10 2 10 2 s 10 10 8 10 16 10 2 10 2 s 2 8 8 2 2 16 16 2 Digitaalitekniikan matematiikka Luku 10 Sivu 2 (14) Johdanto Tässä luvussa perustellaan, miksi

Lisätiedot

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Tuntitehtävät 9-10 lasketaan alkuviikon harjoituksissa ja tuntitehtävät 13-14 loppuviikon harjoituksissa. Kotitehtävät 11-12 tarkastetaan loppuviikon

Lisätiedot

Injektio. Funktiota sanotaan injektioksi, mikäli lähtöjoukon eri alkiot kuvautuvat maalijoukon eri alkioille. Esim.

Injektio. Funktiota sanotaan injektioksi, mikäli lähtöjoukon eri alkiot kuvautuvat maalijoukon eri alkioille. Esim. Injektio Funktiota sanotaan injektioksi, mikäli lähtöjoukon eri alkiot kuvautuvat maalijoukon eri alkioille. Esim. Funktio f on siis injektio mikäli ehdosta f (x 1 ) = f (x 2 ) seuraa, että x 1 = x 2.

Lisätiedot

33. pohjoismainen matematiikkakilpailu 2019 Ratkaisut

33. pohjoismainen matematiikkakilpailu 2019 Ratkaisut 33. pohjoismainen matematiikkakilpailu 2019 Ratkaisut 1. Kutsutaan (eri) positiivisten kokonaislukujen joukkoa merkitykselliseksi, jos sen jokaisen äärellisen epätyhjän osajoukon aritmeettinen ja geometrinen

Lisätiedot

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Approbatur 3, demo 1, ratkaisut 1.1. A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Käydään kaikki vaihtoehdot läpi. Jos A on rehti, niin B on retku, koska muuten

Lisätiedot

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten Ratkaisuehdotelma Tehtävä 1 1. Etsi lukujen 4655 ja 12075 suurin yhteinen tekijä ja lausu se kyseisten lukujen lineaarikombinaationa ilman laskimen

Lisätiedot

Harjoitus 7: NCSS - Tilastollinen analyysi

Harjoitus 7: NCSS - Tilastollinen analyysi Harjoitus 7: NCSS - Tilastollinen analyysi Mat-2.2107 Sovelletun matematiikan tietokonetyöt Syksy 2006 Mat-2.2107 Sovelletun matematiikan tietokonetyöt 1 Harjoituksen aiheita Tilastollinen testaus Testaukseen

Lisätiedot

4 LUKUJONOT JA SUMMAT

4 LUKUJONOT JA SUMMAT Huippu Kertaus Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty 0.7.08 4 LUKUJONOT JA SUMMAT ALOITA PERUSTEISTA 45A. Määritetään lukujonon (a n ) kolme ensimmäistä jäsentä ja sadas jäsen a 00 sijoittamalla

Lisätiedot

5. Laskutoimitukset eri lukujärjestelmissä

5. Laskutoimitukset eri lukujärjestelmissä 5. Laskutoimitukset eri lukujärjestelmissä Lukujen esitykset eri lukujärjestelmissä Muunnokset lukujärjestelmien välillä Laskutoimitukset eri lukujärjestelmissä. 5.1. Muunnokset lukujärjestelmien välillä

Lisätiedot

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö Algoritmit 2 Luento 6 To 28.3.2019 Timo Männikkö Luento 6 B-puun operaatiot Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 2/30 B-puu 40 60 80 130 90 100

Lisätiedot

T Luonnollisen kielen tilastollinen käsittely Vastaukset 3, ti , 8:30-10:00 Kollokaatiot, Versio 1.1

T Luonnollisen kielen tilastollinen käsittely Vastaukset 3, ti , 8:30-10:00 Kollokaatiot, Versio 1.1 T-61.281 Luonnollisen kielen tilastollinen käsittely Vastaukset 3, ti 10.2.2004, 8:30-10:00 Kollokaatiot, Versio 1.1 1. Lasketaan ensin tulokset sanaparille valkoinen, talo käsin: Frekvenssimenetelmä:

Lisätiedot

isomeerejä yhteensä yhdeksän kappaletta.

isomeerejä yhteensä yhdeksän kappaletta. Tehtävä 2 : 1 Esitetään aluksi eräitä havaintoja. Jokaisella n Z + symbolilla H (n) merkitään kaikkien niiden verkkojen joukkoa, jotka vastaavat jotakin tehtävänannon ehtojen mukaista alkaanin hiiliketjua

Lisätiedot

MAY1 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty 12.4.2016 Julkaiseminen sallittu vain koulun suljetussa verkossa.

MAY1 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty 12.4.2016 Julkaiseminen sallittu vain koulun suljetussa verkossa. KERTAUS Lukujono KERTAUSTEHTÄVIÄ K1. Ratkaisussa annetaan esimerkit mahdollisista säännöistä. a) Jatketaan lukujonoa: 2, 4, 6, 8, 10, 12, 14, 16, Rekursiivinen sääntö on, että lukujonon ensimmäinen jäsen

Lisätiedot

Digitaalitekniikan matematiikka Luku 13 Sivu 1 (10) Virheen havaitseminen ja korjaus

Digitaalitekniikan matematiikka Luku 13 Sivu 1 (10) Virheen havaitseminen ja korjaus Digitaalitekniikan matematiikka Luku 13 Sivu 1 (10) Digitaalitekniikan matematiikka Luku 13 Sivu 2 (10) Johdanto Tässä luvussa esitetään virheen havaitsevien ja korjaavien koodaustapojen perusteet ja käyttösovelluksia

Lisätiedot

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

2.2 Neliöjuuri ja sitä koskevat laskusäännöt . Neliöjuuri ja sitä koskevat laskusäännöt MÄÄRITELMÄ 3: Lukua b sanotaan luvun a neliöjuureksi, merkitään a b, jos b täyttää kaksi ehtoa: 1o b > 0 o b a Esim.1 Määritä a) 64 b) 0 c) 36 a) Luvun 64 neliöjuuri

Lisätiedot

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö Algoritmit 1 Luento 12 Ti 19.2.2019 Timo Männikkö Luento 12 Osittamisen tasapainoisuus Pikalajittelun vaativuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu Algoritmit

Lisätiedot

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

Tekijä MAA2 Polynomifunktiot ja -yhtälöt = Vastaus a) K1 a) Tekijä MAA Polynomifunktiot ja -yhtälöt 6.8.016 ( + + ) + ( ) = + + + = + + + = + 4 b) 4 4 ( 5 + ) ( 5 + 1) = 5 + + 5 + 1 4 = + + + 4 = + 5 5 1 1 Vastaus a) 4 + b) 4 + 1 K a) f ( ) = + 1 f () = +

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 4 Jatkuvuus Jatkuvan funktion määritelmä Tarkastellaan funktiota f x) jossakin tietyssä pisteessä x 0. Tämä funktio on tässä pisteessä joko jatkuva tai epäjatkuva. Jatkuvuuden

Lisätiedot

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

SGN-1200 Signaalinkäsittelyn menetelmät Välikoe SGN-00 Signaalinkäsittelyn menetelmät Välikoe 9.3.009 Sivuilla - on. Älä vastaa siihen, jos et ollut ensimmäisessä välikokeessa. Tentin kysymykset ovat sivuilla 3-4. Vastaa vain jompaan kumpaan kokeeseen,

Lisätiedot

Koodausteoria, Kesä 2014

Koodausteoria, Kesä 2014 Koodausteoria, Kesä 2014 Topi Törmä Matemaattisten tieteiden laitos 3.5 Reedin-Mullerin koodit Olkoon tässä kappaleessa F = F2 = Z2 ja n = 2 m. Määritellään avaruuteen F n kertolasku koordinaateittain:

Lisätiedot

1. Esitä rekursiivinen määritelmä lukujonolle

1. Esitä rekursiivinen määritelmä lukujonolle Matematiikan laitos Johdatus Diskrettiin Matematiikkaan Harjoitus 4 24.11.2011 Ratkaisuehdotuksia Aleksandr Pasharin 1. Esitä rekursiivinen määritelmä lukujonolle (a) f(n) = (2 0, 2 1, 2 2, 2 3, 2 4,...)

Lisätiedot

1 Peruslaskuvalmiudet

1 Peruslaskuvalmiudet 1 Peruslaskuvalmiudet 11 Lukujoukot N {1,, 3, 4,} on luonnollisten lukujen joukko (0 mukana, jos tarvitaan), Z {, 3,, 1, 0, 1,, 3,} on kokonaislukujen joukko, Q m n : m, n Z, n 0 on rationaalilukujen joukko,

Lisätiedot

7.4 Sormenjälkitekniikka

7.4 Sormenjälkitekniikka 7.4 Sormenjälkitekniikka Tarkastellaan ensimmäisenä esimerkkinä pitkien merkkijonojen vertailua. Ongelma: Ajatellaan, että kaksi n-bittistä (n 1) tiedostoa x ja y sijaitsee eri tietokoneilla. Halutaan

Lisätiedot

1 Määrittelyjä ja aputuloksia

1 Määrittelyjä ja aputuloksia 1 Määrittelyjä ja aputuloksia 1.1 Supremum ja infimum Aluksi kerrataan pienimmän ylärajan (supremum) ja suurimman alarajan (infimum) perusominaisuuksia ja esitetään muutamia myöhemmissä todistuksissa tarvittavia

Lisätiedot

Joukot. Georg Cantor ( )

Joukot. Georg Cantor ( ) Joukot Matematiikassa on pyrkimys määritellä monimutkaiset asiat täsmällisesti yksinkertaisempien asioiden avulla. Tarvitaan jokin lähtökohta, muutama yleisesti hyväksytty ja ymmärretty käsite, joista

Lisätiedot

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

Lisätiedot

4 Matemaattinen induktio

4 Matemaattinen induktio 4 Matemaattinen induktio Joidenkin väitteiden todistamiseksi pitää näyttää, että kaikilla luonnollisilla luvuilla on jokin ominaisuus P. Esimerkkejä tällaisista väitteistä ovat vaikkapa seuraavat: kaikilla

Lisätiedot

Ongelma(t): Miten digitaalista tietoa voidaan toisintaa ja visualisoida? Miten monimutkaista tietoa voidaan toisintaa ja visualisoida?

Ongelma(t): Miten digitaalista tietoa voidaan toisintaa ja visualisoida? Miten monimutkaista tietoa voidaan toisintaa ja visualisoida? Ongelma(t): Miten digitaalista tietoa voidaan toisintaa ja visualisoida? Miten monimutkaista tietoa voidaan toisintaa ja visualisoida? 2 Tieto on koodattu aikaisempaa yleisemmin digitaaliseen muotoon,

Lisätiedot

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1)

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1) Approbatur 3, demo, ratkaisut Sovitaan, että 0 ei ole luonnollinen luku. Tällöin oletusta n 0 ei tarvitse toistaa alla olevissa ratkaisuissa. Se, pidetäänkö nollaa luonnollisena lukuna vai ei, vaihtelee

Lisätiedot

Tarkastelemme ensin konkreettista esimerkkiä ja johdamme sitten yleisen säännön, joilla voidaan tietyissä tapauksissa todeta kielen ei-säännöllisyys.

Tarkastelemme ensin konkreettista esimerkkiä ja johdamme sitten yleisen säännön, joilla voidaan tietyissä tapauksissa todeta kielen ei-säännöllisyys. Ei-säännöllisiä kieliä [Sipser luku 1.4] Osoitamme, että joitain kieliä ei voi tunnistaa äärellisellä automaatilla. Tulos ei sinänsä ole erityisen yllättävä, koska äärellinen automaatti on äärimmäisen

Lisätiedot

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö Algoritmit 1 Luento 12 Ke 15.2.2017 Timo Männikkö Luento 12 Pikalajittelu Pikalajittelun vaativuus Osittamisen tasapainoisuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu

Lisätiedot

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014 Yhtälönratkaisusta Johanna Rämö, Helsingin yliopisto 22. syyskuuta 2014 Yhtälönratkaisu on koulusta tuttua, mutta usein sitä tehdään mekaanisesti sen kummempia ajattelematta. Jotta pystytään ratkaisemaan

Lisätiedot

Koodausteoria, Kesä 2014

Koodausteoria, Kesä 2014 Koodausteoria, Kesä 2014 Topi Törmä Matemaattisten tieteiden laitos 6. Ryöppyvirheitä korjaavat koodit Topi Törmä Matemaattisten tieteiden laitos 2 / 34 6.1 Peruskäsitteitä Aiemmin on implisiittisesti

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 7 1 Useamman muuttujan funktion raja-arvo Palautetaan aluksi mieliin yhden muuttujan funktion g(x) raja-arvo g(x). x a Tämä raja-arvo kertoo, mitä arvoa funktio g(x)

Lisätiedot

Tekijä Pitkä Matematiikka 11 ratkaisut luku 2

Tekijä Pitkä Matematiikka 11 ratkaisut luku 2 Tekijä Pitkä matematiikka 11 0..017 170 a) Koska 8 = 4 7, luku 8 on jaollinen luvulla 4. b) Koska 104 = 4 6, luku 104 on jaollinen luvulla 4. c) Koska 4 0 = 80 < 8 ja 4 1 = 84 > 8, luku 8 ei ole jaollinen

Lisätiedot

missä on myös käytetty monisteen kaavaa 12. Pistä perustelut kohdilleen!

missä on myös käytetty monisteen kaavaa 12. Pistä perustelut kohdilleen! Matematiikan johdantokurssi Kertausharjoitustehtävien ratkaisuja/vastauksia/vihjeitä. Osoita todeksi logiikan lauseille seuraava: P Q (P Q). Ratkaisuohje. Väite tarkoittaa, että johdetut lauseet P Q ja

Lisätiedot

C = P Q S = P Q + P Q = P Q. Laskutoimitukset binaariluvuilla P -- Q = P + (-Q) (-Q) P Q C in. C out

C = P Q S = P Q + P Q = P Q. Laskutoimitukset binaariluvuilla P -- Q = P + (-Q) (-Q) P Q C in. C out Digitaalitekniikan matematiikka Luku ivu (2).9.2 Fe C = Aseta Aseta i i = n i > i i i Ei i < i i i Ei i i = Ei i i = i i -- On On On C in > < = CI CO C out -- = + (-) (-) = + = C + Digitaalitekniikan matematiikka

Lisätiedot

Reaalifunktioista 1 / 17. Reaalifunktioista

Reaalifunktioista 1 / 17. Reaalifunktioista säilyy 1 / 17 säilyy Jos A, B R, niin funktiota f : A B sanotaan (yhden muuttujan) reaalifunktioksi. Tällöin karteesinen tulo A B on (aiempia esimerkkejä luonnollisemmalla tavalla) xy-tason osajoukko,

Lisätiedot

Demo 1: Simplex-menetelmä

Demo 1: Simplex-menetelmä MS-C2105 Optimoinnin perusteet Malliratkaisut 3 Ehtamo Demo 1: Simplex-menetelmä Muodosta lineaarisen tehtävän standardimuoto ja ratkaise tehtävä taulukkomuotoisella Simplex-algoritmilla. max 5x 1 + 4x

Lisätiedot

Jatkuvat satunnaismuuttujat

Jatkuvat satunnaismuuttujat Jatkuvat satunnaismuuttujat Satunnaismuuttuja on jatkuva jos se voi ainakin periaatteessa saada kaikkia mahdollisia reaalilukuarvoja ainakin tietyltä väliltä. Täytyy ymmärtää, että tällä ei ole mitään

Lisätiedot

Inversio-ongelmien laskennallinen peruskurssi Luento 7

Inversio-ongelmien laskennallinen peruskurssi Luento 7 Inversio-ongelmien laskennallinen peruskurssi Luento 7 Kevät 2012 1 Tilastolliset inversio-ongelmat Tilastollinen ionversio perustuu seuraaviin periaatteisiin: 1. Kaikki mallissa olevat muuttujat mallinnetaan

Lisätiedot

MS-A010{3,4,5} (ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 2: Sarjat

MS-A010{3,4,5} (ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 2: Sarjat MS-A010{3,4,5} (ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 2: Sarjat Pekka Alestalo, Jarmo Malinen Aalto-yliopisto, Matematiikan ja systeemianalyysin laitos September 13, 2017 Pekka Alestalo,

Lisätiedot

MS-A010{3,4} (ELEC*) Differentiaali- ja integraalilaskenta 1 Luento 2: Sarjat

MS-A010{3,4} (ELEC*) Differentiaali- ja integraalilaskenta 1 Luento 2: Sarjat MS-A010{3,4} (ELEC*) Differentiaali- ja integraalilaskenta 1 Luento 2: Sarjat Pekka Alestalo, Jarmo Malinen Aalto-yliopisto, Matematiikan ja systeemianalyysin laitos 14.9.2016 Pekka Alestalo, Jarmo Malinen

Lisätiedot

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 1. Palautetaan vielä mieleen O-notaation määritelmä. Olkoon f ja g funktioita luonnollisilta luvuilta positiivisille

Lisätiedot

Tenttiin valmentavia harjoituksia

Tenttiin valmentavia harjoituksia Tenttiin valmentavia harjoituksia Alla olevissa harjoituksissa suluissa oleva sivunumero viittaa Juha Partasen kurssimonisteen siihen sivuun, jolta löytyy apua tehtävän ratkaisuun. Funktiot Harjoitus.

Lisätiedot

1 sup- ja inf-esimerkkejä

1 sup- ja inf-esimerkkejä Alla olevat kohdat (erityisesti todistukset) ovat lähinnä oheislukemista reaaliluvuista, mutta joihinkin niistä palataan myöhemmin kurssilla. 1 sup- ja inf-esimerkkejä Nollakohdan olemassaolo. Kaikki tuntevat

Lisätiedot

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko, Tehtävä 1 : 1 a) Olkoon G heikosti yhtenäinen suunnattu verkko, jossa on yhteensä n solmua. Määritelmän nojalla verkko G S on yhtenäinen, jolloin verkoksi T voidaan valita jokin verkon G S virittävä alipuu.

Lisätiedot

MS-A010{2,3,4,5} (SCI, ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 2: Sarjat

MS-A010{2,3,4,5} (SCI, ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 2: Sarjat M-A010{2,3,4,5} (CI, ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 2: arjat Pekka Alestalo, Jarmo Malinen Aalto-yliopisto, Matematiikan ja systeemianalyysin laitos eptember 12, 2018 Pekka

Lisätiedot

Vastauksia. Topologia Syksy 2010 Harjoitus 1

Vastauksia. Topologia Syksy 2010 Harjoitus 1 Topologia Syksy 2010 Harjoitus 1 (1) Olkoon X joukko ja (T j ) j J perhe X:n topologioita. Osoita, että T = {T j : j J} on X:n topologia. (2) Todista: Välit [a, b) muodostavat R 1 :n erään topologian kannan.

Lisätiedot

Successive approximation AD-muunnin

Successive approximation AD-muunnin AD-muunnin Koostuu neljästä osasta: näytteenotto- ja pitopiiristä, (sample and hold S/H) komparaattorista, digitaali-analogiamuuntimesta (DAC) ja siirtorekisteristä. (successive approximation register

Lisätiedot

TEHTÄVIEN RATKAISUT. Luku Kaikki luvut on kokonaislukuja. Luonnollisia lukuja ovat 35, 7 ja 0.

TEHTÄVIEN RATKAISUT. Luku Kaikki luvut on kokonaislukuja. Luonnollisia lukuja ovat 35, 7 ja 0. TEHTÄVIEN RATKAISUT Luku.. Kaikki luvut on kokonaislukuja. Luonnollisia lukuja ovat, 7 ja 0.. a) Luvun vastaluku on, koska + ( ) 0. b) Luvun 7 vastaluku on 7, koska 7 + ( 7) 0. c) Luvun 0 vastaluku on

Lisätiedot

Tehtävä 1. Arvioi mitkä seuraavista väitteistä pitävät paikkansa. Vihje: voit aloittaa kokeilemalla sopivia lukuarvoja.

Tehtävä 1. Arvioi mitkä seuraavista väitteistä pitävät paikkansa. Vihje: voit aloittaa kokeilemalla sopivia lukuarvoja. Tehtävä 1 Arvioi mitkä seuraavista väitteistä pitävät paikkansa. Vihje: voit aloittaa kokeilemalla sopivia lukuarvoja. 1 Jos 1 < y < 3, niin kaikilla x pätee x y x 1. 2 Jos x 1 < 2 ja y 1 < 3, niin x y

Lisätiedot

0. Kertausta. Luvut, lukujoukot (tavalliset) Osajoukot: Yhtälöt ja niiden ratkaisu: N, luonnolliset luvut (1,2,3,... ) Z, kokonaisluvut

0. Kertausta. Luvut, lukujoukot (tavalliset) Osajoukot: Yhtälöt ja niiden ratkaisu: N, luonnolliset luvut (1,2,3,... ) Z, kokonaisluvut 0. Kertausta Luvut, lukujoukot (tavalliset) N, luonnolliset luvut (1,2,3,... ) Z, kokonaisluvut Rationaaliluvut n/m, missä n,m Z Reaaliluvut R muodostavat jatkumon fysiikan lukujoukko Kompleksiluvut C:z

Lisätiedot

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö Algoritmit 2 Luento 6 Ke 29.3.2017 Timo Männikkö Luento 6 B-puun operaatiot B-puun muunnelmia Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 2/31 B-puu

Lisätiedot

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

MATEMATIIKAN KOE, PITKÄ OPPIMÄÄRÄ HYVÄN VASTAUKSEN PIIRTEITÄ MATEMATIIKAN KOE, PITKÄ OPPIMÄÄRÄ 4.9.09 HYVÄN VASTAUKSEN PIIRTEITÄ Alustavat hyvän vastauksen piirteet on suuntaa-antava kuvaus kokeen tehtäviin odotetuista vastauksista ja tarkoitettu ensisijaisesti

Lisätiedot

9.5. Turingin kone. Turingin koneen ohjeet. Turingin kone on järjestetty seitsikko

9.5. Turingin kone. Turingin koneen ohjeet. Turingin kone on järjestetty seitsikko 9.5. Turingin kone Turingin kone on järjestetty seitsikko TM = (S, I, Γ, O, B, s 0, H), missä S on tilojen joukko, I on syöttöaakkosto, Γ on nauha-aakkosto, I Γ, O on äärellinen ohjeiden joukko, O S Γ

Lisätiedot

Lukujonot Z-muunnos Z-muunnoksen ominaisuuksia Z-käänteismuunnos Differenssiyhtälöt. Z-muunnos. 5. joulukuuta Z-muunnos

Lukujonot Z-muunnos Z-muunnoksen ominaisuuksia Z-käänteismuunnos Differenssiyhtälöt. Z-muunnos. 5. joulukuuta Z-muunnos Lukujonot Z-muunnoksen ominaisuuksia Z-käänteismuunnos Differenssiyhtälöt 5. joulukuuta 2016 Lukujonot Z-muunnoksen ominaisuuksia Z-käänteismuunnos Differenssiyhtälöt Lukujonot Lukujonot Z-muunnoksen ominaisuuksia

Lisätiedot

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120 Tehtävä 1 : 1 Merkitään jatkossa kirjaimella H kaikkien solmujoukon V sellaisten verkkojen kokoelmaa, joissa on tasan kolme särmää. a) Jokainen verkko G H toteuttaa väitteen E(G) [V]. Toisaalta jokainen

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 31.1.-1.2.2018 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka tutkii onko kokonaisluku tasan jaollinen jollain toisella kokonaisluvulla siten, että ei käytetä lainkaan jakolaskuja Jaettava

Lisätiedot

Shannonin ensimmäinen lause

Shannonin ensimmäinen lause Shannonin ensimmäinen lause Pro gradu Maija-Liisa Metso Matemaattisten tieteiden laitos Oulun yliopisto Syksy 2014 Sisältö Tiivistelmä 2 1 Johdanto informaatioteoriaan 2 1.1 Informaatioteorian historiaa...................

Lisätiedot

SISÄLLYS - DIGITAALITEKNIIKKA

SISÄLLYS - DIGITAALITEKNIIKKA SISÄLLYS - DIGITAALITEKNIIKKA Digitaalitekniikan perusteita...2 Bitti (bit)...2 Tavu (bytes)...2 Sana (word)...2 Yksiköt...2 Binääri järjestelmän laskutapa...2 Esimerkki: Digikuvan siirron kestoaika...2

Lisätiedot

Harmaasävykuvien häviötön tiivistäminen

Harmaasävykuvien häviötön tiivistäminen Harmaasävykuvien häviötön tiivistäminen Kaisa Komulainen 9. huhtikuuta 2001 Joensuun yliopisto Tietojenkäsittelytiede Pro gradu -tutkielma Tiivistelmä Digitaalisessa muodossa olevien kuvien määrä kasvaa

Lisätiedot

Sovellettu todennäköisyyslaskenta B

Sovellettu todennäköisyyslaskenta B Sovellettu todennäköisyyslaskenta B Antti Rasila 20. syyskuuta 2007 Antti Rasila () TodB 20. syyskuuta 2007 1 / 17 1 Kolmogorovin aksioomat σ-algebra Tapahtuman todennäköisyys 2 Satunnaismuuttujat Todennäköisyysjakauma

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2017-2018 Yhteenveto Yleistä kurssista Kurssin laajuus 5 op Luentoja 30h Harjoituksia 21h Itsenäistä työskentelyä n. 80h 811120P Diskreetit rakenteet, Yhteenveto 2 Kurssin

Lisätiedot

LIITE 1 VIRHEEN ARVIOINNISTA

LIITE 1 VIRHEEN ARVIOINNISTA Oulun yliopisto Fysiikan opetuslaboratorio Fysiikan laboratoriotyöt 1 1 LIITE 1 VIRHEEN RVIOINNIST Mihin tarvitset virheen arviointia? Mittaustuloksiin sisältyy aina virhettä, vaikka mittauslaite olisi

Lisätiedot

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

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

Lisätiedot

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2 Johdatus diskreettiin matematiikkaan Harjoitus 4, 7.10.2015 1. Olkoot c 0, c 1 R siten, että polynomilla r 2 c 1 r c 0 on kaksinkertainen juuri. Määritä rekursioyhtälön x n+2 = c 1 x n+1 + c 0 x n, n N,

Lisätiedot

Helsingin, Itä-Suomen, Jyväskylän, Oulun, Tampereen ja Turun yliopisto Matematiikan valintakoe 10.6.2013 klo 10-13 Ratkaisut ja pisteytysohjeet

Helsingin, Itä-Suomen, Jyväskylän, Oulun, Tampereen ja Turun yliopisto Matematiikan valintakoe 10.6.2013 klo 10-13 Ratkaisut ja pisteytysohjeet Helsingin, Itä-Suomen, Jyväskylän, Oulun, Tampereen ja Turun yliopisto Matematiikan valintakoe.6. klo - Ratkaisut ja pisteytysohjeet. Ratkaise seuraavat epäyhtälöt ja yhtälö: a) x+ x +9, b) log (x) 7,

Lisätiedot

Esimerkki: Tietoliikennekytkin

Esimerkki: Tietoliikennekytkin Esimerkki: Tietoliikennekytkin Tämä Mathematica - notebook sisältää luennolla 2A (2..26) käsitellyn esimerkin laskut. Esimerkin kuvailu Tarkastellaan yksinkertaista mallia tietoliikennekytkimelle. Kytkimeen

Lisätiedot

δ : (Q {q acc, q rej }) (Γ k {, }) Q (Γ k {, }) {L, R}.

δ : (Q {q acc, q rej }) (Γ k {, }) Q (Γ k {, }) {L, R}. 42 Turingin koneiden laajennuksia 1 oniuraiset koneet Sallitaan, että Turingin koneen nauha koostuu k:sta rinnakkaisesta urasta, jotka kaikki kone lukee ja kirjoittaa yhdessä laskenta-askelessa: Koneen

Lisätiedot

Kaksintaistelun approksimatiivinen mallintaminen (valmiin työn esittely)

Kaksintaistelun approksimatiivinen mallintaminen (valmiin työn esittely) Kaksintaistelun approksimatiivinen mallintaminen (valmiin työn esittely) Juho Roponen 10.06.2013 Ohjaaja: Esa Lappi Valvoja: Ahti Salo Työn saa tallentaa ja julkistaa Aalto-yliopiston avoimilla verkkosivuilla.

Lisätiedot

Lukuteoria. Eukleides Aleksandrialainen (n. 300 eaa)

Lukuteoria. Eukleides Aleksandrialainen (n. 300 eaa) Lukuteoria Lukuteoria on eräs vanhimmista matematiikan aloista. On sanottu, että siinä missä matematiikka on tieteiden kuningatar, on lukuteoria matematiikan kuningatar. Perehdymme seuraavassa luonnollisten

Lisätiedot

Sarja. Lukujonosta (a k ) k N voi muodostaa sen osasummien jonon (s n ): s 1 = a 1, s 2 = a 1 + a 2, s 3 = a 1 + a 2 + a 3,...,

Sarja. Lukujonosta (a k ) k N voi muodostaa sen osasummien jonon (s n ): s 1 = a 1, s 2 = a 1 + a 2, s 3 = a 1 + a 2 + a 3,..., Sarja Lukujonosta (a k ) k N voi muodostaa sen osasummien jonon (s n ): Määritelmä 1 s 1 = a 1, s 2 = a 1 + a 2, s 3 = a 1 + a 2 + a 3,..., n s n = a k. Jos osasummien jonolla (s n ) on raja-arvo s R,

Lisätiedot

ABHELSINKI UNIVERSITY OF TECHNOLOGY

ABHELSINKI UNIVERSITY OF TECHNOLOGY Satunnaismuuttujat ja todennäköisyysjakaumat Mitä tänään? Jos satunnaisilmiötä halutaan mallintaa matemaattisesti, on ilmiön tulosvaihtoehdot kuvattava numeerisessa muodossa. Tämä tapahtuu liittämällä

Lisätiedot

Matematiikka ja teknologia, kevät 2011

Matematiikka ja teknologia, kevät 2011 Matematiikka ja teknologia, kevät 2011 Peter Hästö 3. helmikuuta 2011 Matemaattisten tieteiden laitos Sisältö Kurssi koostuu kuudesta (seitsemästä) toisistaan riippumattomasta luennosta. Aihepiirit ovat:

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 4. Joukot, relaatiot ja funktiot Osa 1: Joukot 4.1 Joukot Matemaattisesti joukko on mikä tahansa hyvin määritelty kokoelma objekteja, joita kutsutaan joukon alkioiksi

Lisätiedot

(iv) Ratkaisu 1. Sovelletaan Eukleideen algoritmia osoittajaan ja nimittäjään. (i) 7 = , 7 6 = = =

(iv) Ratkaisu 1. Sovelletaan Eukleideen algoritmia osoittajaan ja nimittäjään. (i) 7 = , 7 6 = = = JOHDATUS LUKUTEORIAAN (syksy 07) HARJOITUS 7, MALLIRATKAISUT Tehtävä Etsi seuraavien rationaalilukujen ketjumurtokehitelmät: (i) 7 6 (ii) 4 7 (iii) 65 74 (iv) 63 74 Ratkaisu Sovelletaan Eukleideen algoritmia

Lisätiedot

Todennäköisyyslaskenta IIa, syys lokakuu 2019 / Hytönen 3. laskuharjoitus, ratkaisuehdotukset

Todennäköisyyslaskenta IIa, syys lokakuu 2019 / Hytönen 3. laskuharjoitus, ratkaisuehdotukset Todennäköisyyslaskenta IIa, syys lokakuu 2019 / Hytönen 3. laskuharjoitus, ratkaisuehdotukset 1. Olkoon X satunnaismuuttuja, ja olkoot a R \ {0}, b R ja Y = ax + b. (a) Olkoon X diskreetti ja f sen pistetodennäköisyysfunktio.

Lisätiedot

7 Vapaus. 7.1 Vapauden määritelmä

7 Vapaus. 7.1 Vapauden määritelmä 7 Vapaus Kuten edellisen luvun lopussa mainittiin, seuraavaksi pyritään ratkaisemaan, onko annetussa aliavaruuden virittäjäjoukossa tarpeettomia vektoreita Jos tällaisia ei ole, virittäjäjoukkoa kutsutaan

Lisätiedot

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö Johdatus diskreettiin matematiikkaan Harjoitus 5, 14.10.2015 1. Ratkaise rekursioyhtälö x n+4 2x n+2 + x n 16( 1) n, n N, alkuarvoilla x 1 2, x 2 14, x 3 18 ja x 4 42. Ratkaisu. Vastaavan homogeenisen

Lisätiedot

6*. MURTOFUNKTION INTEGROINTI

6*. MURTOFUNKTION INTEGROINTI MAA0 6*. MURTOFUNKTION INTEGROINTI Murtofunktio tarkoittaa kahden polynomin osamäärää, ja sen yleinen muoto on P() R : R(). Q() Mikäli osoittajapolynomin asteluku on nimittäjäpolynomin astelukua korkeampi

Lisätiedot

Liukulukulaskenta. Pekka Hotokka

Liukulukulaskenta. Pekka Hotokka Liukulukulaskenta Pekka Hotokka pejuhoto@cc.jyu.fi 10.11.2004 Tiivistelmä Liukulukuja tarvitaan, kun joudutaan esittämään reaalilukuja tietokoneella. Niiden esittämistavasta johtuen syntyy laskennassa

Lisätiedot

Oletetaan, että virhetermit eivät korreloi toistensa eikä faktorin f kanssa. Toisin sanoen

Oletetaan, että virhetermit eivät korreloi toistensa eikä faktorin f kanssa. Toisin sanoen Yhden faktorin malli: n kpl sijoituskohteita, joiden tuotot ovat r i, i =, 2,..., n. Olkoon f satunnaismuuttuja ja oletetaan, että tuotot voidaan selittää yhtälön r i = a i + b i f + e i avulla, missä

Lisätiedot

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012 OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012 Luento 6: Tiedon esittäminen tietokoneessa, osa 1 Tekijät: Antti Virtanen, Timo Lehtonen, Matti Kujala, Kirsti Ala-Mutka, Petri M. Gerdt et al. Luennon

Lisätiedot

Puheenkoodaus. Olivatpa kerran iloiset serkukset. PCM, DPCM ja ADPCM

Puheenkoodaus. Olivatpa kerran iloiset serkukset. PCM, DPCM ja ADPCM Puheenkoodaus Olivatpa kerran iloiset serkukset PCM, DPCM ja ADPCM PCM eli pulssikoodimodulaatio Koodaa jokaisen signaalinäytteen binääriseksi (eli vain ykkösiä ja nollia sisältäväksi) luvuksi kvantisointitasolle,

Lisätiedot

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja 581336 Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja 1. S! axc X! axc X! by c Y! by c Y! " 2. (a) Tehtävänä on konstruoida rajoittamaton kielioppi, joka tuottaa kielen f0 n 1 n jn 1g. Vaihe1: alkutilanteen

Lisätiedot

Helsingin, Itä-Suomen, Jyväskylän, Oulun, Tampereen ja Turun yliopisto Matematiikan valintakoe klo 10-13

Helsingin, Itä-Suomen, Jyväskylän, Oulun, Tampereen ja Turun yliopisto Matematiikan valintakoe klo 10-13 Helsingin, Itä-Suomen, Jyväskylän, Oulun, Tampereen ja Turun yliopisto Matematiikan valintakoe.6. klo -. Ratkaise seuraavat epäyhtälöt ja yhtälö: a) x +9, b) log (x) 7, c) x + x 4 =.. Määrää kaikki ne

Lisätiedot