FI110745B - Menetelmä ja laite peräkkäisten kuvien koodaamiseksi - Google Patents

Menetelmä ja laite peräkkäisten kuvien koodaamiseksi Download PDF

Info

Publication number
FI110745B
FI110745B FI20012203A FI20012203A FI110745B FI 110745 B FI110745 B FI 110745B FI 20012203 A FI20012203 A FI 20012203A FI 20012203 A FI20012203 A FI 20012203A FI 110745 B FI110745 B FI 110745B
Authority
FI
Finland
Prior art keywords
image
block
motion vector
indexed
pixel
Prior art date
Application number
FI20012203A
Other languages
English (en)
Swedish (sv)
Other versions
FI20012203A0 (fi
Inventor
Markus Suvanto
Original Assignee
Hantro Products Oy
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hantro Products Oy filed Critical Hantro Products Oy
Priority to FI20012203A priority Critical patent/FI110745B/fi
Publication of FI20012203A0 publication Critical patent/FI20012203A0/fi
Priority to PCT/FI2002/000894 priority patent/WO2003043342A1/en
Application granted granted Critical
Publication of FI110745B publication Critical patent/FI110745B/fi

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/523Motion estimation or motion compensation with sub-pixel accuracy
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Description

1 110745
Menetelmä ja laite peräkkäisten kuvien koodaamiseksi
Ala
Keksinnön kohteina ovat menetelmä ja laite peräkkäisten kuvien koodaamiseksi.
5 Tausta
Peräkkäisten kuvien, esimerkiksi videokuvan, koodausta käytetään datamäärän vähentämiseksi, jotta se voidaan tehokkaammin tallentaa jollekin muistivälineelle tai siirtää tietoliikenneyhteyttä käyttäen. Esimerkki videokoodausstandardista on MPEG-4 (Moving Pictures Expert Group). Käytettyjä kulo vakokoja on erilaisia, esimerkiksi cif-koko on 352 x 288 pikseliä ja qcif-koko on 176 x 144 pikseliä.
Tyypillisesti yksittäinen kuva jaetaan lohkoiksi, jotka sisältävät tietoa valoisuudesta, väristä ja sijainnista. Lohkojen data kompressoidaan lohkoittain halutulla koodausmenetelmällä. Kompressointi perustuu vähemmän merkityk-15 sellisen datan poistamiseen. Kompressointimenetelmät jaetaan pääasiallisesti kolmeen eri luokkaan: spektrisen redundanssin vähentäminen (Spectral Redundancy Reduction), tilaredundanssin vähentäminen (Spatial Redundancy Reduction) ja ajallisen redundanssin vähentäminen (Temporal Redundancy : ’.· Reduction). Tyypillisesti kompressointiin käytetään näiden menetelmien erilai- 20 siä yhdistelmiä.
Spektrisen redundanssin vähentämiseksi sovelletaan esimerkiksi YUV-värimallia. YUV-mallissa käytetään hyödyksi sitä, että ihmisen silmä on ··.·; herkempi luminanssin eli valoisuuden vaihteluille kuin krominanssin eli värin . · ·. muutoksille. YUV-mallissa on yksi luminanssikomponentti (Y) ja kaksi kromi- 25 nanssikomponenttia (U ja V, tai Cb ja Cr). Esimerkiksi H.263 videokoodaus standardin mukainen luminanssilohko on 16 x 16 pikseliä ja kumpikin kromi-nanssilohko, jotka kattavat saman alueen kuin luminanssilohko, 8x8 pikseliä. Yhden luminanssilohkon ja kahden krominanssilohkon yhdistelmää kutsutaan makrolohkoksi. Jokainen pikseli, sekä luminanssi- että krominanssilohkossa, 30 voi saada arvon väliltä 0-255, eli yhden pikselin esittämiseen tarvitaan kah- ... · deksan bittiä. Esimerkiksi luminanssipikselin arvo 0 tarkoittaa mustaa ja arvo 255 valkoista.
• · Tilaredundanssin vähentämiseksi käytetään esimerkiksi diskreetti- YY kosinimuunnosta (Discrete Cosine Transform, DCT). Diskreettikosinimuunnok- 35 sessa muunnetaan lohkon pikseliesitys tilataajuusesitykseksi. Lisäksi kuva- 2 110745 lohkossa vain niillä signaalitaajuuksilla, joita siinä esiintyy, on suuriamplitudiset kertoimet, ja niillä signaaleilla, joita lohkossa ei esiinny, kertoimet ovat lähellä nollaa. Diskreettikosinimuunnos on periaatteessa häviötön muunnos ja signaaliin aiheutuu häiriötä vain kvantisoinnissa.
5 Ajallista redundanssia pyritään vähentämään hyödyntäen sitä tosi asiaa, että peräkkäiset kuvat yleensä muistuttavat toisiaan, joten sen sijaan, että kompressoitaisiin jokainen yksittäinen kuva, generoidaan lohkojen liike-dataa. Tätä nimitetään liikkeen kompensoinniksi. Koodattavalle lohkolle etsitään mahdollisimman hyvä aiemmin koodattu referenssilohko aiemmasta 10 muistiin tallennetusta referenssikuvasta, referenssilohkon ja koodattavan lohkon välinen liike mallinnetaan ja lasketut liikevektorit (motion vector) lähetetään vastaanottimelle. Koodattavan lohkon ja referenssilohkon erilaisuus ilmaistaan erodatana. Tällaista koodausta kutsutaan interkoodaukseksi, joka tarkoittaa saman kuvajonon kuvien välisten samankaltaisuuksien hyödyntämis-15 tä.
Tyypillisesti referenssikuvaan määritellään hakualue, josta haetaan koodattavassa kuvassa olevan kaltaista lohkoa. Paras vastaavuus löydetään laskemalla hakualueella olevan lohkon ja koodattavan lohkon välisten pikse-leiden välinen kustannusfunktio, esimerkiksi absoluuttierojen summa (sum of . 20 absolute differences, SAD).
Liikkeen estimointi hakualueella voidaan esittää kaavalla: ·'·'·' MV{x,y) = min (1) • . -!6<*,v<16 TTt1 1 • . /=0 j-0 .'· jossa MV on lopullinen liikevektori, fxy on koodattavan makrolohkon pikseli, ja rxy on referenssikuvan pikseli hakualueella.
25 Tunnetun tekniikan mukaisesti on käytetty täyshakua, eli kaikki tai lähes kaikki mahdolliset liikevektorit on asetettu liikevektorikandidaateiksi. Ongelmana täyshaun käytössä on vaadittujen laskutoimitusten suuri määrä. Esimerkiksi jos hakualueen koko on 48 x 48 pikseliä, jolloin mahdollisten liikevek-. . toreiden lukumäärä yhden pikselin tarkkuudella on 33 x 33, ja luminanssiloh- 30 kon koko on 16 x 16 pikseliä, niin yhden absoluuttierojen summan laskentaan . tarvitaan 16 x 16 = 256 laskutoimitusta, ja kaikkien mahdollisten liikevektorei- ·" den absoluuttierojen summien laskentaan siten 33 x 33 x 256 = 278 784 :··.' laskutoimitusta yhtä makrolohkoa kohti. Esimerkiksi qcif-koon kuvassa on 99 makrolohkoa, eli laskutoimituksia on 99 x 278 784 = 27 599 616 laskutoimitus-35 ta.
3 110745
Laskutoimitusten määrää on pyritty vähentämään käyttämällä täys-haun sijasta vähemmän kattavia hakumenetelmiä, esimerkiksi Three Step Search, Spiral Search ja Hierarchical Motion Estimation, joissa ongelmaksi voi muodostua kuvan laadun huononeminen.
5 Lyhyt selostus
Keksinnön tavoitteena on tarjota parannettu menetelmä ja parannettu laite. Keksinnön eräänä puolena esitetään patenttivaatimuksen 1 mukainen menetelmä peräkkäisten kuvien koodaamiseksi. Keksinnön eräänä puolena esitetään patenttivaatimuksen 9 mukainen laite peräkkäisten kuvien koo-10 daamiseksi. Keksinnön eräänä puolena esitetään patenttivaatimuksen 17 mukainen laite peräkkäisten kuvien koodaamiseksi. Keksinnön muut edulliset suoritusmuodot ovat epäitsenäisten patenttivaatimusten kohteena.
Keksintö perustuu siihen, että liikkeenestimointi suoritetaan indeksoitua kuvaa ja indeksoitua referenssikuvaa käyttämällä.
15 Keksinnön mukainen ratkaisu tarjoaa lähes saman kuvan laadun kuin klassinen täyshaku, mutta kevyemmällä laskennalla.
Kuvioluettelo
Keksinnön edulliset suoritusmuodot selostetaan esimerkinomaisesti • » : alla viitaten oheisiin piirroksiin, joista: 20 kuvio 1 esittää laitetta peräkkäisten kuvien koodaamiseksi; :. ·; kuvio 2 esittää qcif-kokoisen kuvan jakautumista lohkoihin; :' ·. ’ kuvio 3 esittää osaa koodattavasta kuvasta; kuvio 4 esittää osaa referenssikuvasta; kuviot 5, 6 ja 7 havainnollistavat indeksoinnin suorittamista; 25 kuvio 8 on vuokaavio havainnollistaen menetelmää peräkkäisten kuvien koodaamiseksi.
Suoritusmuotojen kuvaus
Alan ammattilaiselle videokoodaus on hyvin tunnettua standardien : ." ja oppikirjojen perusteella, esimerkiksi tähän viitteeksi otettavin teoksien perus- 30 teella, Vasudev Bhaskaran ja Konstantinos Konstantinides: ’’Image and Video . Compressing Standards - Algorithms and Architectures, Second Edition”, Klu- . ! wer Academic Publishers 1997, luku 6: ’’The MPEG video standards”, ja ”Digi- :,:. tal Video Processing”, Prentice Hall Signal Processing Series, luku 6: ’’Block
Based Methods”.
110745
Koodattavat peräkkäiset kuvat ovat tyypillisesti liikkuvaa kuvaa, esimerkiksi videokuvaa. Videokuva muodostuu kamerassa yksittäisistä peräkkäisistä kuvista. Kameralla muodostetaan kuvaa pikseleinä esittävä matriisi, esimerkiksi alussa kuvatulla tavalla, jossa luminanssille ja krominanssille ovat 5 omat matriisinsa. Kuvaa pikseleinä esittävä datavuo viedään enkooderiin. Tietenkin on mahdollista rakentaa myös sellainen laite, jossa datavuo saadaan enkooderiin esimerkiksi tiedonsiirtoyhteyttä pitkin tai vaikkapa tietokoneen muistivälineeltä. Tällöin tarkoituksena on se, että kompressoimaton videokuva kompressoidaan enkooderilla esimerkiksi edelleenlähetystä tai tallennusta var-10 ten. Enkooderilla muodostettu kompressoitu videokuva siirretään kanavaa käyttäen dekooderille. Dekooderi tekee periaatteessa saman kuin enkooderi teki kuvaa muodostettaessa, mutta käänteisesti. Kanava voi olla esimerkiksi kiinteä tai langaton tiedonsiirtoyhteys. Kanava voidaan myös tulkita siirtotieksi, jota käyttäen videokuva tallennetaan jollekin muistivälineelle, esimerkiksi laser-15 levylle, ja jota käyttäen videokuva sitten luetaan muistivälineeltä ja käsitellään dekooderilla. Kanavassa siirrettävälle kompressoidulle videokuvalle voidaan suorittaa myös muuta koodausta, esimerkiksi kanavakoodausta kanavakoode-rilla. Kanavakoodaus puretaan kanavadekooderilla. Enkooderi ja dekooderi voidaan sijoittaa erilaisiin laitteisiin, esimerkiksi tietokoneisiin, erilaisten 20 radiojärjestelmien tilaajapäätelaitteisiin kuten matkaviestimiin, tai muihin '..; laitteisiin, joissa halutaan käsitellä videokuvaa. Enkooderi ja dekooderi voidaan myös yhdistää samaan laitteeseen, jota voidaan tällöin nimittää videokoode-'· '· kiksi. Viitaten kuvioon 1 selostetaan peräkkäisten kuvien koodaamislait- teen eli enkooderin rakenne. Kuviossa 1 kuvataan enkooderin toimintaa teo-25 reettisella tasolla. Käytännössä enkooderin rakenne on paljon monimutkaisempi, kun alan ammattilainen lisää siihen tunnetun tekniikan mukaiset tarvittavat asiat, esimerkiksi tarvittavan ajastuksen ja kuvan käsittelyn lohkoittain. Peräkkäisiä kuvia 130 tuodaan väliaikaisesti tallennettavaksi kehyspuskuriin 102. Kehyspuskurista 102 viedään yksittäinen kuva 132 lohkoon 104, jossa 30 valitaan haluttu koodausmuoto. Laitteen toimintaa ohjaa ohjausosa 100, joka mm. valitsee halutun koodausmuodon ja ilmoittaa valitun koodausmuodon . 156, 158 lohkolle 104 ja lohkolle 120. Koodausmuoto voi olla intrakoodaus tai interkoodaus. Intrakoodatulle kuvalle ei tehdä liikkeenkompensointia, kun taas •: · * interkoodatulle kuvalle tehdään liikkeenkompensointia. Yleensä ensimmäinen ,.V 35 kuva on intrakoodattu, ja sitä seuraavat kuvat ovat interkoodattuja. Ensimmäi- • »* · 5 110745 sen kuvan jälkeenkin voidaan lähettää intrakuvia, esimerkiksi jos koodattavalle kuvalle ei löydetä tarpeeksi hyviä liikevektoreita.
Seuraavaksi kuvataan laitteen toimintaa, kun lohkossa 104 on valittu intrakoodaus.
5 Intrakuvalle lohko 104 saa syötteeksi vain kehyspuskurista 102 tu levan kuvan 132. Kehyspuskurista 102 saatu kuva 132 viedään sellaisenaan 134 diskreettikosinimuunnoslohkoon 106, jossa suoritetaan alussa kuvattu diskreettikosinimuunnos.
Diskreettikosinimuunnettu kuva 136 viedään kvantisointilohkoon 10 108, jossa suoritetaan kvantisointi, eli periaatteessa diskreettikosinimuunnetun kuvan jokainen alkio jaetaan jollakin vakiolla ja jakolaskun tulos pyöristetään kokonaisluvuksi. Tämä vakio saattaa vaihdella eri makrolohkojen välillä. Kvan-tisointiparametri, josta kyseiset jakajat lasketaan, on tavallisesti välillä 1-31. Mitä enemmän nollia saadaan lohkoon, sitä paremmin lohko pakkaantuu, sillä 15 nollia ei kanavaan lähetetä.
Sitten kvantisoitu ja diskreettikosinimuunnettu kuva 138 viedään muuttuvamittaiseen kooderiin 110, jonka ulostulosta tulee laitteella tuotettu koodattu kuva 140.
Kvantisointilohkosta 108 viedään kvantisoitu ja diskreetti-20 kosinimuunnettu kuva 138 muuttuvamittaisen kooderin 110 lisäksi myös kään-teiskvantisointilohkoon 112, joka suorittaa sisääntuodulle kvantisoidulle ja dis-’;·· kreettikosinimuunnetulle kuvalle 138 käänteiskvantisoinnin eli palauttaa sen ’· ' mahdollisimman lähelle kuvaa 136. Sitten käänteiskvantisoitu kuva 142 vie- dään käänteisdiskreettikosinimuunnoslohkoon 114, jossa suoritetaan kään-25 teisdiskreettikosinimuunnos. Koska diskreettikosinimuunnos on häviötön muunnos mutta kvantisointi ei, niin kuva 144 ei täysin vastaa kuvaa 134. Käänteiskvantisoinnin ja käänteisdiskreettikosinimuunnoksen tarkoituksena on tuottaa enkooderissa samanlainen kuva kuin minkä koodauslaitetta vastaava dekooderi tuottaa. ’’Dekoodattu” kuva 144 viedään sitten lohkoon 124, jossa 30 kuvaan lisättäisiin siitä poistettu osuus, erodata, jos kuva olisi interkoodattu.
> I
Koska kysymyksessä on intrakoodattu kuva, siihen ei lisätä mitään. Tämän oh-; . jauksen tekee lohko 120, jossa on valittuna intrakoodaus, jolloin lohkon 120 sisääntulossa ei ole mitään, jolloin myöskään sen lohkoon 124 kytketty ulostu-:··' lo 154 ei sisällä mitään. Intrakuva 146 tallennetaan sitten kehyspuskuriin 116.
. V 35 Näin kehyspuskuriin 116 tallennetaan rekonstruoitu kuva eli koodattu kuva sii nä muodossa, jossa se on dekooderissa suoritettavan dekoodauksen jälkeen.
6 110745
Kehyspuskureita on siis kaksi, ensimmäiseen 102 tallennetaan laitteeseen tuleva kuva, ja toiseen 116 rekonstruoitu ’’edellinen” kuva. Näin käsiteltiin siis kuvaa, jolle lohkoissa 104 ja 120 oli valittu intrakoodaus.
Seuraavaa kuvaa käsiteltäessä voidaan alkaa käyttämään liikkeen 5 kompensointia.
Tällöin lohkoissa 104 ja 120 on valittu interkoodaus. Kehyspuskuriin 116 tallennettu kuva on nyt siis referenssikuva, ja koodattava kuva on kehys-puskurista 102 saatava seuraava kuva 132. Kuten kuviosta 1 havaitaan, seu-raava kuva viedään lohkon 104 lisäksi myös liikkeenestimointilohkoon 118. 10 Liikkeenestimointilohkoon 118 saadaan myös kehyspuskurista 116 referenssi-kuva 150. Liikkeenestimointilohkon 118 toimintaa kuvataan myöhemmin tarkemmin, mutta kuitenkin siinä suoritetaan haku, jossa pyritään löytämään referenssikuvasta lohkoja, jotka vastaavat koodattavassa kuvassa olevia lohkoja. Lohkojen väliset siirtymät ilmaistaan liikevektoreina 152, 166, jotka viedään 15 sekä muuttuvamittaiseen kooderiin 110 että kehyspuskuriin 116.
Lohkolle 122 viedään referenssikuva 148 kehyspuskurista 116. Lohko 122 vähentää koodattavasta kuvasta 132 referenssikuvan 148, jolloin saadaan erodata 164, joka viedään lohkosta 104 diskreettikosinimuunnosloh-kon 106 ja kvantisointilohkon 108 kautta muuttuvamittaiseen kooderiin 110.
... 20 Muuttuvamittainen kooderi 110 koodaa siis erodatan 138 ja liikevek- torit 166, jolloin muuttuvamittaisen kooderin 110 ulostulosta 140 saadaan in-’;· terkoodattu kuva. Muuttuvamittainen kooderi 110 saa siis syötteiksi diskreetti- '· *· kosinimuunnetun ja kvantisoidun erodatan 138 sekä liikevektorit 166. Enkoo- derin ulostulosta 140 siis saadaan interkoodatulle kuvalle koodattua kuvaa 25 esittävää kompressoitua dataa, joka kuvaa koodatun kuvan suhteessa refe-’ renssikuvaan käyttäen esitykseen liikevektoreita ja erodataa. Liikkeenestimoin- ti tehdään luminanssilohkoja käyttäen, mutta koodattava erodata lasketaan sekä luminanssi- että krominanssilohkoille.
Kyseisen interkoodatun kuvan erodatalle 138 suoritetaan myös 30 käänteiskvantisointi käänteiskvantisointiiohkossa 112 ja käänteisdiskreetti-kosinimuunnos käänteisdiskreettikosinimuunnoslohkossa 114. Näin käsitelty ; . erodata 144 viedään lohkoon 124, jossa siihen lisätään kyseistä interkuvaa koodattaessa vähennetty edellinen kuva 154, joka otettiin liikevektorin osoit-·· tamasta paikasta. Sitten lohkosta 124 viedään erodatan ja edellisen kuvan Λ' 35 summa 146 kehyspuskuriin 116, jolloin saadaan rekonstruoitu kuva. Rekonst-' 1 ruoitu kuva vastaa sitä kuvaa, joka saadaan dekooderissa, kun interkoodatun 7 110745 kuvan 140 koodaus puretaan. Näin kehyspuskurissa 116 on jälleen valmiina referenssikuva seuraavan kehyspuskurista 102 saatavan kuvan 132 koodausta varten.
Ohjauslohko 100 ohjaa enkooderin toimintaa. Koodausmuodon va-5 linnan lisäksi se ohjaa mm. oikean kvantisointisuhteen valintaa 160 ja muuttu-vamittaisen koodauksen suorittamista 162. Samoin ohjauslohko 100 voi ohjata myös muita enkooderin lohkoja, vaikka sitä ei ole kuviossa 1 kuvattu. Esimerkiksi liikkeenestimointilohkon 118 toimintaa ohjaa ohjauslohko 100.
Seuraavaksi kuvion 8 vuokaavioon viitaten selostetaan menetelmä 10 peräkkäisten kuvien koodaukseen. Koodaus esitetään nimenomaan ajallisen redundanssin vähentämisen kannalta, eikä muita redundanssin vähentämismenetelmiä kuvata tässä yhteydessä. Menetelmän suorittaminen aloitetaan lohkossa 800, jossa enkooderi käynnistetään. Lohkossa 802 haetaan seuraa-va kuva kehysmuistista. Kuva voi olla esimerkiksi kuviossa 2 kuvattu qcif-15 kokoinen kuva, jossa on 176 x 144 luminanssipikseliä. Kuva on jaettu makro-lohkoihin 200, joiden luminanssiosien koko on 16 x 16 pikseliä ja joita on yksitoista saraketta ja yhdeksän riviä. Luminanssipikseleitä voidaan kuvata matriisilla /o,0 f0,1 f0,2 ··· /0,175 .. . f 1,0 f\,l f 1,2 — /1,175 fij = f2,0 Λ,Ι f2,2 ·· /2,175 > (2) • · t .·· ·»· ··· ·.« ··.
’· _/l43,0 /l43,l /l43,2 ·" /43,175 _ '· ‘ 20 jossa i=0,1,2.....143 ja j=0,1,2.....175.
Lohkossa 804 prosessoidaan kuva indeksoiduksi kuvaksi siten, että :, kuva jaetaan indekseillä viitattaviin osiin ja kussakin osassa olevien pikselei- den arvoista muodostetaan pikseleiden arvoja kyseisessä osassa kuvaava luku.
25 Eräässä suoritusmuodossa osan sisältämät pikselit muodostavat neliön, sillä tämä on hakijan suorittamien kokeiden mukaan edullista. Kuvako-
» I
(L. ko ja lohkokoko asettavat tietyt rajoituksensa menetelmässä käytettävän in- . deksoidun osan koolle. Qcif-kokoiselle kuvalle hakijan kokeiden mukaan on edullista, että osa sisältää 4x4 pikseliä. Tällöin matriisi 2 voidaan kuvata seu-’: *' 30 raavasti: t · * » » »
I I
t I I » 8 F F F F i 110745 *0,0 *Yl ^0,2 " M),172 ^.,0 Ft, Fl2 ... ^1,172
Fjj = F20 F2i F22 ... F2m , (3) •^140,0 -^140,1 ^140,2 — ^140,172 _ jossa 1=0,1,2,...,140 ja J=0,1,2.....172.
Indeksoinnin lisäksi siis kussakin osassa olevien pikseleiden arvoista muodostetaan pikseleiden arvoja kyseisessä osassa kuvaava luku. Yksin-5 kertaisimmin tämä luku saadaan laskemalla yhteen kyseisessä osassa olevien pikseleiden lukuarvot. Matriisi 3:n kunkin osan luku saadaan matriisista 2 seu-raavalla kaavalla: /+3 J+3 ί·,,=ΣΣΛ w /=/ j=j
Eli esimerkiksi indeksillä Fo.o viitattavan osan luku saadaan lasku-10 toimituksella =ΣΣ/*· (5) /=0 ./=0 indeksillä F0,i viitattavan osan luku saadaan laskutoimituksella ^,'ΣΣΛ- (®)
/-o J.I
« · •.,; indeksillä Fi,0 viitattavan osan luku saadaan laskutoimituksella V' is iu-tt/*· <n ·, * /=1 7=0 . ‘ · ja indeksillä Fi,i viitattavan osan luku saadaan laskutoimituksella (8) ; ' * /=1 7=1
Kuten vertaamalla matriiseja 2 ja 3 havaitaan, lähellä toisiaan sijaitsevat indekseillä viitattavat osat menevät osittain toistensa päälle. Tällä tarkoi-20 tetaan sitä, että esimerkiksi indekseillä F0,o ja Fii0 viitattavat alueet sisältävät kaksitoista samaa matriisin 2 pikseliä, eli pikselit fi,o, fi,i, fi,2, fi,3. h,o, f2.i, f2.2, ;, ’ f2,3, f3,o. f3,i, f3,2, ja f3,3- Tällöin eräässä suoritusmuodossa laskettaessa kahden vierekkäisen indekseillä viitattavan osan lukuja, ensimmäisen osan luvun laskennassa hyödynnetään toiselle osalle jo laskettua lukua. Tämä liukuvan las-25 kennan periaate voidaan esittää seuraavasti. Kuten edellä jo todettiin, niin kaavalla 5 voidaan laskea indeksillä Fo,o viitattavan osan luku. Tällöin muut lukuarvot saadaan liukuvasti siten, että (9) 9 110745 7=0 7=0
Fi,°=K‘>-t.fu+i,f5j do» 7=0 7=0
Samaa periaatetta voidaan soveltaa kaikkien lukuarvojen laskentaan, myös siirryttäessä matriisin 2 vasemmasta laidasta oikeaan laitaan.
5 Kun kuva on prosessoitu lohkossa 804 yllä esitettyjä periaatteita käyttäen indeksoiduksi kuvaksi, voidaan siirtyä lohkoon 806, jossa valitaan käytettävä koodausmuoto, intrakoodaus tai interkoodaus.
Jos valittu koodausmuoto on intrakoodaus, siirrytään lohkosta 806 nuolen 808 mukaisesti lohkoon 810, jossa koodataan kuva, eli suoritetaan sille 10 diskreettikosinimuunnos ja kvantisointi, mutta ei liikkeenestimointia. Sitten siirrytään lohkoon 826, jossa tallennetaan intrakoodattu kuva referenssikuvaksi. Tämän jälkeen lohkossa 828 tallennetaan indeksoitu kuva indeksoiduksi referenssikuvaksi, joka sisältää indekseillä viitattavat osat, ja kussakin osassa olevien pikseleiden arvoista on muodostettu pikseleiden arvoja kyseisessä osas-15 sa kuvaava luku. On huomattava, että tässä hyödynnetään sitä, että kuvalle on lohkossa 804 suoritettu prosessointi indeksoiduksi kuvaksi. Samoin on huomattava, että lohkojen 826 ja 828 toimenpiteet voivat olla optionaalisia, sil-lä referenssikuvan ei välttämättä tarvitse olla koodattavaa kuvaa välittömästi *..! edeltävä kuva, vaan se voi olla jokin aikaisempikin kuva.
;*. 20 Lohkosta 828 siirrytään lohkoon 830, jossa tarkistetaan, onko koo- dattavia kuvia vielä jäljellä. Jos kuvia ei ole enää jäljellä, siirrytään nuolen 832 • " mukaisesti lohkoon 834, jossa lopetetaan menetelmän suoritus. Jos kuvia taas ”"· on jäljellä, niin sitten siirrytään nuolen 836 mukaisesti lohkoon 802, jossa hae- :: taan seuraava kuva kehysmuistista.
25 Jos lohkossa 806 valittu koodausmuoto on interkoodaus, niin sitten siirrytään lohkosta 806 nuolen 812 mukaisesti lohkoon 814, jossa määritellään indeksoituun referenssikuvaan hakualue, josta haetaan indeksoidussa kuvas-.·. : sa olevaa koodattavaa lohkoa. Interkoodausta ei siis voida suorittaa ensim- .···' mäiselle kuvalle, koska se edellyttää, että ainakin yksi referenssikuva täytyy 30 olla olemassa. Esimerkissämme täytyy siis olla jo yksi intrakoodattu kuva, eli lohkojen 810, 826 ja 828 toimenpiteet täytyy olla suoritettuna kyseiselle referenssikuvalle. Jatkossa referenssikuva voi tietenkin olla jokin aikaisemmin in-, terkoodattu kuva.
10 1 10745
Kuvioissa 3 ja 4 havainnollistetaan haun suorittamista. Kuvio 3 esittää osaa koodattavasta kuvasta 300 ja kuvio 4 esittää osaa referenssikuvasta 400. Osat 300, 400 kuvaavat samaa kohtaa kuviossa 2 kuvatusta qcif-kokoisesta kuvasta. Koodattava kuva 300 siis koostuu 16 x 16 pikselin kokoi-5 sista luminanssilohkoista. Krominanssilohkot ovat yleensä 8x8 pikselin suuruisia, mutta niitä ei kuvioissa 3 ja 4 kuvata, koska krominanssilohkoja ei käytetä liikkeenestimoinnissa hyväksi. On huomattava, että kuvioissa 3 ja 4 kuvataan kuvien todellista sisältöä, ilman indeksointia, selvyyden vuoksi.
Oletetaan esimerkissämme, että kuvassa ei ole muuta kuin täsmäl-10 teen yhteen lohkoon 302 sopiva kuva, joka muodostuu poikittaisviivoituksesta ja H-kirjaimesta. Referenssikuvaan 400, menetelmässämme indeksoituun referenssikuvaan, määritellään siis hakualue 402, josta haetaan koodattavassa kuvassa, menetelmässämme indeksoidussa koodatussa kuvassa, olevaa kuvaelementtiä, joka on lohkossa 302. Liikevektoreiden haku rajataan tavallisesti 15 [-16, 16] kokoiselle hakualueelle 402, jolloin hakualue 402 siis muodostuu yh deksästä 16 x 16 pikselin kokoisesta lohkosta. Hakualueen 402 yhdeksän lohkoa sijoittuvat kuviossa 4 kuvatulla tavalla koodattavassa kuvassa 300 olevan koodattavan lohkon 302 sijaintipaikan referenssikuvassa 400 ympärille. Hakualue 402 on siis kooltaan 48 x 48 pikseliä. Tällöin mahdollisten liikevektorei- : ·. ·. 20 den, eli liikevektorikandidaattien, lukumäärä on 33 x 33.
'·.! Sitten siirrytään lohkoon 816, jossa lasketaan kunkin liikevektori- kandidaatin kustannusfunktio indeksoitua kuvaa ja indeksoitua referenssiku-vaa käyttämällä. Kuvioissa 5, 6 ja 7 havainnollistetaan indeksoinnin suorittamista siten, että niissä kuvataan pikseleittäin 502 osaa kuviossa 4 kuvatusta 25 hakualueesta 402. Kuviossa 5 esitetään, mitä indekseillä viitattavia alueita 500 tarvitaan liikevektorikandidaatin [0,0] laskemisessa, eli siihen käytetään matriisista 3 seuraavia elementtejä: ^0,0 -^0,4 -^0,8 ^0,12 F= ^4.° F4>4 F F F F ^ ... 1 8,0 1 8,4 1 8,8 1 8,12 .··' J*12,0 ^12,4 ^12,8 ^12,12 _ ; Kuvion 6 mukaisesti liikevektorikandidaatin [1,0] laskemiseen tarvi- 30 taan matriisista 3 seuraavat elementit: 11 110745
Fo, ^0,5 ^0,9 ^0,13 F_ ^-5 ^49 ^413 /-J2\ /¾.. ^8,5 ^8,9 ^8,,3 ' •^12,1 ^12,5 -^12,9 ^12,13 _
Samalla periaatteella kaikkien mahdollisten liikevektorikandidaattien laskemiseen tarvittavat luvut saadaan matriisista 3, esimerkiksi liikevektori-kandidaatille [4,0] tarvitaan kuvion 7 mukaisesti matriisista 3 seuraavat ele-5 mentit: ^0,4 ^0,8 -^0,12 ^0,16
„ ^4,4 ^4,8 ^4,12 ^4,16 M
b = p F F F (12) rS,4 rS,S ^8,12 “ 8,16 _^12,4 ^12,8 ^12,12 ^12,16_
Liikkeen estimointi hakualueella voidaan esittää kaavalla: 3 3 MV(x,y) = | min^ ΣΣΙ ^i*4,/*4 ^i*4+xtj*4+y | (13) ’y /=0 7=0 jossa MV on lopullinen liikevektori, Fxy on koodattavan kuvan indek-10 sille laskettu luku ja Rxy on referenssikuvan indeksille laskettu luku. Verrattaessa menetelmässämme käytettyä kaavaa 13 tunnetun tekniikan mukaiseen kaavaan 1 voidaan todeta, että menetelmässämme liikkeenestimointi vaatii 33 x 33 x 4 x 4 = 17424 laskutoimitusta, eli 16 kertaa vähemmän kuin perintei-.··· sessä täyshakumenetelmässä. Indeksien laskemista ei ole tässä huomioitu, . 15 mutta ne tarvitsee laskea vain kerran koko kuvalle. Esimerkissämme kustan- • t nusfunktiona käytetään SAD-funktiota (Sum of Absolute Differences), mutta alan ammattilaiselle on selvää, että myös muita kustannusfunktioita voidaan käyttää, jos niiden laskennassa voidaan hyväksikäyttää kuvan indeksointime-netelmää.
20 Kuvioiden 3 ja 4 esimerkissämme (indeksoidusta) referenssikuvasta 400 löydettiin (indeksoidussa) koodattavassa kuvassa 300 olevaa koodattavaa lohkoa 302 vastaava lohko 404. Koodattavan lohkon 302 liikkeen referenssi-kuvasta 400 löydettyyn lohkoon 404 nähden ilmaisee liikevektori 406. Liikevek-;“· tori voidaan kuvata esimerkiksi koodattavan lohkon 302 vasemmanpuoleisim- • ; 25 man yläkulman pikselin liikevektorina. Lohkon 302 muut pikselit liikkuvat tietys ti myös kyseisen liikevektorin suuntaan.
Kuvan origo (0, 0) on yleensä kuvan vasemmanpuoleisessa yläkul-;;· massa oleva pikseli. Videokoodausterminologiassa liikkeet ilmaistaan siten, että liike oikealle on positiivinen, vasemmalle negatiivinen, ylös negatiivinen ja 12 110745 alas positiivinen. Liikevektori 406 on (12, -4), eli liike on kaksitoista pikseliä X-akselin suunnassa oikealle ja neljä pikseliä Y-akselin suunnassa ylöspäin.
Lohkosta 816 siirrytään sitten lohkoon 818, jossa koodataan kuvan koodattava lohko pienimmän kustannusfunktion arvon antavaa liikevektorikan-5 didaattia käyttämällä, joka liikevektorikandidaatti siis määrittää liikkeen kuvan koodattavan lohkon ja referenssikuvan hakualueella olevan kandidaattilohkon välillä.
Sitten siirrytään lohkoon 820, jossa testataan, onko koodattavassa kuvassa koodattavia lohkoja vielä jäljellä. Jos koodattavia lohkoja on vielä jäl-10 jellä, siirrytään nuolen 822 mukaisesti lohkoon 814, jossa aletaan hakea seu-raavaa koodattavaa lohkoa referenssikuvassa vastaavaa lohkoa. Nuolen 822 mukaista silmukkaa siis toistetaan kunnes koodattavan kuvan lohkot on käsitelty halutulla tavalla, joko kaikki tai osa niistä.
Jos koodattavia lohkoja ei ole enää jäljellä, niin sitten siirrytään loh-15 kosta 820 nuolen 824 mukaisesti ensin lohkoon 826 ja sitten lohkoon 828, joissa haluttaessa tallennetaan juuri koodattu kuva referenssikuvaksi ja indeksoitu koodattu kuva indeksoiduksi referenssikuvaksi. Sitten lohkossa 830 tarkistetaan, onko koodattavia kuvia vielä jäljellä. Jos koodattavia kuvia ei ole enää jäljellä, niin sitten siirrytään nuolen 834 mukaisesti lohkoon 834, jossa ;·· 20 lopetetaan menetelmän suoritus, muutoin siirrytään nuolen 836 mukaisesti , · · · lohkoon 802, jossa haetaan seuraava koodattava kuva.
Kuviossa 8 kuvatussa menetelmässä koodattavan kuvan proses-! sointia indeksoiduksi kuvaksi hyödynnetään siten, että saman prosessoinnin '· * tulos voidaan myös tallentaa indeksoiduksi referenssikuvaksi. Tämä vähentää 25 tarvittavaa laskentaa, mutta jos muistikäyttöä halutaan optimoida, voidaan in-. deksoitu referenssikuva laskea vasta ennen sen käyttöä tallennetusta refe renssikuvasta.
Eräässä suoritusmuodossa kun pienimmän kustannusfunktion arvon antava liikevektorikandidaatti on löydetty yhden pikselin tarkkuudella, etsi-30 tään kyseisen liikevektorikandidaatin ympäriltä puolen pikselin tarkkuudella pa- * .-*· ras liikevektorikandidaatti. Tätä kuvataan kuviossa 8 lohkolla 840. Puolen pik- : · selin liikkeen estimoinnissa löydetyn 16 x 16 lohkon paikka tarkistetaan vielä puolen pikselin tarkkuudella. Normaalisti tähän tarvitaan 18 x 18 kokoinen matriisi pikseleiden interpolointia varten, mutta esittämämme indekseihin poh-35 jautuva menettely mahdollistaa sen, että interpoloitava alue on 6 x 6 kokoinen indeksejä käyttävä matriisi. Puolen pikselin liikevektori saadaan soveltamalla 13 110745 kaavaa 13, jolloin menettely on myös 16 kertaa vähemmän laskentaa tarvitseva kuin perinteinen puolen pikselin tarkkuuden liikkeenestimointi.
Eräässä suoritusmuodossa puolen pikselin tarkkuudella paras liike-vektorikandidaatti etsitään seuraavasti: 5 interpoloidaan löydettyä yhden pikselin liikevektorikandidaattia refe renssikuvassa vastaavalle indeksoidulle kandidaattilohkolle ja sen ympärille puolen pikselin arvot; lasketaan kunkin puolen pikselin liikevektorikandidaatin kustannus-funktio indeksoitua kuvaa ja interpoloitua indeksoitua kandidaattilohkoa käyt-10 tämällä; koodataan kuvan koodattava lohko pienimmän kustannusfunktion arvon antavaa puolen pikselin liikevektorikandidaattia käyttämällä.
Eräässä suoritusmuodossa hyödynnetään sitä tunnettua seikkaa, että nykyiset koodausstandardit sallivat myös kuvan ulkopuolelle osoittavat 15 liikevektorit. Kuvatussa indeksoidussa liikkeenestimoinnissa tähän päästään ylitäyttämällä indeksitaulukko siten, että kuvan kussakin laidassa, sekä ylhäällä, alhaalla että sivuissa on 16 pikseliä, jotka on kopioitu sinne varsinaisen kuva-alueen ulkolaidoista. Tämä toimenpide voidaan kuviossa 8 suorittaa lohkolla 842. Indeksoidun matriisin 3 koko on kuvan koko vähennettynä kolmella, eli 20 esimerkissämme 173 x 141. Huomioitaessa ylitäyttö kuvan koko on 173+32 x 141+32, tai toisin ilmaistuna 176+29 x 144+29. Luku 29 saadaan tietenkin vä-hentämäliä ylitäytön vaatimasta tilasta eli luvusta 32 luku kolme.
» » *; ' Seuraavassa C-ohjelmointikielen syntaksia käyttävällä pseudokoo- ' dilla kuvataan indeksoidun taulukon laskenta ja indeksien ylitäyttö.
25 typedef struct { [ u8 *image; /* Osoitin kuvaan, joka indeksoidaan 7
u16 pels; /* Kuvan sarakkeiden määrä V
u16 Iines; /* Kuvan rivien määrä V
u16*mv; /* Osoitin indeksitaulukkoon 7 30 } index_s; ; . void Melndex(index_s *vop) { ·:* u16 i, j; 35 u16pelsMv; u16*tmp = NULL; * »» » 14 1 1074 5 u16*tmp1 = NULL; u16 *put = NULL; u16 *start= NULL; u8 ‘block = NULL; 5 /* Yhden indeksisarakkeen väliaikainen muisti */ tmp = (u16 *)malloc(sizeof(u16)*vop->lines); /* Indeksitaulukon sarakkeiden määrä, 7 10 /* ylitäytön vaatima tila on huomioitu 7 pelsMv = vop->pels+29; /* Osoitin ensimmäiseen indeksiin, edustaa liikevektoria (0,0) 7 start = vop->mv+pelsMv*16+16; 15 /* Lasketaan indeksitaulukon ensimmäinen sarake 7 block = image; put = start; for (j = 0; j < 4; j++) { 20 tmp[j] = block[0]+block[1]+block[2]+block[3]; block+= vop->pels; ; put[0] = tmp[0]+tmp[1]+tmp[2]+tmp[3]; tmp1 = tmp; 25 for (j = 4; j < vop->lines; j++) { ·..· tmp1[4] = block[0]+block[1]+block[2]+block[3]; putfpelsMv] = put[0]+tmp1[4]-tmp1[0]; block += vop->pels; tmp1++; put += pelsMv; } : ·,: 30 /* Lasketaan indeksitaulukon loput sarakkeet */ · for (i = 1; i < vop->pels-3; i++) { block = image+i; put = start+i; 35 for (j = 0; j < 4; j++) { ..... tmp[j] = tmpö]+block[3]-block[-1]; 15 110745 block += vop->pels; } put[0] = tmp[0]+tmp[1]+tmp[2]+tmp[3]; tmp1 = tmp; 5 for (j = 4; j < vop->lines; j++) { tmp1[4] = tmp1[4]+block[3]-block[-1]; put[pelsMv] = put[0]+tmp1[4]-tmp1[0]; block += vop->pels; tmp1++; put += pelsMv; } 10 } free(tmp); /* Ylitäytetään indeksitaulukko */ 15 IndexOverfill(vop); return; } 20 void lndexOverfill(index_s *vop) ;··: { .·.u16 i, j; : ' u16 pelsMv; '· u16 *put = NULL; /* Apumuuttuja, osoitin indeksitaulukkoon */ 25 u16 *get = NULL; /* Apumuuttuja, osoitin indeksitaulukkoon */ /* Indeksitaulukon sarakkeiden määrä, 7 /* ylitäytön vaatima tila on huomioitu 7 pelsMv = vop->pels + 29; :' ·.' 30 /* Ylitäytetään taulukon keskiosa ylhäältä 7 :· put = vop->mv + 16; get = vop->mv + pelsMv*16 + 16; *"' for (j = 0; j < 16; j++) { . 35 for (i = 0; i < vop->pels; i++) { put[i] = get[i]; 16 110745 } put += pelsMv; } 5 /* Ylitäytetään taulukon keskiosa alhaalta 7 put = vop->mv + (vop->lines+13)*pelsMv+16; get = vop->mv + (vop->lines+12)*pelsMv+16; for G = 0; j < 16; j++){ for (i = 0; i < vop->pels; i++) { 10 put[i] = get[i]; } put += pelsMv; } 15 /* Ylitäytetään taulukko vasemmalta 7 put = vop->mv; get = vop->mv + 16; for (j = 0; j < vop->lines+29; j++) { for (i = 0; i < 16; i++) { 20 put[i] = *get; } put+= pelsMv; get+= pelsMv; } 25 /* Ylitäytetään taulukko oikealta 7 put = vop->mv + vop->pels+13; get = vop->mv + vop->pels+12; for (j = 0; j < vop->lines+29; j++) { for (i = 0; i < 16; i++) { 30 put[i] = *get; .:·· } : · put += pelsMv; get += pelsMv; } ..· 35 return; } „ 110745
Kuvattu menetelmä voidaan toteuttaa esimerkiksi kuviossa 1 kuvattua enkooderia käyttämällä. Kuviossa 1 kuvattu enkooderi eli laite peräkkäisten kuvien koodaamiseksi käsittää välineet 110 koodata kuvan koodattava lohko pienimmän kustannusfunktion arvon antavaa liikevektorikandidaattia käyttä-5 mällä, joka liikevektorikandidaatti määrittää liikkeen kuvan koodattavan lohkon ja referenssikuvan hakualueella olevan kandidaattilohkon välillä. Laite käsittää lisäksi välineet 118 - prosessoida kuva indeksoiduksi kuvaksi ja referenssikuva indeksoiduksi referenssikuvaksi siten, että kuva ja referenssikuva jaetaan indekseil- 10 lä viitattaviin osiin ja kussakin osassa olevien pikseleiden arvoista muodostetaan pikseleiden arvoja kyseisessä osassa kuvaava luku; - määritellä indeksoituun referenssikuvaan hakualue, josta haetaan indeksoidussa kuvassa olevaa koodattavaa lohkoa; ja - laskea kunkin liikevektorikandidaatin kustannusfunktio indeksoitua 15 kuvaa ja indeksoitua referenssikuvaa käyttämällä.
Laite voidaan myös konfiguroida koodaamaan kuvan koodattava lohko pienimmän kustannusfunktion arvon antavaa liikevektorikandidaattia käyttämällä, joka liikevektorikandidaatti määrittää liikkeen kuvan koodattavan lohkon ja referenssikuvan hakualueella olevan kandidaattilohkon välillä. Tällöin 20 laite on lisäksi konfiguroitu:
• I
- prosessoimaan kuva indeksoiduksi kuvaksi ja referenssikuva in-deksoiduksi referenssikuvaksi siten, että kuva ja referenssikuva jaetaan indek-
* I
! seillä viitattaviin osiin ja kussakin osassa olevien pikseleiden arvoista muodos tetaan pikseleiden arvoja kyseisessä osassa kuvaava luku; 25 - määrittelemään indeksoituun referenssikuvaan hakualue, josta : . haetaan indeksoidussa kuvassa olevaa koodattavaa lohkoa; ja - laskemaan kunkin liikevektorikandidaatin kustannusfunktio indeksoitua kuvaa ja indeksoitua referenssikuvaa käyttämällä.
Kuviossa 1 esitetyt enkooderin lohkot voidaan toteuttaa yhtenä tai 30 useampana asiakaskohtaisena integroituna piirinä (Application-Specific integ-. · * * rated Circuit, ASIC). Myös muunlaiset toteutukset ovat mahdollisia, esimerkiksi • ; erillisistä logiikkakomponenteista rakennettu piiri, tai prosessori ohjelmistoineen.
Myös näiden eri toteutustapojen sekamuoto on mahdollinen. Alan ammattilai-' ‘ ’ nen huomioi toteutustavan valinnassa esimerkiksi laitteen koolle ja virrankulu- ; 35 tukselle asetetut vaatimukset, tarvittavan prosessointitehon, valmistuskustan nukset sekä tuotantomäärät. Mainitut välineet voidaan sijoittaa enkooderin ku- 18 110745 vattuihin lohkoihin, tai sitten ne voidaan toteuttaa kuvattuihin lohkoihin liittyvinä uusina lohkoina. Esimerkiksi välineet prosessoida kuva indeksoiduksi kuvaksi ja referenssikuva indeksoiduksi referenssikuvaksi voidaan toteuttaa lohkossa 118 tai kehyspuskurissa 102, tai kehyspuskuriin 102 yhteydessä olevaa uutta lohkoa 5 käyttämällä. Myös laitteen konfigurointi voidaan toteuttaa kuvattuja tai uusia lohkoja käyttämällä.
Vaikka keksintöä on edellä selostettu viitaten oheisten piirustusten mukaiseen esimerkkiin, on selvää, ettei keksintö ole rajoittunut siihen, vaan sitä voidaan muunnella monin tavoin oheisten patenttivaatimusten esittämän 10 keksinnöllisen ajatuksen puitteissa. Siten käsiteltävien kuvien koko voi vaihdella esimerkissä käytetystä qcif-koosta, eikä se aiheuta merkittäviä muutoksia keksinnön toteuttamiseen.
» f I
» 1 I i t t r i < • · i »

Claims (24)

110745 19
1. Menetelmä peräkkäisten kuvien koodaamiseksi, käsittäen seu-raavat vaiheet: koodataan (818) kuvan koodattava lohko pienimmän kustannus-5 funktion arvon antavaa liikevektorikandidaattia käyttämällä, joka liikevektori-kandidaatti määrittää liikkeen kuvan koodattavan lohkon ja referenssikuvan hakualueella olevan kandidaattilohkon välillä; tunnettu siitä, että ennen koodaamista: prosessoidaan (804) kuva indeksoiduksi kuvaksi ja referenssikuva 10 indeksoiduksi referenssikuvaksi siten, että kuva ja referenssikuva jaetaan indekseillä viitattaviin osiin ja kussakin osassa olevien pikseleiden arvoista muodostetaan pikseleiden arvoja kyseisessä osassa kuvaava luku; määritellään (814) indeksoituun referenssikuvaan hakualue, josta haetaan indeksoidussa kuvassa olevaa koodattavaa lohkoa; ja 15 lasketaan (816) kunkin liikevektorikandidaatin kustannusfunktio in deksoitua kuvaa ja indeksoitua referenssikuvaa käyttämällä.
2. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että osan sisältämät pikselit muodostavat neliön.
.. . 3. Patenttivaatimuksen 2 mukainen menetelmä, tunnettu siitä, ‘, ; 20 että osa sisältää 4x4 pikseliä.
4. Jonkin edellisen patenttivaatimuksen mukainen menetelmä, tunnettu siitä, että kustannusfunktiona käytetään SAD-funktiota (Sum of :.' · Absolute Differences).
5 SAD-funktiota (Sum of Absolute Differences).
5. Jonkin edellisen patenttivaatimuksen mukainen menetelmä, 25 tunnettu siitä, että lähellä toisiaan sijaitsevat indekseillä viitattavat osat menevät osittain toistensa päälle.
6. Patenttivaatimuksen 5 mukainen menetelmä, tunnettu siitä, että laskettaessa kahden vierekkäisen indekseillä viitattavan osan lukuja en- _· . simmäisen osan luvun laskennassa hyödynnetään toiselle osalle jo laskettua 30 lukua.
7. Jonkin edellisen patenttivaatimuksen mukainen menetelmä, tunnettu siitä, että kun pienimmän kustannusfunktion arvon antava liike-vektorikandidaatti on löydetty yhden pikselin tarkkuudella, etsitään kyseisen liikevektorikandidaatin ympäriltä puolen pikselin tarkkuudella paras liikevekto- 35 rikandidaatti. 20 110745
8. Patenttivaatimuksen 7 mukainen menetelmä, tunnettu siitä, että puolen pikselin tarkkuudella paras liikevektorikandidaatti etsitään seuraavasti: interpoloidaan löydettyä yhden pikselin liikevektorikandidaattia refe-5 renssikuvassa vastaavalle indeksoidulle kandidaattilohkolle ja sen ympärille puolen pikselin arvot; lasketaan kunkin puolen pikselin liikevektorikandidaatin kustannus-funktio indeksoitua kuvaa ja interpoloitua indeksoitua kandidaattilohkoa käyttämällä; 10 koodataan kuvan koodattava lohko pienimmän kustannusfunktion arvon antavaa puolen pikselin liikevektorikandidaattia käyttämällä.
9. Laite peräkkäisten kuvien koodaamiseksi, käsittäen: välineet (110) koodata kuvan koodattava lohko pienimmän kustannusfunktion arvon antavaa liikevektorikandidaattia käyttämällä, joka liikevekto-15 rikandidaatti määrittää liikkeen kuvan koodattavan lohkon ja referenssikuvan hakualueella olevan kandidaattilohkon välillä; tunnettu siitä, että laite käsittää lisäksi: välineet (118) prosessoida kuva indeksoiduksi kuvaksi ja referenssikuva indeksoiduksi referenssikuvaksi siten, että kuva ja referenssikuva jae-: ·. ·. 20 taan indekseillä viitattaviin osiin ja kussakin osassa olevien pikseleiden arvois- ‘.. ta muodostetaan pikseleiden arvoja kyseisessä osassa kuvaava luku; välineet (118) määritellä indeksoituun referenssikuvaan hakualue, josta haetaan indeksoidussa kuvassa olevaa koodattavaa lohkoa; ja • välineet (118) laskea kunkin liikevektorikandidaatin kustannusfunk- 25 tio indeksoitua kuvaa ja indeksoitua referenssikuvaa käyttämällä.
10. Patenttivaatimuksen 9 mukainen laite, tunnettu siitä, että osan sisältämät pikselit muodostavat neliön.
11. Patenttivaatimuksen 10 mukainen laite, tunnettu siitä, että osa sisältää 4x4 pikseliä. . 30
12. Jonkin edellisen patenttivaatimuksen 9-11 mukainen laite, tunnettu siitä, että kustannusfunktiona käytetään SAD-funktiota (Sum of : . Absolute Differences).
13. Jonkin edellisen patenttivaatimuksen 9-12 mukainen laite, '··.’ tunnettu siitä, että lähellä toisiaan sijaitsevat indekseillä viitattavat osat . · ‘ ’ 35 menevät osittain toistensa päälle. 21 110745
14. Patenttivaatimuksen 13 mukainen laite, tunnettu siitä, että laskettaessa kahden vierekkäisen indekseillä viitattavan osan lukuja ensimmäisen osan luvun laskennassa hyödynnetään toiselle osalle jo laskettua lukua.
15. Jonkin edellisen patenttivaatimuksen 9-14 mukainen laite, tunnettu siitä, että kun pienimmän kustannusfunktion arvon antava liike-vektorikandidaatti on löydetty yhden pikselin tarkkuudella, etsitään kyseisen lii-kevektorikandidaatin ympäriltä puolen pikselin tarkkuudella paras liikevektori-kandidaatti.
16. Patenttivaatimuksen 15 mukainen laite, tunnettu siitä, että puolen pikselin tarkkuudella paras liikevektorikandidaatti etsitään seuraavasti: interpoloidaan löydettyä yhden pikselin liikevektorikandidaattia referenssikuvassa vastaavalle indeksoidulle kandidaattilohkolle ja sen ympärille puolen pikselin arvot; 15 lasketaan kunkin puolen pikselin liikevektorikandidaatin kustannus- funktio indeksoitua kuvaa ja interpoloitua indeksoitua kandidaattilohkoa käyttämällä; koodataan kuvan koodattava lohko pienimmän kustannusfunktion arvon antavaa puolen pikselin liikevektorikandidaattia käyttämällä. :·.· 20
17. Laite peräkkäisten kuvien koodaamiseksi, joka on konfiguroitu: ’ · - koodaamaan kuvan koodattava lohko pienimmän kustannusfunktion arvon antavaa liikevektorikandidaattia käyttämällä, joka liikevektorikandidaatti *; ’· määrittää liikkeen kuvan koodattavan lohkon ja referenssikuvan hakualueella '· '· olevan kandidaattilohkon välillä; 25 tunnettu siitä, että laite on lisäksi konfiguroitu: prosessoimaan kuva indeksoiduksi kuvaksi ja referenssikuva indeksoiduksi referenssikuvaksi siten, että kuva ja referenssikuva jaetaan indekseillä viitattaviin osiin ja kussakin osassa olevien pikseleiden arvoista muodostetaan pikseleiden arvoja kyseisessä osassa kuvaava luku; , ·._ 30 määrittelemään indeksoituun referenssikuvaan hakualue, josta hae taan indeksoidussa kuvassa olevaa koodattavaa lohkoa; ja • - laskemaan kunkin liikevektorikandidaatin kustannusfunktio indeksoi tua kuvaa ja indeksoitua referenssikuvaa käyttämällä.
:"· 18. Patenttivaatimuksen 17 mukainen laite, tunnettu siitä, että 35 osan sisältämät pikselit muodostavat neliön. 22 110745
19. Patenttivaatimuksen 18 mukainen laite, tunnettu siitä, että osa sisältää 4x4 pikseliä.
20. Jonkin edellisen patenttivaatimuksen 17-19 mukainen laite, tunnettu siitä, että laite on konfiguroitu käyttämään kustannusfunktiona
21. Jonkin edellisen patenttivaatimuksen 17-20 mukainen laite, tunnettu siitä, että lähellä toisiaan sijaitsevat indekseillä viitattavat osat menevät osittain toistensa päälle.
22. Patenttivaatimuksen 21 mukainen laite, tunnettu siitä, että 10 laite on konfiguroitu laskettaessa kahden vierekkäisen indekseillä viitattavan osan lukuja hyödyntämään ensimmäisen osan luvun laskennassa toiselle osalle jo laskettua lukua.
23. Jonkin edellisen patenttivaatimuksen 17-22 mukainen laite, tunnettu siitä, että kun pienimmän kustannusfunktion arvon antava liike- 15 vektorikandidaatti on löydetty yhden pikselin tarkkuudella, laite on konfiguroitu etsimään kyseisen liikevektorikandidaatin ympäriltä puolen pikselin tarkkuudella paras liikevektorikandidaatti.
24. Patenttivaatimuksen 23 mukainen laite, tunnettu siitä, että laite on konfiguroitu etsimään puolen pikselin tarkkuudella paras liikevektori- 20 kandidaatti seuraavasti: interpoloidaan löydettyä yhden pikselin liikevektorikandidaattia referenssikuvassa vastaavalle indeksoidulle kandidaattilohkolle ja sen ympärille puolen pikselin arvot; lasketaan kunkin puolen pikselin liikevektorikandidaatin kustannus-25 funktio indeksoitua kuvaa ja interpoloitua indeksoitua kandidaattilohkoa käyt-... tämällä; koodataan kuvan koodattava lohko pienimmän kustannusfunktion arvon antavaa puolen pikselin liikevektorikandidaattia käyttämällä. 23 110745
FI20012203A 2001-11-13 2001-11-13 Menetelmä ja laite peräkkäisten kuvien koodaamiseksi FI110745B (fi)

Priority Applications (2)

Application Number Priority Date Filing Date Title
FI20012203A FI110745B (fi) 2001-11-13 2001-11-13 Menetelmä ja laite peräkkäisten kuvien koodaamiseksi
PCT/FI2002/000894 WO2003043342A1 (en) 2001-11-13 2002-11-12 Method, apparatus and computer for encoding successive images

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FI20012203A FI110745B (fi) 2001-11-13 2001-11-13 Menetelmä ja laite peräkkäisten kuvien koodaamiseksi
FI20012203 2001-11-13

Publications (2)

Publication Number Publication Date
FI20012203A0 FI20012203A0 (fi) 2001-11-13
FI110745B true FI110745B (fi) 2003-03-14

Family

ID=8562246

Family Applications (1)

Application Number Title Priority Date Filing Date
FI20012203A FI110745B (fi) 2001-11-13 2001-11-13 Menetelmä ja laite peräkkäisten kuvien koodaamiseksi

Country Status (2)

Country Link
FI (1) FI110745B (fi)
WO (1) WO2003043342A1 (fi)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7463778B2 (en) 2004-01-30 2008-12-09 Hewlett-Packard Development Company, L.P Motion estimation for compressing multiple view images
WO2007138151A1 (en) 2006-05-30 2007-12-06 Hantro Products Oy Apparatus, arrangement, method and computer program product for digital video processing
FI20095273A0 (fi) 2009-03-17 2009-03-17 On2 Technologies Finland Oy Digitaalinen videokoodaus
EP2302845B1 (en) 2009-09-23 2012-06-20 Google, Inc. Method and device for determining a jitter buffer level
EP2405661B1 (en) 2010-07-06 2017-03-22 Google, Inc. Loss-robust video transmission using two decoders
US8630412B2 (en) 2010-08-25 2014-01-14 Motorola Mobility Llc Transport of partially encrypted media
US8477050B1 (en) 2010-09-16 2013-07-02 Google Inc. Apparatus and method for encoding using signal fragments for redundant transmission of data
US8751565B1 (en) 2011-02-08 2014-06-10 Google Inc. Components for web-based configurable pipeline media processing
US8891626B1 (en) 2011-04-05 2014-11-18 Google Inc. Center of motion for encoding motion fields
US8767821B2 (en) 2011-05-09 2014-07-01 Google Inc. System and method for providing adaptive media optimization
US9014265B1 (en) 2011-12-29 2015-04-21 Google Inc. Video coding using edge detection and block partitioning for intra prediction
US8908767B1 (en) 2012-02-09 2014-12-09 Google Inc. Temporal motion vector prediction
US9172970B1 (en) 2012-05-29 2015-10-27 Google Inc. Inter frame candidate selection for a video encoder
US9503746B2 (en) 2012-10-08 2016-11-22 Google Inc. Determine reference motion vectors
US9210424B1 (en) 2013-02-28 2015-12-08 Google Inc. Adaptive prediction block size in video coding
US9313493B1 (en) 2013-06-27 2016-04-12 Google Inc. Advanced motion estimation
US9807416B2 (en) 2015-09-21 2017-10-31 Google Inc. Low-latency two-pass video coding

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3846642B2 (ja) * 1994-01-31 2006-11-15 ソニー株式会社 動き量検出方法及び動き量検出装置
TW321748B (fi) * 1994-02-23 1997-12-01 Rca Thomson Licensing Corp
US6011870A (en) * 1997-07-18 2000-01-04 Jeng; Fure-Ching Multiple stage and low-complexity motion estimation for interframe video coding
US5987180A (en) * 1997-09-26 1999-11-16 Sarnoff Corporation Multiple component compression encoder motion search method and apparatus
US6014181A (en) * 1997-10-13 2000-01-11 Sharp Laboratories Of America, Inc. Adaptive step-size motion estimation based on statistical sum of absolute differences
EP0976251B1 (en) * 1998-02-13 2002-05-22 Koninklijke Philips Electronics N.V. Method and arrangement for video coding
EP0979011A1 (en) * 1998-08-06 2000-02-09 STMicroelectronics S.r.l. Detection of a change of scene in a motion estimator of a video encoder
JP2001112000A (ja) * 1999-10-07 2001-04-20 Matsushita Electric Ind Co Ltd 映像信号符号化装置

Also Published As

Publication number Publication date
FI20012203A0 (fi) 2001-11-13
WO2003043342A1 (en) 2003-05-22

Similar Documents

Publication Publication Date Title
FI110745B (fi) Menetelmä ja laite peräkkäisten kuvien koodaamiseksi
KR20000011096A (ko) 화상 부호화 장치, 화상 복호 장치, 화상 부호화 방법,화상 복호 방법 및 화상 부호화 복호 시스템
KR20040062660A (ko) 비디오 화상에 대한 글로벌 모션 보상
US20090016626A1 (en) Joint coding of multiple transform blocks with reduced number of coefficients
KR19980033152A (ko) 화상 신호의 보전 방법, 화상 신호 부호화 장치, 및 화상 신호복호화 장치
CN113557731B (zh) 用于编码和解码视频样本的块树的方法、设备和***
US11683477B2 (en) Prediction method for decoding and apparatus, and computer storage medium
US20080089418A1 (en) Image encoding apparatus and memory access method
FI109634B (fi) Menetelmä ja laite videokuvan koodaamiseksi
JP2003169332A (ja) 画像符号化方法及び画像復号化方法
US8189672B2 (en) Method for interpolating chrominance signal in video encoder and decoder
CN116684597A (zh) 图像解码设备和方法、图像编码设备和方法以及存储介质
US7006572B2 (en) Method and apparatus for decoding video bitstreams to reduced spatial resolutions
CN117061750A (zh) 用于仿射预测或运动补偿的共享预加载区域的方法和装置
CN115769573A (zh) 编码方法、解码方法及相关装置
CN118075450A (zh) 双向预测校正***和方法
US20080317133A1 (en) Mpeg video decoding method and mpeg video decoder
FI115945B (fi) Peräkkäisten kuvien koodaaminen
KR100686480B1 (ko) 코딩된 비디오 데이터 수정 방법
KR100240620B1 (ko) 양방향의 반화소 움직임 추정을 위한 대칭 탐색 윈도우를 형성하는 방법 및 장치
WO2024016156A1 (zh) 滤波方法、编码器、解码器、码流以及存储介质
CN112913242B (zh) 编码方法和编码装置
RU2781240C1 (ru) Способ и устройство предсказания для декодирования и компьютерный носитель данных
CN117280685A (zh) 编解码方法、码流、编码器、解码器以及存储介质

Legal Events

Date Code Title Description
PC Transfer of assignment of patent

Owner name: GOOGLE INC.

Free format text: GOOGLE INC.

MM Patent lapsed