Sunteți pe pagina 1din 4

Tema 2 (4 puncte)

Argumentele de intrare ale scriptului main : (I, perm, scale, fileName, quality, X, stddev) :

I : o imagine color pe 24 de biţi de dimensiuni


perm : o permutare a numerelor de la 1 la ( ≤ )
scale : un număr real strict pozitiv
fileName : calea către fişierul care este codat JPEG (inclusiv numele acestuia)
quality : un factor de calitate (număr întreg între 1 şi 99) folosit pentru compresia JPEG
X : o imagine color pe 24 de biţi, stddev : un număr real pozitiv (≥ 0)

Argumentele de ieşire din scriptul dumneavoastră sunt : (J, K, rateX, psnrX)


J : o imagine color pe 24 de biţi, K : o imagine color pe 24 de biţi
rateX : rata de compresie pentru algoritmul cu arbori cuaternari
psnrX : valoarea PSNR pentru algoritmul cu arbori cuaternari

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].

Sarcina dumneavoastră este să reconstruiţi imaginea O, în parametrul de ieşire J, fiind


cunoscute operaţiile care au fost aplicate asupra imaginii originale. Atenţie : imaginea J nu
va fi neapărat o copie identică a imaginii originale … De exemplu, pentru cunoscuta
imagine color Lena de dimensiuni 512x512, o permutare de lungime 100 şi un factor de
scală 2, imaginea I primită ca argument va arăta ca imaginea transformată (din mijloc) :
Punctajul pentru această problemă va fi calculat astfel :
_
=
_

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.

Pentru a realiza eşantionarea cromatică, componentele Cb şi Cr (care sunt matrici) sunt


reduse cu un factor de scală de ½. Pentru fiecare componentă (Y, Cb şi Cr), notată în
continuare cu IM, encoderul a realizat următoarele operaţii:
1) A mapat imaginea IM din intervalul [0-255] în intervalul [-128:127].
2) A aplicat transformata DCT pe blocuri 8x8, urmată de cuantificare, folosind
matricile de cuantificare clasice din schema JPEG.
3) Blocurile imaginii au fost parcurse apoi în sensul următor : de la stânga la dreapta
pentru liniile impare şi de la dreapta către stânga pentru liniile pare.
4) S-a efectuat codarea diferenţială pentru coeficienţii DC, doar primul coeficient
păstrându-şi valoarea. S-a aplicat apoi codarea Huffman pe fluxul DC, iar aceasta a
fost codată în fişierul comprimat astfel :
a) S-a scris pe 2 octeţi valoarea minimă a simbolurilor (int16)
b) S-a scris pe 2 octeţi valoarea maximă a simbolurilor (int16)
c) S-au scris pe Nx2 octeţi (uint16) frecvenţele de apariţie ale celor N
simboluri din fluxul DC (N=maxim-minim+1).
d) S-a scris apoi pe 4 octeţi (uint32) lungimea în biţi a codului Huffman
e) S-a scris apoi codul Huffman rezultat ca flux de biţi (folosind tipul ubit1)

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 ) '

Se va calcula, de asemenea, în parametrul de ieşire psnrX, metrica PSNR dintre imaginea


X şi imaginea obţinută în urma decompresiei. De exemplu, pentru cunoscuta imagine color
Lena de dimensiuni 512x512 şi stddev=3, vom obţine : rateX=3.65 şi psnrX=36.27.

Punctajul pentru această problemă va fi calculat astfel :


5 5
= +
=
=
2

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