180 likes | 294 Views
Motion compensated interframe prediction -koodaus. Edellä tutkittiin yksittäisen kehyksen sisällä olevan redundanssin vähentämistä (spatial redundancy). Nyt perehdytään pohtimaan perusteita kehysten välillä olevan redundanssin vähentämiseen (temporal redundancy).
E N D
Motion compensated interframe prediction -koodaus • Edellä tutkittiin yksittäisen kehyksen sisällä olevan redundanssin vähentämistä (spatial redundancy). • Nyt perehdytään pohtimaan perusteita kehysten välillä olevan redundanssin vähentämiseen (temporal redundancy). • On helppo arvata, että kaksi vierekkäistä kehystä sisältää paljon sellaista informaatiota, jotka ovat kummassakin kehyksessä täsmälleen samoja. tMyn
Yksittäisen kehyksen sisällä olevaa redundanssia vähennettiin käyttäen hyväksi kaksiulotteista DCT-prosessia. • Samoilla eväillä jatkaminen ei onnistu: kolmiulotteinen DCT-prosessi ei tuota tarpeeksi hyvää lopputulosta. • Intra-frame DCT-prosessissa pienin käsiteltävä yksikkö oli 8*8-kuvaelementti eli lohko. • Inter-frame –prosessissa pienin käsiteltävä yksikkö on tyypillisesti 16*16 makrolohko. tMyn
Täsmälleen alkuperäistä videoinformaatiota ei pystytä siirtämään lähteeltä kohteeseen minkäänlaisessa tapauksessa, koska vastaanotetun informaation dekoodausvaiheessa tulee joka tapauksessa pieniä muutoksia. • Niinpä enkooderi sisältää paikallisen dekooderin, joka muodostaa sellaisen kehyksen, joka on täsmälleen samanlainen kuin vastaanottopäässäkin tulisi muodostettua. • Täten ennuste seuraavasta kehyksestä lähetyspäässä (encoder) tehdään tuon paikallisen dekooderin perusteella. tMyn
Ajatellaan aluksi yksinkertaista tapausta, jossa liikkuva kuva saadaan aikaan siten, että taustalla on staattinen näkymä, ja edessä on jokin liikkuva objekti, kuvat 1 ja 2 edustavat peräkkäisiä kehyksiä. • Heti nähdään helposti, että siirrettävien bittien määrää saadaan helposti vähennettyä: • Pakataan 1. kehys kuten aiemmin (DCT, kvantisointi etc) • Käydään seuraava kehys lohko kerrallaan läpi: verrataan kutakin lohkoa edellisen kehyksen (reference image) vastinlohkoon. Jos ne ovat samanlaisia, saadaan tämä tieto siirrettyä jollakin tiiviillä tavalla. • Ainoastaan ne lohkot, jotka ovat muuttuneet, joudutaan koodaamaan ”pitkän kaavan mukaisesti”, siis DCT, kvantisointi… tMyn
Kuva 1. Liikkuva kuva, jonka voidaan ajatella muodostuvan staattisesta taustasta ja dynaamisesta objektista edessä. tMyn
Kuva 1. Liikkuva kuva, jonka voidaan ajatella muodostuvan staattisesta taustasta ja dynaamisesta objektista edessä. tMyn
Kuvien 1 ja 2 edustama ”liikkuva kuva” on käytännössä harvinaista herkkua. • Usein on niin, että sen lisäksi että edessä oleva objekti liikkuu, niin myöskin kamera voi hieman vaihtaa asentoaan (tai niinkin, että kamera seuraa liikkuvaa objektia). • Jos tällaiseen tilanteeseen soveltaa kuvien 1 ja 2 kohdalla selostettua tekniikkaa, niin säästöä siirrettävien bittien määrässä ei synny juuri lainkaan. • Silti näyttäisi ilmeiseltä, että kahdessa peräkkäisessä kehyksessä on paljon redundanssia, kuvat 3 ja 4! tMyn
Kuvista 3 ja 4 huomataan, että redundanssia on olemassa runsaasti, kunhan vain osattaisiin kertoa dekooderille minne se on siirtynyt. • Asia ratkaistaan lähettämällä dekooderille pyyntö käyttää edellisen kehyksen dataa sekä liikevektori (motion vector), joka kertoo, mistä kohden edellistä kehystä tieto löytyy. • Kehysten 1 ja 2 kohdalla tausta ei liikkunut lainkaan, ja tällaisessa tapauksessa liikevektorin arvo on nolla. • Liikevektorilla on sekä horisontaali (x)- että vertikaali (y) –arvot. tMyn
Prosessia, jossa haetaan liikevektorille arvo, kutsutaan liikkeenarvioinniksi (motion estimation). • Kun käytetään liikevektoria informaation pakkaamiseen (liikkeen vaikutuksen vähentäminen), puhutaan liikkeen kompensaatiosta (motion compensation). • Edellä esitetyissä kahdessa esimerkissä ei ole mitään poikkeuksellista. • Niinpä voidaan ajatella, että tällaista samankaltaisuutta voidaan etsiä lohko kerrallaan kahdesta peräkkäisestä kehyksestä aina, kun halutaan pakata videoinformaatiota. tMyn
Yksinkertaisin menetelmä on nimeltään ”block matching”. • Tässä menetelmässä etsitään lohko kerrallaan samanlaista lohkoa referenssikehyksestä (edellisestä kehyksestä). • Ainoa ongelma on siinä, että miten löytää tuo samanlainen lohko sieltä referenssikehyksestä!!! • Videon kohdalla Nyquistin näytteenottotaajuusvaatimus ei läheskään toteudu!! • Edellä todettiin, että tavoite on löytää käsiteltävästä kehyksestä samanlainen lohko kuin mikä esiintyy jossakin päin referenssikehystä. tMyn
Milloin yksittäinen lohko on riittävän samanlainen kuin mitä referenssikehyksestä löytyi? • Valaistus voi muuttua, objekti on voinut liikkua jonkin välimatkan, joka on eri suuri arvo kuin kokonaislukumäärä kertaa pikselin edustama matka, objekti voi pyörähtää akselillaan… • Käytössä on MMSE (Minimum Mean Square error) tai MAD (Minimum Absolute Difference). tMyn
Vaikkei tutkittava lohko olisikaan täsmälleen samanlainen kuin mitä referenssikehyksen lohko, voidaan sitä siis mahdollisesti kuitenkin käyttää hyväksi. • On mahdollista määritellä erotus (difference) sille lohkolle joka halutaan siirtää verrattuna referenssikehyksen lohkoon. Tätä erotusta kutsutaan jääännösarvoksi (residual). • Nyt voidaan siis lähettää koodattuna nuo jäännösarvot ja liikevektori. • Vastaanottopäässä dekoodataan jäännösarvot ja lisätään niiden vaikutus liikevektorin edustamaan lohkoon. tMyn
Tällaisessa tapauksessa pitää pystyä vertailemaan kumpi on järkevämpää: koodata alue yrittämättä mitään tiivistämistä vaiko käyttää liikevektoria ja jäännösarvoja (MAD, MMSE). • Miksi 16*16 makrolohko on tyypillinen koko lohkon kokoa mietittäessä? tMyn
Jos valittaisiin kovin iso lohko, niin samanlaisen lohkon löytyminen referenssikehyksestä olisi hankalaa. • Jos valittaisiin kovin pieni lohko, niin liikevektoreiden laskeminen alkaisi olla työlästä hommaa… tMyn
Miten samanlaisen lohkon etsiminen suoritetaan? • Ensimmäiseksi voisi ajatella ”Full-Search Block Matching” –menetelmää. • Miten nopeasti objekti liikkuu ruudulla? • Jos objekti liikkuu nopeammin kuin mitä vastaa aika kahden vierekkäisen kehyksen välillä, niin silloin ei ole mahdollista ennustaa objektin liikettä. • Voisi ajatella, että pyritään seuraamaan objektia, joka liikkuu korkeintaan puolet ruudun leveydestä kahden vierekkäisen kehyksen välisenä aikana. • Tämä vastaisi objektia, joka ilmestyy ruudulle vasemmalta ja häviää oikealle vähemmässä kuin sekunnin kymmenyksen aikana! tMyn
Jos tyydytään seuraamaan objektia, joka ohittaa horisontaalisuunnassa näytön puolessa sekunnissa, niin silloin seurataan liikettä, joka vastaa noin 50 pikselin siirtymistä/kehys (720/(0,5*25)=57,6). • Jos halutaan ennustaa esim. kolme seuraavaa kehystä, niin silloin pitää pystyä seuraamaan 150 pikselin aluetta joka suuntaan. • Tutkimuksissa on todettu, että horisontaalinen liike on tyypillisesti nopeampaa kuin vertikaalinen (keskiarvoisesti se on kaksinkertainen). Niinpä seurattava alue muuttuisi alueeksi pikseliä, eli 300 * 150 pikseliä. tMyn