Documente Academic
Documente Profesional
Documente Cultură
Argumentele de intrare ale scriptului main : (I, perm, scale, fileName, quality, X, stddev) :
Problema 1 (1p)
Imaginea I reprezintă o imagine transformată a unei imagini O (pe care însă nu o primiţi
ca parametru de intrare!), prin următoarele operaţii :
1) Aplicarea transformatei DCT asupra celor 3 canale R, G şi B.
2) Pentru fiecare canal, aplicarea permutării perm a primilor N coeficienţi AC de pe
diagonala principală : ( , ), 2 ≤ ≤ + 1, unde reprezintă lungimea permutării.
3) Înmulţirea coeficienţilor ( , ), 2 ≤ ≤ + 1cu factorul de scală scale.
4) Aplicarea transformatei inverse DCT pe fiecare canal şi obţinerea imaginii transformate.
Spre exemplu, dacă N=3, primii trei coeficienţi sunt DCT=[20 45 30], perm=[3 1 2] iar
factorul de scală este scale=2, atunci după permutare şi scalare, coeficienţii DCT vor fi :
DCT_MOD=[30*2 20*2 45*2]=[60 40 90].
Problema 2 (2p)
Să se realizeze decompresia fişierului fileName care reprezintă compresia unei imagini
color folosind o schemă similară metodei JPEG clasice, cu diferenţele următoare :
a) Compresia coeficienţilor DC după cuantificare şi codare diferenţială, se va face folosind
algoritmul Huffman clasic.
b) Compresia coeficienţilor AC după cuantificare şi reprezentare (run,level) se va face
folosind codarea aritmetică.
Fişierul comprimat are următoarea structură :
1) Pe primii doi octeţi (uint16) se află scris numărul de linii ale imaginii
2) Pe următorii doi octeţi (uint16) se află scris numărul de coloane ale imaginii
3) Urmează apoi compresia componentelor Y, Cb şi Cr, în această ordine.
5) S-a efectuat codarea RLE pentru coeficienţii AC. Simbolurile vor fi astfel de forma
(run,level), simbolulul special EOB fiind asociat cu forma (0,0). Aceste simboluri au
fost apoi convertite în numere întregi folosind formula: = ∗ 64 + .
Pentru şirul de valori RL rezultate, s-a aplicat apoi codarea aritmetică. Codarea în
fişier a fost realizată astfel :
a) S-a scris pe 2 octeţi valoarea minimă a simbolurilor RL (int16) – cu semn!
b) S-a scris pe 2 octeţi valoarea maximă a simbolurilor RL (int16) – cu semn!
c) S-au scris pe Nx2 octeţi (uint16) frecvenţele de apariţie ale celor N
simboluri din fluxul AC (N=maxim-minim+1).
d) S-a scris apoi pe 4 octeţi (uint32) lungimea şirului de simboluri RL.
e) S-a scris apoi pe 4 octeţi (uint32) lungimea în biţi a codului aritmetic.
f) S-a scris apoi codul aritmetic rezultat ca flux de biţi (folosind tipul ubit1)
Observaţie : pentru fişierul « jpeg.bin » ataşat pe blog şi factorul de calitate 50, imaginea
decomprimată trebuie să fie o versiune alterată (PSNR=31.37) a imaginii
« fruits512.bmp ». Imaginea obţinută în urma decompresiei va fi salvată în parametrul de
ieşire K. Pentru imaginea K, se va calcula apoi PSNR-ul faţă de imaginea originală (care
însă nu este dată ca parametru !). Punctajul pentru această problemă va fi calculat astfel :
_
=2∗
_
Problema 3 (1p)
Având dată imaginea color X de dimensiuni ( = 2$ , 8 ≤ ≤ 12), să se realizeze o
compresie cu arbori cuaternari, aplicată pe fiecare dintre cele trei componente Y, Cb, Cr ale
imaginii. Dezvoltarea unui nod din arbore care corespunde unui bloc de pixeli B, va
continua după regula U sau Z, dacă devierea standard &(') > )) . Dacă & ≤ )) ,
atunci blocul B va fi aproximat cu un bloc constant de valoarea mediei blocului B, valoare
ce va fi rotunjită la o valoare întreagă pe 8 biţi, folosind funcţia uint8.
Pentru codarea nodurilor terminale, se va folosi schema DF (Depth-First), la fel ca şi în
cazul imaginilor binare. Simbolul ‘(‘ reprezintă o coborâre în arbore faţă de nivelul curent.
Astfel, un arbore precum cel din figura următoare, parcurs în Z, va fi codat astfel :
Cod Arbore = (( * , - . / 0 ( 1 2 3 *4
Simbolul ‘(‘ va fi codat cu bitul 0, iar orice valoare a unui bloc terminal va fi codată pe 9
biţi : bitul de prefix 1 + 8 biţi pe care se reprezintă valoarea blocului din nodul terminal.
Rata de compresie se calculează astfel:
24
5=
∑9,:;,:< 7 8 ) '