Kuvan- ja videontiivistys Mikko Nuutinen 14.2.2013
Oppimistavoitteet Redundanssi kuvissa: esimerkkitapauksina koodaus-, pikseleiden välinen sekä psykovisuaalinen redundanssi Kuvantiivistys: JPEG-koodauksen komponentit, JPEG2000 idea Videontiivistys: MPEG-koodauksen idea Tiivistyksen vaikutus kuvan/videon visuaaliseen laatuun
Miksi tarvitaan tiivistystä? Esimerkki 2 h televisiokuvaa 720 x 480 resoluutiolla, 24 bittiä Koostuu peräkkäisistä kuvista, joita esitetään 30 fps (frames per second) Bittimäärä tällöin: 30 fps * (720*480) pikseliä/frame x 3 tavua (byte) = 31 104 000 tavua/s 2 tuntia: 31 104 000 tavua/s * 3600 s * 2h = 2.24 * 10^11 tavua = 224 gigatavua = 27 kpl 8.5 GB DVD levyjä Jotta saadaan mahtumaan DVD:lle, täytyy kokoa kutistaa 26.3 kertaisesti Entäpä HD-televisio... (1920 x 1080 x 24 bittiä/kuva)!
Tiivistyksen idea Tiivistys = vähennetään dataa, jolla esitetään tietty informaatio Osa datasta on redundanttia informaatio voidaan koodata datasta, vaikka dataa poistetaan tai muutetaan Redundanssin määrä: R = 1 1/C, missä C = tiivistyssuhde C = a / b, jossa a ja b ovat kaksi signaalia, joista saadaan johdettua sama informaatio Jos esim. C=10 (joskus myös 10:1), niin signaalissa a on 10 bittiä jokaista signaalin b bittiä kohden Tällöin signaalin a dataredundanssi on R=0.9, mikä tarkoittaa sitä, että 90% sen sisältämästä datasta on redundanttia Redundanssiesimerkkejä kuvissa Koodausredundanssi Pikseleiden välinen spatiaalinen ja temporaalinen redundanssi Psykovisuaalinen redundanssi
Koodausredundanssi Koodausredundanssi tarkoittaa sitä, että koodaus ei huomioi tapahtuman todennäköisyyttä Oletetaan diskreetti satunnaismuuttuja rk välillä [0,L-1], jolla kuvataan M x N kokoisen kuvan intensiteettejä Jokainen rk (intensiteettitaso) esiintyy todennäköisyydellä pr(rk), jolloin: Kaikki intensiteettiarvot eivät esiinny yhtä usein. n = kuinka monta kertaa intensiteettiarvo k esintyy Jos l(rk) on bittimäärä, joka tarvitaan jokaisen rk:n esittämiseen, keskimääräinen bittimäärä, joka tarvitaan kullekin pikselille, on Bittimäärä, joka tarvitaan M x N kuvan esittämiseen on M x N x Lavg
Koodausredundanssi (256 x 256 kuva) intensiteetti kiinteäpituinen koodi (fixed length) todennäköisyys bittimäärä vaihtuvapituinen koodi (variable lenght): vähemmän bittejä todennäköisimmille rk pr(rk) Koodi 1 l1(rk) Koodi 2 l2(rk) r87=87 0.25 01010111 8 01 2 r128=128 0.47 10000000 8 1 1 r186=186 0.25 11000100 8 000 3 r255=255 0.03 11111111 8 001 3 Lavg = 8 Lavg = 0.25(2) + 0.47(1) + 0.25(3) + 0.03(3) = 1.81 bittiä Koko kuvan esittämiseen tarvitaan M x N x Lavg= 256 256 1.81 = 118621 bittiä Tiivistyssuhde C= (256 256 8) / 118621 = 8 / 1.81 = 4.42 Redundanssi R = 1 1 / 4.42 = 0.774, eli 77.4 % kuvan datasta on redundanttia
Pikseleiden välinen redundanssi Pikseleiden välinen redundanssi tarkoittaa sitä, että naapuripikselit (spatiaali ja temporaali) korreloivat usein voimakkaasti Spatiaalinen korrelaatio: yksittäisessä 2D-kuvassa naapuripikselit korreloivat voimakkaasti Temporaalinen korrelaatio: videossa peräkkäisten 2D-kuvien pikseleiden välillä usein voimakasta korrelaatiota Pikseleiden välistä redundanssia voidaan vähentää koodaamalla vain spatiaalinen/temporaalinen muutos esim. käyttämällä muunnosavaruutta/liikevektoreita Jos muunnos ei-visuaalisesta takaisin visuaaliseksi on täydellinen, sanotaan muunnosta häviöttömäksi, muuten se on häviöllinen
Pikseleiden välinen redundanssi tiivistetään juoksunpituuskoodauksella Pikselit riippumattomia vertikaalisuunnassa Koodataan esimerkiksi juoksunpituuskoodauksella (running length coding) eli muutetaan lineaarinen sekvenssi pareiksi (pituus, arvo): Tässä kuvassa hyvä tiivistys: (256 256 8)/[(256+256) 8], eli 128:1 Pikselit samoja vaakasuunnassa = korreloivat täysin Eli esimerkkikuvasta syntyy 256 pituus ja arvo paria, joille molemmille on varattu 8 bittiä
Psykovisuaalinen redundanssi Psykovisuaalinen redundanssi tarkoittaa sitä, että data sisältää sellaista informaatiota jota ihmissilmä ei pysty erottamaan Data, jota näköaisti ei huomioi: Näköaistin värikanavan huonompi resoluutio värikanavaa voidaan alinäytteistää enemmän Näköaistin ajallinen integraatiokyky n. 100Hz optimiolosuhteissa, 40-60Hz tyypillisissä olosuhteissa JPEG/MPEG-koodauksen häviöllinen tiivistys perustuu psykovisuaalisen redundanssin hyödyntämiseen Häviön suuruus/havaittavuus liittyy DCT-vakioiden kvantisoinin karkeuteen
Campbell-Robson-kuva Kontrasti kasvaa Kun taajuus kasvaa ja/tai kontrasti laskee, yksityiskohdat eivät enää erotu eli tiivistys voi suodattaa yksityiskohdat joita ei havaita Taajuus kasvaa
Kontrastiherkkyys-väriherkkyys Lyhyille aallonpituuksille herkät tappisolut harvassa Värihavainnolla huonompi resoluutio eli kromaattisia kanavia voidaan alinäytteistää enemmän kuin kirkkauskanavaa
Campbell-Robson-kuva
Campbell-Robson-kuva
JPEG JPEG (Joint Photographic Experts Group standardi) Alkuperäinen standardointiryhmä aloitti 1986 ja julkaisi ensimmäisen JPEGstandardin 1992 (ITU-T Recommendation T.81) Tällä hetkellä laaja tuki eri selaimissa ja ohjelmistoissa Tarkoitettu erityisesti valokuville (tasaiset sävy- ja värimuunnokset) Häviöllinen, käyttää diskreettiä kosinimuunnosta (DCT), 8 x 8 pikselin blokit JPEG-standardi määrittää kuinka kuva koodataan tavuvirraksi ja dekoodataan takaisin kuvaksi, mutta ei sitä miten tiedostoformaatti käyttää tätä kuvavirtaa JPEG/Exif ja JPEG/JFIF ovat yleisesti käytettyjä tiedostoformaatteja; molemmat pohjautuvat JIF-formaatin tavu-layoutiin, joka on määritetty standardin liitteissä JPEG2000 JPEG/Exif kameroiden yleinen ulostulotiedostoformaatti (tallettaa metadatan) JPEG/JFIF yleinen kuvankäsittelyohjelmistojen formaattina (tallettaa väriprofiilin) Käyttää disktreetin kosinimuunnoksen sijasta diskreettiä aallokemuunnosta (DWT)
Tiivistys: JPEG-vaiheet 1. Lähdekuva 2. Offset 3. Diskreetti kosinimuunnos 4. Vakioiden kvantisointi 5. entropiakoodaus H.R. Wu, K.R. Rao, Digital Video Image Quality and Perceptual Coding, CRC Press 2006, 600 s.
JPEG - 1. Lähdekuva Kuvan muunto RGB Y CBCR Aluksi tehdään R-,G- ja B-komponenteille gammakorjaus sitten Y = 0.299 R + 0.587 G + 0.114 B (ITU:n suositus BT.601) tai Y = 0.2126 R + 0.7152 G + 0.0722 B (HDTV:n suositus BT.709) CB = B Y eli sinisen ja kirkkauden ero CR = R Y eli punaisen ja kirkkauden ero Kirkkaussignaalin laatuun kiinnitetään huomiota Värisignaalien tarkkuutta heikennetään, koska värinäkö ei näe yksityiskohtia tarkasti
JPEG - 1. Lähdekuva Haluttu emissio näytöllä Emissio V out V in Gamma-korjaus=1/2.2 0.5 0.5 Lineaarisen syöttösignaalin emissio näytöllä (eli ilman gammakorjausta kuvatoisto näytöllä on liian tumma) 0.2 0.2 CRT-näytön gamma on ollut noin 2.2. Jotta aiemmin gammakorjattu lähdemateriaali toistuisi oikein, niin myös uudempien näyttötekniikoidenkin tuli seurata tätä gamma-arvoa. Syöttösignaali
JPEG - 1. Lähdekuva Kromaattisten kanavien alinäytteistys Väriä voidaan alinäytteistää eri määriä: 4:4:4, 4:2:2, 4:2:0, 4:1:1 4:2:0 käytösssä: JPEG, MPEG-1, MPEG-2, H.261, 4:1:1 4:2:0 4:2:2 4:4:4 2x4 pikselimatriisi Y'Cb Cr = = = = Y' + + + + (Cb, Cr) 1 1 2 1 2 1 2 3 4 1 1 2 1 2 3 4 Kromakanavien näytteistys 2 x vertikaalinen 1 x horisontaalinen 1 x vertikaalinen 2 x horisontaalinen 2 x vertikaalinen 2 x horisontaalinen 2 x vertikaalinen 4 x horisontaalinen http://en.wikipedia.org/wiki/4:2:0
JPEG - 1. Lähdekuva Kuva jaetaan 8 x 8 osakuviin; Minimum Coded Unit (MCU): 4 x Luma, 1 x CB, 1 x CR (kun 4:2:2)
JPEG - 2. Offset Siirretään arvot nollan ympärille -2^(k-1)= -2^7 = -128 Jossa k on lähdekuvan suurimpien arvojen bittimäärä. Muuntaa DCT-koodauksen DC-kertoimen: neutraali harmaa=0 Ei vaikuta DCT-koodauksen AC-kertoimiin
JPEG - 3. Diskreetti kosinimuunnos DCT-muunnos esittää signaalin kosinin taajuuksina ja kertoimina Perusajatuksena on esittää kuvien data mahdollisimman tiiviisti DCT on häviötön Tuottaa osakuvan kokoisen matriisin DCT-kertoimia Käyttää 8x8 kantafunktiotaulukkoa (basis function) Matalat taajuudet vasemmalla ylhäällä (Mutta ei [0,0]), taajuus kasvaa vaaka- ja pystysuunnassa, esim. [0,1] kosini puoli jaksoa, [1,0] sama, mutta käännetty 90 DCT-muunnos kertoo 8x8 pikselimatriisin kullakin kantafunktiolla ja laskee arvot yhteen Tuottaa 8x8 spektrin, jossa kukin arvo on kantafunktion arvo http://en.wikipedia.org/wiki/jpeg
JPEG - 3. Diskreetti kosinimuunnos Kerroin + kantafunktio
JPEG - 4. Vakioiden kvantisointi DCT-vakiot kvantisoidaan: missä Suv on DCT-vakio ja Quv on kvantisointimatriisin arvo kyseiselle kantafunktiolle Matalamman taajuuden vakiot kvantisoidaan pienemmällä askelkoolla H.R. Wu, K.R. Rao, Digital Video Image Quality and Perceptual Coding, CRC Press 2006, 600 s.
JPEG - 4. Vakioiden kvantisointi
JPEG - 5. entropiakoodaus Zic-zac-skannauksessa DCT-vakiot järjestetään taajuuden mukaan kasvavaan järjestykseen Lopuksi tehdään juoksunpituuskoodaus ja koska skannauksen lopussa on paljon nollia, niin data tiivistyy merkittävästi H.R. Wu, K.R. Rao, Digital Video Image Quality and Perceptual Coding, CRC Press 2006, 600 s.
Tiivistys: JPEG2000 Verrattuna JPEG-tiivistykseen niin JPEG2000 käyttää DCTmuunnoksen sijaan diskreettiä aallokemuunnosta (DWT) DWT-vakiot kvantisoidaan ja entropiakoodataan DWT-vakiot sisältää paljon nollia, joten entropiakoodaus on tehokas H.R. Wu, K.R. Rao, Digital Video Image Quality and Perceptual Coding, CRC Press 2006, 600 s.
Tiivistys: JPEG2000 Kun JPEG2000-kuvaa puretaan, niin kuvaa voi esikatsella matalammalla resoluutiolla Cohen-Daubechies-Feauveau wavelet 5/3 used in JPEG 2000 standard. DWT-esimerkki: 6 alakaistaa (2 skaalaa x 3 orientaatiota) http://en.wikipedia.org/wiki/jpeg_2000
Tiivistys: JPEG2000 JPEG2000-tiivistys ei tuota blokkisuutta kuvaan kuten JPEGtiivistys. Tämä johtuu siitä, että kuvaa ei jaeta blokkeihin. Sen sijaan aallokemuunnos saattaa tuottaa kuvan reuna-alueille ringing-vääristymää Pakkausparametreillä säädetään kvantisointitasoa eli kuvan pakkaussuhdetta H.R. Wu, K.R. Rao, Digital Video Image Quality and Perceptual Coding, CRC Press 2006, 600 s.
Liikkuvan kuvan tiivistys Liikkuvan kuvan tiivistys on yhtä vanha asia kuin televisio Esim. lomittaminen kehitettiin 30-luvulla, kun kuvataajuutta alettiin kasvattamaan, mutta kaistanleveyttä ei haluttu kasvattaa
MPEG (Moving Picture Expert Group standardi) Tiivistysstandardi videosekvensseille (MPEG-1, MPEG-2, MPEG-4/H.264) MPEG-1 kehitetty multimedia CD-ROM sovelluksille MPEG-2 kehitetty erityisesti sovelluksille joissa videolaatu on NTSC/PAL HDTV välillä MPEG-4 sisältää uusia mahdollisuuksia sisältöpohjaiseen koodaukseen ja manipulaatioihin MPEG-videokoodauksen perusjako perustuu I-, P- ja B-kuviin I-Picture=Intra-coded picture Tiivistys perustuu vain kuvan omaan informaatioon (käytännössä JPEG-tiivistys) P-Picture=Predictive-coded picture Tiivistys perustuu ennustukseen aiemmasta I- tai P-kuvasta B-picture=Bidirectionally predictive picture Tiivistys perustuu ennustetaan aiemmasta ja seuraavasta referenssikuvasta (Itai P-kuva)
MPEG (Moving Picture Expert Group standardi) Perusajatus on, että kooderi on adaptiivinen ja koodaa kuvavirran parhaaksi katsomallaan tavalla, kun taas dekooderi on yksinkertaisempi ja dekoodaa inputin sen mukaan, mitä kuvavirrassa on määritetty http://en.wikipedia.org/wiki/moving_picture_experts_group
MPEG Koodataan I-kuvat perustuen DCTmuunnokseen ja DCT-vakioiden kvantisointiin Koodataan P- ja B-kuvat perustuen liikekompensoituun ennustukseen muista I- ja/tai P-kuvista H.R. Wu, K.R. Rao, Digital Video Image Quality and Perceptual Coding, CRC Press 2006, 600 s.
MPEG GOP = Group of Pictures GOP-koolla määritetään koodauksen kompromissia laadun ja tiivistyssuhteen välillä GOP-määrittää kahden I-kuvan etäisyyden Kahden referenssikuvan (I- tai P-kuva) etäisyys on toinen parametri Esim. GOP-rakenne: IBBPBBPBB I-kuvien väli n=9 Referenssikuvien väli m=3 (eli 2 B-kuvaa ankkurien välissä. Jos m=1, ei B-kuvia käytetä ) Tyypillinen MPEG GOP (n=15, m=3): IBBPBBPBBPBBPBB Eli jos taajuus on 30 kuvaa sekunnissa, on sekunnissa videota 2 GOPia I-, P- ja B-kuvien riippuvuuksien vuoksi MPEGin dekoodaus tulee aloittaa I-kuvasta GOP (n=15, m=3): I B B P B B P B B P B B P B B
MPEG - P-kuvat P-kuva on liikevektoreilla esitetty kuvaus muutoksesta verrattuna aiempaan referenssikuvaan Liikkeen estimointi Verrataan makroblokkia (esim 16x16) referenssikuvan blokkeihin Käytännössä etsitään vastinetta kyseisen blokin naapurustosta ja muodostetaan liikevektorit Minimoidaan blokkien välinen erotus (residuaali), lasketaan referenssiblokin sijainti (liikevektori) ja koodataan liikevektorin muutos
MPEG Liikkeen estimointi Frame 1 Liikevektorit Frame 2 Residuaali Residuaali (ei liikekompensointia)
MPEG - B-kuvat Käytännössä sama asia kuin P-kuvat, mutta kuvaus muutoksesta lasketaan edellisestä ja jälkimmäisestä I/P-kuvasta B-kuvien käytön idea on siinä, että niitä voi tiivistää tarvittaessa voimakkaasti, koska niitä ei käytetä muiden kuvien ennustuksessa Koodaus vaatii puskuritilaa, koska kuvasekvenssi edellisen ja seuraavan I/P-kuvan välissä tulee olla muistissa, kun B-kuvia koodataan Koodattuun tavuvirtaan edellinen ja jälkimmäinen I/P-kuva järjestetään ennen välissä olevia B-kuvia I/P B B I/P
MPEG B-kuvat Koodataan vasta kun P3 tulee I0 B1 B2 P3 B4 B5 P6 B7 B8 Referenssikuva Referenssikuva Taltioitava puskuriin odottamaan koodausta. Uudelleenjärjestely siirtoa varten: I0 ja P3, joista B1 ja B2 lasketaan, ovat peräkkäin I0 P3 B1 B2 P6 B4 B5 I9 B7 B8
Kuvatiivistyksestä johtuvat kuvavirheet - blokkisuus DCT-muunnokseen perustuva tiivistys aiheuttaa kuvaan blokkisuutta Vääristymä havaitaan säännönmukaisena epäjatkuvuutena blokkien rajoilla Vääristymä riippuu DCT-vakioiden kvantisointitasosta Liikekompensoiduissa frameissa blokkisuus havaitaan kahdessa muodossa: joko liittyen makroblokkien rajoihin tai makroblokkien sisäisiin blokkeihin
Kuvatiivistyksestä johtuvat kuvavirheet - blokkisuus
Kuvatiivistyksestä johtuvat kuvavirheet - kantakuva-efekti Kantakuva-efekti muistuttaa blokkisuutta Kantakuva-efekti on erityisesti seurausta spatiaalisesti aktiivisten alueiden DCT-vakioiden kvantisoinnista Vääristymä voidaan havaita samankaltaisena kuviona kuin jokin 63:sta DCT-kantakuvasta DCT-vakioiden karkea kvantisointi johtaa matalamman tason DCT-vakioiden nollautumiseen spatiaalisesti aktiivisella alueella, jolloin jokin yksittäinen korkeamman taajuuden kantakuva voi dominoida
Kuvatiivistyksestä johtuvat kuvavirheet - kantakuva-efekti
Kuvatiivistyksestä johtuvat kuvavirheet - sumentuminen Sumentuminen johtuu korkeiden spatiaalisten taajuuksien häviämisestä johtuen DCT-vakioiden kvantisoinnista
Kuvatiivistyksestä johtuvat kuvavirheet - porrastuminen DCT-kantakuvilla ei pystytä toistamaan täysin diagonaalisuunnan reunoja tai piirteitä Porrastuminen havaitaan epäjatkuvana vääristymänä reunojen ympärillä Diagonaalisten reunojen esitys vaatisi enemmän korkeamman taajuuden kantakuvia, mutta karkea kvantisointi suodattaa ne pois
Kuvatiivistyksestä johtuvat kuvavirheet - porrastuminen
Kuvatiivistyksestä johtuvat kuvavirheet - Ringing-efekti Ringing-efekti liittyy reunatoistoon, kuten porrastuminen Ringing-efekti on voimakkain kontrastikkaissa reunoissa, joissa tausta on tasaisesti teksturoitu Ringing-efekti johtuu siitä että reunan toisto vaatii jonkin korkean taajuuden kantakuvan, joka dominoi blokissa ja aiheuttaa vääristymän reunan ympärille
Kuvatiivistyksestä johtuvat kuvavirheet - Ringing-efekti
Kuvatiivistyksestä johtuvat kuvavirheet - Liikekompensaation virheet Liikekompensaatio laskee parhaan sovituksen makroblokille tietyssä naapurustossa Tuloksena on ongelmia: yksi makroblokki saattaa sisältää useampia eri suuntiin liikkuvia objekteja tai liike näkymässä saattaa olla suurempi kuin etsintäikkuna Virheet näkyvät väärin sovitetuilla makroblokeilla videossa
Kuvatiivistyksestä johtuvat kuvavirheet - Mosquito-efekti Mosquito-efekti kombinoituu sekä ringing-efektistä että liikekompensaation virheistä Vääristymät näkyvät sekä luminanssi- että värillisinä virheinä liikkuvien objektien ympärillä