Sunteți pe pagina 1din 12

Lucrarea 9

Compresia imaginilor
BREVIAR TEORETIC
Termenul de compresie se refer a la totalitatea metodelor ce au drept scop reducerea cantit a t ii de date necesare pentru reprezentarea unei imagini. Compresia este folosit a n special pentru stocarea sau transmiterea imaginilor. S a consider am cazul unei imagini de dimensiune 512 512 pixeli. Dac a aceasta este o imagine n tonuri de gri, iar ecare pixel este codat cu 8 bit i, atunci cantitatea de date necesar a pentru a reprezenta aceast a imagine este: 512 512 8 = 29 29 23 = 221 2 M b

Din acest calcul ne putem da seama c a pentru a stoca o imagine avem nevoie de spat iu considerabil, iar pentru transmiterea ei avem nevoie de un canal de transmisiune de band a larg a, de care nu dispunem ntotdeauna.

9.1

Clasicarea metodelor de compresie

Metodele de compresie se pot clasica astftel: Metode de compresie la nivel de pixel Aceste metode nu tin cont de corelat ia care exist a ntre pixelii vecini, cod and ecare pixel ca atare. Acest tip de compresie este f ar a pierdere de informat ie, adic a imaginea init ial a poate ref acut a perfect din imaginea comprimat a. Exemple de astfel de metode: codarea Human codarea LZW (Lempel-Ziv-Walsh) codarea RLE (Run Length Encoding) Metode de compresie predictive Aceste metode realizeaz a compresia folosind corelat ia care exist a ntre pixelii vecini, dintr-o imagine. Exemple de astfel de metode: 69

70

LUCRAREA 9. COMPRESIA IMAGINILOR codarea cu modulat ie delta codarea DPCM (Dierential Pulse Code Modulation) Metode de compresie cu transformate Aceste metode se bazeaz a pe scrierea imaginii ntr-o alt a baz a, prin aplicarea unei transform ari unitare, atfel nc at energia imaginii s a e concentrat a ntr-un num ar c at mai mic de coecient i. Alte metode de compresie cuantizarea vectorial a codarea folosind fractali codarea hibrid a

9.2

Algoritmul Human

S a presupunem c a valorile pixelilor unei imagini sunt simboluri ale unei surse S: [S ] = {S1 , S2 , ..., SN } pentru care se cunosc probabilit a tile de aparit ie: [P ] = {p1 , p2 , ..., pN } P (S1 ) = p1 P (S2 ) = p2 P (SN ) = pN (9.2) (9.3) (9.1)

Aceste probabilit a ti nu reprezint a altceva dec at frecvet ele relative de aparit ie ale simbolurilor ntr-un sir de simboluri emise de sursa S . Entropia sursei S care genereaz a simbolurile se calculeaz a cu formula:
N

H (S ) =

i=1

pi logpi

(9.4)

Ne propunem s a cod am simbolurile sursei S cu simboluri ale unei alte surse (de exemplu o surs a care genereaz a doar dou a simboluri: 0 si 1), astfel nc at entropia noii surse s a e maximizat a. In continuare este prezentat a o metod a care maximizeaz a aceast a entropie, metod a elaborat a de Human n 1952: Pasul 1. Se ordoneaz a descresc ator probabilit a tile p i . Pasul 2. Se formeaz a un arbore binar, av and ca frunze valorile celor mai mici probabilit a ti din sirul de probabilit a ti. R ad acina acestui arbore va cont ine suma probabilit a tilor celor dou a frunze ale sale. Se eticheteaz a muchia st ang a cu 1 si muchia dreapt a cu 0.

9.2. ALGORITMUL HUFFMAN

71

Pasul 3. Din sirul P se elimin a cele dou a probabilit a ti care au fost alese ca ind cele mai mici. In sirul P se introduce valoarea cont inut a de r ad acina arborelui binar format. Pasul 4. Dac a n sirul P exist a mai mult de un element, atunci se reia algoritmul, de la Pasul 1. Pasul 5. Codarea binar a a ec arui element se obt ine prin parcurgerea arborelui ce s-a format, de la r ad acin a spre ecare frunz a. Ecient a codic arii Human este dat a de lungimea medie l a cuvintelor de cod, care se calculeaz a folosind formula:

l=
i=1

li p i

(9.5)

unde li este lungimea codului alocat simbolului S i . Exemplu: Fie o surs a S care genereaz a 4 simboluri, [S ] = {a, b, c, d}, care au urm atoarele probabilit a ti de aparit ie: [P ] = {0.2; 0.4; 0.1; 0.3}. Arborele cod arii Human se construie ste conform etapelor prezentate n Figurile 9.1, 9.2, 9.3 si 9.4.

0,4

0,3

0,2

0,1

Figura 9.1: Algoritmul Human: etapa 1.

0,4

0,3 1 0,1

0,3 0 0,2

Figura 9.2: Algoritmul Human: etapa 2.

72

LUCRAREA 9. COMPRESIA IMAGINILOR


0,4 0 0,3 0 0,2

0,6 1 0,3 1 0,1

Figura 9.3: Algoritmul Human: etapa 3.

1 1 0,4 1 0,3 1 0,1 0 0,2 0 0,6 0 0,3

Figura 9.4: Algoritmul Human: etapa 4. Pentru decompresie este necesar a o tabel a n care s a se memoreze corespondent ele ntre simboluri si cuvintele de cod. F ar a aceasta decompresia este imposibil de realizat. Simbol a b c d Cuv ant de cod 010 1 011 00

Lungimea medie a cuvintelor de cod, pentru acest exemplu, este:


4

l=
i=1

pi li = 0, 2 3 + 0, 4 1 + 0, 1 3 + 0, 3 2 = 1, 9 bits/simbol

Dac a nu am codat simbolurile, n vederea maximiz arii entropiei sursei, ar fost nevoie de 2 bit i/simbol pentru codare.

9.3. ALGORITMUL RLE

73

Pentru imagini, probabilit a tile de aparit ie ale nivelelor de gri se obt in prin calcularea histogramei imaginii. Dac a histograma este uniform a, atunci algoritmul Human de codare nu este ecient, nerealiz and nici o mbun at a tire a lungimii cuvintelor de cod.

9.3
9.3.1

Algoritmul RLE
Algoritmul RLE pentru imagini binare

Vom considera valorile pixelilor (0 sau 255) ca ind simbolurile 0 si 1 generate de o surs a binar a. In vederea cod arii imaginea este transformat a ntr-un sir unidimensional, prin concatenarea liniilor sau a coloanelor, ca n Figura 9.5.
L1 L2 L1 Ln

Ln

Figura 9.5: Transformarea imaginii ntr-un sir unidimensional, prin concatenarea liniilor. Acest sir de elemente 0 si 1 va codat, codarea realiz andu-se astfel: primul element al sirului codat este primul element din sirul de codat; apoi se scrie n sirul codat lungimea ec arui sub sir constant din sirul de codat. Exemplu: sirul de codat: 00000001111100011000000000101000111111111111 sirul codat: 0 7 5 3 2 9 1 1 1 3 12 Acest tip de codare se folose ste n special pentru comprimarea imaginilor transmise prin fax. Decompresia se face similar cu compresia, parcurg and sirul codat si gener and siruri alternate, de simboluri 0 sau 1, ncep and cu primul element din sirul codat, si de lungimi indicate de valorile nt alnite n sirul de decodat.

9.3.2

Algoritmul RLE pentru imagini n tonuri de gri

Pentru imagini n tonuri de gri, algoritmul RLE se aplic a pentru plane formate din bit ii de pe aceea si pozit ie, din reprezentarea binar a a valorilor pixelilor. De exemplu, dac a imaginea n tonuri de gri, are 256 de nivele de gri, corespunz ator la o cuantizare pe 8 bit i, atunci din aceast a imagine se

74

LUCRAREA 9. COMPRESIA IMAGINILOR

construiesc 8 plane (sau 8 imagini binare) astfel: o imagine binar a format a din bit ii b0 , o alt a imagine binar a din bit ii b 1 , s.a.m.d. (vezi Figura 9.6).

Figura 9.6: Transformarea unei imagini cu 256 nivele de gri, n 8 imagini binare. Valoarea pixelului (i, j ) din imaginea n tonuri de gri va reprezentat a pe 8 bit i astfel: val(i, j ) = [b0 b1 b2 b3 b4 b5 b6 b7 ] unde b0 este cel mai semnicativ bit (MSB1 ), iar b7 este cel mai put in semnicativ bit (LSB2 ). Imaginea binar a format a din bit ii cei mai semnicativi va comprimat a cel mai bine cu algoritmul RLE. Imaginea binar a format a din bit ii cei mai put in semnicativi va o imagine cu purici, pentru care se poate lua decizia de a nu mai codat a si deci ignorat a.

9.4

Compresia cu transformate

Compresia cu ajutorul transformatelor se bazeaz a pe proprietatea acestora de a compacta energia imaginii ntr-un num ar redus de coecient i, c at mai decorelat i, repartizat i neuniform n spat iul transform arii. Formula care dene ste o transformarea direct a este urm atoarea: V = A U AT (9.6)

unde A este matricea ce dene ste o transformare unitar a, separabil a. Pentru compresia imaginilor, transformarea cea mai apropiat a din punct de vedere al performant elor de transformarea optim a Karhunen-Lo eve, este transformarea cosinus. Coecient ii de energie mare sunt situat i n colt ul
1 2

Most Signicant Bit. Least Signicant Bit.

9.4. COMPRESIA CU TRANSFORMATE

75

Figura 9.7: Transformarea direct a. din st anga-sus al imaginii transformate, n cazul n care se folose ste pentru compresie transformarea cosinus (vezi Figura 9.7).

Figura 9.8: Anularea coecient ilor de energie mic a. Pentru a obt ine o rat a de compresie mai mare, vor anulat i coecient ii de energie mic a (vezi Figura 9.8). Anularea acestor coecient i va duce, ns a, la sc aderea calit a t ii imaginii dup a decompresie. Adic a, prin transformare , nu va exact invers a (vezi Figura 9.9), imaginea obt inut a din imaginea V imaginea original a U.

Figura 9.9: Transformarea invers a. A = A T V U

(9.7)

76

LUCRAREA 9. COMPRESIA IMAGINILOR

Compresia cu transformarea cosinus st a la baza algoritmului JPEG 3 de compresie a imaginilor.

URAREA LUCRARII DESFAS


Problema 1. Implementat i n C unul dintre algoritmii prezentat i (Human sau RLE). Pentru simplitate, imaginea citit a n format BMP, va scris a ntr-un format simplicat (vezi funct ia write naked image, din meniul Algortimi). Imaginea comprimat a va scris a ntr-un sier cu exensia .huf sau .rle. void ImageViewer :: write_naked_image( void ) { int i, j; int w, h; FILE *file; w = image.width(); h = image.height(); file = fopen( "naked.img", "w" ); if( file != NULL ) { for( i = 0; i < w; i++ ) { for( j = 0; j < h; j++ ) { int niv = qRed( image.pixel( i, j ) ); //nivelul de gri al pixelului fprintf( file, "%3d ", niv ); } fprintf( file, "\n" ); } fclose( file ); } } Problema 2. Calculat i raportul de compresie obt inut, ca raport dintre dimensiunile celor dou a siere: cel original (naked.img) n formatul simplicat si cel comprimat.
3

Joint Photographic Experts Group.

9.4. COMPRESIA CU TRANSFORMATE

77

Problema 3. Observat i efectul suprim arii coecient ilor de energie joas a, la o compresie-decompresie folosind transformata cosinus discret a. (funct ia compresie decompresie cu DCT, din meniul Algoritmi). Pentru aceasta vizualizat i imaginea decompresata.bmp. Codul prezentat n continuare presupune c a imaginea este p atrat a: void ImageViewer :: compresie_decompresie_cu_DCT( void ) { int w, h; int i, j, k; double pi = 3.1415926; w = image.width(); h = image.height(); int N = double double double double double w; max; C[ N U[ N V[ N AUX[

][ N ][ N ][ N N ][

]; //matricea transformarii cosinus ]; //imaginea in spatiul original ]; //imaginea in spatiul transformatei N ];

// COMPRESIA IMAGINII //formarea matricei C a transformarii cosinus discreta for( i = 0; i < N; i++ ) C[ 0 ][ i ] = 1. / sqrt( N ); for( i = 1; i < N; i++ ) for( j = 0; j < N; j++ ) C[ i ][ j ] = sqrt( 2./N ) * cos( pi * ( 2*j + 1 ) * i / ( 2*N ) ); //formarea matricei U for( i = 0; i < N; i++ ) for( j = 0; j < N; j++ ) U[ i ][ j ] = qRed( image.pixel( i, j )); //V = C*U*Ct //mai intii vom calcula AUX = C * U for( i = 0; i < N; i++ ) for( j = 0; j < N; j++ ) { AUX[ i ][ j ] = 0; for( k = 0; k < N; k++ )

78

LUCRAREA 9. COMPRESIA IMAGINILOR AUX[ i ][ j ] += C[ i ][ k ] * U[ k ][ j ]; } //apoi V = AUX * Ct max = 0; for( i = 0; i < N; i++ ) for( j = 0; j < N; j++ ) { V[ i ][ j ] = 0; for( k = 0; k < N; k++ ) V[ i ][ j ] += AUX[ i ][ k ] * C[ j ][ k ]; if( V[ i ][ j ] > max ) max = V[ i ][ j ]; } //anularea coeficientilor //in vederea maririi factorului de compresie for( i = 0; i < N; i++ ) for( j = 0; j < N; j++ ) { if( V[ i ][ j ] < 100 ) //pragul de anulare V[ i ][ j ] = 0; //alte valori prag: -500, -100, 0, 100, 500 } // DECOMPRESIA IMAGINII //U = Ct * V * C //AUX = Ct * V for( i = 0; i < N; i++ ) for( j = 0; j < N; j++ ) { AUX[ i ][ j ] = 0; for( k = 0; k < N; k++ ) AUX[ i ][ j ] += C[ k ][ i ] * V[ k ][ j ]; } //apoi U = AUX * C for( i = 0; i < N; i++ ) for( j = 0; j < N; j++ ) { U[ i ][ j ] = 0; for( k = 0; k < N; k++ )

9.4. COMPRESIA CU TRANSFORMATE U[ i ][ j ] += AUX[ i ][ k ] * C[ k ][ j ]; } //pseudo-imaginea diferenta QImage diff( N, N, 32, 0, QImage:: IgnoreEndian ); for( i = 0; i < N; i++ ) for( j = 0; j < N; j++ ) { int dif = abs( qRed( image.pixel( i, j ) ) (int)( U[ i ][ j ] ) ); diff.setPixel( i, j, qRgb( dif, dif, dif ) ); } iio.setImage( diff ); iio.setFileName( "diferenta.bmp" ); iio.setFormat( "BMP" ); iio.write(); }

79

Problema 4. Calculat i eroarea p atratic a medie () dintre imaginea original a si imaginea obt inut a prin compresia si decompresia cu transformat a cosinus discret a, folosind formula: = (U V )2 = 1 NM
N 1 M 1 i=0 j =0

[u(i, j ) v (i, j )]2

Pentru aceasta modicat i funct ia Compresie-decompresie cu DCT. Observat i valorile erorii medii p atratice pentru diverse valori ale pragului de anulare a coecient ilor n spat iul transform arii. Problema 5. Observat i pseudo-imaginea diferent a , dintre imaginea original a si cea obt inut a prin compresia si decompresia cu DCT, pentru diferite valori ale pragului (vezi sierul diferenta.bmp).

80

LUCRAREA 9. COMPRESIA IMAGINILOR

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