Documente Academic
Documente Profesional
Documente Cultură
Proiect
Algoritmi de codare a imaginilor
-2019-
Cuprins
Introducere ....................................................................................................................................... 2
I. Transformarea cosinus discret (DCT) ........................................................................................... 3
1.1 Noțiuni introductive ................................................................................................................ 3
1.2 Transformata DCT-2D ........................................................................................................... 3
1.3 Transformata DCT-3D ............................................................................................................... 6
II. Transformări Wavelet Discretă.................................................................................................... 7
2.1 Transformata Wavelet Unidimensională ................................................................................ 7
2.2 Transformata Wavelet Bidimensională .................................................................................. 8
2.3 Transformata Wavelet Tridimensională ................................................................................. 9
III. Cuantizarea Scalară şi Vectorială ............................................................................................. 10
3.1 Compresia prin cuantizare scalară ........................................................................................ 10
3.2 Compresia prin cuantizare vectoriala ................................................................................... 11
3.3 Compresia prin DCT ............................................................................................................ 14
IV. Tipuri de codare ....................................................................................................................... 17
4.1 Codarea statistică .................................................................................................................. 17
4.2 Codare entropica (Huffman) ................................................................................................. 18
4.3 Codarea predictivă.................................................................................................................... 20
4.3.1 Codarea predictivă fără pierder ...................................................................................... 20
4.3.2 Codarea predictivă cu pierderi ....................................................................................... 21
4.4 Codarea diferenţială .............................................................................................................. 22
Concluzie ........................................................................................................................................ 24
Bibliografie..................................................................................................................................... 25
Anexa 1 - Codul sursa Matlab pentru acest capitol ........................................................................ 26
Introducere
2
I. Transformarea cosinus discret (DCT)
Acest capitol își propune să prezinte pe scurt modalitățile de analiză ale semnalelor biți
tridimensionale folosind transformatele cele mai des utilizate în procesarea digitală a imaginilor și
secvențelor video.
3
I (x,y ) este luminanța pixelului de la poziția (x,y); C (u,v) este coeficientul DCT de frecvenșe (u,v).
În literatura de specialitate de cele mai multe ori se utilizează relația simplificată (2.5):
unde
Pentru a exemplifica importanța diferiților coeficienți pentru ochiul uman, în Figura 1.2 sunt
reprezentate imaginile care se obțin, dacă se utilizează pentru decodare, pe rând, doar coeficienții
DCT de o anumită frecvență.
Se observă că cele mai multe detalii sunt conținute în imaginea obținută din coeficienții DC ai
fiecărui bloc, iar, pe măsură ce frecvențele spațiale cresc, avem tot mai puține detalii conținute în
imaginea corespunzătoare.
Transformata DCT-2D aproximează orice imagine de dimensiune MxN pixeli cu o combinație
liniară a MxN blocuri de bază. În Figura 1.3 sunt reprezentate cele 64 de blocuri de bază pentru o
imagine de 8x8 pixeli.
4
Se observă, că, de la stânga la dreapta și de sus în jos frecvența spațială crește cu 0,5 cicluri.
Orice imagine sau bloc din imagine de 8x8 pixeli poate fi aproximat ca o combinație liniară a celor
64 de blocuri de bază, unde coeficienții DCT sunt constantele cu care se înmulțesc fiecare dintre
blocuri.
Figura 1.3. Cele 64 de blocuri de bază ale transformatei DCT-2D pentru o imagine de 8x8
pixeli
5
1.3 Transformata DCT-3D
În cazul secvențelor video se poate aplica transformata DCT-2D fiecărui cadru al secvenței
video a imaginei. O metodă de a integra și dimensiunea temporală este utilizarea transformatei
DCT-3D.
Aceasta se aplică de regulă pe grupuri de cadre cu imaginii. Scopul principal al utilizării
transformatei 3D este eliminarea atât a corelației intra-cadru, cât și inter-cadru. Expresia
transformatei DCT-3D este:
6
II. Transformări Wavelet Discretă
În practică se foloseşte DCT bi-dimensională, dar pentru uşurinţa înţelegerii se consideră mai
întâi DCT uni-dimensională. Se consideră formele de undă w(f)=cos(fθ), pentru 0 ≤ θ ≤π , cu
frecvenţele f=0, 1, ...,7. Fiecare formă de undă w(f) este eşantionată în opt puncte, pentru a forma
un vector al bazei vf.
Aceşti opt vectori vi sunt ortonormali (datorită alegerii particulare a celor opt puncte de
eşantionare) şi pot fi organizaţi într-o matrice de transformare 8×8. Pentru că această matrice este
ortonormală, ea este o matrice de rotaţie, deci, DCT uni-dimensională poate fi interpretă ca o rotaţie
în opt dimensiuni. O altă interpretare a DCT uni-dimensională este aceea că se pot considera cei
opt vectori ortonormali vi ca bază a unui spaţiu vectorial, şi orice alt vector p poate fi exprimat în
acest spaţiu ca o combinaţie liniară a acestor vi.
Cele 8 ponderi vor reprezenta pur şi simplu elementele compresate ale vectorului p. Cuantizând
cele opt ponderi, se poate creşte considerabil compresia, în timp ce se pierde doar o cantitate mică
de date.
7
2.2 Transformata Wavelet Bidimensională
Până acum ne-am ocupat de Transformata Wavelet Unidimensională, încă nu am stabilit cum
se aplică transformata bi- sau multidimensională. Cea mai simpla metodă de a aplica o transformată
bidimensională este să privim imaginea ca niște rânduri de semnale unidimensionale și să le
transformăm pe acestea. După aceasta le transformăm și pe direcția cealaltă. Deci soluția ar fi să
aplicăm Transformata Wavelet discretă mai întâi pe linii și apoi pe coloane, așa cum este prezentat
în Figura 2.2 Cele patru subimagini sunt: I – Imaginea filtrată trece-jos pe linii și coloane, notată
în literatura de specialitate cu LL (low subbands for row and column filtering – subbenzi de
frecvență joasă pentru filtrarea pe linii și coloane); II – Imaginea filtrată trece-sus pe linii și trece-
jos pe coloane, notată în literatura de specialitate cu HL (high subband for row filtering and low
subband for column filtering – subbandă de frecvență înaltă pentru filtrarea pe linii și subbandă de
frecvență joasă pentru filtrarea pe coloane); III – Imaginea filtrată trece-jos pe linii și trece-sus pe
coloane, notată în literatura de specialitate cu LH (low subbands for row filtering and high subbands
column filtering – subbandă de frecvență joasă pentru filtrarea pe linii și subbandă de frecvență
înaltă pentru filtrarea pe coloane); IV – Imaginea filtrată trece-sus pe linii și coloane, notată în
literatura de specialitate cu HH (high subbands for row and column filtering – subbenzi de frecvență
înaltă pentru filtrarea pe linii și coloane). După o transformare unidimensională rămânem doar cu
jumătate din coeficienții de scalare s. O transformare bidimensională transformă coloanele care
conțin atât coeficienți de scalare s, cât și coeficienți Wavelet d, dar pe coloane se află doar
coeficienți noi de scalare (obținuți după transformarea pe linii), care sunt apoi folosiți în
transformarea pe coloane. În concluzie, o să rămânem (în subbanda LL) cu doar 1/4 din datele
inițiale, ceea ce înseamnă că transformările viitoare or să aibă nevoie de mult mai puțin timp de
calcul.
8
2.3 Transformata Wavelet Tridimensională
Trecerea de la două dimensiuni la mai multe dimensiuni nu este mai complicată decât trecerea
de la una la două. O secvența animată de imagini este de fapt un cub tridimensional de informație.
Pentru a obține transformarea tridimensională, aplicăm Transformata Wavelet pe direcția x, apoi
pe direcția y și în fine pe direcția z. Transformata aplicată pe direcția z elimină redundanța spațială
între imaginile pe care se aplică. O reprezentare vizuală a grupării coeficienților este prezentată în
Figura 2.3
9
III. Cuantizarea Scalară şi Vectorială
Exemplul 3.1 Se consideră, de exemplu, un rând de 12 pixeli de culori similare, pornind de la 202
la 215.
În notaţie binară aceste valori sunt: 11010111 11010110 11010101 11010011 11010010
11010001 11001111 11001110 11001101 11001100 11001011 11001010.
Cuantizarea va produce următoarele 12 valori de 4 biţi: 1101 1101 1101 1101 1101 1101 1100
1100 1100 1100 1100 1100, din care se vor reconstrui cei 12 pixeli, prin adăugarea a 4 zerouri,
fiecărei valori cuantizate: 11010000 11010000 11010000 11010000 11010000 11010000
11000000 11000000 11000000 11000000 11000000 11000000.
Primii şase pixeli ai rândului acum au valoarea 110100002 = 208, în timp ce următorii şase
pixeli sunt 110000002 = 192.
Dacă rânduri adiacente au pixeli similari, primele şase coloane vor forma o bandă, clar diferită
de banda formată de următoarele şase coloane.
10
Acest fenomen de formare a benzilor, sau de conturare, este foarte evident pentru ochi, deoarece
aceştia sunt sensibili la margini şi rupturi într-o imagine.
Exemplu:
• Asociat cu fiecare regiune (sau cluster) se gaseste un cuvant de cod
• Fiecare regiune are un singur cuvant de cod
• Aceste regiuni sunt separate prin linii imaginare, trasate cu linie continua
• Pentru un vector de intrare, cuvantul de cod ce este ales este acela din care face parte vectorul
de intrare.
Cuvinte de cod in spatiul bidimensional. Vectorii de intrare sunt marcati cu „x”, cuvintele de cod
sunt reprezentate prin cercuri, iar regiunile Voronoi sunt separate prin linii.
11
Schema bloc
12
• Dependenta numarului de vectori din dictionar functie de eroarea impusa
• Vectorii de cod pentru diferite valorii ale distorsiunii patratice medii, ca procente din
energia celulei de baza
13
Raportul de compresie este
unde
nc este numarul de coloane
nl este numarul de linii
n_bit_per_pixel este numarul de biti pentru reprezentarea intensitatii unui pixel
n_coef este numarul de coeficienti considerati in transformare
n_bit_per_coef este numarul de simboluri binare pentru reprezentarea unui
coefficient
Compresia bazata pe DCT se bazeaza pe doua tehnici in reducerea darelor pentru reprezentarea
unei imagini. Prima este cuantizarea coeficientilor transformarii; a doua este codarea entropica a
coeficientilor cuantizati.
O cuantizare fina, ce permite considerarea mai multor valori si pierderi mai mici de informatie,
foloseste coeficienti de normare: Numarul de cuantizat este impartit la factorul de ponderare,
inainte de rotunjire, adica inainte de cuantificarea propriu-zisa. Decuantizarea inseamna inmultirea
valorii cuantizate cu ponderea folosita la cuantizare.
14
In standardul de compresie JPEG, fiecare DCT coefficient este cuantizat utilizand o pondere
ce depinde de frecventa coeficientului considerat. Coeficientii pentru fiecare bloc de 8x8 sunt
impartiti la o matrice de cuantizare de 8x8, si rezultatul este rotunjit la cel mai aproape intreg.
In general, frecventele spatiale de ordin mare sunt mai putin vizibile ochiului uman in
comparatie cu frecventele joase. Astfel, factorii de cunatizare sunt alesi ca fiind mai mari pentru
frecvente mari. Urmatoarea matrice de cuantizare este folosita intens pentru imaginile moco-crome
si pentru componenta de luminanta a imaginiii color. Ea se folosteste in compresia
JPEG.Vizualizand matricea pe o scara a nivelelor de gri se vede dependenta factorilor de cuantizare
de frecventa.
15
Figura 3.3.2 - Litera A, pentru n = 5,6,7 si 8 coeficienti
Figura 3.3.3 – Compresia unei imagini prin DCT; raportul de compresie este 20
16
IV. Tipuri de codare
Codarea statistică este o tehnică entropică care identifică mai întâi anumite secvenţe în şirul de
date. Secvenţele mai frecvente se codează cu un număr mai mic de biţi, iar secvenţele mai rare cu
un număr mai mare de biţi. De exemplu codul Morse este un mod de codare statistică.
El foloseşte puncte (zero) şi linii (unu) pentru a coda caractere. Tabelul 4.1 ilustreaza codul
Morse în comparaţie cu un cod simplu. Se observă că semnele cele mai frecvente sunt codate cu
un singur bit, iar cele mai puţin probabile sunt codate cu mai mulţi biţi.
17
Fluxul codat devine acum:
01001001100111
Având deci doar 14 biți, realizând o compresie față de situația anterioară.
Codarea Huffman foloseşte un cod cu lungime variabilă. Acest lucru impune analizarea
informaţiei pentru a determina probabilitatea de apariţie a elementelor în pachetul de date ce va fi
transmis. Cu cât probabilitatea de apariţie a unui caracter este mai mare cu atât codul corespunzător
va avea lungimea mai mică. Codorul Huffman este utilizat pentru codare entropică
Nu ţine cont de caracteristicile datelor şi le tratează în acelaşi fel. Tipic se foloseşte codarea
statistică (se codează cu număr mai mare sau mai mic de biţi fiecare caracter funcţie de
probabilitatea sa de apariţie) sau suprimarea secvenţelor lungi (secvenţele lungi de 1 sau 0 se
înlocuiesc cu secvenţe speciale – carcaterul plus numărul de repetări).
Mai întâi pachetul de date este scanat pentru a determina numărul de apariţii a caracterelor,
apoi acestea sunt aranjate în ordinea descrescătoare a probabilităţii. Apoi caracterelor cele mai
puţin probabile le sunt alocate „1” şi „0”. De exemplu pentru un text s-au găsit următoarele
probabilităţi: ‘b’ ‘c’ ‘e’ ‘i’ ‘o’ ‘p’ 12 3 57 51 33 20 pe care le ordonăm în ordine crescătoare: ‘e’
‘i’ ‘o’ ‘p’ ‘b’ ‘c’ 57 51 33 20 12 3 şi alocăm pentru caracterul „c” pe 0 şi pentru „b” pe 1. Se
sumează numărul de apariţii ale celor două şi se trec în coloana următoare împreună cu restul de
caractere (figura 4.2), dar în ordinea numărului de apariţii.
19
4.3 Codarea predictivă
4.3.1 Codarea predictivă fără pierder
20
3-D – imaginea curentă şi imaginea anterioară
• Scalare pe 128
• Std. dev. – 3.76
• Entropia 2.59
• Se poate obţine un C=8/2.59 = aprox. 3.1:1
Se adaugă un cuantizor
• Eroarea de predicţie va fi mapată într-un domeniu limitat
• Cuantizorul este cel care implică pierderi
• Previne propagarea erorilor la decodor
21
4.4 Codarea diferenţială
Codarea diferenţială:
• îmbunătăţirea ratei de compresie
• algoritm de preprocesare
• modificarea ratei de apariţie a simbolurilor astfel încât să se obţină o
distribuţie mai eficientă pentru codare
22
23
Concluzie
În concluzie toate cadrele cu imagini sunt codificate ca imagini statice, utilizand unele metode
de codare care au cadre cu imagini ce se obtin printr-un algoritm de predictie din cele mai recente
cadre obtinute prin metode de compresie asemanatoare.
Iar în ceea ce privește decodificarea pentru un cadru, se cer cadrele anterioare si ulterioare
acestuia, astfel cadrele nu sunt transmise intr-o ordine secventiala.
Toate aceste metode de codificare sau de decodificare a cadrelor cu imagini au la baza o logica
de sintetizare a formatului unei imagini print-o conversie in alt format ce poate fi sigur având astfel
dimensiuni mai mici dar cu aceeasi claritate si ocupand astfel si un spatiu de memorie mai restans.
24
Bibliografie
1.Andrew B. Watson, Image Compression Using the Discrete Cosine Transform, Mathematica
Journal, 4(1), 1994, p. 81-88
2.http://scs.etc.tuiasi.ro/iciocoiu/courses/CIPS/course7/Capitolul2.pdf
3.http://www.comm.pub.ro/preda/apdsv/cursuri/APDSV_Cap2.pdf
4.http://andrei.clubcisco.ro/cursuri/f/f-sym/5master/aac-
tdmrc/39_Standarde%20in%20compresia%20imaginilor.pdf
5.http://ctmtc.utcluj.ro:8080/sites/pni/SACCDAV/Curs/Curs_2016_2017/Curs04_saccdmm_Com
presieFaraCuPierderi.pdf
6.https://en.wikipedia.org/wiki/Discrete_cosine_transform
7.http://alpha.imag.pub.ro/site_old/release/archive/09.pdf
25
Anexa 1 - Codul sursa Matlab pentru acest capitol
% numele = f_dct_1D
n=8;
fs=1000;
ts=1/fs;
t = (0:n-1)*ts;
f1 = 100;
f2 = 0;
for k=1:n,
sum = 0;
for i=1:n,
end;
end;
for k=1:n,
end;
26
end;
St = A * st;
if(1),
for i=1:8,
ylabel(strcat('i=', num2str(i)));
end;
end;
pause;
nr = 20;
Sr = [St(1:nr)' zeros(1,n-nr)]';
sr = inv(A)* Sr;
subplot(311), plot(t,st);
subplot(312), plot(t,sr);
crt = sumsqr(st-sr)/n
==============================================================
% numele = f_dct_2D
n=8;
27
s = ones(n,n);
s = [0 0 0 1 1 0 0 0;
0 0 1 0 0 1 0 0;
0 0 1 0 0 1 0 0;
0 0 1 0 0 1 0 0;
0 1 1 0 0 1 1 0;
0 1 1 1 1 1 1 0;
1 0 0 0 0 0 0 1;
1 0 0 0 0 0 0 1];
s=~s;
s = s * 255;
for i=1:n,
for k=1:n,
end;
end;
S = A * s * A';
sr = A' * S * A;;
pause;
28
clf;
%compress..
Sc=zeros(n,n);
for i=1:nc,
for j=1:nc,
Sc(i,j) = S(i,j);
end;
end;
src = A' * Sc * A;
end;
if (0),
for i=1:n,
a = A(i,:);
for j=1:n,
b = A(j,:);
x = a' * b
BM = [BM x];
pause;
end;
end;
29
end;
===========================================================
im = 'cameraman.tif';
I = imread(im);
J = dct2(I);
J1=J; J2=J;
IMWRITE(K1,'cameraman_c1.tif','tif');
IMWRITE(K1,'cameraman_c2.tif','tif');
n1=0; n2 = 0;
for i=1:256,
for j=1:256,
end;
end;
===============================================================
====
30