Cum funcționează formatul JPEG

Imaginile JPEG sunt omniprezente în viața noastră digitală, dar în spatele acestui furnir de conștientizare se află algoritmi care elimină detalii care nu sunt perceptibile de ochiul uman. Rezultatul este cea mai înaltă calitate vizuală în cea mai mică dimensiune a fișierului - dar cum funcționează exact totul? Să vedem ce anume nu văd ochii noștri!

Cum funcționează formatul JPEG

Este ușor să iei de la sine înțeles capacitatea de a trimite o fotografie unui prieten și de a nu-ți face griji cu privire la dispozitivul, browserul sau sistemul de operare pe care îl folosesc - dar nu a fost întotdeauna cazul. La începutul anilor 1980, computerele puteau stoca și afișa imagini digitale, dar existau multe idei concurente despre cel mai bun mod de a face acest lucru. Nu ai putea trimite pur și simplu o imagine de la un computer la altul și să speri că va funcționa.

Pentru a rezolva această problemă, un comitet de experți din întreaga lume a fost adunat în 1986 numit „Grupul mixt de experți în fotografie» (Joint Photographic Experts Group, JPEG), fondată ca un efort comun între Organizația Internațională pentru Standardizare (ISO) și Comisia Electrotehnică Internațională (IEC), două organizații internaționale de standardizare cu sediul în Geneva, Elveția.

Un grup de persoane numite JPEG a creat standardul de compresie digitală a imaginii JPEG în 1992. Oricine a folosit internetul a întâlnit probabil imagini codificate JPEG. Acesta este cel mai comun mod de a codifica, trimite și stoca imagini. De la pagini web la e-mail și la rețelele sociale, JPEG este folosit de miliarde de ori pe zi, practic de fiecare dată când vedem o imagine online sau o trimitem. Fără JPEG, web-ul ar fi mai puțin colorat, mai lent și probabil ar avea mai puține imagini cu pisici!

Acest articol este despre cum să decodați o imagine JPEG. Cu alte cuvinte, ceea ce este necesar pentru a converti datele comprimate stocate pe un computer într-o imagine care apare pe ecran. Merită să știm acest lucru, nu numai pentru că este important să înțelegem tehnologia pe care o folosim în fiecare zi, ci și pentru că, prin deblocarea nivelurilor de compresie, aflăm mai multe despre percepție și viziune și despre ce detalii sunt cei mai sensibili ochii noștri.

În plus, jocul cu imaginile în acest fel este foarte interesant.

Cum funcționează formatul JPEG

Privind în interiorul JPEG

Pe un computer, totul este stocat ca o secvență de numere binare. De obicei, acești biți, zerouri și unu, sunt grupați în grupuri de opt pentru a forma octeți. Când deschideți o imagine JPEG pe un computer, ceva (un browser, un sistem de operare, altceva) trebuie să decodeze octeții, restabilind imaginea originală ca o listă de culori care pot fi afișate.

Dacă descărcați acest dulce poza unei pisici și deschideți-l într-un editor de text, veți vedea o grămadă de caractere incoerente.

Cum funcționează formatul JPEG
Aici folosesc Notepad++ pentru a examina conținutul fișierului, deoarece editorii de text obișnuiți, cum ar fi Notepad pe Windows, vor deteriora fișierul binar după salvare și nu vor mai satisface formatul JPEG.

Deschiderea unei imagini într-un procesor de text încurcă computerul, la fel cum îți încurci creierul când te freci la ochi și începi să vezi pete de culoare!

Aceste locuri pe care le vedeți sunt cunoscute ca fosfene, și nu sunt rezultatul unui stimul luminos sau al unei halucinații generate de minte. Acestea apar deoarece creierul tău crede că orice semnal electric din nervii optici transmite informații despre lumină. Creierul trebuie să facă aceste presupuneri, deoarece nu există nicio modalitate de a ști dacă un semnal este un sunet, o viziune sau altceva. Toți nervii din organism transmit exact aceleași impulsuri electrice. Aplicând presiune asupra ochilor tăi, trimiți semnale care nu sunt vizuale, dar activează receptorii ochiului, pe care creierul tău îi interpretează – în acest caz, incorect – ca pe ceva vizual. Puteți vedea literalmente presiunea!

Este amuzant să ne gândim la cât de similare sunt computerele cu creierul, dar este și o analogie utilă pentru a ilustra cât de mult depinde semnificația datelor – indiferent dacă sunt transportate prin corp de nervi sau stocate pe un computer – de modul în care sunt interpretate. Toate datele binare sunt formate din 0 și 1, componentele de bază care pot transmite informații de orice fel. Computerul dvs. își dă seama adesea cum să le interpreteze folosind indicii, cum ar fi extensiile de fișiere. Acum îl forțăm să le interpreteze ca text, pentru că la asta se așteaptă editorul de text.

Pentru a înțelege cum să decodăm JPEG, trebuie să vedem semnalele originale în sine - datele binare. Acest lucru se poate face folosind un editor hexazecimal sau direct pe pagina web a articolului original! Există o imagine, alături de care în câmpul de text sunt toți octeții ei (cu excepția antetului), prezentați sub formă zecimală. Le puteți schimba, iar scriptul va re-coda și va produce o nouă imagine din mers.

Cum funcționează formatul JPEG

Puteți învăța multe doar jucându-vă cu acest editor. De exemplu, puteți spune în ce ordine sunt stocați pixelii?

Lucrul ciudat la acest exemplu este că schimbarea unor numere nu afectează deloc imaginea, dar, de exemplu, dacă înlocuiți numărul 17 cu 0 în prima linie, fotografia va fi complet distrusă!

Cum funcționează formatul JPEG

Alte modificări, cum ar fi înlocuirea 7 pe linia 1988 cu numărul 254, schimbă culoarea, dar numai a pixelilor următori.

Cum funcționează formatul JPEG

Poate cel mai ciudat lucru este că unele numere schimbă nu numai culoarea, ci și forma imaginii. Schimbați 70 din linia 12 în 2 și uitați-vă la rândul de sus al imaginii pentru a vedea ce vreau să spun.

Cum funcționează formatul JPEG

Și indiferent de imaginea JPEG pe care o folosiți, veți găsi întotdeauna aceste modele de șah misterioase atunci când editați octeții.

Când te joci cu editorul, este greu de înțeles cum este recreată o fotografie din acești octeți, deoarece compresia JPEG constă din trei tehnologii diferite, aplicate secvenţial pe nivele. Le vom studia pe fiecare separat pentru a descoperi comportamentul misterios pe care îl vedem.

Trei niveluri de compresie JPEG:

  1. Subeșantionarea culorilor.
  2. Transformată discretă cosinus și eșantionare.
  3. Codificarea lungimii rulării, delta и Huffman

Pentru a vă face o idee despre magnitudinea compresiei, rețineți că imaginea de mai sus reprezintă 79 numere sau aproximativ 819 KB. Dacă l-am stoca fără compresie, fiecare pixel ar necesita trei numere - pentru componentele roșu, verde și albastru. Aceasta ar însemna 79 de numere, sau aprox. 917 KB. Ca urmare a compresiei JPEG, fișierul final a fost redus de peste 700 ori!

De fapt, această imagine poate fi comprimată mult mai mult. Mai jos sunt două imagini una lângă alta - fotografia din dreapta a fost comprimată la 16 KB, adică de 57 de ori mai mică decât versiunea necomprimată!

Cum funcționează formatul JPEG

Dacă te uiți cu atenție, vei vedea că aceste imagini nu sunt identice. Ambele sunt imagini cu compresie JPEG, dar cea din dreapta este mult mai mică ca volum. De asemenea, arată puțin mai rău (uitați-vă la pătratele de culoare de fundal). De aceea, JPEG se mai numește și compresie cu pierderi; În timpul procesului de compresie, imaginea se schimbă și pierde unele detalii.

1. Subeșantionarea culorilor

Iată o imagine cu doar primul nivel de compresie aplicat.

Cum funcționează formatul JPEG
(Versiune interactivă - în original articole). Eliminarea unui număr distruge toate culorile. Cu toate acestea, dacă exact șase numere sunt eliminate, practic nu are niciun efect asupra imaginii.

Acum numerele sunt puțin mai ușor de descifrat. Aceasta este aproape o simplă listă de culori, în care fiecare octet schimbă exact un pixel, dar în același timp are deja jumătate din dimensiunea imaginii necomprimate (care ar ocupa aproximativ 300 KB în această dimensiune redusă). Poți ghici de ce?

Puteți vedea că aceste numere nu reprezintă componentele standard de roșu, verde și albastru, deoarece dacă înlocuim toate numerele cu zerouri, vom obține o imagine verde (mai degrabă decât albă).

Cum funcționează formatul JPEG

Acest lucru se datorează faptului că acești octeți reprezintă Y (luminozitate),

Cum funcționează formatul JPEG

Cb (albastru relativ),

Cum funcționează formatul JPEG

și imagini Cr (roșeață relativă).

Cum funcționează formatul JPEG

De ce să nu folosești RGB? La urma urmei, așa funcționează majoritatea ecranelor moderne. Monitorul poate afișa orice culoare, inclusiv roșu, verde și albastru, cu intensități diferite pentru fiecare pixel. Albul se obține prin pornirea tuturor celor trei la luminozitate maximă, iar negru prin dezactivarea acestora.

Cum funcționează formatul JPEG

Acest lucru este, de asemenea, foarte asemănător cu modul în care funcționează ochiul uman. Receptorii de culoare din ochii noștri se numesc „conuri„, și sunt împărțite în trei tipuri, fiecare dintre acestea fiind mai sensibil la culorile roșii, verzi sau albastre [conurile de tip S sunt sensibile în albastru-violet (S din spectrul englezesc de unde scurte - scurte), M -tip - în verde-galben (M din engleză Medium - mediu-undă), și de tip L - în părțile galben-roșu (L din engleză Long - long-wave) ale spectrului. Prezența acestor trei tipuri de conuri (și tije, care sunt sensibile în partea verde smarald a spectrului) oferă unei persoane viziunea colorată. / aprox. transl.]. stick-uri, un alt tip de fotoreceptor din ochii noștri, este capabil să detecteze modificări ale luminozității, dar este mult mai sensibil la culoare. Ochii noștri au aproximativ 120 de milioane de tije și doar 6 milioane de conuri.

Acesta este motivul pentru care ochii noștri sunt mult mai buni la detectarea schimbărilor de luminozitate decât schimbările de culoare. Dacă separați culoarea de luminozitate, puteți elimina puțină culoare și nimeni nu va observa nimic. Subeșantionarea cromatică este procesul de reprezentare a componentelor de culoare ale unei imagini la o rezoluție mai mică decât componentele de luminanță. În exemplul de mai sus, fiecare pixel are exact o componentă Y și fiecare grup individual de patru pixeli are exact o componentă Cb și o componentă Cr. Prin urmare, imaginea conține de patru ori mai puține informații de culoare decât originalul.

Spațiul de culoare YCbCr este utilizat nu numai în JPEG. A fost inventat inițial în 1938 pentru programele de televiziune. Nu toată lumea are un televizor color, așa că separarea culorii și a luminozității a permis tuturor să obțină același semnal, iar televizoarele fără culoare pur și simplu foloseau doar componenta de luminozitate.

Deci, eliminarea unui număr din editor ruinează complet toate culorile. Componentele sunt stocate sub forma Y Y Y Y Cb Cr (de fapt, nu neapărat în acea ordine - ordinea de stocare este specificată în antetul fișierului). Eliminarea primului număr va face ca prima valoare a lui Cb să fie percepută ca Y, Cr ca Cb și, în general, veți avea un efect de domino care schimbă toate culorile imaginii.

Specificația JPEG nu vă obligă să utilizați YCbCr. Dar majoritatea fișierelor îl folosesc pentru că produce imagini reduse mai bune decât RGB. Dar nu trebuie să mă crezi pe cuvânt. Vedeți singur în tabelul de mai jos cum va arăta subeșantionarea fiecărei componente individuale atât în ​​RGB, cât și în YCbCr.

Cum funcționează formatul JPEG
(Versiune interactivă - în original articole).

Eliminarea albastrului nu este la fel de vizibilă ca cea a roșului sau a verdelui. Din cauza celor șase milioane de conuri din ochi, aproximativ 64% sunt sensibili la roșu, 32% la verde și 2% la albastru.

Reducerea de eșantionare a componentei Y (stânga jos) este cel mai bine văzută. Chiar și o mică schimbare este vizibilă.

Convertirea unei imagini din RGB în YCbCr nu reduce dimensiunea fișierului, dar face mai ușor să găsiți detalii mai puțin vizibile care pot fi eliminate. Compresia cu pierderi apare în a doua etapă. Se bazează pe ideea de a prezenta datele într-o formă mai compresibilă.

2. Transformată discretă cosinus și eșantionare

Acest nivel de compresie este, în cea mai mare parte, ceea ce înseamnă JPEG. După conversia culorilor în YCbCr, componentele sunt comprimate individual, astfel încât să ne putem concentra doar pe componenta Y. Și iată cum arată octeții componentei Y după aplicarea acestui strat.

Cum funcționează formatul JPEG
(Versiune interactivă - în original articole). În versiunea interactivă, făcând clic pe un pixel, editorul derulează la linia care îl reprezintă. Încercați să eliminați numere de la sfârșit sau să adăugați câteva zerouri la un anumit număr.

La prima vedere, pare o compresie foarte proasta. Există 100 de pixeli într-o imagine și este nevoie de 000 de numere pentru a le reprezenta luminozitatea (componentele Y) - asta este mai rău decât a nu comprima absolut nimic!

Cu toate acestea, rețineți că majoritatea acestor numere sunt zero. Mai mult, toate acele zerouri de la sfârșitul liniilor pot fi eliminate fără a schimba imaginea. Au mai rămas aproximativ 26 de numere, iar aceasta este de aproape 000 ori mai puține!

Acest nivel conține secretul modelelor de șah. Spre deosebire de alte efecte pe care le-am văzut, aspectul acestor modele nu este o eroare. Ele sunt elementele de bază ale întregii imagini. Fiecare linie a editorului conține exact 64 de numere, coeficienți de transformare cosinus discretă (DCT) corespunzători intensităților a 64 de modele unice.

Aceste modele sunt formate pe baza diagramei cosinus. Iată cum arată unele dintre ele:

Cum funcționează formatul JPEG
8 din 64 de cote

Mai jos este o imagine care arată toate cele 64 de modele.

Cum funcționează formatul JPEG
(Versiune interactivă - în original articole).

Aceste modele sunt de o importanță deosebită deoarece formează baza imaginilor 8x8. Dacă nu sunteți familiarizat cu algebra liniară, aceasta înseamnă că orice imagine 8x8 poate fi făcută din aceste 64 de modele. DCT este procesul de împărțire a imaginilor în blocuri de 8x8 și de conversie a fiecărui bloc într-o combinație a acestor 64 de coeficienți.

Pare magic că orice imagine poate fi compusă din 64 de modele specifice. Totuși, aceasta este același lucru cu a spune că orice loc de pe Pământ poate fi descris prin două numere - latitudine și longitudine [indicând emisferele / aprox. transl.]. Ne gândim adesea la suprafața Pământului ca fiind bidimensională, așa că avem nevoie doar de două numere. O imagine de 8x8 are 64 de dimensiuni, deci avem nevoie de 64 de numere.

Nu este încă clar cum ne ajută acest lucru în ceea ce privește compresia. Dacă avem nevoie de 64 de numere pentru a reprezenta o imagine de 8x8, de ce ar fi mai bine decât doar stocarea a 64 de componente de luminozitate? Facem acest lucru din același motiv pentru care am transformat trei numere RGB în trei numere YCbCr: ne permite să eliminăm detaliile subtile.

Este dificil de văzut exact ce detaliu este eliminat în această etapă, deoarece JPEG aplică DCT blocurilor de 8x8. Cu toate acestea, nimeni nu ne interzice să o aplicăm întregului tablou. Iată cum arată DCT pentru componenta Y aplicată întregii imagini:

Cum funcționează formatul JPEG

Peste 60 de numere pot fi eliminate de la sfârșit, practic fără modificări vizibile ale fotografiei.

Cum funcționează formatul JPEG

Cu toate acestea, rețineți că dacă scoatem la zero primele cinci numere, diferența va fi evidentă.

Cum funcționează formatul JPEG

Numerele de la început reprezintă modificări de frecvență joasă în imagine, pe care ochii noștri le captează cel mai bine. Cifrele spre sfârșit indică modificări ale frecvențelor înalte care sunt mai greu de observat. Pentru a „vedea ceea ce ochiul nu poate vedea”, putem izola aceste detalii de înaltă frecvență prin eliminarea la zero a primelor 5000 de numere.

Cum funcționează formatul JPEG

Vedem toate zonele imaginii unde are loc cea mai mare schimbare de la pixel la pixel. Ochii pisicii, mustățile, pătura de țeapă și umbrele din colțul din stânga jos ies în evidență. Puteți merge mai departe reducând la zero primele 10 de numere:

Cum funcționează formatul JPEG

20 000:

Cum funcționează formatul JPEG

40 000:

Cum funcționează formatul JPEG

60 000:

Cum funcționează formatul JPEG

Aceste detalii de înaltă frecvență sunt eliminate de JPEG în timpul etapei de compresie. Nu există nicio pierdere în conversia culorilor în coeficienți DCT. Pierderea are loc la etapa de eșantionare, unde valorile de înaltă frecvență sau aproape de zero sunt eliminate. Când reduceți calitatea de salvare JPEG, programul crește pragul pentru numărul de valori eliminate, ceea ce reduce dimensiunea fișierului, dar face imaginea mai pixelată. De aceea, imaginea din prima secțiune, care era de 57 de ori mai mică, arăta așa. Fiecare bloc 8x8 a fost reprezentat de mult mai puțini coeficienți DCT în comparație cu versiunea de calitate superioară.

Puteți crea un efect atât de grozav, cum ar fi difuzarea treptată a imaginilor. Puteți afișa o imagine neclară care devine din ce în ce mai detaliată pe măsură ce sunt descărcați din ce în ce mai mulți coeficienți.

Iată, doar pentru distracție, ceea ce obțineți folosind doar 24 de numere:

Cum funcționează formatul JPEG

Sau doar 5000:

Cum funcționează formatul JPEG

Foarte neclar, dar cumva de recunoscut!

3. Codarea lungimii de rulare, delta și Huffman

Până acum, toate etapele de compresie au fost cu pierderi. Ultima etapă, dimpotrivă, se desfășoară fără pierderi. Nu șterge informații, dar reduce semnificativ dimensiunea fișierului.

Cum poți comprima ceva fără să arunci informații? Imaginează-ți cum am descrie un dreptunghi negru simplu de 700 x 437.

JPEG folosește 5000 de numere pentru aceasta, dar se pot obține rezultate mult mai bune. Vă puteți imagina o schemă de codificare care să descrie o astfel de imagine în cât mai puțini octeți?

Schema minimă pe care am putut să o vin folosește patru: trei pentru a reprezenta o culoare și o a patra pentru a indica câți pixeli are acea culoare. Ideea de a reprezenta valori care se repetă în acest mod condensat se numește codare run-length. Este fără pierderi, deoarece putem restaura datele codificate la forma inițială.

Un fișier JPEG cu un dreptunghi negru este mult mai mare de 4 octeți - rețineți că la nivelul DCT, compresia se aplică blocurilor de 8x8 pixeli. Prin urmare, avem nevoie de cel puțin un coeficient DCT pentru fiecare 64 de pixeli. Avem nevoie de unul deoarece în loc să stocăm un coeficient DCT urmat de 63 de zerouri, codificarea lungimii de rulare ne permite să stocăm un număr și să indicăm că „toate celelalte sunt zerouri”.

Codificarea Delta este o tehnică în care fiecare octet conține o diferență față de o anumită valoare, mai degrabă decât o valoare absolută. Prin urmare, editarea anumitor octeți schimbă culoarea tuturor celorlalți pixeli. De exemplu, în loc să depozitați

12 13 14 14 14 13 13 14

Am putea începe cu 12 și apoi pur și simplu să indicăm cât trebuie să adunăm sau să scădem pentru a obține următorul număr. Și această secvență în codificare delta ia forma:

12 1 1 0 0 -1 0 1

Datele convertite nu sunt mai mici decât datele originale, dar este mai ușor să le comprimați. Aplicarea codificării delta înainte de codificarea lungimii de rulare poate ajuta foarte mult, în timp ce este încă compresie fără pierderi.

Codarea Delta este una dintre puținele tehnici utilizate în afara blocurilor 8x8. Din cei 64 de coeficienți DCT, unul este pur și simplu o funcție de undă constantă (culoare solidă). Reprezintă luminozitatea medie a fiecărui bloc pentru componentele luma, sau albastrul mediu pentru componentele Cb și așa mai departe. Prima valoare a fiecărui bloc DCT se numește valoarea DC, iar fiecare valoare DC este codificată delta față de cele precedente. Prin urmare, modificarea luminozității primului bloc va afecta toate blocurile.

Misterul final rămâne: cum schimbarea singularului distruge complet întreaga imagine? Până acum, nivelurile de compresie nu au avut astfel de proprietăți. Răspunsul se află în antetul JPEG. Primii 500 de octeți conțin metadate despre imagine - lățime, înălțime etc., și nu am lucrat încă cu ei.

Fără antet este aproape imposibil (sau foarte dificil) să decodați JPEG. Va arăta ca și cum aș încerca să vă descriu imaginea și încep să inventez cuvinte pentru a-mi transmite impresia. Descrierea va fi probabil destul de condensată, deoarece pot inventa cuvinte cu exact sensul pe care vreau să-l transmit, dar pentru toți ceilalți nu vor avea sens.

Sună stupid, dar exact asta se întâmplă. Fiecare imagine JPEG este comprimată cu coduri specifice acesteia. Dicționarul de cod este stocat în antet. Această tehnică se numește codul Huffman, iar vocabularul se numește tabelul Huffman. În antet, tabelul este marcat cu doi octeți - 255 și apoi 196. Fiecare componentă de culoare poate avea propriul tabel.

Modificările aduse tabelelor vor afecta radical orice imagine. Un exemplu bun este schimbarea liniei a 15-a la 1.

Cum funcționează formatul JPEG

Acest lucru se întâmplă deoarece tabelele specifică modul în care trebuie citiți biții individuali. Până acum am lucrat doar cu numere binare în formă zecimală. Dar acest lucru ne ascunde faptul că, dacă doriți să stocați numărul 1 într-un octet, acesta va arăta ca 00000001, deoarece fiecare octet trebuie să aibă exact opt ​​biți, chiar dacă este necesar doar unul dintre ei.

Aceasta este potențial o mare risipă de spațiu dacă aveți o mulțime de numere mici. Codul Huffman este o tehnică care ne permite să relaxăm această cerință că fiecare număr trebuie să ocupe opt biți. Aceasta înseamnă că dacă vedeți doi octeți:

234 115

Apoi, în funcție de masa Huffman, acestea ar putea fi trei numere. Pentru a le extrage, mai întâi trebuie să le descompuneți în bucăți individuale:

11101010 01110011

Apoi ne uităm la tabel pentru a ne da seama cum să le grupăm. De exemplu, aceștia ar putea fi primii șase biți, (111010) sau 58 în zecimală, urmați de cinci biți (10011) sau 19 și, în final, ultimii patru biți (0011) sau 3.

Prin urmare, este foarte dificil să înțelegeți octeții în această etapă de compresie. Octeții nu reprezintă ceea ce par. Nu voi intra în detalii despre lucrul cu tabelul din acest articol, dar Materiale pe această problemă online este suficient.

Un truc interesant pe care îl puteți face cu aceste cunoștințe este să separați antetul de JPEG și să îl stocați separat. De fapt, se dovedește că doar tu poți citi fișierul. Facebook face acest lucru pentru a face fișierele și mai mici.

Ce altceva se poate face este să schimbi destul de mult masa Huffman. Pentru alții va arăta ca o imagine spartă. Și numai tu vei ști modalitatea magică de a o repara.

Să rezumam: deci ce este necesar pentru a decoda JPEG? Necesar:

  1. Extrageți tabelele Huffman din antet și decodificați biții.
  2. Extrageți coeficienții discreti de transformare cosinus pentru fiecare componentă de culoare și luminanță pentru fiecare bloc de 8x8, efectuând transformări de codificare inversă a lungimii de rulare și delta.
  3. Combinați cosinusuri pe baza coeficienților pentru a obține valori de pixeli pentru fiecare bloc de 8x8.
  4. Scalați componentele de culoare dacă a fost efectuată subeșantionarea (aceste informații se află în antet).
  5. Convertiți valorile YCbCr rezultate pentru fiecare pixel în RGB.
  6. Afișează imaginea pe ecran!

Muncă serioasă pentru pur și simplu vizualizarea unei fotografii cu o pisică! Cu toate acestea, ceea ce îmi place la el este că arată cât de centrată pe om este tehnologia JPEG. Se bazează pe particularitățile percepției noastre, permițându-ne să obținem o compresie mult mai bună decât tehnologiile convenționale. Și acum că înțelegem cum funcționează JPEG, ne putem imagina cum aceste tehnologii pot fi transferate în alte domenii. De exemplu, codificarea delta în video poate oferi o reducere semnificativă a dimensiunii fișierului, deoarece există adesea zone întregi care nu se schimbă de la cadru la cadru (de exemplu, fundalul).

Cod folosit în articol, este deschis și conține instrucțiuni despre cum să înlocuiți imaginile cu ale dvs.

Sursa: www.habr.com

Adauga un comentariu