Standardul de codare
video H.264Ș.l. Cristina Oprea
Departamentul de Telecomunicații
ETTI
1
Scenarii de codare video
2
H.264
Zona gri delimitată prin chenar în figură indică blocurile, respectiv etapele standardizate de către ITU în recomandarea: ”H.264 Advanced video coding for generic audiovisual services”. Standardul prevede așadar modul în care trebuie decodat fluxul video codat, precum și sintaxa acestui flux, lăsând implementarea codorului la libera alegere a utilizatorilor.
3
Caracteristici
Cel mai utilizat algoritm de compresie video la ora actuală (cel mai recent este H.265)
Format 4:2:0, cu 8 biți / eșantion
Compresie mai bună (de aproximativ 2 ori) față de orice alt standard
anterior
Scalabilitate d.p.d.v al complexității versus eficiența codării
Seturi de opțiuni/capabilități grupate per profile
Extensii speciale pentru aplicații profesionale
4
Caracteristici
Cadrele video sunt divizate în macro-blocuri (MB)
Predicție în domeniul spațial (pixel)
Compensarea mișcării bazată pe blocuri
Transformata aplicată pe blocuri de dimensiuni mai mici
Cuantizare – scală logaritmică; pași de cuantizare mai fini
Codare entropică:
VLC, îmbunătățită prin adaptare la context (CAVLC)
adăugat Context Adaptive Binary Arithmetic Coding (CABAC)
Filtrare obligatorie tip ”deblocking”
5
Macro-blocuri (MBs) și Slice-uri
Cadrul se împarte în MBs de dimensiune fixă
16x16 – luma
8x8 – fiecare componentă de chroma (4:2:0)
MBs – grupate în slice-uri
Slice
regiune decodabilă independent
1 sau mai multe per cadru
de dimensiuni variabile
Tool-uri pentru rezistență la erori:
FMO (Flexible Macroblock Ordering)
ASO (Arbitrary Slice Order))
RS (Redundant Slices))
6
Slice-uri și cadre
Tipuri de slice:
slice I: toate MB codate INTRA
slice P: MB codate INTRA + INTER (compensarea mișcării uni-direcțional)
slice B: tip P și MB codate INTER (compensarea mișcării bi-direcțional)
SI și SP: ”switching” între secvențe video diferite
1 cadru poate conține slice-uri de tip diferit
Cadru referință – folosit în predicția altor cadre
Cadru IDR (Instant Decoder Refresh) – folosit ca punct de acces aleator, predicție intra.
7
Structura decodorului
8
Structura decodorului
Procese principale:
Decodarea entropică
Predicția (INTRA / INTER)
Decodarea texturii reziduale:
De-cuantizare
Transformata
Reconstrucția
Filtru de ”deblocking”
9
Predicția
Schema prezentată figurează etapele parcurse în procesul de predicție în cadrul encoderului H.264. Predicția se realizează la nivel de macrobloc și poate fi de tip intra sau inter, după cum pixelii folosiți în predicție aparțin chiar cadrului curent sau provin din cadre codate anterior. Concret, din macroblocul curent se scade cel predicționat, rezultând un macrobloc cu coeficienți reziduali. Dacă predicția a fost realizată corect, atunci macroblocul predicționat este similar celui curent, iar coeficienții reziduali vor avea valori mici ca amplitudine. Este mai ușor și mai convenabil din punct de vedere al compresiei, ca blocul de codare entropică să primească reziduuri cu valori cât mai reduse. Cu cât sunt mai mici acești coeficienți reziduali, cu atât mai puțini biți vor ocupa ei în fluxul video binar, întrucât se vor transmite decodorului doar amplitudinile lor codate entropic și modul în care a fost realizată predicția. Decodorul va realiza la rândul său predicția indicată în sintaxa fluxului binar, apoi va aduna la macroblocul predicționat coeficienții reziduali extrași din fluxul binar, obținând astfel macroblocul curent.
10
Predicția – Poziționarea vecinilor
Sunt folosite 4 poziții vecine:
Stinga: A
Sus: B
Sus-dreapta: C
Sus-stânga: D
Standardul prevede o notare clară a pixelilor care se pot folosi la predicția spațială de tip intra, aceștia apartinând macroblocurilor vecine cu cel curent dinspre partea stângă și cea de sus. Se aleg doar acești vecini din considerente legate de ordinea de codare a macroblocurilor: fiecare cadru este codat începând cu primul MB din stânga sus mergând de la stânga la dreapta și de sus în jos. Se aleg așadar pentru predicție doar pixelii vecini deja codați anterior, astfel încât decodorul să dispună și el de aceste valori la decodare.
11
Predicția INTRA
MB de tip I pot fi în orice tip de slice
Slice I – nu are referință temporală fiind codat integral INTRA
Tipuri de MB:
Intra 4x4 : fiecare bloc de 4x4 pixeli din MB este predicționat individual și se
pretează zonelor cu multe detalii
Intra 16x16: este predicționat întregul MB de 16x16 pixeli de luma, mai potrivit
pentru zonele relativ uniforme din imagine
I-PCM: fără predicție; valorile pixelilor sunt trimise fără compresie; permite
codarea fără pierderi.
12
Predicția INTRA
Predicție direcțională în domeniul spațial – eliminarea redundanțelor spațiale
Se folosesc pixelii vecini pentru a deriva valorile pixelilor din blocul curent (pixelii vecini provin din A, B, C, D)
Intra 4x4: toți vecinii pot fi folosiți
Intra 16x16: vecinii A, B și D
Moduri de predicție 4x4:
Predicția DC (o valoare medie a vecinilor va fi folosită pentru predicția întregului
bloc)
8 moduri de predicție direcționale – se dorește predicția diverselor contururi de
obiecte aflate la diverse înclinații
13
Predicția INTRA
14
Predicția INTRA
Moduri de predicție 16x16:
Vertical (0) - B
Orizontal (1) - A
DC (2) – o valoare medie a vecinilor
Planar (3) – blocul predicționat este modelat ca un plan care să aproximeze cât
mai bine variațiile orizontale și verticale ale marginilor sale
15
Predicția INTRA
16
Predicția INTER
Prezentă numai în slice-uri P sau B
Tipuri de MB:
Inter 16x16, Inter 8x16, Inter16x8 – fiecare partiție cu propria informație despre mișcare (direcție, cadru referință, vector de mișcare)
Inter 8x8: 4 sub-blocuri independente în MB
Skipped: mod special prezent numai în slice-uri P – nu are informație despre mișcare și nici textură reziduală. Vectorul de mișcare
este derivat din vecini.
Direct: mod special prezent numai în slice-uri
B – poate avea sau nu textură reziduală, cu vector de mișcare derivat.
17
Predicția INTER –informația de mișcare
Informația despre mișcare: tipul de partiție, indexii cadrelor de referință, vectorii de mișcare
Vectorul de mișcare este folosit
pentru identificarea pixelilor sursă care vor fi folosiți la predicția zonei
curente.
Cadrele de referință sunt grupate în liste distincte: L0 (slice-uri P și B
anterioare) / L1 (slice-uri B anterioare sau viitoare).
18
Compensarea mișcării
Compensarea mișcării este o modalitate de predicție temporală (se elimină redundanțele
temporale)
Sunt folosite cadre decodate anterior.
Compensarea mișcării poate fi:
Uni-direcțională (referința este anterioară MB
curent)
Bi-direcțională (o referință anterioară și alta
viitoare; se mediază rezultatul a 2 compensări uni-direcționale)
19
Textura
reziduală
Coeficienții decodați reprezintă textura reziduală care, împreună cu valorile predicționate, vor reconstrui semnalul.
Decodarea texturii reziduale este un proces în 3 etape:
Scanare zigzag
Decuantizare
Transformată inversă
Factorul de cuantizare (QP – quantization parameter) poate lua 52 de valori și poate fi actualizat la fiecare MB care are textură reziduală
20
Reconstrucția cadrului
21
Filtrul pentru ”deblocking”
Codarea bazată pe blocuri conduce la apariția inerentă a artefactelor de tip blocking, mai ales la rate binare mici.
Distorsiunile de tip blocking sunt eliminate printr-o filtrare adaptivă a întregului cadru video.
Sunt afectați numai până la maxim 3 pixeli vecini cu fiecare latură a unui MB
Moduri de funcționare:
Se poate renunța la această filtrare – modul Off.
Filtrare numai în interiorul slice-urilor (nu sunt afectate marginile de slice)
Filtrare inclusiv a marginilor de slice
Avantaje:
Marginile blocurilor sunt uniformizate, ramân numai contururile adevărate ale imaginii
Cadrul filtrat este folosit în predicția Inter a cadrelor viitoare, rezultă astfel valori mai mici ale texturii reziduale.
22
Decodarea entropică
Proces care transformă fluxul binar codat într-o secvență de valori care
sunt asignate diverselor elemente de sintaxă, urmând regulile schemei de decodare.
La nivel de cadru video există 2 opțiuni de decodare entropică:
CAVLC (Context-based Adaptive Variable Length Coding)
CABAC (Context-based Adaptive Binary Arithmetic Coding)
CAVLC: coeficienții rezultați după transformată și cuantizare la encoder,
sunt decodati la decoder folosind tabele VLC.
CABAC: sunt exploatate corelațiile dintre simboluri folosind contexte. Se ajunge la o rată entropică minimă, indiferent de probabilitățile simbolurilor.
23