COMPRESIA MPEG

by donpedro

Continuăm în acest articol prezentarea standardului MPEG, prezentare începută în numărul anterior al ziarului Electronica-azi. Vom face referiri la unele figuri din articolul precedent şi de aceea, numerotarea figurilor în acest articol se va face începând cu figura 6.

Figura 6

În figura 1 s-a prezentat o schemă generală în care sunt evidenţiate etapele parcurse de imagini, de la sursă până la destinaţie, în trecerea lor prin procesul de prelucrare conform standardului MPEG-1. Vom descrie ce transformări suferă imaginea, în poziţia 3 din figura 1, numită compresie. Reamintim de asemenea că imaginile, aşa cum se arată în figura 3, sunt tratate în mod diferit în procesul de compresie şi, din acest punct de vedere, se numesc imagini de tip i, b, sau p.
Articolul de faţă va face o prezentare a modului particular în care sunt tratate aceste tipuri de imagini, prezentând în final o schemă generală a procesului de compresie MPEG. Nu vom face şi o prezentare de circuite electronice care implementează compresia MPEG, întrucât acestea sunt foarte complexe şi nu ar face decât să îngreuneze şi mai mult înţelegerea materialului prezentat.

Compresia imaginilor de tip i (intra picture)
Imaginile de tip i sunt unităţi independente care descriu complet o imagine, fără referire la alte imagini. Această imagine produce cea mai redusă compresie de date. Metoda de compresie a datelor este foarte apropiată de cea a algoritmului JPEG (Joint Pictures Experts Group), prezentată pe larg în numerele 16 şi 17 ale ziarului Electronica-azi. Cu alte cuvinte, aceste imagini sunt tratate ca nişte imagini statice. Ele reprezintă adevărate pietre de hotar în refacerea secvenţelor finale de imagini codate MPEG. În tratarea lor nu se ţine cont de redundanţa temporală a imaginilor, adică de asemănarea unor porţiuni de imagini din cadre succesive, ci numai de redundanţa spaţială, adică de zone asemănătoare aflate pe acelaşi cadru de imagine. Compresia imaginilor de tip i se realizează în trei paşi şi anume: transformarea cosinus discretă, DCT (Discrete Cosine Transform), cuantizarea şi codarea matricei de indexare. Toate cele trei procese au fost prezentate în articolul JPEG-Standardul fotografiei digitale, în numărul 17 al ziarului şi fiind asemănătoare nu le vom mai prezenta în amănunt în acest articol.
Reamintim doar că transformarea cosinus discretă constă în transformarea unui set de puncte din spaţiul bidimensional al imaginii, într-un spaţiu al frecvenţelor şi are rolul de a reduce redundanţa spaţială, atât în cazul imaginilor sursă cât şi în cazul erorilor reziduale, prin concentrarea energiei imaginii în cât mai puţine elemente. Cea mai simplă şi totodată cea mai rapidă metodă de implementare a acestei transformări se realizează prin înmulţirea rapidă, în timp real, a două matrici: o matrice a coeficienţilor, definiţi aşa cum se arată în figura 6 şi o matrice a imaginii (8×8 pixeli, Y,U sau V). În final se obţine tot o matrice de 8 x 8 valori, care va conţine informaţia despre imagine, în domeniul frecvenţei, informaţie ce va fi cuantizată şi apoi codată.
Cuantizarea este procesul prin care, valorilor continui ale termenilor din matricea DCT, li se atribuie valori discrete. Acest proces exploatează caracteristicile ochiului uman de a percepe mai puţin frecvenţele înalte din imagine, realizându-se astfel o importantă reducere a cantităţii de informaţie. Cuantizarea în standardul MPEG-1 este neuniformă şi permite fiecărui element din matrice să fie cuantizat în mod independent şi diferit. Stabilirea nivelurilor de decizie şi de cuantizare nu urmăreşte un criteriu de optimizare a erorii de cuantizare. O matrice de cuantizare Q este definită pentru a determina cum să se cuantifice fiecare element al matricei DCT. În plus, o scală de cuantizare q poate fi definită pentru fiecare macrobloc. Rezultatul cuantizării îl reprezintă tot o matrice de 8 x 8 elemente. Codarea acestei matrice de 8 x 8 elemente se face prin utilizarea codurilor cu lungime variabilă, VLC (Variable Lengh Code).
Înainte de a trece la analiza imaginilor de tip p şi b să examinăm pe scurt estimarea şi compensarea mişcării, noţiuni esenţiale în înţelegerea procesului de codificare a acestor tipuri de imagini.

Estimarea mişcării, (ME, Motion Estimation)

Figura 7

Imaginile succesive conţin o puternică redundanţă temporală care poate şi trebuie să fie eliminată. Estimarea mişcării este o formă de potrivire de model (pattern matching), prin care se determină un vector de deplasare care descrie cum este mutat un macrobloc în cadrul imaginii anterioare sau viitoare, pentru cea mai bună potrivire şi o matrice de erori. Standardul MPEG-1 nu defineşte care algoritm este utilizat pentru estimarea mişcării. El defineşte numai sintaxa vectorului de mişcare rezultat. Estimarea mişcării este considerat cel mai performant element al algoritmului MPEG-1. Estimarea mişcării trebuie să conţină două componente şi anume: un criteriu de potrivire şi o strategie de căutare. Când determinăm care macrobloc se potriveşte criteriului utilizat, codificatorul trebuie de asemenea să determine dacă potrivirea poate fi realizată cu pixelii de date originali sau cu data decodificată a imaginii predicţionate (imaginea utilizată ca referinţă pentru predicţie).
Cea mai simplă strategie de căutare, figura 7, a, este căutarea totală. Asta înseamnă că un macrobloc este comparat (utilizând criterii de potrivire predeterminate) cu toate 16 x 16 grupe de pixeli la nivel de jumătate sau pixel întreg. Alte metode încearcă să limiteze numărul de potriviri ce trebuie realizate. De exemplu, într-o căutare totală-modificată, figura 7, b, se realizează căutarea asupra tuturor 16 x16 grupe de pixeli şi se realizează căutarea din jumătate în jumătate de pixel într-o arie limitată în jurul rezultatului final. O altă metodă este căutarea ierarhică şi logaritmică, figura 7, c., prin care se realizează căutări printre câteva macroblocuri (sau blocuri ce conţin date de la diferite macroblocuri utilizate) peste un domeniu larg ce este centrat pe poziţia predictată a macroblocului. Apoi se descreşte iterativ domeniului de căutare şi se realizează căutarea printre mai multe macroblocuri centrate pe rezultatul anterior până când este găsită cea mai bună potrivire. De reţinut este faptul că această metodă centrează căutarea originală într-un domeniu larg pe poziţia macroblocului original.
Cele trei metode de căutare sunt prezentate în figura 7.
Standardul lasă ME în totalitate la bunul plac al utilizatorului. Rezultatul final al estimării mişcării este un vector de mişcare (cu o componentă orizontală şi una verticală) care descrie poziţia celei mai bune potriviri a macroblocului în imaginea predictată. Un rezultat secundar (care este folosit în paşii următori) este un macrobloc asociat de valori reziduale (diferenţe între macroblocuri originale şi predictate).

Compensarea mişcării, (MC, Motion Compensation), este cu mult mai simplă decât estimarea mişcării. Aceasta utilizează vectorul de mişcare calculat anterior pentru obţinerea unui macrobloc de referinţă din imaginea predictată. Vectorul de mişcare are componente orizontale şi verticale relative la poziţia macroblocului pe care îl decodăm. Având informaţii de principiu privind ME şi MC vom relua analiza imaginilor de tip p şi b în procesul de compresie MPEG, precizând doar tipul de prelucrare ce se face, fără a intra în detalii.
Compresia imaginilor de tip p. Acestea sunt imagini care au fost predictate din imaginile p sau i anterioare (vezi figura 4). Aceasta este predicţia spre înainte. Rata de compresie este mai bună decât la imaginile de tip i. Compresia imaginilor de tip p necesită estimarea mişcării şi cuprinde următorii paşi, dintre care unii pot să lipsească: estimarea mişcării, decizia tipului de cod, compensarea mişcării şi generarea erorilor, transformarea cosinus discretă, cuantizarea, codarea vectorilor de mişcare şi codarea indecşilor. Aşa cum am stabilit anterior ar putea să nu fie optim să codificăm toate macroblocurile în imaginea de tip p prin predicţie din imagine anterioară, de aceea, macroblocurile din imaginile de tip p pot fi codificate în mai multe moduri. Se spune că un macrobloc este predictat dacă are vectorul de mişcare diferit de zero. De aceea imaginea sa video va fi refăcută din datele imaginii afişate ale imaginii anterioare. Se spune că un macrobloc nu este predictat dacă are un vector de mişcare egal cu zero, caz în care imaginea video va fi refăcută din datele imaginii anterioare fără nici o deplasare. Cu alte cuvinte, o imagine de tip p, poate să conţină macroblocuri diferite. Majoritatea macroblocurilor au un header codat în şirul de biţi care specifică diferite tipuri de informaţii despre macrobloc, inclusiv tipul de macrobloc. Urmează apoi compensarea mişcării cu generarea erorii dintre macroblocul de referinţă codat şi macroblocul curent. Acele macroblocuri de eroare pot fi utilizate pentru determinarea tipului de macrobloc, dar nu şi pentru codificarea limitelor erorii. Decodorul va adăuga limitele erorii la decodificarea macroblocului de referinţă iar pentru cele mai bune rezultate codorul va genera limitele erorii relativ la acelaşi macrobloc decodat. De aceea, în cele mai multe cazuri, codorul MPEG-1 va încorpora decodări parţiale. Odată ce vectorul de mişcare a fost determinat în paşii anteriori vom realiza compensarea mişcării utilizând imaginile decodate anterior şi erorile generate cu respectarea macroblocului curent. Eroarea macroblocului apare ca diferenţă între macroblocul predicţionat decodat şi macroblocul ce va fi codat. Această eroare de macrobloc trece apoi la următorii trei paşi: transformarea cosinus discretă, cuantizarea şi în final codarea. Nu vom insista asupra acestor aspecte deoarece sunt asemănătoare cu cele prezentate la imaginile de tip i.

Compresia imaginilor de tip b. Acestea sunt imagini înserate între imaginile de tip i sau p anterioare şi imagini i sau p următoare (vezi figura 4). Acestea oferă un înalt grad de compresie. Procesul se desfăşoară în următorii 6 paşi: estimarea mijavascript:void(0)şcării, decizia tipului de cod, compensarea mişcării şi generarea erorilor, transformarea cosinus discretă, cuantizarea, codarea vectorilor de mişcare şi a matricei indecşilor. În funcţie de rezultatele de la pasul 1, 2 şi 3 următorii paşi pot să lipsească. La acest tip de imagine este interesantă estimarea mişcării, întrucât se folosesc ambele estimări ale mişcării, înainte şi înapoi. Din acest pas vor rezulta doi vectori de mişcare, un vector înainte şi un vector înapoi. Pot fi construite în plus 3 macroblocuri de erori: unul pentru diferenţa între macroblocul curent şi macroblocul predicţionat înainte, unul pentru diferenţa între macroblocul curent şi macroblocul predicţionat înapoi şi unul pentru diferenţa între macroblocul curent şi macroblocul predicţionat interpolat.

Figura 8

Macroblocul predicţionat interpolat este o simplă medie între macroblocurile predicţionate înainte şi înapoi. Acestea vor fi folosite pentru a ne ajuta să determinăm care tip de macrobloc se va utiliza. Ceilalţi paşi de prelucrare sunt asemănători cu cei de la imaginile de tip b şi nu vom intra în detalii.
În încheierea articolului vom prezenta o posibilă schemă generală de implementare a compresiei MPEG-1, figura 8 .
Memoria de cadre iniţiale conţine datele despre imagine, într-un format standard de intrare (SIF) şi alimentează cu informaţii macroblocurile imaginilor anterioare, curente şi viitoare ale codificatorului. Blocul de estimare a mişcării, (ME, Motion Estimation) are ca scop estimarea mişcării. El determină şi transmite vectorii de mişcare şi coeficienţii de eroare către blocul MB (MacroBlock) selectat. Acesta selectează tipul de macrobloc ce se utilizează la un moment dat în procesul de codificare. Odată ce s-a decis acest lucru, blocul de compensare a mişcării, (MC, Motion Compensation), realizează compensarea mişcării în imaginea predictată decodată. Macroblocul predictat este apoi utilizat pentru generarea coeficienţilor de eroare, făcând diferenţa cu macroblocul original. Blocul DCT (Discrete Cosine Transformation) calculează transformata cosinus discretă a termenilor erorii sau a datelor blocurilor originale în funcţie de tipul de macrobloc selectat. Rezultatele astfel obţinute sunt aplicate blocului de cuantizare. În final rezultatele sunt codate VLC (Variable Lenght Coded) şi apoi stocate în memoria de ieşire. Acest bloc salvează toate imaginile codate. El face acest lucru pentru ca imaginile să poată fi reordonate de la ordinea de afişare, după o ordine de codare. Înaintea codării VLC rezultatul cuantizării este decuantizat în blocul Decuantizor şi apoi refăcut în blocul transformatei cosinus discrete inverse, (IDCT, Inverse Discrete Cosine Transform). Rezultatele blocului care realizează transformata cosinus discretă inversă sunt sumate cu ieşirea blocului de compensare a mişcării (MC) a cărei valoare depinde de tipul macroblocului. Aceste macroblocuri decodate sunt memorate în Memoria de cadre decodate (Decoded Data Frame Store). Acesta oferă informaţii despre imaginile codate pentru utilizarea în blocul de compensare a mişcării şi, dacă este nevoie, în blocul de estimare a mişcării.
Schema bloc prezentată nu are pretenţia să arate cea mai eficientă structură a unui codor MPEG-1, ci doar intenţionează să arate în mod simplificat, fluxul informaţiei de la imaginea primară (sursă) până la şirul final de date, în cadrul acestei atât de complexe transformări de informaţie cum este compresia MPEG-1.

Ing. Toader Melinte
S.C.Seektron S.R.L
Tel. 0244-185920
melin@xnet.ro
www.seektron.ro

S-ar putea să vă placă și