# Compensació de moviment

La compensació de moviment és una tècnica utilitzada en la codificació de vídeo, el principal objectiu de la qual consisteix a eliminar la redundància temporal existent entre les imatges que componen una seqüència amb la finalitat d'augmentar-ne la compressió.
El procés es basa en un algorisme que examina la successió de fotogrames consecutius, que acostumen a ser similars entre si, per analitzar i estimar el moviment dels diferents objectes entre els dos. Si el sistema detecta que una regió de la imatge ja ha aparegut anteriorment, s'indica la posició que ocupa en el fotograma actual en lloc de tornar a codificar tota la regió.
D'aquesta manera, es generarà una predicció de la imatge actual a partir de la compensació de moviment basant-se en les imatges anteriors o posteriors de la seqüència de vídeo. A partir d'aquesta predicció podem codificar la imatge en qüestió amb menys informació i, per tant, amb un factor de compressió.

## Codificador basat en detecció de moviment

Com ja s'ha dit en codificació de vídeo s'explota la redundància temporal que hi ha entre fotogrames propers en el temps. S'assumeix que la informació que apareix en frame determinat és molt similar, per no dir igual, a la informació d'un frame proper en el temps sempre que al llarg d'aquesta seqüència no hi hagi hagut canvis de pla o canvis en l'enquadrament. Per tant, a l'hora de transmetre un frame no es transmet una imatge codificada sinó la informació, a través dels vectors de moviment, de com s'han mogut els macroblocks de la imatge de referència respecte a l'original.
Per reconstruir un fotograma en principi n'hi ha d'haver prou amb una bona imatge referència, els vectors de moviment i aplicar la compensació. Ara bé, és possible que la imatge que obtinguem no sigui del tot fidel a l'original, ja que la predicció de moviment no és del tot exacte. Per arreglar aquest problema, en el mateix codificador, es calcula una imatge error tot restant la imatge original i la compensada. El codificador que realitza aquesta tasca és el codificador híbrid. El seu nom es deu al fet que en codificació, es realitza la mateixa tasca que realitzarà el descodificador i obtenir així un error útil per obtenir un bon resultat. La descodificació es fa en forma de realimentació cap al mateix codificador.
El codificador híbrid, amb els vectors de moviment obtinguts, reconstrueix la imatge amb la compensació de moviment. Immediatament realitza una resta entre la imatge obtinguda i l'original. El resultat és una imatge error la qual es codifica amb JPEG (amb pèrdues). En la realimentació el que es realitza és la descompressió de la imatge error igual que en recepció per tal que a l'hora de trobar la imatge compensada aquesta sigui la mateixa que s'obtindrà en recepció.
Així, per cada fotograma es guarden:
* El resultat d'aplicar la DCT i la quantificació a cada imatge diferència.
* Els vectors de moviment dels elements de dins els macroblocs.
En el descodificador únicament haurem d'extreure els vectors de moviment i la imatge referència per poder realitzar la compensació de moviment amb èxit. Finalment a aquesta imatge compensada li sumarem la imatge error calculada al codificador per obtenir la seqüència molt fidel a l'original.

## Compensació de moviment backward i forward

En la compensació de moviment és necessari saber quina és la imatge en la que es generen els macroblocs i sobre la qual se'n farà l'estimació de moviment. Depenent del cas es diferencia entre:

### Compensació backward

En el cas de la compensació de moviment backward, els macroblocs són generats a la imatge que volem codificar fent l'estimació de moviment sobre la imatge de referència (o imatges de referència). És la que utilitzen la majoria dels codificadors comercials.

### Compensació forward

En el cas de la compensació de moviment forward, els macroblocs són generats a la imatge de referència fent l'estimació de moviment en la imatge que es vol codificar. El problema principal de la compensació forward és que, al disposar els nous blocs en la imatge que volem codificar, els blocs acostumen a encavalcar-se o a deixar espais buits.
Aquesta problemàtica fa que el codificador hagi d'interpolar els espais buits i decidir com es mostren els espais on s'encavalquen els blocs. Afegint complexitat en la codificació sense assegurar una millor codificació.

## Tractament dels fotogrames

La compressió dels fotogrames de la nostra seqüència es pot realitzar de dues maneres:
* Compressió intrafotograma
La DCT s'aplica a blocs de la imatge original però no es fa cap predicció sobre el moviment (la compressió és similar a les imatges JPEG). S'anomenen fotogrames I.
Aquesta compressió és útil si la compensació de moviment no proporciona una bona predicció.
* Compressió interfotograma
La DCT s'aplica als blocs de la imatge diferència i es calcula la predicció de moviment.
Es generaran dos tipus de fotogrames: els P i els B
D'aquesta manera, codificarem la nostra seqüència de vídeo a partir de les diferents imatges I, P i B segons convingui.

## Característiques particulars dels formats que utilitzen compensació de moviment

MPEG-1
Data del 1993, amb una taxa d'entre 1 i 2 Mbps. Utilitza blocs de 8x8 píxels.
Estava pensat específicament per emmagatzematge digital en CD (VCD), amb una qualitat similar al VHS de l'època. Només permet codificació progressiva.
MPEG-2
Data del 1995, amb una taxa d'entre 4 i 20 Mbps.
Aporta una millora de qualitat i és genèric, independent de l'aplicació. Permet codificació entrellaçada i diferents modes de macroblocs. S'utilitza en DVD, cable digital, TDT ...
MPEG-4
Tracta les escenes com una col·lecció d'objectes (fons estàtic, rostres, ...) on cada un es codifica independentment generant bitstreams.