Milloin näemme broadcast-videota laajakaistaverkoissa ? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Arttikkeli on kirjoitettu loppuvuodesta 2002 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Teksti ja kuvat: Jussi Hanhijärvi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Videokompressio on merkittävästi kehittynyt 1980 luvun alkupuolen koodekeista nykyisin käytössä oleviin monimutkaisiin kuvan ja äänen tiivistysmenettelyihin. Tyypillinen esimerkki varhaisesta koodekista oli Haikonen-Korhonen-Santamäki kolmikon kehittämä kotimainen Vistaphone. Laite oli rakennettu Intel 8 bitin kontrollerin 8051 ympärille. Kukin lähettävä kuva muodostui melko suurista lohkoista ja vastaanottajan kuvaa päivitettiin lähettämällä vain peräkkäisten kuvien erotus. Laite kykeni välittämään tunnistettavaa "videota" 64 kb/s:n nopeudella X.25 verkossa. Mitään muunnosalueen koodausta tai entropiakoodausta siinä ei käytetty. Tänään voimme lähettää uusimmilla standardeilla jakelulaatuista videota siirtonopeudella n. 1,5 - 2 Mb/s. Näissä järjestelmissä käytetään tehokasta useammasta peräkkäisestä kuvasta muodostettuja liikevektorien ennusteita, kosinifunktioihin pohjautuvaa muunnosalueen koodausta ja kehittynyttä entropia-koodausta. Kompressiostandardien kehitystrendejä
Taulukkosta nähdään selvästi, että varsinkin video ja audio vaativat huomattavaa kompressiota, jotta multimediadata voitaisiin siirtää ja tallentaa kohtuullisin kustannuksin ja vaadittavin nopeuksin. Videon lähdemalli Valtaosa koodattavasta luonnollista dataa sisältävästä videosta on luonteeltaan stokastista, satunnaista, siinä mielessä, että valoisuus, värit ja liikkeet määräytyvät epädeterministisesti. Yksittäisten kuvien (kenttien) muodostamat sekvenssit sisältävät yleensä runsaasti sekä alueellista että ajallista toistoa eli redundanssia. Kuvaelementtien välillä on tietty korrelaatio ja liikkeet ovat joko siirtymiä, kiertymiä ja/tai supistuvia tai laajenevia luonteeltaan. Tietyn kuva-alkion arvo voidaan usein ennustaa sen naapurialkioista tai edeltävien tai seuraavien kuvien (kenttien) vastaavista alkioista. Edellisessä tapauksessa puhutaan kuvan sisäisestä (I-frame, intra-frame) koodauksesta ja jälkimäissä kuvien välisestä (P-frame, predicted frame) koodauksesta ja liikkeen ennustamisesta. Kun kuvien välinen sisällöllinen korrelaatio on alhainen eli kuvien sisällössä on paljon vaihtelua, on myös ajallinen (temporaalinen) korrelaatio alhainen tai jopa häviää, kun kuvat ovat täysin erilaiset. Jälkimmäisessä tapauksessa kuvan sisäisen kompression tarve kasvaa suureksi, jotta mielekästä virheetöntä kompressoitua videota voitaisiin lähettää. Toisaalta jos peräkkäisten kuvien välinen korrelaatio on suuri (esimerkiksi kuvat sisältävät paljon samoja elementtejä eri tai samoissa paikoissa) on kuvien välisellä koodauksella, liikevektoreiden estimoinnilla, suuri osuus temporaalisten piirteiden kompressoimiseksi. Teoreettisissa suoritus- kykytarkasteluissa mallinnetaan usein kuva-alkioiden välistä kuvansisäistä korrelaatioita Gaussin stokastiikalla ja kuvien välistä korrelaatioita Markov-ketjuilla (tilasiirtymästokastiikoilla). Monissa tapauksissa lähetettävä video muodostuu keinotekoisesta datasta. Usein riittää kompression sijasta lähettää dataa identifioivat parametrit. Muutokset voivat olla jollain tavalla parametroitavissa. Esimerkiksi ihmiskasvoista voidaan lähettää kuvan lisäksi kasvon piirteitä kuvaava verkko (mesh). Vastaisuudessa, kun halutaan kasvojen irvistävän, lähetetään vain verkon irvistysparametrit. Koodekin elementit Videon ja kuvien koodaus voidaan jakaa karkeasti kahteen luokkaan, häviölliseen ja häviöttömään koodaukseen. Häviötöntä koodausta pyritään käyttämään silloin, kun informaation hankinta, tallennus ja siirto on kallista, kuten esimerkiksi satelliitti- ja lääketieteellisissä sovelluksissa. Häviöllistä koodausta käytetään silloin, kun kuviin tai videoon liittyvää redundanssia eli toistoa voidaan uhrata esimerkiksi siirto- tai tallennuskustannusten pitämiseksi mahdollisimman alhaisena. Usein objektiivisen oikeellisuuden sijasta riittää alkuperäisen ja koodatun videon subjektiivinen samankaltaisuus eli riittävän hyvä laatu. On tärkeää huomata, että kuvan vääristymät (sekä objektiiviset muutokset että silmin havaitut vääristymät) ovat riippuvaisia sekä koodausmenetelmästä että kuvan kompleksisuudesta. Tyypillinen enkooderin rakenne Videon ja kuvan kompressio muodostuu useamman tekniikan ja algoritmin yhteisvaikutuksesta. Esikäsittely Ennen varsinaista videon enkoodausta digitoitu signaali usein alinäytteistetään. Ajatuksena on pienentää videokuvan kokoa pysty ja/tai vaakasuunnassa. Toisinaan alinäytteistetään myös aika-alueessa kenttä- tai kuvataajuuden pienentämiseksi. Alinäytteistämistä käytetään usein myös värisignaalin subjektiivisen redundanssin vähentämiseen. Kyse on itse asiassa siitä, että ihminen havaitsee helpommin kirkkauden kuin värin vaihtelut. Usein videodata jaetaan yhteen luminanssi- ja kahteen krominanssikanavaan (YUV). Krominanssikanavat alinäytteistetään suhteessa luminans- sikanavaan, esimerkiksi suhteessa 4:2:2 (neljä näytettä luminanssille ja kaksi kummallekin krominanssikanavalle. - Alinäytteistäminen on ehkä yksinkertaisin kompressiotekniikka. Ennusteiden muodostus Ennustavassa koodauksessa videosta etsitään redundanssia tutkimalla, onko paikallisesti tai ajallisesti lähekkäisten kuva-alkioiden välillä vahva korrelaatio. Ennuste koodattavalle kuva-alkiolle muodostetaan jo lähetetyn (tai koodatun) informaation perusteella. Alkion todellisen arvon ja ennusteen välinen ero kvantisoidaan ja entropiakoodataan. Tekniikka on johdannainen hyvin tunnetusta differentiaalisesta pulssikoodimodulaatiosta (DPCM). Liikkeen estimointi Liikkeen estimointia ja kompensointia käytetään vähentämään peräkkäisten kuvien välistä ajallista redundanssia. Esimerkiksi liikkuvaa kohdetta kuvattaessa kuvan kaikki elementit siirtyvät hieman. Kenttien välinen liike voidaan kuvata likimääräisesti äärellisellä määrällä liikeparametrejä (estimoiduilla liikevektoreilla). Ennustevirhe ja liikevektorit lähetetään vastaanottajalle. Yleensä ei ole tarpeellista lähettää liikeinformaatiota jokaiselle koodatulle kuva-alkiolle. Koska yksittäisten kuva-alkioiden liikevektoreiden välinen korrelaatio on yleensä vahva (liikkuvat samaan suuntaan!), yksi liikevektori voi kuvata monen alkion muodostaman kokonaisuuden liikettä. Monissa koodekeissa lohkot ovat melko suuria, esimerkiksi MPEG-2:ssa kooltaan 16x16 kuva-alkiota. Uusimmissa standardeissa liikevektorit muodostetaan ennustustarkkuuden parantamiseksi useamman peräkkäisen kuvan perusteella. Muunnosalueen koodaus Muunnosalueittain koodauksen ensisijaisena tavoitteena on poistaa kuvan sisäinen redundanssi ja muodostaa muunnoskertoimet, jotka enkoodataan kuva-alkioiden sijasta. Monissa vakiintuneissa kompressiomenetelmissä kuva jaetaan kuva-alkioiden muodostamiin lohkoihin (esimerkiksi digitv:n MPEG-2:ssa kooltaan 8x8 pikseliä). Ollakseen tehokas pitää muunnosalueen koodauksen olla sellainen, että mahdollisimman harvoilla kertoimilla voidaan muodostaa koodattava lohko. Tehokkaan muunnoksen tekemiseen on ehdotettu lukuisia eri menetelmiä. Toistaiseksi valintaa on säännellyt eri menetelmien kustannukset enkoodauksessa ja dekoodauksessa sekä mahdollisuus toteuttaa menetelmä VLSI-piireillä. Yleisimmin käytetyt muunnokset ovat:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||