Cum funcționează formatul JPEG

Imaginile în format JPEG sunt omniprezente în viața noastră digitală, dar în spatele acestei umbre de cunoștințe se ascund algoritmi care elimină detaliile imperceptibile pentru ochiul uman. Rezultatul este o calitate vizuală excepțională la cea mai mică dimensiune a fișierului – dar cum funcționează exact acest lucru? Să vedem ce anume nu pot vedea ochii noștri!

Cum funcționează formatul JPEG

Este ușor să consideri de la sine înțeles faptul că poți trimite o fotografie unui prieten, fără a-ți face griji cu privire la dispozitivul, browserul sau sistemul de operare pe care îl folosește – dar nu a fost întotdeauna așa. La începutul anilor 1980, computerele puteau stoca și afișa imagini digitale, dar existau multe idei concurente în legătură cu cea mai bună modalitate de a face acest lucru. Nu puteai pur și simplu să trimiți o imagine de pe un computer pe altul și să speri că totul va funcționa.

Pentru a rezolva această problemă, în 1986 a fost format un comitet de experți din întreaga lume numit „Grupul Comun de Experți în Fotografie“ (Joint Photographic Experts Group, JPEG), constituit în cadrul colaborării dintre Organizația Internațională de Standardizare (ISO) și Comisia Internațională Electro Tehnică (IEC) – două organizații internaționale de standardizare, cu sediul în Geneva (Elveția).

Grupul de oameni numit JPEG a creat standardul de compresie a imaginilor digitale JPEG în 1992. Oricine a folosit internetul a întâlnit probabil imagini codificate în JPEG. Aceasta este cea mai răspândită metodă de codare, trimitere și stocare a imaginilor. De la paginile web la email și rețele sociale, JPEG este utilizat de miliarde de ori pe zi – practic de fiecare dată când vizionăm o imagine online sau o trimitem. Fără JPEG, web-ul ar fi fost mai puțin vibrant, mai lent și, probabil, ar fi avut mai puține fotografii cu pisici!

Acest articol este despre cum să decodifici o imagine JPEG. Cu alte cuvinte, despre ce este necesar pentru a transforma datele comprimate stocate pe computer într-o imagine care apare pe ecran. Este important să știm acest lucru nu doar pentru a înțelege tehnologia pe care o folosim zilnic, ci și pentru că, decripând nivelurile de compresie, învățăm mai bine despre percepție și vedere, precum și despre detaliile la care ochii noștri sunt cei mai sensibili.

În plus, este foarte interesant să te joci cu imaginile în acest mod.

Cum funcționează formatul JPEG

Privind în interiorul JPEG

Pe computer, totul este stocat sub formă de șiruri de biți binari. De obicei, acești biți, zerouri și unuuri, sunt grupați câte opt, formând octeți. Când deschizi o imagine JPEG pe computer, ceva (browser, sistem de operare, altceva) trebuie să decodifice octeții, restituind imaginea inițială sub formă de listă de culori care pot fi afișate.

Dacă descarci această adorabilă fotografie cu o pisică și o deschizi într-un editor de text, vei vedea o mulțime de simboluri incoerente.

Cum funcționează formatul JPEG
Aici folosesc Notepad++ pentru a studia conținutul fișierului, deoarece editoarele de text obișnuite, cum ar fi Notepad din Windows, vor strica fișierul binar după salvare și acesta nu va mai respecta formatul JPEG.

Deschizând o imagine într-un editor de text, îți derutezi computerul, la fel cum îți derutezi mintea atunci când îți freci ochii și începi să vezi pete colorate!

Aceste pete pe care le vezi sunt cunoscute sub numele de fosfene, și nu sunt rezultatul unei stimulări luminoase sau halucinații generate de minte. Ele apar deoarece creierul tău presupune că orice semnal electric în nervii oculari transmite informații despre lumină. Creierul trebuie să facă astfel de presupuneri, deoarece nu poate distinge dacă un semnal este sunet, viziune sau altceva. Toți nervii din corp transmit impulsuri electrice complet identice. Apăsând pe ochi, trimiti semnale care nu sunt vizuale, dar activează receptorii ochiului, ceea ce creierul tău interpretează – în acest caz, greșit – ca ceva vizual. Ești literalmente capabil să vezi presiunea!

Este interesant să ne gândim cât de asemănătoare sunt computerele cu creierul, dar este de asemenea o analogie utilă care ilustrează cât de mult significatia datelor – transmise prin corp prin intermediul nervilor sau stocate pe un computer – depinde de interpretarea lor. Toate datele binare sunt formate din zerouri și unități, componente de bază capabile să transmită orice tip de informație. Computerul tău, adesea, ghicește cum să le interpreteze folosind indicii, cum ar fi extensiile fișierelor. Acum, îl facem să le interpreteze ca text, deoarece tocmai asta așteaptă un editor de text.

Pentru a înțelege cum se decodează JPEG, trebuie să vedem semnalele originale – datele binare. Acest lucru se poate face cu ajutorul unui editor hexazecimal, sau direct pe pagina web a articolului original! Acolo există o imagine, lângă care în câmpul textului sunt prezentate toate byte-urile sale (cu excepția header-ului), reprezentate în formă zecimală. Puteți să le schimbați, iar scriptul le va recodifica și va genera o nouă imagine pe loc.

Cum funcționează formatul JPEG

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

În acest exemplu, este ciudat faptul că schimbarea unor numere nu afectează deloc imaginea, dar, de exemplu, dacă schimbați cifra 17 în prima linie cu 0, fotografia se strică complet!

Cum funcționează formatul JPEG

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

Cum funcționează formatul JPEG

Poate cea mai ciudată parte este că unele numere schimbă nu doar culoarea, ci și forma imaginii. Schimbați 70 din linia 12 cu 2 și verificați rândul superior al imaginii pentru a înțelege la ce mă refer.

Cum funcționează formatul JPEG

Și indiferent de imaginea JPEG pe care o utilizați, veți găsi întotdeauna aceste misteriose secvențe de tip șah în timpul editării byte-urilor.

Jucându-vă cu editorul, este greu să înțelegeți cum se reîntregește fotografia din aceste byte-uri, deoarece compresia JPEG constă din trei tehnologii diferite, aplicate secvențial pe niveluri. Vom studia fiecare dintre ele separat pentru a dezvălui comportamentul misterios pe care îl observăm.

Trei niveluri de compresie JPEG:

  1. Subdistantă de culoare.
  2. Transformarea cosinusului discret și subdistanțarea.
  3. Codarea lungimilor de serie, delta și Huffman

Pentru a vă face o idee despre amploarea compresiei, observați că imaginea de mai sus reprezintă 79.819 numere, adică aproximativ 79 Kb. Dacă am stoca fără compresie, pentru fiecare pixel ar fi necesare câte trei numere – pentru componentele roșie, verde și albastră. Ar rezulta 917.700 numere, sau aproximativ 917 Kb. Ca rezultat, prin compresiunea JPEG, fișierul final s-a micșorat de mai mult de 10 ori!

De fapt, această imagine poate fi comprimată mult mai mult. Aici sunt prezentate două imagini una lângă alta – fotografia din dreapta a fost comprimată până la 16 Kb, adică de 57 de ori mai puțin decât versiunea nesupresată!

Cum funcționează formatul JPEG

Dacă ne uităm mai atent, vom observa că aceste imagini nu sunt identice. Ambele sunt imagini comprimate JPEG, totuși cea din dreapta este mult mai mică. De asemenea, aceasta arată puțin mai slab (uitați-vă la pătratele de culoare din fundal). De aceea, JPEG este numit și compresie cu pierderi; în timpul compresiei, imaginea se schimbă și pierde unele detalii.

1. Subdiscretizarea culorilor

Iată o imagine utilizând doar primul nivel de compresie.

Cum funcționează formatul JPEG
(Versiunea interactivă – în originalul articolului). Eliminarea unui număr rupe toate culorile. Cu toate acestea, dacă ștergem exact șase numere, aceasta aproape că nu afectează imaginea.

Acum numerele sunt puțin mai ușor de descifrat. Este aproape o listă simplă de culori, în care fiecare byte afectează exact un pixel, dar acum este deja de două ori mai mică decât imaginea nesupresată (care ar ocupa cam 300 Kb la o dimensiune reduse). Îți dai seama de ce?

Se poate vedea că aceste numere nu reprezintă componentele standard roșie, verde și albastră, deoarece dacă înlocuim toate numerele cu zero, vom obține o imagine verde (nu albă).

Cum funcționează formatul JPEG

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

Cum funcționează formatul JPEG

Cb (nuanța relativă de albastru),

Cum funcționează formatul JPEG

și Cr (nuanța relativă de roșu) a imaginii.

Cum funcționează formatul JPEG

De ce să nu folosim RGB? Deoarece așa funcționează majoritatea monitoarelor moderne. Monitorul tău poate afișa orice culoare, inclusiv roșu, verde și albastru cu intensitate variată pentru fiecare pixel. Alb se obține prin activarea tuturor celor trei culori la maximum, iar negru prin dezactivarea lor.

Cum funcționează formatul JPEG

Acest lucru este, de asemenea, foarte similar cu modul în care funcționează ochiul uman. Receptorii de culoare din ochii noștri se numesc „conițe« și sunt împărțite în trei tipuri, fiecare dintre ele fiind mai sensibil fie la roșu, fie la verde, fie la albastru [cone-urile de tip S sunt sensibile în partea violet-albastră (S de la englezescul Short — spectru de lungimi de undă scurte), cele de tip M — în partea verde-gălbuie (M de la Medium — lungimi de undă medii), iar cele de tip L — în partea galben-roșie (L de la Long — lungimi de undă lungi). Prezența acestor trei tipuri de conuri (și bastonașe, sensibile în partea verde-emerald a spectrului) le oferă oamenilor viziune colorată. / nota traducătorului]. Bastonașe, un alt tip de fotoreceptori din ochii noștri, capabili să detecteze schimbările în luminozitate, dar mult mai sensibili la culoare. În ochii noștri există aproximativ 120 de milioane de bastonașe și doar 6 milioane de conuri.

De aceea, ochii noștri observă mult mai bine schimbările în luminozitate decât pe cele de culoare. Dacă separăm culoarea de luminozitate, putem reduce puțin din culoare, iar nimeni nu va observa nimic. Subdiscretizarea culorii este procesul de reprezentare a componentelor de culoare ale unei imagini la o rezoluție mai mică în comparație cu componentele de luminozitate. În exemplul de mai sus, fiecare pixel are exact o componentă Y, iar fiecare grupă separată de patru pixeli are exact o componentă Cb și una Cr. Prin urmare, imaginea conține de patru ori mai puține informații coloristice decât avea originalul.

Spațiul coloristic YCbCr este utilizat nu doar în JPEG. A fost inventat inițial în 1938 pentru transmisii TV. Nu toată lumea are un televizor color, așa că separarea culorii de luminozitate a permis tuturor să primească același semnal, iar televizoarele fără culoare foloseau doar componenta de luminozitate.

De aceea, eliminarea unui singur număr din editor rupe complet toate culorile. Componentele sunt stocate sub forma Y Y Y Y Cb Cr (în realitate, nu este neapărat în această ordine – ordinea stocării este specificată în antetul fișierului). Eliminarea primului număr va face ca prima valoare Cb să fie percepută ca Y, Cr ca Cb, și în general va rezulta un efect domino, comutând toate culorile imaginii.

Specifica JPEG nu vă obligă să folosiți YCbCr. Totuși, în majoritatea fișierelor, aceasta este utilizată, deoarece oferă imagini de calitate mai bună după subextragere în comparație cu RGB. Dar nu trebuie să-mi credeți pe cuvânt. Verificați singuri în tabelul de mai jos cum va arăta subextragerea fiecărui component, atât în RGB, cât și în YCbCr.

Cum funcționează formatul JPEG
(Versiunea interactivă – în originalul articole).

Eliminarea albastrului nu este la fel de vizibilă ca cea a roșului sau a verde. Totul pentru că, din cele șase milioane de conuri din ochii dumneavoastră, aproximativ 64% sunt sensibile la roșu, 32% la verde și 2% la albastru.

Subextragerea componentei Y (în stânga jos) este cea mai vizibilă. Chiar și o mică modificare este evidentă.

Transformarea imaginii din RGB în YCbCr nu reduce dimensiunea fișierului, dar facilitează găsirea detaliilor mai puțin vizibile care pot fi eliminate. Compresia cu pierderi are loc în a doua etapă. La baza acesteia se află ideea de a prezenta datele într-o formă mai comprimată.

2. Transformarea cosinusoidală discretă și subextragerea

Acest nivel de compresie, în mare parte, definește esența JPEG. După transformarea culorilor în YCbCr, componentele sunt comprimate separat, așa că putem să ne concentrăm doar pe componenta Y. Iată cum arată octeții componentei Y după aplicarea acestui nivel.

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

La prima vedere, pare a fi o compresie foarte slabă. În imagine sunt 100.000 de pixeli, iar pentru a indica strălucirea lor (componenta Y) sunt necesare 102.400 de numere — asta este mai rău decât dacă nu s-ar face deloc compresie!

Cu toate acestea, observați că majoritatea acestor numere sunt zero. Mai mult, toate aceste zerouri de la sfârșitul rândurilor pot fi eliminate, fără a schimba imaginea. Rămân aproximativ 26.000 de numere, ceea ce este deja aproape de 4 ori mai puțin!

La acest nivel se află secretul modelelor de șah. Spre deosebire de alte efecte pe care le-am văzut, apariția acestor modele nu este un defect. Ele sunt blocurile de construcție ale întregii imagini. Fiecare linie din editor conține exact 64 de numere, coeficientii transformării cosinusoidale discrete (DCT), care corespund intensităților celor 64 de modele unice.

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

Cum funcționează formatul JPEG
8 din 64 de coeficienți

Mai jos se află o imagine care demonstrează toate cele 64 de modele.

Cum funcționează formatul JPEG
(Versiunea interactivă – în originalul articole).

Aceste modele au o semnificație specială, deoarece ele formează baza imaginilor de dimensiuni 8x8. Dacă nu ești familiarizat cu algebra liniară, asta înseamnă că orice imagine de dimensiune 8x8 poate fi obținută din aceste 64 de modele. DCT este procesul de împărțire a imaginilor în blocuri de 8x8 și de transformare a fiecărui bloc într-o combinație din acești 64 de coeficienți.

Faptul că orice imagine poate fi compusă din 64 de modele specifice pare magic. Cu toate acestea, 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ă semilunile / nota traducătorului]. Adesea considerăm suprafața Pământului drept două dimensiuni, de aceea avem nevoie doar de două numere. O imagine 8x8 are 64 de dimensiuni, prin urmare avem nevoie de 64 de numere.

Deocamdată nu este clar cum ne ajută aceasta în termenii compresiei. Dacă avem nevoie de 64 de numere pentru a reprezenta o imagine 8x8, de ce această metodă ar fi mai bună decât simpla stocare a 64 de componente de strălucire? Facem acest lucru din același motiv pentru care am transformat trei numere RGB în trei numere YCbCr: ne permite să eliminăm detalii neobservate.

Este greu de văzut ce anume detalii sunt eliminate în această etapă, deoarece JPEG aplică DCT la blocuri de 8x8. Cu toate acestea, nimeni nu ne interzice să-l aplicăm la o imagine întreagă. Iată cum arată DCT pe componenta Y aplicat unei imagini întregi:

Cum funcționează formatul JPEG

Din capăt putem elimina peste 60.000 de numere practic fără modificări vizibile în fotografie.

Cum funcționează formatul JPEG

Cu toate acestea, remarcă că dacă anulăm primele cinci numere, diferența va fi evidentă.

Cum funcționează formatul JPEG

Numerele de la început indică modificările de frecvență joasă în imagine, iar ochii noștri le percep cel mai bine. Numerele mai aproape de sfârșit indică modificările de frecvență înaltă, care sunt mai greu de observat. Pentru a „vedea ceea ce nu este vizibil cu ochiul”, putem izola aceste detalii de frecvență înaltă, anulând primele 5000 de numere.

Cum funcționează formatul JPEG

Vedem toate zonele imaginii, în care au loc cele mai mari schimbări de la pixel la pixel. Se evidențiază ochii pisicii, mustățile sale, plapuma de pluș și umbrele din colțul din stânga jos. Putem merge și mai departe, anulând primele 10.000 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ță JPEG sunt eliminate în timpul procesului de compresie. Transformarea culorilor în coeficienți DCT nu produce pierderi. Pierderile apar la pasul de discretizare, unde sunt eliminate valorile de frecvență înaltă sau apropiate de zero. Când reduceți calitatea salvării JPEG, programul crește pragul numărului de valori eliminate, ceea ce duce la o dimensiune mai mică a fișierului, dar face imaginea mai pixelată. Astfel, imaginea din prima secțiune, care a fost de 57 de ori mai mică, a arătat astfel. Fiecare bloc de 8x8 era reprezentat de un număr mult mai mic de coeficienți DCT comparativ cu versiunea de calitate superioară.

Se poate realiza un efect grozav, cum ar fi transmisia progresivă a imaginilor. Se poate afișa o imagine neclară care devine din ce în ce mai detaliată pe măsură ce se descarcă un număr tot mai mare de coeficienți.

Iată, doar pentru interes, ce se va obține folosind doar 24.000 de numere:

Cum funcționează formatul JPEG

Sau doar 5.000:

Cum funcționează formatul JPEG

Foarte neclar, dar totuși recognoscibil!

3. Codificarea lungimilor de serie, delta și Huffman

Până acum, toate etapele de compresie au fost cu pierderi. Ultima etapă, dimpotrivă, se realizează fără pierderi. Aceasta nu elimină informații, ci reduce semnificativ dimensiunea fișierului.

Cum putem comprima ceva fără a elimina informații? Imaginați-vă cum am descrie un simplu dreptunghi negru de 700 x 437.

JPEG folosește pentru aceasta 5.000 de numere, dar se poate obține un rezultat mult mai bun. Poți să-ți imaginezi un schelet de codificare care să descrie o astfel de imagine cu cât mai puțini biți?

Schema minimă pe care am reușit să o concep folosește patru: trei pentru a indica culoarea și al patrulea – cât de mulți pixeli au această culoare. Ideea de a reprezenta valorile repetate într-un mod atât de compact se numește codificarea lungimilor de serie. Aceasta nu are pierderi, deoarece putem restaura datele codificate în forma lor originală.

Dimensiunea fișierului JPEG cu un dreptunghi negru este mult mai mare de 4 octeți – amintiți-vă că la nivelul DCT, comprimarea se aplică blocurilor de 8x8 pixeli. Așadar, avem nevoie de cel puțin un coeficient DCT pentru fiecare 64 de pixeli. Ne trebuie un coeficient pentru că, în loc să stocăm un coeficient DCT urmat de 63 de zerouri, codificarea lungimilor de serie ne permite să stocăm un singur număr și să indicăm că „toate celelalte sunt zerouri.”

Codificarea delta este o tehnică prin care fiecare octet conține diferența față de o anumită valoare, nu valoarea absolută. De aceea, modificarea anumitor octeți schimbă culoarea tuturor celorlalți pixeli. De exemplu, în loc să stocăm

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ă adăugăm sau să scădem pentru a obține următorul număr. Această succesiune în codificarea delta devine:

12 1 1 0 0 -1 0 1

Datele transformate nu devin mai mici decât originale, dar comprimarea lor devine mai ușoară. Aplicarea codificării delta înainte de codificarea lungimilor de serie poate ajuta considerabil, rămânând totodată o compresie fără pierderi.

Codificarea delta este una dintre puținele tehnici utilizate în afara blocurilor de 8x8. Din cei 64 de coeficienți DCT, unul este pur și simplu o funcție de undă constantă (culoare uniformă). Acesta reprezintă luminozitatea medie a fiecărui bloc pentru componentele de luminozitate, sau albastrul mediu pentru componentele Cb, și așa mai departe. Prima valoare a fiecărui bloc DCT se numește valoare DC, iar fiecare valoare DC trece prin codificare delta în raport cu cele anterioare. Prin urmare, modificarea luminozității primului bloc va afecta toate blocurile.

Rămâne ultima enigmă: cum poate modificarea unui singur număr să strice complet întreaga imagine? Până acum, astfel de proprietăți nu au existat la nivelurile de compresie. Răspunsul se află în antetul JPEG. Primele 500 de octeți conțin metadate despre imagine – lățimea, înălțimea și altele, iar până nu lucrăm cu acestea.

Fără antet, este practic imposibil (sau foarte complicat) să decodifici JPEG. Ar semăna cu încercarea de a-ți descrie un tablou și încep să inventez cuvinte pentru a-mi transmite impresia. Descrierea va fi probabil foarte compactă, deoarece pot inventa cuvinte exact cu semnificația pe care vreau să o transmit, însă pentru toți ceilalți, ele nu vor avea sens.

Pare că e o prostie, dar exact așa se întâmplă. Fiecare imagine JPEG este comprimată cu coduri specifice. Dicționarul codurilor este păstrat în antet. Această tehnică se numește „codul Huffman”, iar dicționarul – tabela Huffman. În antet, tabela este marcată cu doi octeți – 255 și apoi 196. Fiecare componentă de culoare poate avea tabela sa.

Schimbările tabelelor vor avea un impact radical asupra oricărei imagini. Un exemplu bun este să schimbi 1 cu 12 pe linia 15.

Cum funcționează formatul JPEG

Acest lucru se întâmplă pentru că tabelele specifică modul în care trebuie citite anumite biți. Până acum am lucrat doar cu numere binare în forma lor zecimală. Însă acest lucru ne ascunde faptul că, dacă doriți să stocați numărul 1 într-un octet, va arăta ca 00000001, deoarece fiecare octet trebuie să conțină exact opt biți, chiar dacă aveți nevoie doar de unul dintre ei.

Potencial, aceasta este o mare pierdere de spațiu dacă aveți multe numere mici. Codul Huffman este o tehnică care ne permite să relaxăm această cerință conform căreia fiecare număr trebuie să ocupe opt biți. Asta înseamnă că, dacă vedeți doi octeți:

234 115

Atunci, în funcție de tabela Huffman, acestea pot fi trei numere. Pentru a le extrage, trebuie mai întâi să le descompuneți în biți individuali:

11101010 01110011

Apoi ne referim la tabelă pentru a înțelege cum să le grupăm. De exemplu, acestea pot fi primii șase biți (111010), sau 58 în sistemul zecimal, urmați de cinci biți (10011), sau 19, și în cele din urmă ultimii patru biți (0011), sau 3.

Așadar, este foarte greu să înțelegi biții în această etapă a comprimării. Biții nu reprezintă ceea ce pare. Nu vreau să intru în detalii despre funcționarea tabelei în acest articol, dar materiale în legătură cu acest subiect pe internet suficient.

Unul dintre trucurile interesante pe care le poți face, știind asta, este să separi antetul de JPEG și să-l păstrezi separat. Practic, va rezultă că fișierul poate fi citit doar de tine. Facebook face asta pentru a reduce și mai mult fișierele.

Ce altceva se poate face este să schimbi puțin tabela Huffman. Pentru alții, aceasta va părea ca o imagine deteriorată. Și doar tu vei ști varianta magică pentru a o corecta.

Să tragem concluziile: ce este necesar pentru decodarea JPEG? Este necesar să:

  1. Extragi tabela (tabelele) Huffman din antet și să decodifici biții.
  2. Extrage coeficientii transformării cosinus discret pentru fiecare componentă de culoare și luminozitate pentru fiecare bloc de 8x8, efectuând transformări inverse ale codificării run-length și delta.
  3. Combină cosinusurile pe baza coeficientilor pentru a obține valorile pixelilor pentru fiecare bloc de 8x8.
  4. Scalați componentele de culoare, dacă s-a efectuat sub-eșantionare (această informație se află în antet).
  5. Transformați valorile obținute YCbCr pentru fiecare pixel în RGB.
  6. Afișați imaginea pe ecran!

O muncă serioasă pentru o simplă vizionare a unei poze cu pisici! Totuși, ce îmi place la asta – este evident cât de centrată pe om este tehnologia JPEG. Aceasta se bazează pe trăsăturile percepției noastre, permițând atingerea unei compresii mult mai bune decât tehnologiile obișnuite. Și acum, înțelegând cum funcționează JPEG, ne putem imagina cum aceste tehnologii pot fi transferate în alte domenii. De exemplu, codificarea delta în video ar putea oferi o reducere semnificativă a dimensiunii fișierului, deoarece acolo adesea există zone întregi care nu se schimbă de la un cadru la altul (de exemplu, fundalul).

Codul utilizat în articol, este deschis și conține instrucțiuni pentru înlocuirea imaginilor cu cele proprii.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster