Sunteți pe pagina 1din 32

Compresia Datelor și Instrumentație Virtuală

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

În ultimii ani domeniul comunicațiilor a reușit să atingă o etapă importantă de dezvoltare în


diferite servicii de comunicație și televiziune ce au dus la creșterea numărului de imagini transmise
la diferite niveluri de codare. S-au elaborat și propus foarte multe standarde atât pentru secvențele
de imagini: H-261, H-263, MPEG-1, MPEG-2, MPEG-4, MPEG-&, cât și pentru imagini statice:
JPEG, JPEG-2000, multe dintre ele constituind elementul cheie al noilor tehnologii informatice în
diverse aplicații: multimedia, efecte speciale în televiziune și cinematografie, grafică pe calculator,
sisteme de videoconferință, teledetecție, telemedicină etc. Cele mai multe dintre aceste servicii
necesită transmiterea unei cantități impresionante de date pe canale foarte înguste.
Codarea la rate foarte scăzute de biți, necesară transmisiei pe canalele de comunicații existente,
implică rate de transmisie sub 64 kb/s pentru semnalul video. Sursele video aferente acestor
aplicații, având 8 biți/eșantion pentru fiecare culoare, conțin în mod obișnuit aproximativ 1,25
Mocteți pentru un cadru de imagine color. Cum frecvența cadrelor este de 25 Hz, rezultă o rată de
date, fără implicarea unei compresii, de peste 10 Mb/s.
În plus, lipsa informaților referitoare la conținutul imaginii limitează funcționalităților
disponibile la recepție, nefiind posibilă manipularea și personalizarea informației recepționate, așa
cum se dorește în cadrul sistemelor de transmisie multimedia.
Se dorește eliminarea erorilor de predicție care sunt transmise către decodor, motiv pentru care
este important să nu se introducă distorsiuni suplimentare deranjate pentru sistemul vizual uman.
Se dorește subeșantionarea temporală a secvenței de imagini înaintea codării propriuzise.
În cele ce urmează este prezentat un algoritm de codare bazat pe estimarea vectorilor de mișcare în
vederea exploatării redundanței temporale a secvențelor de imaginii.

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.

1.1 Noțiuni introductive

O transformare discretă a cosinusului DCT exprimă o secvență finită de puncte de date în


ceea ce privește o sumă a funcțiilor cosinusului oscilând la frecvențe diferite . DCT-urile sunt
importante pentru numeroase aplicații din domeniul științei și ingineriei, de la compresia
pierdută a audio (de ex. MP3 ) și imaginile (de exemplu, JPEG ) în cazul în care componentele de
înaltă frecvență pot fi eliminate, metode spectrale pentru soluția numerică a ecuațiilor diferențiale
parțiale .
Folosirea de cosinus, mai degrabă decât sinus, funcțiile sunt critice pentru comprimare,
deoarece se dovedește (așa cum este descris mai jos) că sunt necesare mai puține funcții de cosinus
pentru a aproxima un semnal tipic , în timp ce pentru ecuațiile diferențiale cosinusurile exprimă o
anumită alegere a condițiilor limită .
În special, un DCT este o transformare legată de Fourier similară transformării discrete
Fourier (DFT), dar folosind doar numere reale . DCT-urile sunt în general legate de coeficienții
seriei Fourier dintr-o secvență extinsă periodic și simetric, în timp ce DFT-urile sunt corelate cu
coeficienții din seria Fourier dintr-o secvență extinsă periodic. DCT-urile sunt echivalente cu DFT
de aproximativ două ori mai mare, operând pe date reale cu simetrie egală (deoarece transformarea
Fourier a unei funcții reale și uniforme este reală și uniformă), în timp ce în unele variante datele
de intrare și / sau ieșire sunt deplasate pe jumătate o mostră. Există opt variante DCT standard,
dintre care patru sunt comune.

1.2 Transformata DCT-2D

Transformata Cosinus Discretă 2D (DCT-2D) realizează o conversie imagine (cadru video) –


frecvență spațială. Variații lente de intensitate în imagine corespund frecvențelor joase și sunt cel
mai bine percepute de ochi. Tranzițiile bruște corespund frecvențelor înalte și nu sunt percepute
mai greu de către ochiul uman. La majoritatea standardelor de compresie, Transformata DCT-2D
se aplică pe blocuri ale imaginii. Pentru un bloc de luminanță de dimensiune MxN pixeli,
Transformata Cosinus Discretă 2-D este dată de:

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

Coeficientul C00 se numește coeficient DC și reprezintă frecvența spațială 0 sau media


valorilor pixelilor din bloc. Ceilalți coeficienți se numesc coeficienți AC și reprezintă frecvențele
spațiale orizontale și verticale din bloc. Pentru decodare se folosește Transformata Cosinus
Discretă Inversă 2D (IDCT-2D):

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.2. a) Imaginea originală; b) imaginile obținute, dacă la decodare, se utilizează, pe


rând, doar coeficienții DCT de o anumită frecvență

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:

unde I (x,y,z) este intensitatea pixelului de la poziția (x,y) din cadrul z.


Și transformata 3D se aplică, de regulă pe blocuri tridimensionale de date, de exemplu de
dimensiune 8x8x8, obținându-se blocuri 3D de coeficienți DCT (vezi Figura 1.3.1).
Fiecare bloc 3D de coeficienți conține un coeficient DC, C(0,0,0), iar ceilalți coeficienți sunt
coeficienți AC. Cele mai importante componente ale semnalului sunt concentrate în apropiere de
coeficientul DC.

Figura 1.3.1 Transformata Cosinus Discretă aplicată pe blocuri 3D de date video

6
II. Transformări Wavelet Discretă

2.1 Transformata Wavelet Unidimensională

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

Fig. 2.1 Reprezentarea grafică a DCT uni-dimensional

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.

Figura 2.2 Aplicarea Transformatei Wavelet unei imagini pe linii și coloane

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

Figura 2.3 Descompunerea Wavelet tridimensională a unei secvențe de imagini

9
III. Cuantizarea Scalară şi Vectorială

3.1 Compresia prin cuantizare scalară

În continuare se reiau câteva metode folosite în compresie, evidenţiind aplicabilitatea lor în


compresia de imagini.
Cuantizarea scalară poate fi folosită pentru a compresa imagini, dar performanţele ei sunt
mediocre. De exemplu, o imagine cu 8 biţi/pixel poate fi compresată prin cuantizare scalară
eliminând cei mai nesemnificativi patru biţi ai fiecărui pixel. Aceasta conduce la o rată de
compresie de 0,5, care pe lângă faptul că nu este semnificativă, determină în acelaşi timp şi
reducerea numărul de culori (sau nuanţe de gri) de la 256 la doar 16.
O astfel de reducere nu numai ca descreşte pe ansamblu calitatea imaginii reconstruite, dar
poate chiar crea benzi de diferite culori, un efect observabil şi deranjant care este ilustrat aici.

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.

3.2 Compresia prin cuantizare vectoriala

Cuantizarea vectoriala este generalizarea cuantizarii scalare la cunatizarea unui vector


▫ Saltul de la o dimensiune la mai multe dimensiuni atrage noi concepte, tehnici si aplicatii
▫ In majoritatea cazurilor intrarea este sub forma numerica iar iesirea este o forma comprimata.
Cuantizarea vectoriala este o metoda de compresie cu pierdere de informatie, care se opreste
asupra unei multimi de pixeli, in loc sa se uite la pixelii individuali.

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

Algoritm de cuantizare vectoriala:


Begin
Operatii off-line:
#1: Stabileste dim. vectorului (domeniului) functie de eroarea acceptata
#2: Defineste setul de vectori de cod (imagini)
Operatii on-line:
#1: Prezinta imaginea de comprimat
#2: Imparte in blocuri (vectori) de acceasi dimensiune cu vectorii de cod
#3: PENTRU fiecare bloc al imaginii EXECUTA
#3.1: Cauta cel mai aproape vectorului de cod
#3.2: Codeaza si transmite indicele vectorului de cod.
End
Exemplu
• Se considera imaginea „cameraman”, prezentata in figura de mai jos

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

Se considera imaginea initiala „cameraman.tif” de dimensiune 256*256*8 biti (imagine gri) •


Celula de baza are dimensiuea de 4x4 • Se considerara un numar diferit de vectori de baza in cadrul
dictionarului, de 11.944, 9.764 si 8200.

3.3 Compresia prin DCT

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.

La efectuarea compresiei, se transforma matricea in blocuri si se cuantizeaza fiecare bloc. La de-


compresie se inmulteste fiecare bloc cu matricea de cuantizare si se obtine imaginea reconstruita.
Exemplu: Se considera problema compresiei unei imagini, ce reprezinta litera A, ca in figura 1. In
partea dreapta a figurii 3.3, se prezinta coeficientii DCT pe o scara de gri de la 0 la 255, cu scalarea
corespunzatoare a matricii S.

Figura 3.3 – Litera A (8x8 pixel) si coeficientii DCT


In figura 3.3.1, se prezinta litera A reconstituita folosind numai o parte din coeficienti, si
anume pentru n = 5, 6, 7, si 8. Selectarea numarului de coeficienti se bazeaza pe faptul ca cele mai
mari valori se gasesc in jurul frecventelor joase (cel putin pentru imagini naturale).
In figura 3.3.2 se prezinta un criteriu de selectie bazat pe selectia coeficientilor dupa valorile
acestora. Se observa ca se obtine un raport de compresie destul de mare, in jur de 20. De altfel, 90
% din coeficientii transformarii au valori foarte mici.
Programele folosite la generarea figurilor acetui document sunt prezentate in Anexa, la
sfarsitul documentului.

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

4.1 Codarea statistică

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.

Pentru exemplificarea acestei metode propunem codarea următorului flux:


ABABACAD
Cea mai simplă codare ar fi codarea pe 2 biți a fiecărui symbol (corespunzătoare unui alfabet
cu 4 simboluri) de exemplu astfel:
A-00, B-01, C-10, D-11
Astfel, secvența codată devine:
0001000100100011
Având deci 16 biți.
Codarea statistică presupune realizarea statisticii apariției simbolurilor și alocarea de coduri
mai scurrte simbolurilor cu frecvență de apariție mai mare. Evaluăm deci frecvențele de apariție:
A-4(0100), B-2(0010), C-1(0001), D-1(0001)
Și alocăm coduri corespunzător:
A-0, B-10, C-110, D-111

17
Fluxul codat devine acum:
01001001100111
Având deci doar 14 biți, realizând o compresie față de situația anterioară.

4.2 Codare entropica (Huffman)

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.

Fig. 4.2.1 Codarea Huffman


18
Fig. 4.2.2 Algoritmul de codare Huffman adaptivă (aa_bbb_c)

• Entropia = 7.3838 biţi/pixel


• Lavg = 7.428 biţi/pixel (Huffman - Matlab)
• Diferenţa Lavg-Entropia
o este de 512x512x(7.428-7.3838), => adică 11587 biţi – 0.6%
• C = 8/7.428 = 1.077
• R= 1 - 1/1.077 = 0.0715 (7.15% se reduce prin codare

19
4.3 Codarea predictivă
4.3.1 Codarea predictivă fără pierder

1-D – linia curentă


• Pentru imagini (x, y)
• Dacă m=1, =1
• Codarea diferenţială

• Imaginea eroarea de predictive


• scalare pe 128
• Se reduce redundanţa spaţială
• Std. dev.
• 45.6 la original
• 15.58 la eroarea de predicţie
• Se poate obţine un C=8/3.99 = aprox. 2

2-D – linia curentă şi anterioară

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

4.3.2 Codarea predictivă cu pierderi

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

% functie DCT monodimensionala;

% numele = f_dct_1D

clc; clear; clf;

n=8;

fs=1000;

ts=1/fs;

t = (0:n-1)*ts;

f1 = 100;

f2 = 0;

s = sin(6.28 * t * f1) + cos(6.28 * t * f2);

for k=1:n,

sum = 0;

for i=1:n,

sum = sum + s(i) * cos(( 2*i-1)* (k-1) * 3.14 / 2 / n);

end;

if k==1, C(k)= 1/sqrt(2); else C(k) = 1; end;

S(k) = sqrt(2/n)*C(k)* sum;

end;

st=s'; % vector coloana;

% calculul matricii transformarii:

for i=1:n, % indicele de linie

for k=1:n,

if k==1, C(k)= 1/sqrt(2); else C(k) = 1; end;

A(k,i) = sqrt(2/n)* C(k) * cos(( 2*i-1)* (k-1) * 3.14 / 2 / n);

end;

26
end;

St = A * st;

%coloanele matricii A definesc vectorii baza;

% reprezentarea vectorilor baza

if(1),

for i=1:8,

subplot(4,2,i), plot([0:n-1], A(:,i));

ylabel(strcat('i=', num2str(i)));

end;

end;

pause;

% se reface semnalul initial cu mai putini coeficienti:

nr = 20;

Sr = [St(1:nr)' zeros(1,n-nr)]';

sr = inv(A)* Sr;

subplot(311), plot(t,st);

subplot(312), plot(t,sr);

subplot(313), plot(t, (st-sr).^2);

crt = sumsqr(st-sr)/n

==============================================================

% functie DCT bi-dimensionala;

% numele = f_dct_2D

% 0 = black; 255 = white;

clc; clear; clf;

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;

% calculul matricii transformarii:

for i=1:n,

for k=1:n,

if k==1, C(k)= 1/sqrt(2); else C(k) = 1; end;

A(k,i) = sqrt(2/n)* C(k)*cos((2*i-1)* (k-1) * 3.14 / 2 / n);

end;

end;

Am=dctmtx(8); % matricea transformarii data de Matlab;

S = A * s * A';

sr = A' * S * A;;

%coloanele matricii A definesc vectorii baza;

% reprezentarea vectorilor baza

subplot(221), imshow(s, [0 255]);

subplot(222), imshow(S, [0 255]);

pause;

28
clf;

%compress..

for nc= [5 6 7 8];

Sc=zeros(n,n);

for i=1:nc,

for j=1:nc,

Sc(i,j) = S(i,j);

end;

end;

src = A' * Sc * A;

subplot(2,2, nc-4), imshow(src,[0 255]);

end;

if (0),

% se calculeaza matricele de baza

% se definesc vectorii de baza din liniile matricii A:

BM = []; % BM = basis matrix;

for i=1:n,

a = A(i,:);

for j=1:n,

b = A(j,:);

x = a' * b

BM = [BM x];

subplot(8,8,(i-1)*8 +j), imshow(x, [min(min(x)) max(max(x))]);

pause;

end;

end;

29
end;

===========================================================

clc; clear; clf;

im = 'cameraman.tif';

subplot(221), imshow(im); ylabel('size = 65240 Bytes');

I = imread(im);

J = dct2(I);

subplot(222), plot(log(abs(J))); title('log(abs(DCT))');

J1=J; J2=J;

J1(abs(J) < 200) = 0; K1 = idct2(J1);

subplot(223), imshow(K1,[0 255]); title('abs(S) < 200 -> 63342 / 65536');

ylabel('size = 2716 Bytes');

J2(abs(J) < 80) = 0; K2 = idct2(J2);

subplot(224), imshow(K2,[0 255]);title('abs(S) < 80 - > 64669 / 65536');

IMWRITE(K1,'cameraman_c1.tif','tif');

IMWRITE(K1,'cameraman_c2.tif','tif');

n1=0; n2 = 0;

for i=1:256,

for j=1:256,

if J(i,j) < 200, n1 = n1+1; end;

if J(i,j) < 80, n2 = n2+1; end;

end;

end;

===============================================================
====

30

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