ANTTI HUHTAMÄKI JPEG- JA JPEG2000- KUVANPAKKAUSSTANDARDIEN VERTAILU Kandidaatintyö

Samankaltaiset tiedostot
Kuvan pakkaus JPEG (Joint Photographic Experts Group)

VÄRISPEKTRIKUVIEN TEHOKAS SIIRTO TIETOVERKOISSA

Kuvan- ja videontiivistys. Mikko Nuutinen

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

Mitä on konvoluutio? Tutustu kuvankäsittelyyn

Matematiikka ja teknologia, kevät 2011

AV-muotojen migraatiotyöpaja - video. KDK-pitkäaikaissäilytys seminaari / Juha Lehtonen

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

JONNE MÄKINEN VIDEONPAKKAUSSTANDARDIEN MPEG-4 PART 2 JA MPEG-4 PART 10 VERTAILU

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

Matlab-tietokoneharjoitus

JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

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

Juha-Pekka Ruuska BITTIKARTTAGRAFIIKKA, BITTIKARTTAKUVAT ELI RASTERIKUVAT...2

TOPI SANTAKIVI OBJEKTIIVINEN KUVAN LAADUN ARVIOINTI. Kandidaatintyö

Luku 8. Aluekyselyt. 8.1 Summataulukko

A = a b B = c d. d e f. g h i determinantti on det(c) = a(ei fh) b(di fg) + c(dh eg). Matriisin determinanttia voi merkitä myös pystyviivojen avulla:

Seurantalaskimen simulointi- ja suorituskykymallien vertailu (valmiin työn esittely) Joona Karjalainen

AV-muotojen migraatiotyöpaja - ääni. KDK-pitkäaikaissäilytys seminaari / Juha Lehtonen

S Laskennallinen Neurotiede

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Inversio-ongelmien laskennallinen peruskurssi Luento 4

ARVO - verkkomateriaalien arviointiin

S Laskennallinen Neurotiede

Kompleksiluvut signaalin taajuusjakauman arvioinnissa

Algoritmit 2. Luento 9 Ti Timo Männikkö

Gimp JA MUUT KUVANKÄSITTELYOHJELMAT

Langattoman verkon spektrianalyysi

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

Laskuharjoitus 2 ( ): Tehtävien vastauksia

Digitaalinen signaalinkäsittely Kuvankäsittely

Signaalien generointi

Latuviitan Landsat-mosaiikki Itämeren alueelta

Matematiikan tukikurssi

JANNE E. KORHONEN JPEG- ja JPEG2000-kuvaformaattien laskennallinen tarkastelu. Kandidaatintyö

Liikehavaintojen estimointi langattomissa lähiverkoissa. Diplomityöseminaari Jukka Ahola

Flash AD-muunnin. Ominaisuudet. +nopea -> voidaan käyttää korkeataajuuksisen signaalin muuntamiseen (GHz) +yksinkertainen

VERKOSTO GRAAFINEN OHJE

Laskuharjoitus 4 ( ): Tehtävien vastauksia

Rasterikarttojen ja liiteaineistojen päivitysohje SpatialWeb5 Karttapaikka

SIGNAALITEORIAN KERTAUSTA 1

S Laskennallinen Neurotiede

Muita kuvankäsittelyohjelmia on mm. Paint Shop Pro, Photoshop Elements, Microsoft Office Picture Manager

10 Liiketaloudellisia algoritmeja

Dynamiikan hallinta Lähde: Zölzer. Digital audio signal processing. Wiley & Sons, Zölzer (ed.) DAFX Digital Audio Effects. Wiley & Sons, 2002.

6.6. Tasoitus ja terävöinti

1 Kannat ja kannanvaihto

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

JANI URAMA LIIKKEENESTIMOINTI VIDEONPAKKAUKSESSA. Kandidaatintyö

Häviötön kuvanpakkausalgoritmi lomituksella ja sen tehokkuuden vertailu PNG-formaattiin

Tilastollinen vastepintamallinnus: kokeiden suunnittelu, regressiomallin analyysi, ja vasteen optimointi. Esimerkit laskettu JMP:llä

4. Funktion arvioimisesta eli approksimoimisesta

Kerro kuvin 3:n uudet ominaisuudet

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

JOHDATUS TEKOÄLYYN TEEMU ROOS

S09 04 Kohteiden tunnistaminen 3D datasta

JOKKY OSK. Logo ja graafinen ohjeistus. Jaana Salo. JEDU / Piippola, Media 15A

YLEISKUVA - Kysymykset

Kuvankäsi*ely 1. Digitaaliset kuvat ja niiden peruskäsi3eet. Kimmo Koskinen

Ohjelmistoprosessit ja ohjelmistojen laatu Kevät Ohjelmistoprosessit ja ohjelmistojen laatu. Projektinhallinnan laadunvarmistus

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

Hajautetut käyttöliittymät. Kuvat www-sivulla

S MRI sovellukset Harjoitustehtävät. Ryhmä 1 Juha-Pekka Niskanen Eini Niskanen

Matematiikan tukikurssi, kurssikerta 3

Korkean resoluution ja suuren kuva-alueen SAR

Oppilaan opas. Visuaaliviestinnän Instituutti VVI Oy. Versio 0.2 ( )

Tehdään laadukas painotuote

Sami Hirvonen. Ulkoasut Media Works sivustolle

JOHDATUS TEKOÄLYYN TEEMU ROOS

S11-04 Kompaktikamerat stereokamerajärjestelmässä. Projektisuunnitelma

Kuvankäsittely. DigiReWork Annamari Mäenhovi Kati Nieminen

Numeeriset menetelmät TIEA381. Luento 6. Kirsi Valjus. Jyväskylän yliopisto. Luento 6 () Numeeriset menetelmät / 33

WebP-kuvaformaatin käyttö ja hyödyllisyys

ELEC-C7230 Tietoliikenteen siirtomenetelmät

T DSP: GSM codec

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

Kannan vektorit siis virittävät aliavaruuden, ja lisäksi kanta on vapaa. Lauseesta 7.6 saadaan seuraava hyvin käyttökelpoinen tulos:

Matematiikan tukikurssi

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

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Kokonaislukuaritmetiikka vs. logiikkaluupit

. Kun p = 1, jono suppenee raja-arvoon 1. Jos p = 2, jono hajaantuu. Jono suppenee siis lineaarisesti. Vastaavasti jonolle r k+1 = r k, suhde on r k+1

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

Gimp perusteet. Riitta, Jouko ja Heikki

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

TAMPEREEN TEKNILLINEN YLIOPISTO

Johdatus rakenteisiin dokumentteihin

Matematiikan tukikurssi

Ratkaisuehdotukset LH 8 / vko 47

Kanta ja Kannan-vaihto

Tieteellinen laskenta 2 Törmäykset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Opiskelun ja työelämän tietotekniikka (DTEK1043)

L A TEX, pdfl A TEX ja grafiikka

Transkriptio:

1 ANTTI HUHTAMÄKI JPEG- JA JPEG2000- KUVANPAKKAUSSTANDARDIEN VERTAILU Kandidaatintyö Tarkastaja: Lehtori Heikki Huttunen

II TIIVISTELMÄ TAMPEREEN TEKNILLINEN YLIOPISTO Tietoliikenne-elektroniikan koulutusohjelma Antti Huhtamäki: Jpg- ja Jpg2000 -kuvanpakkausstandardien vertailu Kandidaatintyö, 29 sivua, 10 liitesivua Toukokuu 2012 Pääaine: Signaalinkäsittely Tarkastaja: lehtori Heikki Huttunen Avainsanat: kuvanpakkaus, jpg, jpg2000, kosinimuunnos, waveletmuunnos, keskineliövirhe, signaalikohinasuhde, structural similarity Työssä vertaillaan kahta digitaalista kuvanpakkausmenetelmää. Jpg on käytännössä kaikkialle levinnyt ja tunnetuin menetelmä ja jpg2000 melko huonosti tunnettu seuraaja joka ei ole vielä saanut juurikaan jalansijaa. Työssä perehdytään ensin kuvanpakkauksen teoriaan ja tarkemmin vertailtavien menetelmien toimintaan ja erityisesti niiden eroihin. Toisessa osassa esitellään ensin vertailun toteutus sekä käytettävät testikuvat ja niiden ominaisuudet. Varsinaisessa kuvien vertailussa käytetään ensin tavanomaisia virheenarviointiin soveltuvia laskennallisia menetelmiä, keskineliövirhettä (MSE) sekä signaali-kohina -suhdetta (SNR). Lisäksi käytetään kuvien laadullista eroa paremmin kuvaavaa laskennallista menetelmää SSIM (Structural Similarity, rakenteellinen samankaltaisuus). Laskennallisten virhearviointien lisäksi kuvia arvioidaan silmämääräisesti, pakkaussuhteiden mukaan sekä kiinnitetään huomiota pakkausprosessin tehokkuuteen ja yleisemmin koodekin toimintaan.

III ALKUSANAT Tämä työ on suoritettu Tampereen Teknillisen Yliopiston kandidaattiseminaarin osana signaalinkäsittelyn laitokselle keväällä 2012. Haluaisin kiittää ohjaajaa Heikki Huttusta hyvistä neuvoista sekä tukemisesta ja joustavuudesta työn seminaarin edetessä. Kiitokset myös Hanna Silénille avusta sekä opintosuunnitelija Mari Torikalle korvaamattomasta avusta opintosuunnitelman rakentamisessa ja uuden ja vanhan tutkintojärjestelmän yhditämisessä. Seinäjoella, 1. Toukokuuta 2012 Anti Huhtamäki antti.huhtamaki@tut.fi

IV Sisällysluettelo 1 JOHDANTO...6 2 JPEG...7 2.1 Väriavaruus...7 2.2 Diskreetti kosinimuunnos...7 2.3 Kvantisointimatriisi...8 2.4 Entropiakoodaus...9 3 JPEG2000...10 4 PAKKAUSMENETELMIEN VERTAILU...11 4.1 MSE ja SNR...11 4.2 SSIM...12 5 TULOKSET...15 5.1 Tuloskuvat ja visuaalinen tarkastelu...16 5.2 Vertailutulokset...23 6 YHTEENVETO...28 Lähteet...29 Liitteet...30

V TERMIT JA NIIDEN MÄÄRITELMÄT JPEG Joint Phographig Experts Group on asiantuntijaorganisaatio joka on kehittänyt samalla nimekllä tunnetun pakkausstandardin sekä sen seuraajan JPEG2000. Tässä dokumentissa JPEG-lyhenteellä viitataan pakkausstandardiin, ellei toisin mainita. jpg JPEG-pakattujen kuvien tiedostopääte. JPEG2000 JPEGin standardoima uudempi pakkausmenetelmä. j2k JPEG2000-pakattujen tiedostojen yleinen, muttei ainoa tiedostopääte. MSE Mean Squared Error eli keskineliövirhe on laskennallinen virheenmittausmenetelmä. SNR Signal-to-Noise Ratio eli signaalikohinasuhde on virheenlaskentamenetelmä jolla kuvankäsittelyssä tarkoitetaan virhemäärää verrattuna alkuperäiseen kuvaan. SSIM Structural Similarity Index on edistyneempi kuvan virhearviointimenetelmä jonka voisi suomentaa rakenteelliseksi samankaltaisuudeksi. Tässä dokumentissa käytetään kuitenkin englanninkielistä nimitystä. ISO International Organization for Standardization DCT Discrete Cosine Transform, diskreetti kosinimuunnos. Laskennallinen tapa muuttaa kuvadata spatiaaliseen taajuustasoon.

6 1 JOHDANTO Digitaalitekniikan yleistyessä 1980-luvulla ja aiemminkin, alkoi levitä ajatus valokuvien säilyttämisestä, muokkaamisesta ja lopulta kuvaamisesta digitaalisena. Ongelmaksi muodostui kuitenkin heti alkuvaiheessa riittävän laadukkaan ja suuren kuvan tallentamiseen tarvittavan datan määrä. Pakkaamattomat kuvatiedostot (bmp, tiff, raw) ovat hitaita käsitellä ja lähettää esimerkiksi verkon yli joten data täytyy esittää pakatussa muodossa. Menetelmät voidaan jakaa kahteen yleiseen ryhmään, häviöttömiin ja häviöllisiin. Häviöttömissä menetelmissä (gif, png) käytetään hyväksi datan redundanssia pakkaamiseen ja alkuperäinen kuva on täysin palautettavissa. Häviöllisessä pakkauksessa (jpg, j2k) datasta poistetaan vähemmän tärkeitä osia jolloin päästään hyvään pakkaustiheyteen. Kansainvälinen standardiorganisaatio ISO alkoi työskentelyn asian parissa jo 1983 ja vuonna 1986 perustettiin Joint Photographic Experts Group, joka tunnetaan lyhenteellä JPEG. Useimmille ihmisille lyhenteestä tulee mieleen jpg, joka on tiedostopääte. Mainittu tiedostopääte viittaa JPEGin alunperin vuonna 1992 julkaisemaan pakkausstandardiin, joka tunnetaan siis samalla JPEG-nimellä. Pakkausstandardi perustuu diskreettiin kosinimuunnokseen ja on periaatteeltaan säilynyt samana, vaikka päivityksiä standardiin on tullut silloin tällöin ja on tulossa edelleen. JPEGin käyttämä pakkausmetodi sisältää kuitenkin omat rajoitteensa ja heikkoutensa, kuten mikä tahansa häviöllinen pakkausmenetelmä. Siksi jo 1990-luvulla JPEG alkoi kehittämään seuraavaa standardia ja ensimmäinen julkaistu standardi nimettiin julkaisuvuoden perusteella JPEG2000:ksi. JPEG2000:en häviöllisen pakkauksen ytimessä on kosinimuunnoksen sijaan diskreetti wavelet -muunnos. JPEG2000 ei kuitenkaan edelleeenkään ole kovinkaan yleisesti käytössä ja vain muutamat erikoissovellukset ovat ottaneet sen käyttöön. Esimerkkeinä mainittakoon WMO:n meteorologisen datan maailmanlaajuiseen levitykseen tarkoitettu GRIB2 -tiedostomuoto [1]. JPEG2000:en odotetaan myös lyövän läpi lääketieteellisissä kuvissa. Kuitenkaan digitaaliset kamerat eivät JPEG2000-kuvia tuota, eikä niille ole selaintukea. Monet halvemmat tai ilmaiset kuluttajan kuvankäsittelyohjelmat ovat vasta viimeaikoina sisällyttäneet JPEG2000:en toimintoihinsa, mutta muutama testattu ohjelma ei toiminut kovin hyvin niiden kanssa, eikä pakkaaminenkaan ollut erityisen hyvää. Tässä työssä kuvien pakkaukseen käytettiin Matlab-ohjelmistoa, jonka sisäiset funktiot suoriutuvat pakkaamisesta erinomaisesti ja ovat verrattain helppokäyttöisiä. Tässä työssä tutkitaan JPEG:in ja JPEG2000:en laadullisia ja tehollisia eroja kuvanpakkauksessa. Kuvien laatua arvioidaan sekä visuaalisesti että laskennallisin menetelmin. Samalla kiinnitetään huomiota tehokkuuteen eli saavutettuihin pakkausuhteisiin. Aluksi tutustutaan kuvanpakkauksen menetelmiin hieman tarkemmin, mutta kuitenkin melko pintapuolisesti, koska se ei ole tämän työn pääasia. Yhteenvedossa arvioidaan yleisesti pakkausmetodien eroja sekä JPEG2000-menetelmän mahdollisia sovellutuksia ja arvioidaan syitä miksi se ei ole saavuttanut laajempaa käyttöä ja tunnettuvuutta.

7 2 JPEG Tässä kappaleessa tutustumme hieman tarkemmin JPEG-pakkaukseen. Pakkaus aloitetaan väriavaruuden muutoksella jonka tulokset alinäytteistetään. Tämän jälkeen esitellään pakkauksen tärkein osa eli diskreetti kosinimuunnos. Lopuksi esitellään saatujen kosinikertoimien käsittely, johon kuuluu kvantisointi, zig-zag -skannaus sekä kertoimien häviötön pakkaus. 2.1 Väriavaruus Pakkaamattomassa kuvadatassa kuva on esitetty kolmen värin yhdistelmänä (RGB). Tämä ei johtaa kuitenkin datan redundanssiin, jota voidaan vähentää tekemällä muuntamalla kuvadata YCbCr-muotoon, jossa Y tarkoittaa luminanssia ja Cb sekä Cr krominanssikomponentteja. On huomattava että YCbCr ei ole absoluuttinen väriavaruus vaan tapa koodata RBG-informaatiota. Tärkein syy muunnokselle on ihmissilmän erottelukyky. Emme erota värisävyeroja niin hyvin kuin kirkkauseroja, joten tällä muunnoksella saadaan esitystapa jossa kirkkaus- ja väri-informaatio esitetään erillään. Tapoja muutoksen tekemiselle on useampia, mutta ITU on määritellyt JPEGille omansa, joka tapahtuu seuraavien kaavojen mukaisesti [2, s.3]. Muunnoksen jälkeen suoritetaan alinäytteistys. Koska ihmisen näkö on herkkä kirkkauden muutoksille, Y-arvoja ei alinäytteistetä, mutta krominanssiarvot voidaan alinäytteistää. Tämänkin operaation voi suorittaa useilla tavoilla. Yleisimpiä tapoja merkitään 4:4:4 (ei alinäytteistystä), 4:2:2 (alinäytteistys kertoimella 2 horisontaalisesti) sekä 4:2:0 (alinäytteistys kertoimella 2 molempiin suuntiin. Kuvanpakkauksessa yleisin käytetty tapa on 4:2:0 ja näin pakattavan datan määrä saadaan puolitettua. Tätä seuraavat operaatiot tehdään jokaiselle komponentille erikseen. 2.2 Diskreetti kosinimuunnos Seuraavaksi saaduille arvoille suoritetaan diskreetti kosinimuunnos (tästä eteenpäin DCT). DCT:n suorittamista varten kuvadata jaetaan 8x8 pikselin blokkeihin. Kuvadatan arvot ovat tässä vaiheessa välillä [0,255] joka muokataan väliksi [-128,127] vähentämällä jokaisesta arvosta 128. Näin data keskittyy arvon nolla ympärille. Kaksiulotteinen DCT suoritetaan seuraavan kaavan mukaan: Kaavassa gx,y on pikselin arvo koordinaateissa (x,y), ja α(u),α(v) ovat normalisointikertoimet, joiden arvot ovat (sama kaava myös v:lle): DCT:n tuloksena on matriisi, joka esittää blokin sisällön spatiaalisina taajuuksina. Blokin arvo kohdass (1,1) on DC-komponentti ja muut ovat AC-komponentteja.

8 2.3 Kvantisointimatriisi Tähän mennessä suoritetut operaatiot ovat häviöttömiä laskentatarkkuuden rajoissa. Varsinainen häviöllinen pakkaus tapahtuu suorittamalla DCT-kerroinmatriisille kvantisointi. Kvantisoinnissa kerroinmatriisi jaetaan erityisella kvantisointimatriisilla pisteittäin. JPEG:ssä käytettävä kvantisointimatriisi luminanssiarvoille on esitetty alla [3, s.143]: Kvantisointimatriisin arvoista nähdään että jakajat ovat suurempia oikealle ja alaspäin mentäessä. Näin ollen kvantisointi korostaa pienempiä taajuuksia ja heikentää suurempia. Syy menettelyyn on ihmisen näön ominaisuuksissa. Ihminen näkee hyvin kirkkauden muutokset laajemmilla alueilla mutta silmän erottelukyky korkean taajuuden pienessä muuntelussa on huono. Suurin osa matriisin alemman diagonaalin kertoimista on kvantisoinnin jälkeen arvoltaan nolla. Alla esimerkki tulosmatriisista.

9 2.4 Entropiakoodaus Lopuksi saadut kertoimet pakataan entropiakoodaukseksi. Entropiakoodauksessa -skannauksella, joka on esitetty kuvassa 2.1. häviöttömällä pakkauksella jota kutsutaan kertoimet ensin järjestetään ns. zig-zag Kuva 2.1 Zig-zag -skannauksen periaate Katsomalla aiemmin esitettyä esimerkkiä tulosmatriisia nähdään motiivi zig-zag -skannaukselle. Matriisissa suuremmilla taajuuksilla on paljon nollia, joten järjestämällä matriisi tällä tavalla saadaan pitkiä ketjuja nollia, jolloin kertoimet voidaan pakata RLE-koodauksella. RLEkoodauksessa (run length encoding) muodostetaan koodisanoja jotka voivat olla esimerkiksi muotoa: (nollien määrä, nollasta poikkeava arvo, koodibitti). Näin säästetään tilaa peräkkäisten nollien esittämisessä. Lisäksi JPEG käyttää Huffman-koodausta matriisin arvoille. Huffman-koodausta varten JPEG:llä on erityinen koodisana EOB, jolla katkaistaan sekvenssi kun loput arvot ovat nollia. Huffman-koodauksessa pakattaville arvoille määritetään vaihtuvan pituiset symbolit, joiden pituus riippuu arvon esiintymistodennäköisyydestä.

10 3 JPEG2000 Tässä kappaleessa tutustumme pintapuolisesti JPEG2000-pakkauksen ytimessä olevaan wavelet-muunnokseen. JPEG2000-pakkauksessa kuvalle suoritetaan väriavaruuden muunnos samaan tapaan kuin JPEG:ssä. Tämän jälkeen kuva jaetaan tiileihin (tiles), joille suoritetaan wavelet- eli aallokemuunnos. Wavelet-muunnoksessa data muodostuu lokaaleista osafunktioista, toisin kuin DCT:ssä, jossa signaali on jatkuvien funktioiden lineaarikombinaatio. Lyhyesti sanottuna aallokemuunnos tehdään suodattamalla syötesignaali käyttäen kantafunktiosta johdettujen aalloke- ja skaalausfunktioiden eri tavalla skaalattuja ja aika-avaruudessa siirrettyjä variaatioita. Kuvassa 3.1 on esitetty häviöttömässä pakkauksessa käytetty CDF/3-wavelet. Waveletmuunnos tehdään lähdedatalle vertikaalisesti, horisontaalisesti ja diagonaalisesti. Näin saadaan kerroinmatriiseja, jotka voidaan visuaalisesti esittää kuvan 3.2 tavoin. JPG:n tapaan kertoimet kvantisoidaan ja pakataan. Kuva 3.1 CDF3/5 wavelet Kuva 3.2 Esimerkki JPEG2000:ssa käytetystä wavelet-muunnoksesta.

11 4 PAKKAUSMENETELMIEN VERTAILU Tässä raportissa käytetään pakkauksen tuloksena saatuihin kuviin visuaalisen arvioinnin lisäksi kolmea laskennallista metriikkaa jotka esitellään tässä kappaleessa. Ensin esitellään yleisesti tunnetut keskineliövirhe (tästä eteenpäin MSE) sekä signaalikohinasuhde (tästä eteenpäin SNR). Näiden lisäksi käytetään rakenteellista samankaltaisuutta mittaavaa Structural Similarity Indexiä (tästä eteenpäin SSIM) joka on erityisesti kuvien laadun arviointiin kehitetty metriikka. 4.1 MSE ja SNR MSE ja SNR ovat yleisesti käytössä olevia ja yksinkertaisia virheenarviointimenetelmiä. Niitä voidaan kutsua myös objektiivisiksi laatukriteereiksi, koska erotus alkuperäisen ja tuloskuvan välillä voidaan ilmaista näiden välisenä funktiona. Erotuksena siis subjektiiviselle arvioinnille jossa esimerkiksi esitettäisiin koeryhmälle erilaisia kuvia annettaisiin heidän arvioida kuvien laatua. Siten jos I(i, j) on alkuperäinen kuva ja K(i, j) pakattu kuva, virhe e(i, j) näiden välillä voidaan määritellä seuraavasti [4, s4.19]: e(i,j ) = K(i, j) I(i, j) Täten kokonaisvirheeksi tulee [4, s.419]: jossa kuvat ova MxN kokoisia. Keskineliövirhe lasketaan kokonaisvirheestä seuraavasti [4, s419]: Keskineliövirheen avulla voimme laskea signaalikohinasuhteen, josta käytetään termiä peak signal-to-noise ratio. Käytännössä tämä tarkoittaa signaalin suurimman vahvuuden ja laatua heikentävän kohinan suhdetta. Koska dynaaminen alue on usein hyvin suuri, esitetään arvo tavallisesti logaritmisella desibeliasteikolla. Näin PSNR-arvo (viittaan tekstissä muualla lyhenteellä SNR) saadaan seuraavasti: missä n on pikseliä kohden käytettyjen bittien määrä. Tyypilliset arvot häviöllisessä kuvan- ja videonpakkauksessa ovat 30 ja 50dB:n välillä, jossa suurempi arvo on siis parempi. [5, s.155] Hyväksytty arvo häviölliselle siirrolle on arvioitu olevan 20 ja 25dB:n välillä. [6]

12 4.2 SSIM Edellä esitellyt menetelmät ovat houkuttelevia, koska ne ovat laskennallisesti yksinkertaisia ja niillä on selkeä fysikaalinen vastine ja ovat siten käteviä työkaluja laadun tarkkailuun ja arviointiin. Kuitenkin niillä on selkeitä heikkouksia kuvanlaadun arvioinnissa. Esimerkiksi niin sanottu salt & pepper -kohina voi olla erittäinkin häiritsevää mutta ei välttämättä tuota suuria virhearvoja. Näin onkin kehitetty menetelmiä joissa pyritään mittaamaan ihmisen havainnoimia asioita ja virheitä, muutoksia kirkkaudessa, kontrastissa ja rakenteessa. Tässä työssä käytetään Structural Similarity Index -metriikkaa (tästä eteenpäin SSIM). Ensin esitetään lyhyesti menetelmä ja sen kaaviokuva ja sen jälkeen esimerkeillä havainnollistetaan menetelmien eroja. Tampere Image Database 2008 -julkaisussa vertailtiin korrelaatiota eri virhearvoille ja ihmisen havainnoille. SSIM metriikalle korrelaatio oli 0.853 kun MSE ja PSNR jäivät arvoon 0.525 [7, s.11] Kirkkaus, kontrasti ja rakenne ovat lähes toisistaan riippuvia arvoja joiden muutoksia menetelmässä pyritään mittaamaan. Kirkkaus eli intensiteetti lasketaan koko kuvan keskiarvona ja vertaillaan kuvien välillä. Kirkkauden keskiarvon vähentämällä kuvasta saadaan esiin kuvan kontrasti, jonka keskihajontaa menetelmässä vertaillaan. Keskihajonnalta jakamalla normalisoidaan kuva ja tehdään rakennevertailu saaduista tuloksista. Näitä arvoja vertaillaan kuvien kesken ja yhdistetään ne halutuilla painoarvoilla lopullisen tuloksen saamiseksi. Tuloksena saadaan luku nollan ja yhden väliltä, jossa arvo 1 tulee kahdella identtisellä kuvalla. Kuvassa 5.1 on esitetty laskennan lohkokaavio. [8, s.604] Kuva 5.1 SSIM-menetelmän laskentakaavio.

13 Seuraavaksi demonstroimme kahdella kuvalla SSIM:n ja MSE:n eroa. Kuvassa 5.2 [9] näemme Einsteinin kuvan ensin alkuperäisversiona ja sen jälkeen eri tavoin muutettuna. Kaikilla muutetuilla kuvilla MSE-arvo alkuperäiseen verrattuna on suunnilleen sama, mutta SSIM-arvo vaihtelee huomattavasti, kuten myös visuaalinen kuvien laatu. Kuva 5.2 Esimerkki MSE:n heikkoudesta kuvien laadun analysointiin. Vasemmalla ylhäällä alkuperäinen kuva. Ylhäällä keskellä olevassa kuvassa pikselien keskiarvoa on muutettu ts lisätty tai vähennetty joka pikselistä sama arvo. Kuvan visuaalinen laatu ei heikkene, vaikka kuvan kirkkaus on havaittavasti muuttunut, mikä näkyykin muuttuneessa SSIM-arvossa. Kuitenkin MSE sa melko suuren arvon. Oikealla ylhäällä on muutettu kuvan kontrastia ja havainto on jälleen sama. MSE saa korkean arvon vaikka kuva on visuaalisesti hyvä, oikeastaan parempi. SSIM-arvo ei ole niin hyvä koska kontrastimuutos on selkeä. Alarivillä kuvaan on ensin lisätty salt & pepper -kohinaa, keskellä kuva on sumennettu ja oikealla pakattu korkealla pakkaussuhteella. Näistäkin saamme samankaltaisen MSE-arvon vaikka kuvan laatu heikkenee selvästi vasemmalta oikealle, mikä näkyykin SSIM-arvoissa varsin hyvin.

14 Seuraavaksi kuvassa 5.3 [9] tarkastelemme menetelmää, jossa referenssikuvalle luodaan ns. EMHP, equal-mse hypersphere, jossa referenssikuvaan ensin lisätään kohinaa ja lasketaan sille MSE-arvo ja SSIM-arvo. Sen jälkeen on generoitu kuvia joilla on sama MSE mutta etsitty parasta ja heikointa SSIM-arvoa. Kuva 5.3 [x+5]kuvassa esimerkkejä samalla MSE-arvolla generoiduista kuvista, parhaan ja huonoimman SSIM-arvon omaavien kuvien visuaalinen ero on todellakin erittäin iso. Kaikki tämä ei kuitenkaan tarkoita etteikö MSE- ja SNR-arvoille olisi käyttöä vaikka ne eivät kuvien vertailussa parhaita mahdollisia metriikoita olekkaan. Tässä työssä pääasia on kuitenkin vertailla kahta erilaista kuvanpakkausmenetelmää, jolloin on tärkeää pystyä vertailemaan niitä myös yksinkertaisilla fysikaalisilla parametreilla.

15 5 TULOKSET Tässä kappaleessa esitellään pakkauksen tuloksena saatuja kuvia ja arvioidaan tuloksia ensin visuaalisesti ja sen jälkeen määriteltyjen vertailumenetelmien avulla. Koska käytetyt kuvat ovat isoja mutta dokumentissa niiden visuaalinen tarkkailu ei ole kovin hyvin mahdollista on sopivien esimerkkien valinta vaikeaa. Lisäksi havaittiin, että jpg-pakkauksella huonoimmalla laadulla saadun kuvan kokoinen tiedosto on j2k-pakkauksella aivan kelvollinen. Siksi j2k-pakkaus suoritettiin myös suuremmilla pakkaussuhteilla parempien esimerkkien saamiseksi. Jokaisesta testikuvasta näytetään kahdesta kolmeen esimerkkiä jotka on valittu pakkausvirheiden esiin tuomiseksi. Yleisenä havaintona voi todeta että jpg-pakkaus laatuarvolla 40 on useimmiten käyttökelpoinen laadultaan. Havainto on mielenkiintoinen koska useimmat ohjelmat käyttävät oletuksena laatuarvoa 90, yhtenä poikkeuksena Matlab jossa oletuksena on 75.

16 5.1 Tuloskuvat ja visuaalinen tarkastelu Ensimmäisen testikuvan esimerkeissä demonstroidaan ero huonoimman jpg-laadun ja saman kokoisen j2k-kuvan eroja. Kuvista näemme heti, kuinka huonoimman laadun jpg on täysin blokkiutunut ja siten käyttökelvoton. Vastaavalla pakkaussuhteella saatu j2k-kuva sitävastoin on erittäin käyttökelpoinen ja saavutettu pakkaussuhde on 1:177. Kuva 6.1 Testikuva 1, jpg laatu 1, 166kt Kuva 6.2 Testikuva 1, j2k, 165kt

17 Testikuvasta 2 tarkkailemme jpg-kuvaa laadulla 20 ja j2k-kuvaa suurimmalla testatulla pakkaussuhtella. Jpg-pakkauksella terävät alueet säilyvät hyvin mutta epäterävät alueet alkavat blokkiutumaan jo laadulla 20 melko näkyvästi. J2k-pakkaus erittäin suurella, 1:885 pakkaussuhteella säilyttää nämä alueet varsin hyvin, vaikka reunoissa näkyy pakkausvirheitä. Kuva 6.3 Testikuva 2, jpg laatu 20, 261kt Kuva 6.3 Testikuva 2, j2k, 33kt

18 Testikuvasta 3 valitsemme myös laadun 20 jpg-kuvalle sekä suuren pakkaussuhteen j2kkuvalle. Jpg-kuvassa näemme varsin tyypillisen jpg-artefaktin. Lähes yksiväriseltä näyttäneessä taustassa hitaat sävymuutokset ovat nyt portaittain muuttuvia. Ilmiö tunnetaan nimellä contouring. Kuvan yksityiskohdat ovat muuten säilyneet hyvin. 1:885 pakkaussuhteen j2k-kuvassa yksityiskohdat ovat sumentuneita ja terävissä reunat ovat melko sotkuisia. Kuva on kuitenkin silmälle miellyttävämpi koska contouring-efektiä ei j2k-pakkauksessa tule. Kuva 6.5 Testikuva 3, jpg laatu 20, 245kt Kuva 6.6 Testikuva 3, j2k, 33kt

19 Testikuvasta neljä tarkkaillaan taas eroa huonoimman laadun jpg-kuvan ja vastaavan j2kkuvan laadussa. Jälleen jpg-kuvasta ovat kaikki yksityiskohdat kadonneet ja kuva on täysin blokkiutunut. Kuvien pakkaussuhde on 1:187 eli aiempaa esimerkkiä suurempi. Laadullisesti alempaa kuvaa vastaava tai sitä lähellä on jpg laadulla 40, jolloin tiedoston koko 212kt. Kuva 6.7 Testikuva 4, laatu 1, 157kt Kuva 6.8 Testikuva 4, j2k, 156kt

20 Tästä kuvasta otamme kolmanneksi esimerkiksi suurimman testatun pakkaussuhteen kuvan. Huomaamme että kuvan laatu on edelleen varsin hyvä, vaikka kuva on pakattu suhteella 1:940. Laajat yksiväriset alueet pakkautuvat j2k:lla todella tiiviisti. Kuva 6.8 Testikuva 4, j2k, 31kt

21 Viimeisestä testikuvasta valitsin suurimman pakkaussuhteen j2k-kuvan ja yritin silmämääräisesti etsiä vastaavanlaatuisen jpg-kuvan. Testikuvassa on paljon etenkin jpgpakkauksessa artefakteja tuottavia alueita sekä laajoja yksivärisiä alueita ja pakkausmetodien ero korostuu kuvassa voimakkaasti. J2k-pakkaus saa lähes 38 megatavun tif-kuvan kelvolliseksi 225 kilotavuun, eli pakkaussuhteeksi tulee 1:170 kun jpg-kuvan koko on yli megatavun. Suureen tulosteeseen kuva ei ole kelvollinen joten arvioitaessa j2k:n hyödyllisyyttä on käyttötarkoitus myös tärkeä. Kuva 6.9 Testikuva 5, j2k,223kt

22 Kuva 6.10 Testikuva 5, jpg laatu 40, 1255kt

23 5.2 Vertailutulokset Tässä kappaleessa esitellään MSE-, SNR- ja SSIM- menetelmillä lasketut vertailutulokset alkuperäisten ja pakattujen kuvien välillä. Näin saadaan aiemman visuaalisen arvion tueksi myös objektiivista laskennallista tietoa pakkauksen vaikutusta kuvan laatuun. Ensin jokaiselle tuloskuvalle laskettiin virhearvot verrattuna alkuperäiseen kuvaan. Nämä arvot esitetään kuvaajina pakkaussuhteeseen verrattuna seuraavan sivun kuvassa 6.11. Vertailua jatkettiin laskemalla virheiden keskiarvot jolloin saadaan parempi yleiskuva pakkauksen tuottamista virheistä. Ensin tarkastelemme virhearviokäyriä kuvakohtaisesti. Huomio kiinnittyy ensin selkeästi muista kuvista poikkeaviin käyriin. Jokaisessa kuvaajassa erottuvat testikuvien 4 ja 5 kuvaajat. Testikuva 4 ei virhearvoilta poikkea merkittävästi muista, mutta saavutettu pakkaussuhde jää huomattavasti pienemmäksi ja siksi näyttääkin kuin käyrä loppuisi kesken. Testikuvan 5 virhearvot taas ovat huomattavasti muita pienemmät, mikä johtuu kuvan laajasta mustasta alueesta. Saavutettu pakkaussuhde ei kuitenkaan ole merkittävästi muita kuvia suurempi. Ero pakkausmenetelmien välillä on kuitenkin erittäin selvästi havaittavissa. MSE-käyriä tarkastellessa huomataan että edes suurimmalla pakkaussuhteella JPEG2000 -pakkauksella virhearvo jää alle 50:en kun JPG-pakkauksella arvot nousevat huomattavasti korkeammalle. On kuitenkin huomioitava aiemman perusteella että kaikkein pienimpiä laatuarvoja lukuunottamatta MSE ei kuitenkaan nouse paljon korkeammalle. Mielenkiintoista on myös käyrien erilainen muoto. Pienemmällä pakkaussuhteella JPEG2000 -pakkauksella MSE-arvot ovat erittäin pieniä, nousevat sitten jyrkästi jonka jälkeen nousu tasoittuu jatkuen melko tasaisesti tässä käytettyjen pakkaussuhteiden suurimpiin arvoihin asti. Mikäli pakkaussuhteita nostettaisiin vieläkin reilusti, nähtäisiin todenäköisesti JPG- menetelmän tuloksien kaltainen jyrkempi nousu. Käytännössä kaikki edellämainittu pätee myös SNR- arvoihin, paitsi että käyrä on lakeva. Huomio kiinnittyy JPG-pakkauksen tuottamiin hieman epätasaisesti eteneviin käyriin verrattuna JPEG2000 -menetelmän tuottamiin hyperbeliä muistuttaviin.ssim -arvoissa trendit ovat samanlaisia. Merkittäviä huomioita on ainakin kaksi. Testikuvaa 4 lukuun ottamatta JPEG2000 -pakattujen kuvien SSIM -arvo pysyy yli 0.96:en suurimmallakin pakkauksella ja alle 200 pakkaussuhteilla yli 0.99:än.

24 Kuva 6.11 Virhearvioiden tuloskäyrät pakkaussuhteisiin verrattuna. Tulosten vertailua vaikeuttaa muuttuvat arvoalueet akseleilla. Siksi onkin hyödyllistä laskea yksittäisten kuvien tuloksista keskiarvoja.

25 Seuraavaksi esitetään virhearvoista lasketut keskiarvot. Ensin muutama huomio laskennan suorituksesta. Koska yksittäisiä laskettuja arvoja vastaavat pakkaussuhteet eivät täsmää, emme voi suoraan laskea keskiarvoa näistä luvuista vaan joudumme interpoloimaan arvot tulosten väliin. Tämän lisäksi huomattavasti muista poikkeavien pakkaussuhteiden vuoksi on testikuva 5 jätetty tästä vertailusta koska joutuisimme ekstrapoloimaan runsaasti arvoja jotka saattaisivat vääristää tuloksia runsaasti. Vertailussa on lisäksi käytetty JPEG2000 -pakkauksesta ainoastaan pakkaussuhteita jotka saavutettiin myös JPG -pakkauksella. Näin tuloskäyrät tulevat selkeämmin luettaviksi. Kuva 6.12 MSE-arvojen keskiarvot. Y-akselilla MSE-arvot on rajattu koska suuremmilla pakkaussuhteilla arvot ovat huomattavan korkeita ja tekisivät käyrästä vaikeammin luettavan Kuvassa 6.12 on esitetty MSE-arvoista lasketut keskiarvokäyrät. Aiemmin tehdyt huomiot tulevat tässä selkeästi esiin mutta selvemmin huomaamme myös että pienistä pakkaussuhteista alkaen JPEG2000 -pakkauksen tulokset ovat parempia ja ero kasvaa pakkaussuhteen kasvaessa.

26 Kuva 6.13 SNR-arvojen keskiarvokäyrät. Kuvassa 6.13 esitetään SNR-arvoista lasketut keskiarvokäyrät. Tulos tukee hyvin aiempia havaintoja, joskin hieman yllättäen pienillä pakkaussuhteilla ero on suurempi JPEG2000:en hyväksi ja tasoittuu sitten kunnes pakkaussuhteen ylittäessä sadan alkaa ero taas kasvaa nopeasti. JPEG2000:en tulokset jatkuvat erittäin tasaisena, joten SNR-arvot pysyvät hyvissä lukemissa erittäin suurillakin pakkaussuhteilla.

27 Kuva 6.14 SSIM-arvojen keskiarvot. Viimeinen tuloskuvamme SSIM-arvoista lasketut keskiarvot. Pakkaussuhteiden erot tulevat kaikkein selkeimmin esiin tässä kuvaajassa. JPEG2000 -pakkauksen tulokset säilyvät lähes suorana viivana kun JPG-pakkauksella nähdään heikentymistä jo aikaisessa vaiheessa ja yli sadan pakkaussuhteilla tulos alkaa laskea rajummin. On muistettava että suurin tässä käytetty pakkaussuhde on korkein JPG-pakkauksella saavutettavissa oleva. Tällä pakkaussuhteella JPG-kuva on millä tahansa mittarilla jotakuinkin käyttökelvoton kun JPEG2000 saavuttaa visuaalista samankaltaisuutta mittaavalla vertailulla edelleen erinomaisia arvoja.

28 6 YHTEENVETO Työssä vertailtiin kahta digitaalista kuvanpakkausstandardia, vanhempaa kaikkialla käytettyä JPEGiä sekä sen seuraajaa JPEG2000:a. Vertailussa käytettiin viittä erilaista testikuvaa, joille suoritettiin pakkaus erilaisilla pakkaussuhteilla. Tuloksena saatuja kuvia tarkasteltiin visuaalisesti sekä kolmella erilaisella laskennallisella menetelmällä. Molemmilla vertailutavoilla ja jokaisella laskennallisella menetelmällä havaitaan JPEG2000:en suoriutuvan pakkaamisesta edeltäjäänsä paremmin. Erityisesti suuremmilla pakkaussuhteilla JPEG-pakattujen kuvien laatu kärsii kun JPEG2000-kuvat ovat vielä hyviä. Itse asiassa tuloksista havaitaan että JPEG2000 pakkauksella voidaan käyttää selkeästi suurempaa pakkaussuhdetta kuin mihin JPEG pystyy ja silti kuvien laatu säilyy hyvänä tai ainakin kohtuullisena. Tästä herääkin kysymys että miksi näinkin selkeästi tehtävästään paremmin suoriutuva koodaus ei ole vielä laajemmalle levinnyt. Tietoverkkojen näkökulmasta kyseessä on eräänlainen muna-kana -ongelma. Kameravalmistajien ei kannata lisätä ominaisuutta kameroihin koska ohjelmat tukevat niitä huonosti ja selaimet vielä vähemmän. Toisaalta selaintuesta ei ole hyötyä kun sisällöntuottajat eivät materiaalia tässä muodossa julkaise ja niin edelleen. Uskon kuitenkin että selaimiin ainakin ladattavana lisäosana on tulossa JPEG2000-tuki, joka saattaa avata tietä muillekin sovelluksille. Luonnollisesti menetelmä on pysynyt myös melko tuntemattona ja siten sitä ei osata vaatia. Tärkeämmäksi syyksi arvioin kuitenkin JPEG2000-algoritmin kompleksisuuden. JPGalgoritmi on verraten yksinkertainen ja suoraviivainen eikä kuluta kovin paljon resursseja. JPGpakkauksen kesto on myös vähemmän riippuvainen kuvan sisällöstä. Testikuvien pakkaus samankokoisille kuville kulutti 7,47-7,81 sekuntia kun vastaavilla kuvilla JPEG2000 vei 8,97-21,48 sekuntia. Algoritmin hankaluus johtaa tietenkin siihen että sovelluskehittäminen on työlästä ja vaatii paljon erikoisosaamista. Kokeilemillani ilmaisohjelmilla JPEG2000-kuvien katselu on tuskallisen hidasta pienemmilläkin kuvilla ja esikatselukuvien lataaminen oli myös hidasta, vaikka edistyneessä JPEG2000-ohjelmassa kaikkea kuvadataa ei esikatselukuvan luomiseksi tarvi edes ladata. Pakkauksen hyöty on kuitenkin kiistaton mutta käyttökelpoisuus ainakin nykyisellään riippuu vahvasti sovellusympäristöstä. Esimerkiksi arkistointityyppinen tilanne, jossa kuvia otetaan ja tallennetaan paljon, mutta katsellaan vain tarvittaessa, hyötyisi nähdäkseni JPEG2000-pakkauksesta paljon. JPEG2000-pakkauksella pystytään todennäköisesti ainakin 50% tilansäästöön ja jos verrataan isommissa pakkaussuhteissa (>100) laatu ei kärsi vaan ennemmin paranee.

29 Lähteet [1] National Weather Service Climate Prediction Center http://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/ [2] Hamilton E, JPEG File Interchange Format, version 1.02, http://www.jpeg.org/public/jfif.pdf [3] JPEG Standard (JPEG ISO/IEC 10918-1 ITU-T Recommendation T.81), http://www.w3.org/graphics/jpeg/itu-t81.pdf [4] Gonzalez, R. Woods, R. Digital Image Processing: Second Edition, Prentice-Hall 2002 [5] Welstead, S. Fractal and wavelet image compression techniques, SPIE Publication 1999 [6] Thomos, N., Boulgouris, N. V., & Strintzis, M. G. Optimized Transmission of JPEG2000 Streams Over Wireless Channels. IEEE Transactions on Image Processing, 15 (1). 2006 [7] N. Ponomarenko, V. Lukin, A. Zelensky, K. Egiazarian, M. Carli, F. Battisti, "TID2008 - A Database for Evaluation of Full-Reference Visual Quality Assessment Metrics", Advances of Modern Radioelectronics, Vol. 10, pp. 30-45, 2009. [8] Z. Wang, A. C. Bovik, H. R. Sheikh and E. P. Simoncelli, "Image quality assessment: From error visibility to structural similarity," IEEE Transactions on Image Processing, vol. 13, no. 4, pp. 600-612, Apr. 2004. [9] The SSIM Index for Image Quality Assessment https://ece.uwaterloo.ca/~z70wang/research/ssim/

30 Liitteet Liitteenä 1 on työssä käytetyt testikuvat sekä niiden lyhyt esittely. Testikuvat 1-4 ovat kirjoittajan itse ottamia ja testikuva 5 on NASA:n julistetulostuksiin koulujen käyttöön tarkoitettu kuva. Kuvien ottamisessa ja valitsemisessa on haettu erityylisiä kuvia joissa on monipuolisesti esillä erilaisia taustoja, erilaisia syväterävyyksiä sekä erilaisia reunoja. Näin pyritään saamaan esiin pakkauksen tuomia artefakteja sekä korostamaan pakkausjärjestelmien eroja. Testikuvat 1-4 ovat kooltaan 3635x2736 pikseliä, noin 11 megapikseliä, ja bittikarttana tiedoston koko on hieman yli 29 megatavua. Testikuva 5 on tif-muotoinen, mitoiltaan 6125x4850 pikseliä ja noin 38 megatavua. Testikuva 1: Tässä kuvassa mielenkiintoisia kohtia ovat suorat linjat, edustalla olevan pelaajan peliasu sekä terävät reunat ja lisäksi lähes yksivärinen tausta.

31 Testikuva 2: Kuvan merkittävin piirre on erittäin kapea syväterävyysalue. Edustan ja taustan epäterävät alueet tuovat etenkin jpg- pakkauksessa artefakteja näkyville. Testikuva 3:Kuvassa yhdistyy lähes yksivärinen tausta runsaisiin teräviin reunoihin sekä yksityiskohtiin.

32 Testikuva 4: Kuvassa paljon loivia sävynmuutoksia ja yksityiskohtia sekä täysin yksivärinen tausta. Testikuva 5: Taiteilijan näkemys satelliitista sisältää paljon yksityiskohtia, pistemäisiä kohteita, tasaisesti muuttuvia värejä sekä epäteräviä alueita.

33 Liitteenä 2 dokumentissa on kuvien pakkaamiseen, analysointiin ja esitykseen kirjoitetun Matlabohjelman koodi. Koodi muodostuu pääohjelmasta jpg_j2k_vertailu.m jossa suoritetaan kuvien pakkaus ja analyysi. Tuloskuvat tulostetaan omassa alafunktiossa print_results.m, joka käyttää vielä omia alafunktioitaan creategraph.m sekä createinterpgraph.m. MSE- ja SNR-arvot lasketaan msesnr.m-funktiolla. Pääohjelma jpg_j2k_vertailu.m % jpg ja j2k-vertailu close all;clear all; cur = cd; %tallennetaan hakemisto sep = filesep; %tallennetaan järjestelmän hakemistoerotin addpath('c:\duuni\kandi\'); %lisätään ulkoisten funktioiden kansio hakuun testfolder = ['c:' sep 'duuni' sep 'kandi' sep 'testikuvat']; % Testausta varten käytettiin pienempiä testikuvia % testfolder = ['c:' sep 'duuni' sep 'kandi' sep 'testikuvat2']; cd(testfolder) %siirrytään testikuvakansioon % Kansiossa olevien tiedostojen ja kansioiden tiedot d = dir; % Säilytetään vain tiedostojen tiedot I=[]; for i=1:size(d,1), if d(i).isdir == 1, I =[I i]; end, end, d(i) = []; %ladataan testikuvat testimages = struct('im',{}); for i = 1:5 testimages(i).im = imread(sprintf('testikuva%d',i),... d(i).name(end-2:end)); end %suoritetaan konversiot ja tallennetaan koodatut kuvat omiin kansioihin % jpg for i=1:5 loc = ['jpg' num2str(i)]; [s, mess, messid] = mkdir(loc); cd(loc); tic % Otetaan prosessointiaika talteen for j=[1 5 10 15 20 30 40 50 60 75 90 100] imwrite(testimages(i).im,['im' num2str(i) 'laatu' num2str(j)... '.jpg'],'quality',j); end eval(['processing_time_jpg_im' num2str(i) ' = toc;']) % luetaan tiedostojen tiedot pakkaussuhteen määrittelyä varten index = dir; % Säilytetään vain tiedostojen tiedot K=[]; for k=1:size(index,1), if index(k).isdir == 1, K =[K k]; end, end, index(k) = []; %tallennetaan pakkaussuhteet

34 eval(['compression_ratios_img' num2str(i)... ' = d(i).bytes./ sort([index(1:end).bytes]);']); cd.. end disp('jpg-konversiot suoritettu') % tallennetaan pakkausuhteet yhteen muuttujaan comp_ratios = ceil([compression_ratios_img1;... compression_ratios_img2;... compression_ratios_img3;... compression_ratios_img4;... compression_ratios_img5]); for i=1:5 % jpg2000 loc = ['j2k' num2str(i)]; [s, mess, messid] = mkdir(loc); cd(loc); tic temp_ind=1; for j=[1 5 10 15 20 30 40 50 60 75 90 100] imwrite(testimages(i).im, ['im' num2str(i) 'laatu' num2str(j)... '.j2k'], 'CompressionRatio', comp_ratios(i,temp_ind)); temp_ind = temp_ind + 1; end eval(['processing_time_j2k_im' num2str(i) ' = toc;']) cd.. end disp('j2k-konversiot suoritettu') % lisätään suurempia pakkauskertoimia ja pakataan jpg2000-koodekilla comp_ratios2 = ceil(cat(2,comp_ratios(1:end,1)*[5 4 3 2 1.5 1.3 1.15],... comp_ratios)); for i=1:5 % jpg2000 loc = ['j2k' num2str(i)]; [s, mess, messid] = mkdir(loc); cd(loc); temp_ind=1; for j=[5 4 3 2 1.5 1.3 1.15] imwrite(testimages(i).im, ['im' num2str(i) 'ratio'... num2str(comp_ratios2(i,temp_ind))... '.j2k'], 'CompressionRatio', comp_ratios2(i,temp_ind)); temp_ind = temp_ind + 1; end cd.. end disp('loput j2k-konversiot suoritettu') % kerätään prosessointiajat vertailua varten proc_times = [processing_time_j2k_im1, processing_time_j2k_im2,... processing_time_j2k_im3, processing_time_j2k_im4,... processing_time_j2k_im5, processing_time_jpg_im1,... processing_time_jpg_im2, processing_time_jpg_im3,... processing_time_jpg_im4, processing_time_jpg_im5]; proc_times = reshape(proc_times, 5,2);

35 % Lasketaan MSE, PSNR ja SSIM cd(testfolder) %siirrytään testikuvakansioon MSEjpg = [];SNRjpg = []; SSIMjpg = []; MSEj2k = [];SNRj2k = []; SSIMj2k = []; for i=1:5 % lasketaan arvot ensin jpg-pakatuille kuville loctemp = ['jpg' num2str(i)]; cd(loctemp); % siirrytään dekoodatut kuvat sisältävään alikansioon % Kansiossa olevien tiedostojen ja kansioiden tiedot d = dir; % Säilytetään vain tiedostojen tiedot K=[]; for k=1:size(d,1), if d(k).isdir == 1,... K =[K k]; end, end, d(k) = []; for j=1:size(d,1) [mse,snr] = MSESNR(testimages(i).im, imread(d(j).name)); MSEjpg = [MSEjpg mse]; SNRjpg = [SNRjpg snr]; disp(['mse ja SNR kuvalle jpg' num2str(i) num2str(j) ' suoritettu']) [mssim, ssim_map] = ssim(testimages(i).im, imread(d(j).name)); SSIMjpg = [SSIMjpg mssim]; disp(['ssim kuvalle jpg' num2str(i) num2str(j) ' suoritettu']) end cd.. % Suoritetaan sama operaatio j2k-pakatuille kuville loctemp = ['j2k' num2str(i)]; cd(loctemp); % siirrytään dekoodatut kuvat sisältävään alikansioon % Kansiossa olevien tiedostojen ja kansioiden tiedot d = dir; % Säilytetään vain tiedostojen tiedot K=[]; for k=1:size(d,1), if d(k).isdir == 1,... K =[K k]; end, end, d(k) = []; for j=1:size(d,1) [mse,snr] = MSESNR(testimages(i).im, imread(d(j).name)); MSEj2k = [MSEj2k mse]; SNRj2k = [SNRj2k snr]; disp(['mse ja SNR kuvalle j2k' num2str(i) num2str(j) ' suoritettu']) [mssim, ssim_map] = ssim(testimages(i).im, imread(d(j).name)); SSIMj2k = [SSIMj2k mssim]; disp(['ssim kuvalle j2k' num2str(i) num2str(j) ' suoritettu']) end cd.. end cd.. % tulosten visualisointi omassa funktiossa print_results(msejpg, SNRjpg, SSIMjpg, MSEj2k, SNRj2k, SSIMj2k, comp_ratios, comp_ratios2); cd(cur) %palataan alkuperäiseen hakemistoon

36 funktio print_results.m function [] = print_results(msejpg, SNRjpg, SSIMjpg, MSEj2k, SNRj2k, SSIMj2k, comp_ratios, comp_ratios2); % Tulostetaan kuvien analyyseistä käyrät visuaalista vertailua varten % % Ensin tulostetaan kukin tulos kuvakohtaisesti pakkaussuhteen mukaan, sen % jälkeen vertailun helpotamiseksi tulostetaan keskiarvot eri tuloksista % siten että ensin MSE jpg ja j2k -kuvista ja niin edelleen. % Ensin muutetaan tulokset sopivan muotoiseksi matriisiksi ja järjestetään % arvot suuruusjärjestykseen. Sama tehdään pakkaussuhteille. MSEjpg = reshape(msejpg,12,5); MSEjpg = sort(msejpg,1, 'descend'); SNRjpg = reshape(snrjpg,12,5); SNRjpg = sort(snrjpg,1); SSIMjpg = reshape(ssimjpg,12,5); SSIMjpg = sort(ssimjpg,1); MSEj2k = reshape(msej2k,19,5); MSEj2k = sort(msej2k,1, 'descend'); SNRj2k = reshape(snrj2k,19,5); SNRj2k = sort(snrj2k,1); SSIMj2k = reshape(ssimj2k,19,5); SSIMj2k = sort(ssimj2k,1); compratios = sort(comp_ratios,2,'descend'); compratios2 = sort(comp_ratios2,2,'descend'); % Varsinainen graafin luominen tapahtuu omassa alafunktiossaan creategraph(msejpg, compratios, 'Keskineliövirheet JPG', 'MSE'); creategraph(msej2k, compratios2, 'Keskineliövirheet J2K', 'MSE'); creategraph(snrjpg, compratios, 'Signaalikohinasuhteet JPG', 'SNR'); creategraph(snrj2k, compratios2, 'Signaalikohinasuhteet J2K', 'SNR'); creategraph(ssimjpg, compratios, 'Structural Similarity Index JPG', 'SSIM'); creategraph(ssimj2k, compratios2, 'Structural Similarity Index J2K', 'SSIM'); % Luodaan näistä yksi kuva raporttia varten cd tuloskuvat, d=dir; d(1:2) = []; images = []; for i=[2 1] % ladataan MSE-kuvat ja yhdistetään im = imread(d(i).name); images = [images im] ; end temp = []; for i=[4 3] % ladataan SNR-kuvat ja yhdeistetään im = imread(d(i).name); temp = [temp im]; end images = [images;temp]; temp = []; for i=[6 5] % ladataan SSIM-kuvat ja yhdistetään im = imread(d(i).name); temp = [temp im]; end % lopuksi yhdistetään kaikki kuvat ja tallennetaan images = [images;temp]; imwrite(images, 'images.jpg'); cd..;

37 % Luodaan vertailukäyrät tulosten keskiarvoille. Koska pakkaussuhteet % vaihtelevat kuvittain, joudumme interpoloimaan arvoja oikeiden tulosten % väleihin. Tulosten keskiarvoihin ei lasketa viidettä testikuvaa koska % sen pakkaussuhteet poikkeavat niin paljon muista että tulokset vääristyi% sivät. Vertailun helpottamiseksi mukaan otetaan vain ensimmäiset 12 arvoa % j2k-kuvista. % % Suoritus omassa alafunktiossa createinterpgraph(compratios, compratios2(1:4,8:end), MSEjpg, MSEj2k(8:end,1:4),... 'Keskineliövirheet JPG vs J2K', 'MSE.') createinterpgraph(compratios, compratios2(1:4,8:end), SNRjpg, SNRj2k(8:end,1:4),... 'Signaalikohinasuhteet JPG vs J2K', 'SNR.') createinterpgraph(compratios, compratios2(1:4,8:end), SSIMjpg, SSIMj2k(8:end,1:4),... 'Structural Similarity Index JPG vs J2K', 'SSIM') Funktio creategraph.m function [] = creategraph(value, ratios, name, yname) h=figure;, % Kuvaan tulostetaan ensin lasketut arvot stem-funktiolla ja sen jälkeen % niiden perusteella piirretään käyrät. stem(ratios(1,:),value(:,1),'linestyle', 'none','marker','square'); hold on, a1 = plot(ratios(1,:),value(:,1)); hold on, stem(ratios(2,:),value(:,2),'linestyle', 'none','color','red','marker','square'); hold on, a2 = plot(ratios(2,:),value(:,2),'color','red'); hold on, stem(ratios(3,:),value(:,3),'linestyle', 'none','color','green','marker','square'); hold on, a3 = plot(ratios(3,:),value(:,3),'color','green'); hold on, stem(ratios(4,:),value(:,4),'linestyle', 'none','color','magenta','marker','square'); hold on, a4 = plot(ratios(4,:),value(:,4),'color','magenta'); hold on, stem(ratios(5,:),value(:,5),'linestyle', 'none','color','black','marker','square'); hold on, a5 = plot(ratios(5,:),value(:,5),'color','black'); % Asetetaan akselien raja-arvot sopiviksi axis([0 max(ratios(:))*1.05... min(value(:))*0.9 max(value(:))*1.05]) % legendin lisäämistä varten asetetaan käyrien LegendInformation pois % päältä, koska muuten jokainen tuloskäyrä näkyisi legendissä kahtena. a=[a1 a2 a3 a4 a5]; ag=hggroup; set(a,'parent',ag); set(get(get(ag,'annotation'),'legendinformation'),... 'IconDisplayStyle','off'); legend('pic 1','pic 2','pic 3','pic 4','pic 5','Location','Best') % Nimetään kuva sekä akselit title(name) xlabel('pakkaussuhde') ylabel(yname)

38 % tallennetaan tiedostoon [s, mess, messid] = mkdir('tuloskuvat'); cd tuloskuvat filename = [name '.png']; saveas(h, filename); cd.. Funktio createinterpgraph.m function [] = createinterpgraph(ratios1, ratios2, values1, values2, name, yname) % interpoloidaan ensimmäiset arvot for x=1:4 interpvalues1(:,x) = interp1(ratios1(x,:), values1(:,x),... 1:max(ratios1(:)), 'cubic','extrap'); end % Arvot täytyy järjestää sen perusteella mitä tuloksia tarkastellaan if yname == 'MSE.' interpvalues1 = sort(interpvalues1, 1, 'ascend'); elseif yname == 'SNR.' interpvalues1 = sort(interpvalues1, 1, 'descend'); elseif yname == 'SSIM' interpvalues1 = sort(interpvalues1, 1, 'descend'); end for x=1:4 interpvalues2(:,x) = interp1(ratios2(x,:),values2(:,x),... 1:max(ratios2(:)), 'cubic','extrap'); end if yname == 'MSE.' interpvalues2 = sort(interpvalues2, 1, 'ascend'); elseif yname == 'SNR.' interpvalues2 = sort(interpvalues2, 1, 'descend'); elseif yname == 'SSIM' interpvalues2 = sort(interpvalues2, 1, 'descend'); end % Tulostetaan käyrät h = figure; plot(mean(interpvalues1,2));hold on plot(mean(interpvalues2,2),'color','red') % Säädetään akselien arvot sopiviksi tarkasteltavan mittausarvon mukaan % sopivaksi. if yname == 'MSE.' maxyvalue = 100; elseif yname == 'SNR.' maxyvalue = 60; else maxyvalue = 1.1; end axis([0 200 0 maxyvalue]) % Nimetään kuvaaja ja akselit legend('jpg','j2k', 'Location','SouthWest') title(name)

39 ylabel(yname) xlabel('pakkaussuhde') % tallennetaan tiedostoon [s, mess, messid] = mkdir('tuloskuvat'); cd tuloskuvat filename = [name '.png']; saveas(h, filename); cd.. Funktio MSESNR.m function [mse, snr] = MSESNR(mat1,mat2) mse = (double(mat1)-double(mat2)).^2; mse = mean(mse(:)); M = double(max(max(mat1(1)),max(mat2(:)))); snr = 10*log10((M^2)/double(mse));