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.

Introducere[modificare | modificare sursă]

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 codare 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 codor cu norma JPEG. Un codor este declarat conform dacă este capabil să codeze 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.

Compresia JPEG[modificare | modificare sursă]

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

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

Decuparea imaginii în blocuri[modificare | modificare sursă]

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

Transformata cromatică[modificare | modificare sursă]

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ță.

Sub-eșantionare[modificare | modificare sursă]

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 caz (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ă.

Transformata DCT[modificare | modificare sursă]

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.

Reproduce

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.

Note[modificare | modificare sursă]

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

Cuantizare[modificare | modificare sursă]

Codaj, compresie RLE și Huffman[modificare | modificare sursă]

<TODO>

Decompresia JPEG[modificare | modificare sursă]

<TODO>

Note[modificare | modificare sursă]

<TODO>

JPEG, codaj fără pierderi[modificare | modificare sursă]

<TODO>