JPEG

De la Wikipedia, enciclopedia liberă

Salt la: Navigare, căutare

În domeniul informaticii, JPEG (pronunţată "gei-peg"; IPA: /ˈdʒeɪpɛg/) este o metodă foarte des utilizată de compresie a imaginilor fotografice. Fişierele conţinând imagini compresate graţie acestei metode poartă în general extensia ".jpg".

O fotografie de floare compresată în JPEG, cu rate de compresie din ce în ce mai ridicate, de la stînga la dreapta.

Cuprins

[modifică] Introducere

JPEG este acronimul organizaţiei Joint Photographic Experts Group. Este vorba despre un comitet de experţi care edictează normele pentru compresia numerică a imaginilor fixe. Norma numită JPEG, cunoscută şi sub denumirea ISO/IEC IS 10918-1 | ITU-T Recommendation T.81, este rezultatul unor proiecte de cercetare care au început prin anii 1980 odată cu primele încercări în laborator ale tehnicilor de compresie a imaginilor.

Grupul JPEG, care a reunit cîteva zeci de experţi internaţionali, a publicat această normă încă din 1991. Versiunea oficială şi definitivă n-a fost adoptată decît în 1992. Din punctul de vedere al proprietăţii intelectuale, doar partea referitoare la codajul aritmetic este brevetată, deţinătorul brevetului fiind IBM.

Norma JPEG nu fixează decît algoritmul şi formatul de decodare. Procesul de încodare este lăsat la latitudinea utilizatorilor acestei tehnologii, singura cerinţă fiind ca imaginea compresată să poată fi tratată de către un decodor JPEG standard. Norma propune un ansamblu de fişiere de test numite fişiere de conformanţă care permit verificarea conformităţii unui encodor cu norma JPEG. Un encodor este declarat conform dacă este capabil să encodeze corect toate fişierele de conformanţă.

JPEG defineşte două clase de compresie :

  • cu pierderi sau compresie ireversibilă. Este vorba de JPEG-ul « clasic ». Acesta permite rate de compresie importante, în general de ordinul a 60 sau 80, păstrând totuşi o foarte bună calitate a imaginii.
  • fără pierderi sau compresie reversibilă. Nu au loc pierderi de informaţie şi este în consecinţă posibilă reproducerea exactă a imaginii originale. Rata compreisiei posibilă cu această tehnică este mult mai modestă, în general aproape de 2. Această clasă este subiectul unei norme speciale JPEG-LS.

[modifică] Compresia JPEG

Putem descrie compresia şi decompresia JPEG în 6 etape conform acestei organigrame :

Organigrama compresiei
Figure 1 : Organigrama compresiei.
Această imagine nu reprezintă un ciclu !

[modifică] Decuparea imaginii în blocuri

Algoritmul JPEG, după cum procedează în general toate algoritmele de compresie cu pierderi, începe prin a decupa imaginea în blocuri rectangulare de 64 (8x8) sau 256 (16x16) pixeli.

[modifică] Transformata cromatică

JPEG este capabil să opereze în orice spaţiu cromatic, totodată cele mai bune rate de compresie sunt obţinute utilizând codajele cromatice de tip luminanţă/crominanţă ca de exemplu YUV sau YCbCr, ţinând cont de faptul că sistemul vizual uman este mai sensibil la componenta luminanţă decât la componenta crominanţă.

[modifică] Sub-eşantionare

Metoda cea mai simplă de a profita de slaba sensibilitate a vederii pentru crominanţă este sub-eşantionarea semnalelor de crominanţă. In general se face apel la o sub-eşantionare de tip 2h1v sau 2h2v. In primul cas (cel mai uzitat) se implementează o sub-eşantionare verticală 2:1 fără sub-eşantionare orizontală, iar în al doilea caz se realizează o dublă sub-eşantionare 2:1 orizontală şi verticală. Aceste sub-eşantionări nu sunt aplicate decât componentelor de crominanţă, luminanţa nefiind niciodată sub-eşantionată.

[modifică] Transformata DCT

Transformata DCT (Discrete Cosine Transform în engleză), este o transformată numerică care este aplicată fiecărui bloc din fiecare componentă cromatică.

Fiecărui bloc de n\cdot n pixeli sunt asociate n\cdot n frecvenţe spaţiale.

Transformata DCT poate fi exprimată matematic în felul următor :

\mathrm{DCT}(i, j)=\frac{2}{N}C(i)C(j)\sum_{x=0}^{N-1}\sum_{y=0}^{N-1}
\mathrm{pixel}(x, y) \cos\left[\frac{(2x+1)i\pi}{2N} \right] \cos\left[\frac{(2y+1)j\pi}{2N} \right]
Ecuaţia 1 : Transformata DCT directă.

Transformata DCT inversă poate fi exprimată astfel :

\mathrm{pixel}(x, y)=\frac{2}{N}\sum_{i=0}^{N-1}\sum_{j=0}^{N-1}
C(i)C(j)\,\mathrm{ DCT}(i, j) \cos\left[\frac{(2x+1)i\pi}{2N} \right] \cos\left[\frac{(2y+1)j\pi}{2N} \right]
Ecuaţia 2 : Transformata DCT inversă.

In ambele cazuri constanta C\,\! are valuarea următoare :

C(x)=\left\{\begin{matrix}\frac{1}{\sqrt{2}}&
\mathrm{pour}~ x = 0 \\[1ex] 1 & \mathrm{pour}~ x > 0 \end{matrix}\right.
Ecuaţia 3 : Definiţia constantei C de normalizare.

Reproducem în scop ilustrativ, un exemplu complet extras din « Digital Images Compression Techniques » de Majid Rabbani şi Paul W. Jones.

Matrice (bloc de pixels) de bază :

f=\begin{bmatrix} 139 & 144 & 149 & 153 & 155 & 155 & 155 & 155 \\ 144 & 151 & 153 & 156 & 159 & 156 & 156 & 156 \\ 150 & 155 & 160 & 163 & 158 & 156 & 156 & 156 \\ 159 & 161 & 162 & 160 & 160 & 159 & 159 & 159 \\ 159 & 160 & 161 & 162 & 162 & 155 & 155 & 155 \\ 161 & 161 & 161 & 161 & 160 & 157 & 157 & 157 \\ 162 & 162 & 161 & 163 & 162 & 157 & 157 & 157 \\ 162 & 162 & 161 & 161 & 163 & 158 & 158 & 158 \end{bmatrix}
Ecuaţia 4 : Matrice de origine.

Efectuând DCT obţinem matricea de frecvenţe următoare :

F=\begin{bmatrix} 1260 & -1 & -12 & -5 & 2 & -2 & -3 & 1 \\ -23 & -17 & -6 & -3 & -3 & 0 & 0 & -1 \\ -11 & -9 & -2 & 2 & 0 & -1 & -1 & 0 \\ -7 & -2 & 0 & 1 & 1 & 0 & 0 & 0 \\ -1 & -1 & 1 & 2 & 0 & -1 & 1 & 1 \\ 2 & 0 & 2 & 0 & -1 & 1 & 1 & -1 \\ -1 & 0 & 0 & -1 & 0 & 2 & 1 & -1 \\ -3 & 2 & -4 & -2 & 2 & 1 & -1 & 0 \end{bmatrix}
Ecuaţia 5 : Matricea rezultat a transformatei DCT.

[modifică] Note

Calculul numeric a l unei DCT est complex (complexitate O(N*log(N))). Este etapa cea mai costisitoare din punctul de vedere al timpului de calcul şi a resurselor necesare pentru compresia sau decompresia JPEG, dar este probabil etapa cea mai importantă deoarece permite separarea elementelor de joasă fecvenţă de cele de înaltă frecvenţă prezente într-o imagine.

Puterea de calcul disponibilă în procesoarele moderne, în alianţă cu algoritme de tip FFT foarte eficace, permite reducerea timpului de calcul la nivele acceptabile pentru utilizatorul normal, sau chiar imperceptibile pe maşinile cele mai puternice.

[modifică] Cuantizare

[modifică] Codaj, compresie RLE şi Huffman

<TODO>

[modifică] Decompresia JPEG

<TODO>

[modifică] Note

<TODO>

[modifică] JPEG, codaj fără pierderi

<TODO>

Unelte personale