JPEG

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 5 noiembrie 2021; verificările necesită 7 modificări .
JPEG
Extensie .jpg, .jpeg, .JPG, .JPEG, .jpesau.JPE
tip MIME imagine/jpeg
Semnătură 0xFF 0xD8
publicat 18 septembrie 1992
Tip de format Format grafic
Dezvoltat în JPEG 2000 , JPEG-LS , JPEG XR , MotionJPEG
Standard(e) ISO/IEC 10918
Site-ul web jpeg.org/jpeg/ ​(  engleză)
 Fișiere media la Wikimedia Commons

JPEG (pronunțat jpeg [1] , eng .  Joint Photographic Experts Group , după numele organizației dezvoltatorului ) este unul dintre formatele grafice raster populare utilizate pentru stocarea fotografiilor și imaginilor similare. Fișierele care conțin date JPEG au de obicei extensiile (sufixele) .jpg (cel mai popular), .jfif , .jpe sau .jpeg . Tipul MIME este image/jpeg.

Algoritmul JPEG vă permite să comprimați o imagine atât cu pierderi , cât și fără pierderi (modul de compresie JPEG fără pierderi). Sunt acceptate imagini cu o dimensiune liniară de cel mult 65535 × 65535 pixeli.

În 2010, pentru a păstra pentru posteritate informații despre formatele digitale populare la începutul secolului XXI, oamenii de știință din proiectul PLANETS au pus instrucțiuni de citire a formatului JPEG într-o capsulă specială, care a fost plasată într-un depozit special din Alpii Elvețieni. [2] .

Domeniul de aplicare

Algoritmul JPEG este cel mai eficient pentru comprimarea fotografiilor și picturilor care conțin scene realiste cu tranziții fine în luminozitate și culoare. JPEG este utilizat pe scară largă în fotografia digitală și pentru stocarea și transmiterea imaginilor folosind Internetul .

Formatul JPEG în modul de compresie cu pierderi este de puțin folos pentru comprimarea desenelor, a textului și a graficelor semnelor, unde un contrast puternic între pixelii adiacenți duce la artefacte vizibile . Este recomandabil să salvați astfel de imagini în formate fără pierderi, cum ar fi JPEG-LS , TIFF , GIF , PNG sau să utilizați modul de compresie Lossless JPEG.

JPEG (precum și alte formate de compresie cu pierderi ) nu este potrivit pentru comprimarea imaginilor în timpul procesării în mai multe etape, deoarece distorsiunile vor fi introduse în imagini de fiecare dată când rezultatele procesării intermediare sunt salvate.

JPEG nu trebuie utilizat în cazurile în care chiar și pierderea minimă este inacceptabilă, cum ar fi atunci când comprimați imagini astronomice sau medicale. În astfel de cazuri, poate fi recomandat modul de compresie Lossless JPEG furnizat de standardul JPEG (care, totuși, nu este acceptat de cele mai populare codecuri ) sau standardul de compresie JPEG-LS .

Compresie

Când este comprimată, imaginea este convertită din spațiul de culoare RGB în YCbCr . Standardul JPEG (ISO / IEC 10918-1) nu reglementează alegerea YCbCr, permițând alte tipuri de transformare (de exemplu, cu numărul de componente [3] diferit de trei) și compresie fără conversie (direct în RGB) , cu toate acestea, specificația JFIF ( JPEG File Interchange Format, propus în 1991 de C-Cube Microsystems, iar acum standardul de facto) implică utilizarea conversiei RGB-> YCbCr.

După conversia RGB->YCbCr, pentru canalele de imagine Cb și Cr responsabile de culoare, se poate efectua „decimare” (subeșantionare [4] ), ceea ce înseamnă că fiecare bloc de 4 pixeli (2x2) din canalul de luminozitate Y este atribuit valori medii Cb și Cr (schema de decimare „4:2:0” [5] ). În același timp, pentru fiecare bloc 2x2, în loc de 12 valori (4 Y, 4 Cb și 4 Cr), sunt folosite doar 6 (4 Y și câte un Cb și Cr mediu). Dacă există cerințe mai mari pentru calitatea imaginii restaurate după comprimare, subțierea poate fi efectuată doar într-o singură direcție - vertical (schema „4:4:0”) sau orizontal („4:2:2”) sau neefectuată deloc ("4:4:4").

Standardul permite, de asemenea, decimarea cu media Cb și Cr nu pentru un bloc 2x2, ci pentru patru pixeli consecutivi (vertical sau orizontal), adică pentru blocuri 1x4, 4x1 (schema „4:1:1”), precum și 2x4 și 4x2 (schema „4:1:0”). De asemenea, este posibil să se utilizeze diferite tipuri de decimare pentru Cb și Cr, dar în practică astfel de scheme sunt utilizate extrem de rar.

În plus, componenta de luminozitate Y și componentele responsabile pentru culoarea Cb și Cr sunt împărțite în blocuri de 8x8 pixeli. Fiecare astfel de bloc este supus unei transformări cosinus discrete (DCT) . Coeficienții DCT rezultați sunt cuantificați (în general sunt utilizate diferite matrici de cuantizare pentru Y, Cb și Cr) și împachetate folosind codurile run și Huffman . Standardul JPEG permite, de asemenea, utilizarea unei codări aritmetice mult mai eficiente , însă, din cauza restricțiilor de brevet (brevetul pentru codificatorul aritmetic QM descris în standardul JPEG aparține IBM ), în practică este rar utilizat. Populara bibliotecă libjpeg din versiunile recente include suport pentru codificarea aritmetică, dar vizualizarea imaginilor comprimate folosind această metodă poate fi problematică, deoarece mulți vizualizatori nu acceptă decodarea lor.

Matricele utilizate pentru cuantificarea coeficienților DCT sunt stocate în antetul fișierului JPEG. De obicei, acestea sunt construite în așa fel încât coeficienții de înaltă frecvență să fie supuși unei cuantizări mai puternice decât cei de joasă frecvență. Acest lucru duce la grosierul detaliilor fine din imagine. Cu cât raportul de compresie este mai mare, cu atât cuantizarea tuturor coeficienților este mai puternică.

La salvarea unei imagini ca fișier JPEG, codificatorului i se atribuie un parametru de calitate într-o unitate arbitrară, cum ar fi 1 la 100 sau 1 la 10. Un număr mai mare înseamnă de obicei o calitate mai bună (și un fișier comprimat mai mare). Cu toate acestea, nu există un astfel de parametru în fișierul JPEG în sine, iar calitatea imaginii reconstruite este determinată de matricele de cuantizare, tipul de decimare a componentelor diferenței de culoare și acuratețea operațiilor matematice atât pe partea codificatorului, cât și a decodorului. În acest caz, chiar și atunci când se utilizează cea mai înaltă calitate (corespunzând unei matrice de cuantizare constând doar din unități și absența decimării componentelor diferențelor de culoare), imaginea reconstruită nu se va potrivi exact cu cea inițială, care este asociată atât cu acuratețea finită. a DCT și cu necesitatea de a rotunji valorile coeficienților Y, Cb, Cr și DCT la cel mai apropiat număr întreg. Modul de compresie Lossless JPEG, care nu folosește DCT, oferă o potrivire exactă între imaginile restaurate și cele originale, dar eficiența sa scăzută (raportul de compresie depășește rar 2) și lipsa suportului din partea dezvoltatorilor de software nu au contribuit la popularitatea Lossless. JPEG.

Varietate de scheme de compresie JPEG

Standardul JPEG oferă două moduri principale de a reprezenta datele codificate.

Cea mai comună, acceptată de majoritatea codecurilor disponibile , este reprezentarea secvenţială (JPEG secvenţială), care implică parcurgerea secvenţială a imaginii codificate cu o adâncime de biţi de 8 biţi per componentă (sau 8 biţi per pixel pentru tonuri de gri alb-negru). imagini) bloc cu bloc de la stânga la dreapta, de sus în jos. Operațiile descrise mai sus sunt efectuate pe fiecare bloc de imagine codificat, iar rezultatele codificării sunt plasate în fluxul de ieșire sub forma unei singure „scanări”, adică o matrice de date codificate corespunzătoare datelor transmise secvenţial („scanate”). imagine. Linia de bază sau modul de codare „de bază” permite doar o astfel de reprezentare (și codarea Huffman a coeficienților DCT cuantificați). Modul extins (extins), alături de cel secvenţial, permite de asemenea reprezentarea progresivă (JPEG progresivă) a datelor, codând imagini cu o adâncime de biţi de 12 biţi pe componentă/pixel (comprimarea unor astfel de imagini prin specificaţia JFIF nu este acceptată), și codificarea aritmetică a coeficienților DCT cuantificați.

În cazul JPEG progresiv, datele comprimate sunt scrise în fluxul de ieșire ca un set de scanări, fiecare dintre acestea descriind întreaga imagine în detaliu tot mai mare. Acest lucru se realizează fie prin înregistrarea în fiecare scanare nu a unui set complet de coeficienți DCT, ci doar a unora dintre ei: mai întâi - joasă frecvență, în următoarele scanări - înaltă frecvență (metoda „selecție spectrală”, adică eșantioane spectrale). ), sau prin rafinarea succesivă, de la scanare la scanare, a coeficienților DCT (metoda „aproximație succesivă”, adică aproximări succesive). Această reprezentare progresivă a datelor este utilă în special atunci când transmiteți imagini comprimate folosind canale de comunicare cu viteză redusă, deoarece vă permite să obțineți o vizualizare a întregii imagini după transferul unei mici părți din fișierul JPEG.

Ambele scheme descrise (atât JPEG secvențial, cât și progresiv) se bazează pe DCT și, în principiu, nu permit obținerea unei imagini restaurate care să fie absolut identică cu cea originală. Cu toate acestea, standardul permite și compresia care nu utilizează DCT, dar este construită pe baza unui predictor liniar (fără pierderi, adică „fără pierderi”, JPEG), care garantează o potrivire completă, bit-cu-bit, între imagini originale și restaurate. În același timp, raportul de compresie pentru imaginile fotografice ajunge rareori la 2, dar absența garantată a distorsiunii în unele cazuri este solicitată. Rate de compresie considerabil mai mari pot fi obținute folosind metoda de compresie JPEG-LS descrisă de ISO/IEC 14495-1 , care, în ciuda asemănării numelor, nu este direct legată de JPEG ISO/IEC 10918-1 (Recomandarea ITU T.81). ) standard (Recomandarea ITU T.87).

Sintaxă și structură

Un fișier JPEG conține o secvență de markeri , fiecare dintre care începe cu un octet 0xFF, indicând începutul markerului și un octet de identificare. Unii marcatori constau numai din această pereche de octeți, în timp ce alții conțin date suplimentare constând dintr-un câmp de doi octeți cu lungimea părții informaționale a marcatorului (inclusiv lungimea acestui câmp, minus cei doi octeți de la începutul marcatorului). , adică 0xFF și identificator) și datele în sine. Această structură de fișiere vă permite să găsiți rapid un marcator cu datele necesare (de exemplu, lungimea liniei, numărul de linii și numărul de componente de culoare ale imaginii comprimate).

Markeri JPEG de bază [6]
Marker octeți Lungime Scop Comentarii
SOI 0xFFD8 Nu Începe imaginea
SOF0 0xFFC0 mărime variabilă Pornire cadru (de bază, DCT) Indică faptul că imaginea a fost codificată în modul de bază folosind codul DCT și Huffman . Markerul conține numărul de linii și lungimea liniei imaginii (câmpuri de doi octeți cu un offset de 5 și, respectiv, 7, raportat la începutul markerului), numărul de componente (câmp de octeți cu un offset de 9). raportat la începutul marcatorului), numărul de biți per componentă este strict de 8 (câmp de octeți cu un offset de 4 față de marcatorul de început), precum și raportul componentelor (de exemplu, 4:2:0) .
SOF1 0xFFC1 mărime variabilă Începutul cadrului (extins, DCT, cod Huffman) Indică faptul că imaginea a fost codificată în modul extins folosind codul DCT și Huffman. Markerul conține numărul de linii și lungimea liniei imaginii, numărul de componente, numărul de biți pe componentă (8 sau 12) și raportul componentelor (de ex. 4:2:0).
SOF2 0xFFC2 mărime variabilă Începutul cadrului (progresiv, DCT, cod Huffman) Indică faptul că imaginea a fost codificată în modul progresiv folosind codul DCT și Huffman. Markerul conține numărul de linii și lungimea liniei imaginii, numărul de componente, numărul de biți pe componentă (8 sau 12) și raportul componentelor (de ex. 4:2:0).
DHT 0xFFC4 mărime variabilă Conține mesele Huffman Specifică unul sau mai multe tabele Huffman.
DQT 0xFFDB mărime variabilă Conține tabele de cuantizare Specifică unul sau mai multe tabele de cuantizare.
DRI 0xFFDD 4 octeți Specifică lungimea intervalului de repornire Specifică distanța dintre markerii RST n în macroblocuri. În absența unui DRI, apariția markerilor RST n în fluxul de date codificat este ilegală și este considerată o eroare. Dacă markerii RST n nu sunt utilizați în timpul codificării, marcatorul DRI fie nu este folosit deloc, fie intervalul de repetiție din acesta este specificat ca 0.
SOS 0xFFDA mărime variabilă Incepe scanarea Începutul primei sau următoarei scanări a imaginii cu direcția de ocolire de la stânga la dreapta de sus în jos. Dacă a fost folosit modul de codare de bază, este utilizată o singură scanare. Când utilizați moduri progresive, sunt utilizate mai multe scanări. Markerul SOS separă între părțile informative (antet) și cele codificate (de fapt, date comprimate) ale imaginii.
RST n 0xFFDn _ Nu repornire Markerii de repornire sunt utilizați pentru a segmenta datele codificate cu codificatorul de entropie. În fiecare segment, datele sunt decodificate independent, ceea ce face posibilă paralelizarea procedurii de decodificare. Dacă datele codificate sunt deteriorate în timpul transmiterii sau stocării unui fișier JPEG, utilizarea markerilor de repornire vă permite să limitați pierderea (macroblocurile de la segmentele nedeteriorate vor fi restaurate corect). Inserat la fiecare macrobloc rth , unde r  este intervalul de repornire DRI al markerului. Nu se utilizează în absența unui marker DRI. n , 3 biți scăzut de marcator de cod, cicluri de la 0 la 7.
APP n 0xFFEn _ mărime variabilă Setat de aplicație De exemplu, EXIF ​​al unui fișier JPEG utilizează marcatorul APP1 pentru a stoca metadate într-o structură bazată pe TIFF .
COM 0xFFFE mărime variabilă cometariu Conține textul comentariului.
EOI 0xFFD9 Nu Sfârșitul porțiunii codificate a imaginii.

Avantaje și dezavantaje

Dezavantajele compresiei JPEG includ apariția unor artefacte caracteristice pe imaginile restaurate la rapoarte de compresie ridicate : imaginea este împrăștiată în blocuri de dimensiunea de 8x8 pixeli (acest efect este vizibil mai ales în zonele de imagine cu modificări fluide ale luminozității), în zonele cu dimensiuni ridicate. frecvența spațială (de exemplu, pe contururile și marginile de contrast ale imaginii) artefactele apar sub formă de halouri de zgomot. Standardul JPEG (ISO/IEC 10918-1, Anexa K, clauza K.8) prevede utilizarea unor filtre speciale pentru a suprima artefactele de blocare, dar în practică astfel de filtre, în ciuda eficienței lor ridicate, practic nu sunt utilizate.

Cu toate acestea, în ciuda deficiențelor, JPEG a devenit foarte răspândit din cauza raportului de compresie destul de ridicat (în raport cu alternativele care existau la momentul apariției sale), a suportului pentru compresia imaginii colorate și a complexității de calcul relativ scăzute .

Rata de compresie JPEG

Pentru a accelera procesul de compresie conform standardului JPEG, paralelizarea calculelor este utilizată în mod tradițional, în special, atunci când se calculează DCT. Din punct de vedere istoric, una dintre primele încercări de a accelera procesul de compresie folosind această abordare a fost descrisă într-un articol din 1993 al lui Kasperovich și Babkin [7] , care a propus o aproximare DCT originală care face posibilă paralelizarea eficientă a calculelor folosind 32 de biți de uz general. registre ale procesoarelor Intel 80386 . Schemele de calcul mai puternice care au apărut ulterior au folosit extensii SIMD ale setului de instrucțiuni pentru procesor cu arhitectură x86 . Rezultate semnificativ mai bune pot fi obținute prin scheme care utilizează capacitățile de calcul ale acceleratoarelor grafice ( tehnologiile NVIDIA CUDA și AMD FireStream ) pentru a organiza calculul paralel nu numai pentru DCT, ci și pentru alte etape de compresie JPEG (conversie spațiu de culoare, nivel de rulare, codificare statistică etc.) și pentru fiecare bloc de imagine 8x8 codificată sau decodificată. Articolul [8] a prezentat implementarea paralelizării tuturor etapelor algoritmului JPEG folosind tehnologia CUDA, care a crescut semnificativ viteza de compresie și decodificare conform standardului JPEG.

Vezi și

Note

  1. Dicţionar Oxford . Consultat la 11 noiembrie 2014. Arhivat din original pe 11 noiembrie 2014.
  2. Emma Woollacott. Digital ark își propune să păstreze formatele de date moarte  . TG Daily (21 mai 2010). Consultat la 1 septembrie 2016. Arhivat din original pe 6 iunie 2017.
  3. În conformitate cu GOST 34.003-90 în domeniul tehnologiei informației, acest termen este masculin
  4. ISO/IEC 10918-1 : 1993(E) p.28 (link indisponibil) . Arhivat din original pe 22 august 2011. 
  5. ^ Kerr, Douglas A. „Chrominance Subsampling in Digital Images” . Consultat la 27 mai 2010. Arhivat din original la 24 februarie 2021.
  6. ISO/IEC 10918-1 : 1993(E) p.36 (link indisponibil) . Arhivat din original pe 22 august 2011. 
  7. Kasperovich, LV, Babkin, VF „Aproximație rapidă a transformării cosinusului discret pentru compresia imaginii JPEG” . Preluat la 3 octombrie 2017. Arhivat din original la 15 iunie 2018.
  8. „Utilizarea tehnologiei CUDA pentru a comprima rapid imagini JPEG” . Preluat la 3 decembrie 2012. Arhivat din original la 30 martie 2013.

Link -uri