Wéi de JPEG Format funktionnéiert

JPEG-Biller sinn iwwerall an eisem digitale Liewen, awer hannert dësem Veneer vu Bewosstsinn sinn Algorithmen déi Detailer ewechhuelen, déi net fir dat mënschlecht Auge erkennbar sinn. D'Resultat ass déi héchst visuell Qualitéit an der klengster Dateigréisst - awer wéi funktionnéiert dat alles? Loosst eis kucken wat eis Ae genee net gesinn!

Wéi de JPEG Format funktionnéiert

Et ass einfach fir selbstverständlech d'Fäegkeet ze huelen fir eng Foto un e Frënd ze schécken an sech keng Suergen iwwer wéi en Apparat, Browser oder Betribssystem se benotzen - awer dat war net ëmmer de Fall. Vun de fréien 1980er konnten Computeren digital Biller späicheren an affichéieren, awer et ware vill konkurréiere Iddien iwwer de beschte Wee fir dëst ze maachen. Dir kënnt net nëmmen e Bild vun engem Computer op en aneren schécken an hoffen datt et funktionnéiert.

Fir dëse Problem ze léisen, gouf 1986 e Comité vun Experten aus der ganzer Welt zesummegesat, genannt "Joint Group of Photography Experts» (Joint Photographic Experts Group, JPEG), gegrënnt als gemeinsame Effort tëscht der International Organization for Standardization (ISO) an der International Electrotechnical Commission (IEC), zwee international Standarden Organisatiounen mat Sëtz zu Genf, Schwäiz.

Eng Grupp vu Leit genannt JPEG huet den JPEG Digital Image Compression Standard am Joer 1992 erstallt. Jiddereen deen den Internet benotzt huet ass wahrscheinlech JPEG-kodéiert Biller begéint. Dëst ass deen allgemengste Wee fir Biller ze codéieren, ze schécken an ze späicheren. Vun Websäiten bis E-Mail op sozialen Medien, JPEG gëtt Milliarde Mol am Dag benotzt - praktesch all Kéier wann mir e Bild online kucken oder se schécken. Ouni JPEG wier de Web manner faarweg, méi lues a wahrscheinlech manner Kazfotoen!

Dësen Artikel ass iwwer wéi een e JPEG Bild decodéiert. An anere Wierder, wat néideg ass fir kompriméiert Donnéeën, déi op engem Computer gespäichert sinn, an e Bild ze konvertéieren dat um Bildschierm erschéngt. Dëst ass derwäert ze wëssen, net nëmme well et wichteg ass d'Technologie ze verstoen déi mir all Dag benotzen, awer och well andeems mir Kompressiounsniveauen opmaachen, léiere mir méi iwwer Perceptioun a Visioun, a wéi eng Detailer eis Aen am meeschte sensibel sinn.

Ausserdeem ass et ganz interessant mat Biller op dës Manéier ze spillen.

Wéi de JPEG Format funktionnéiert

Sicht an JPEG

Op engem Computer gëtt alles als Sequenz vu binären Zuelen gespäichert. Typesch sinn dës Bits, Nullen an Eens, a Gruppen vun aacht gruppéiert fir Bytes auszemaachen. Wann Dir e JPEG Bild op engem Computer opmaacht, muss eppes (e Browser, e Betribssystem, soss eppes) d'Bytes decodéieren, d'Originalbild restauréiert als eng Lëscht vu Faarwen déi ugewise kënne ginn.

Wann Dir download dëser séiss Foto vun enger Kaz an et an engem Texteditor opmaachen, gesitt Dir eng Rëtsch onkohärent Charaktere.

Wéi de JPEG Format funktionnéiert
Hei benotzen ech Notepad ++ fir den Inhalt vun der Datei z'ënnersichen, well regelméisseg Texteditorer wéi Notepad op Windows d'binär Datei korruptéieren nodeems se gespäichert sinn an et net méi dem JPEG Format erfëllen.

Wann Dir e Bild an engem Wuertveraarbechter opmaacht, verwiesselt de Computer, sou wéi Dir Äert Gehir duerchernee mécht, wann Dir Är Aen reift an ufänkt Flecken vu Faarf ze gesinn!

Dës Flecken déi Dir gesitt sinn bekannt als phosphenes, a sinn net d'Resultat vun engem liichte Reiz oder enger Halluzinatioun, déi vum Geescht generéiert gëtt. Si geschéien well Äert Gehir mengt datt all elektresch Signaler an den opteschen Nerven Informatioun iwwer Liicht vermëttelen. D'Gehir muss dës Viraussetzunge maachen, well et kee Wee ass ze wëssen ob e Signal e Klang, eng Visioun oder soss eppes ass. All Nerven am Kierper vermëttelen genau déiselwecht elektresch Impulser. Andeems Dir Drock op Är Ae setzt, schéckt Dir Signaler déi net visuell sinn, awer d'Ae Rezeptoren aktivéieren, déi Äert Gehir interpretéiert - an dësem Fall falsch - als eppes visuells. Dir kënnt wuertwiertlech den Drock gesinn!

Et ass witzeg ze denken wéi ähnlech Computere mam Gehir sinn, awer et ass och eng nëtzlech Analogie fir ze illustréieren wéi vill d'Bedeitung vun Daten - egal ob duerch de Kierper duerch Nerven gedroen oder op engem Computer gespäichert ass - hänkt dovun of wéi se interpretéiert ginn. All binär Donnéeën besteet aus XNUMXs an XNUMXs, d'Basiskomponenten déi Informatioun vun iergendenger Aart kënne vermëttelen. Äre Computer fënnt dacks eraus wéi se se interpretéiere kënnen andeems Dir Hiweiser benotzt wéi Dateierweiterungen. Elo forcéiere mir se als Text ze interpretéieren, well dat ass wat den Texteditor erwaart.

Fir ze verstoen wéi een JPEG decodéiert, musse mir d'Original Signaler selwer gesinn - déi binär Donnéeën. Dëst kann mat engem hexadezimalen Editor gemaach ginn, oder direkt op Original Artikel Websäit! Et gëtt e Bild, nieft deem am Textfeld all seng Bytes (ausser den Header) sinn an Dezimalform presentéiert. Dir kënnt se änneren, an de Skript wäert nei codéieren an en neit Bild op der Flucht produzéieren.

Wéi de JPEG Format funktionnéiert

Dir kënnt vill léieren just andeems Dir mat dësem Editor spillt. Zum Beispill, kënnt Dir soen a wéi enger Uerdnung d'Pixel gespäichert sinn?

Wat komesch un dësem Beispill ass, datt d'Ännerung vun e puer Zuelen d'Bild guer net beaflosst, awer wann Dir zum Beispill d'Nummer 17 duerch 0 an der éischter Zeil ersetzt, gëtt d'Foto komplett ruinéiert!

Wéi de JPEG Format funktionnéiert

Aner Ännerungen, wéi z.B. d'Ersatz vun der 7 op der Linn 1988 mat der Nummer 254, ännert d'Faarf, awer nëmme vu spéider Pixelen.

Wéi de JPEG Format funktionnéiert

Vläicht déi komeschst Saach ass datt verschidde Zuelen net nëmmen d'Faarf änneren, awer och d'Form vum Bild. Ännert d'70 an der Linn 12 op 2 a kuckt op déi iewescht Zeil vum Bild fir ze kucken wat ech mengen.

Wéi de JPEG Format funktionnéiert

An egal wéi engem JPEG Bild Dir benotzt, Dir fannt ëmmer dës mysteriéis Schachmuster wann Dir d'Bytes ännert.

Wann Dir mam Editor spillt, ass et schwéier ze verstoen wéi eng Foto aus dëse Bytes nei erstallt gëtt, well JPEG Kompressioun besteet aus dräi verschiddenen Technologien, sequentiell an Niveauen applizéiert. Mir wäerte jidderee separat studéieren fir dat mysteriéist Verhalen ze entdecken dat mir gesinn.

Dräi Niveauen vun JPEG Kompressioun:

  1. Faarf subsampling.
  2. Diskret Cosinus Transformatioun a Sampling.
  3. Run Längt Kodéierung, Delta и Huffman

Fir Iech eng Iddi vun der Gréisst vun der Kompressioun ze ginn, bemierkt datt d'Bild hei uewen 79 Zuelen representéiert, oder ongeféier 819 KB. Wa mir et ouni Kompressioun gespäichert hunn, brauch all Pixel dräi Zuelen - fir déi rout, gréng a blo Komponenten. Dat géif 79 Zuelen ausgoen, oder ca. 917 kb. Als Resultat vun der JPEG-Kompressioun gouf déi lescht Datei ëm méi wéi 700 Mol reduzéiert!

Tatsächlech kann dëst Bild vill méi kompriméiert ginn. Drënner sinn zwee Biller niewentenee - d'Foto op der rietser Säit gouf op 16 KB kompriméiert, dat heescht 57 Mol méi kleng wéi déi onkompriméiert Versioun!

Wéi de JPEG Format funktionnéiert

Wann Dir genau kuckt, gesitt Dir datt dës Biller net identesch sinn. Béid si Biller mat JPEG-Kompressioun, awer déi richteg ass vill méi kleng am Volume. Et gesäit och e bësse méi schlecht aus (kuckt d'Hannergrondfaarfplazen). Dofir gëtt JPEG och lossy Compression genannt; Wärend dem Kompressiounsprozess ännert sech d'Bild a verléiert e puer Detailer.

1. Faarf subsampling

Hei ass e Bild mat nëmmen den éischten Niveau vun der Kompressioun applizéiert.

Wéi de JPEG Format funktionnéiert
(Interaktiv Versioun - in original Artikelen). Ewechzehuelen eng Zuel zerstéiert all Faarwen. Wann awer genee sechs Zuele geläscht ginn, huet dat praktesch keen Effekt op d'Bild.

Elo sinn d'Zuelen e bësse méi einfach ze entzifferen. Dëst ass bal eng einfach Lëscht vu Faarwen, an där all Byte genee ee Pixel ännert, awer gläichzäiteg ass et schonn d'Halschent vun der Gréisst vum onkompriméierte Bild (wat ongeféier 300 KB an dëser reduzéierter Gréisst géif huelen). Kënnt Dir roden firwat?

Dir kënnt gesinn datt dës Zuelen net déi Standard rout, gréng a blo Komponente representéieren, well wa mir all d'Zuelen duerch Nullen ersetzen, kréie mir e gréngt Bild (anstatt wäiss).

Wéi de JPEG Format funktionnéiert

Dëst ass well dës Bytes fir Y (Hellegkeet) stinn,

Wéi de JPEG Format funktionnéiert

Cb (relativ blo),

Wéi de JPEG Format funktionnéiert

an Cr (relativ redness) Biller.

Wéi de JPEG Format funktionnéiert

Firwat net RGB benotzen? No allem ass dat wéi déi meescht modern Schiirme funktionnéieren. Äre Monitor kann all Faarf weisen, dorënner rout, gréng a blo, mat verschiddenen Intensitéiten fir all Pixel. Wäiss gëtt kritt andeems se all dräi op voller Hellegkeet ausschalten, a schwaarz andeems se se ausschalten.

Wéi de JPEG Format funktionnéiert

Dëst ass och ganz ähnlech wéi dat mënschlecht Auge funktionnéiert. D'Faarfrezeptoren an eisen Ae ginn genannt "Kegel", a sinn an dräi Typen opgedeelt, déi jidderee méi sensibel ass fir entweder rout, gréng oder blo Faarwen [S-Typ Kegel sinn sensibel am violett-blo (S aus dem englesche Short - Short-wave Spektrum), M -Typ - am gréng-giel (M vun der englescher Medium - mëttlerer Welle), an L-Typ - am giel-rout (L vun der englescher Long - laangwelle) Deeler vum Spektrum. D'Präsenz vun dësen dräi Aarte vu Kegel (a Staang, déi am Smaragdgréngen Deel vum Spektrum sensibel sinn) gëtt eng Persoun Faarfvisioun. / ca. Iwwersetzung]. Bengel, eng aner Aart vu Fotorezeptor an eisen Aen, ass fäeg Ännerungen an der Hellegkeet z'entdecken, awer ass vill méi sensibel op Faarf. Eis Aen hunn ongeféier 120 Millioune Staang an nëmmen 6 Millioune Kegel.

Dofir sinn eis Ae vill besser fir Ännerungen an der Hellegkeet z'entdecken wéi Ännerungen an der Faarf. Wann Dir d'Faarf vun der Hellegkeet trennt, kënnt Dir e bësse Faarf erofhuelen a kee wäert eppes bemierken. Chroma-Subsampling ass de Prozess fir d'Faarfkomponente vun engem Bild mat enger méi niddereger Resolutioun ze representéieren wéi d'Luminanzkomponenten. Am Beispill hei uewen huet all Pixel genee ee Y-Komponent, an all eenzel Grupp vu véier Pixel huet genau ee Cb an ee Cr-Komponent. Dofir enthält d'Bild véiermol manner Faarfinformatioun wéi d'Original.

De YCbCr Faarfraum gëtt net nëmmen am JPEG benotzt. Et gouf ursprénglech 1938 fir Televisiounsprogrammer erfonnt. Net jiddereen huet eng Faarf Fernseh, sou datt d'Faarf an d'Helligkeet trennen erlaabt jiddereen datselwecht Signal ze kréien, an Fernseher ouni Faarf hunn einfach nëmmen d'Hellegkeetskomponent benotzt.

Also eng Nummer aus dem Editor ze läschen, ruinéiert all d'Faarwen komplett. D'Komponente ginn an der Form YYYY Cb Cr gespäichert (tatsächlech net onbedéngt an där Uerdnung - d'Späicheruerdnung gëtt am Dateiheader spezifizéiert). Ewechzehuelen déi éischt Nummer wäert Ursaach den éischte Wäert vun Cb als Y, Cr als Cb ugesi ginn, an allgemeng wäert Dir en Domino Effekt hunn, datt all d'Faarwen vum Bild schalt.

D'JPEG Spezifizéierung forcéiert Iech net YCbCr ze benotzen. Awer déi meescht Dateien benotzen et well et besser downsampled Biller produzéiert wéi RGB. Awer Dir musst mäi Wuert net dofir huelen. Kuckt Iech selwer an der Tabell hei drënner wéi d'Subsampling vun all eenzel Komponent a béid RGB an YCbCr ausgesäit.

Wéi de JPEG Format funktionnéiert
(Interaktiv Versioun - in original Artikelen).

D'Entfernung vu blo ass net sou opfälleg wéi déi vu rout oder gréng. Dat ass wéinst de sechs Millioune Kegelen an Ären Aen, ongeféier 64% si sensibel fir rout, 32% fir gréng an 2% fir blo.

Den Downsampling vum Y Komponent (ënnescht lénks) ass am beschten ze gesinn. Och eng kleng Ännerung ass opfälleg.

E Bild vun RGB op YCbCr konvertéieren reduzéiert d'Dateigréisst net, awer et mécht et méi einfach manner sichtbar Detailer ze fannen déi ewechgeholl kënne ginn. Lossy Kompressioun geschitt an der zweeter Stuf. Et baséiert op der Iddi fir Daten an enger méi kompriméierbarer Form ze presentéieren.

2. Diskret Cosinus Transformatioun an probéieren

Dëse Kompressiounsniveau ass zum gréissten Deel wat JPEG alles ass. Nodeems Dir d'Faarwen op YCbCr ëmgewandelt huet, ginn d'Komponente individuell kompriméiert, sou datt mir dann nëmmen op den Y-Komponent konzentréiere kënnen.An hei ass wéi d'Y-Komponente-Bytes ausgesinn nodeems Dir dës Schicht applizéiert hutt.

Wéi de JPEG Format funktionnéiert
(Interaktiv Versioun - in original Artikelen). An der interaktiver Versioun, klickt op e Pixel scrollt den Editor op d'Linn déi et duerstellt. Probéiert d'Zuelen vum Enn ze läschen oder e puer Nullen op eng gewëssen Zuel ze addéieren.

Op den éischte Bléck gesäit et aus wéi eng ganz schlecht Kompressioun. Et gi 100 Pixel an engem Bild, an et brauch 000 Zuelen fir hir Hellegkeet (Y-Komponenten) ze representéieren - dat ass méi schlëmm wéi guer näischt ze kompriméieren!

Wéi och ëmmer, bemierkt datt déi meescht vun dësen Zuelen null sinn. Ausserdeem kënnen all déi Nullen um Enn vun den Zeilen ewechgeholl ginn ouni d'Bild z'änneren. Et sinn ongeféier 26 Zuelen iwwreg, an dat ass bal 000 Mol manner!

Dëse Niveau enthält d'Geheimnis vu Schachmuster. Am Géigesaz zu aneren Effekter déi mir gesinn hunn, ass d'Erscheinung vun dëse Mustere kee Feeler. Si sinn d'Bausteng vum ganze Bild. All Linn vun der Redakter enthält genee 64 Zuelen, diskret Cosinus transforméieren (DCT) Koeffizienten entspriechend der Intensitéit vun 64 eenzegaarteg Mustere.

Dës Mustere ginn op Basis vum Cosinusplot geformt. Hei ass wéi e puer vun hinnen ausgesinn:

Wéi de JPEG Format funktionnéiert
8 vun 64 Chance

Drënner ass e Bild mat all 64 Musteren.

Wéi de JPEG Format funktionnéiert
(Interaktiv Versioun - in original Artikelen).

Dës Mustere si besonnesch wichteg well se d'Basis vun den 8x8 Biller bilden. Wann Dir net mat der linearer Algebra vertraut sidd, heescht dat datt all 8x8 Bild aus dëse 64 Mustere gemaach ka ginn. DCT ass de Prozess fir Biller an 8x8 Blocken opzedeelen an all Block an eng Kombinatioun vun dësen 64 Koeffizienten ëmzewandelen.

Et schéngt wéi Magie datt all Bild aus 64 spezifesche Mustere komponéiert ka sinn. Wéi och ëmmer, dëst ass d'selwecht wéi ze soen datt all Plaz op der Äerd duerch zwou Zuelen beschriwwe ka ginn - Breet a Längt [déi Hemisphäre uginn / ca. Iwwersetzung]. Mir denken dacks un der Äerduewerfläch als zweedimensional, also brauche mir nëmmen zwou Zuelen. En 8x8 Bild huet 64 Dimensiounen, also brauche mir 64 Zuelen.

Et ass nach net kloer wéi dëst eis hëlleft wat d'Kompressioun ugeet. Wa mir 64 Zuelen brauchen fir en 8x8 Bild ze representéieren, firwat wier dat besser wéi just 64 Hellegkeetskomponenten ze späicheren? Mir maachen dat aus dem selwechte Grond, datt mir dräi RGB Zuelen an dräi YCbCr Zuelen ëmgewandelt hunn: et erlaabt eis subtil Detailer ze läschen.

Et ass schwéier ze gesinn genau wéi eng Detail op dëser Etapp ewechgeholl gëtt well JPEG DCT op 8x8 Block applizéiert. Wéi och ëmmer, kee verbitt eis et op dat ganzt Bild anzesetzen. Hei ass wéi DCT ausgesäit fir den Y Komponent applizéiert op dat ganzt Bild:

Wéi de JPEG Format funktionnéiert

Méi wéi 60 Zuelen kënnen aus dem Enn geläscht ginn mat quasi keng merkbar Ännerungen un der Foto.

Wéi de JPEG Format funktionnéiert

Wéi och ëmmer, bemierkt datt wa mir déi éischt fënnef Zuelen nulléieren, ass den Ënnerscheed offensichtlech.

Wéi de JPEG Format funktionnéiert

D'Zuelen am Ufank representéieren niddereg Frequenz Ännerungen am Bild, déi eis Aen am beschten ophuelen. Zuelen um Enn weisen op Ännerungen an den héije Frequenzen déi méi schwéier ze bemierken sinn. Fir "ze gesinn wat d'Ae net gesinn kann", kënne mir dës Héichfrequenz Detailer isoléieren andeems Dir déi éischt 5000 Zuelen nulléiert.

Wéi de JPEG Format funktionnéiert

Mir gesinn all Beräicher vum Bild wou déi gréissten Ännerung vu Pixel zu Pixel geschitt. D'Aen vun der Kaz, seng Whiskers, d'Frottédecken an d'Schatten am ënneschten lénksen Eck stinn eraus. Dir kënnt weider goen andeems Dir déi éischt 10 Zuelen nulléiert:

Wéi de JPEG Format funktionnéiert

20 000:

Wéi de JPEG Format funktionnéiert

40 000:

Wéi de JPEG Format funktionnéiert

60 000:

Wéi de JPEG Format funktionnéiert

Dës Héichfrequenz Detailer ginn duerch JPEG wärend der Kompressiounsstadium geläscht. Et gëtt kee Verloscht beim Ëmwandlung vu Faarwen op DCT Koeffizienten. De Verloscht geschitt am Probestuf, wou Héichfrequenz oder bal Null Wäerter ewechgeholl ginn. Wann Dir d'JPEG-Spuerqualitéit erofgeet, erhéicht de Programm d'Schwell fir d'Zuel vun de geläscht Wäerter, wat d'Dateigréisst reduzéiert, awer d'Bild méi pixeléiert mécht. Dofir huet d'Bild an der éischter Sektioun, déi 57 Mol méi kleng war, esou ausgesinn. All 8x8 Block war duerch vill manner DCT Koeffizienten vertruede par rapport zu der méi héijer Qualitéit Versioun.

Dir kënnt esou e coolen Effekt erstellen wéi de graduelle Streaming vu Biller. Dir kënnt e blurry Bild weisen dat ëmmer méi detailléiert gëtt wéi ëmmer méi Koeffizienten erofgeluede ginn.

Hei, just fir de Spaass, ass wat Dir kritt mat just 24 Nummeren:

Wéi de JPEG Format funktionnéiert

Oder just 5000:

Wéi de JPEG Format funktionnéiert

Ganz onschëlleg, awer iergendwéi erkennbar!

3. Run Längt Kodéierung, Delta an Huffman

Bis elo sinn all Etappe vun der Kompressioun verluer gaangen. Déi lescht Etapp, am Géigendeel, geet ouni Verloschter. Et läscht keng Informatioun, awer et reduzéiert d'Dateigréisst wesentlech.

Wéi kënnt Dir eppes kompriméieren ouni Informatioun ze geheien? Stellt Iech vir wéi mir en einfache schwaarze Rechteck 700 x 437 beschreiwen.

JPEG benotzt 5000 Zuelen fir dës, awer vill besser Resultater kënnen erreecht ginn. Kënnt Dir Iech e Kodéierungsschema virstellen, deen esou e Bild an esou wéineg Bytes wéi méiglech beschreiwen?

De minimale Schema, deen ech ka kommen, benotzt véier: dräi fir eng Faarf ze representéieren, an e véierte fir unzeginn wéivill Pixel dës Faarf huet. D'Iddi fir widderhuelend Wäerter op dës kondenséiert Manéier ze representéieren gëtt Run-Längt Kodéierung genannt. Et ass lossless well mir déi encodéiert Donnéeën op hir ursprénglech Form restauréiere kënnen.

Eng JPEG-Datei mat engem schwaarze Rechteck ass vill méi grouss wéi 4 Bytes - denkt drun datt um DCT-Niveau Kompressioun op 8x8 Pixelblocken applizéiert gëtt. Dofir brauche mir op e Minimum een ​​DCT Koeffizient fir all 64 Pixel. Mir brauchen eng well amplaz vun engem Stockage engem DCT Koeffizient gefollegt vun 63 Nullen, Run Längt Kodéierung erlaabt eis eng Nummer ze Buttek an uginn, datt "all déi aner Nullen sinn."

Delta Kodéierung ass eng Technik an där all Byte en Ënnerscheed vun engem Wäert enthält, anstatt en absolute Wäert. Dofir ännert verschidde Bytes d'Faarf vun allen anere Pixelen. Zum Beispill, amplaz ze späicheren

12 13 14 14 14 13 13 14

Mir kéinte mat 12 ufänken an dann einfach uginn wéi vill mir mussen addéieren oder subtrahéieren fir déi nächst Zuel ze kréien. An dës Sequenz am Delta Kodéierung hëlt d'Form:

12 1 1 0 0 - 1 0 1

Déi ëmgerechent Donnéeën sinn net méi kleng wéi déi ursprénglech Donnéeën, awer et ass méi einfach et ze kompriméieren. D'Delta Kodéierung anzebezéien virum Run Length Kodéierung ka vill hëllefe wärend nach ëmmer Verloschtlos Kompressioun ass.

Delta Kodéierung ass eng vun de wéinegen Techniken, déi ausserhalb vun 8x8 Blocks benotzt ginn. Vun de 64 DCT Koeffizienten ass een einfach eng konstant Wellefunktioun (fest Faarf). Et representéiert déi duerchschnëttlech Hellegkeet vun all Block fir d'luma Komponenten, oder d'Duerchschnëttsblo fir d'Cb Komponenten, a sou weider. Den éischte Wäert vun all DCT Block gëtt den DC Wäert genannt, an all DC Wäert ass delta kodéiert mat Respekt fir déi virdrun. Dofir wäert d'Verännerung vun der Hellegkeet vum éischte Block all Block beaflossen.

D'Finale Rätsel bleift: Wéi verännert d'Singular komplett dat ganzt Bild? Bis elo hunn d'Kompressiounsniveauen net sou Eegeschaften. D'Äntwert läit am JPEG Header. Déi éischt 500 Bytes enthalen Metadaten iwwer d'Bild - Breet, Héicht, etc., a mir hunn nach net mat hinnen geschafft.

Ouni Header ass et bal onméiglech (oder ganz schwéier) JPEG ze decodéieren. Et gesäit aus wéi wann ech probéieren Iech d'Bild ze beschreiwen, an ech fänken un Wierder ze erfannen fir meng Androck ze vermëttelen. D'Beschreiwung wäert wuel zimmlech kompriméiert sinn, well ech Wierder erfannen mat genau der Bedeitung déi ech wëll vermëttelen, awer fir all déi aner wäerte se kee Sënn maachen.

Et kléngt domm, awer genee dat geschitt. All JPEG Bild gëtt mat Coden spezifesch kompriméiert. De Code Wierderbuch gëtt am Header gespäichert. Dës Technik gëtt Huffman Code genannt an de Vokabulär gëtt Huffman Dësch genannt. Am Header gëtt den Dësch mat zwee Bytes markéiert - 255 an dann 196. All Faarfkomponent kann seng eegen Dësch hunn.

Ännerungen un Dëscher wäerten all Bild radikal beaflossen. E gutt Beispill ass déi 15. Linn op 1 ze änneren.

Wéi de JPEG Format funktionnéiert

Dëst geschitt well d'Tabellen spezifizéieren wéi eenzel Bits gelies solle ginn. Bis elo hu mir nëmme mat binären Zuelen an Dezimalform geschafft. Mä dëst verstoppt eis d'Tatsaach, datt wann Dir d'Nummer 1 an engem Byte späichere wëllt, et ausgesäit wéi 00000001, well all Byte muss genee aacht Bits hunn, och wann nëmmen ee vun hinnen néideg ass.

Dëst ass potenziell eng grouss Verschwendung vu Plaz wann Dir vill kleng Zuelen hutt. Huffman Code ass eng Technik déi eis erlaabt dës Fuerderung ze relaxen datt all Zuel aacht Bits muss besetzen. Dëst bedeit datt wann Dir zwee Bytes gesitt:

234 115

Dann, jee no dem Huffman Dësch, kënnen dës dräi Zuelen sinn. Fir se ze extrahieren, musst Dir se als éischt an eenzel Stécker opbriechen:

11101010 01110011

Da kucke mir op den Dësch fir erauszefannen wéi se se gruppéiere kënnen. Zum Beispill kéint dëst déi éischt sechs Bits, (111010), oder 58 an Dezimal sinn, gefollegt vu fënnef Bits (10011), oder 19, a schliisslech déi lescht véier Bits (0011), oder 3.

Dofir ass et ganz schwéier d'Bytes op dëser Etapp vun der Kompressioun ze verstoen. Bytes representéieren net wat se schéngen. Ech ginn net an Detailer vun der Aarbecht mat der Tabell an dësem Artikel, mä Materialien iwwer dëst Thema online genuch ass.

Een interessanten Trick deen Dir mat dësem Wëssen maache kënnt ass den Header vum JPEG ze trennen an se separat ze späicheren. Tatsächlech stellt sech eraus datt nëmmen Dir d'Datei liesen kann. Facebook mécht dat fir Dateien nach méi kleng ze maachen.

Wat soss ka gemaach ginn ass den Huffman Dësch zimmlech z'änneren. Fir anerer wäert et ausgesinn wéi e gebrachent Bild. An nëmmen Dir wësst de magesche Wee fir et ze fixéieren.

Loosst eis zesummefaassen: also wat ass néideg fir JPEG ze dekodéieren? Noutwendeg:

  1. Extrait den Huffman Dësch (en) aus dem Header an dekodéiert d'Bits.
  2. Extraitéiert déi diskret Cosinus-Transformkoeffizienten fir all Faarf- a Luminanzkomponent fir all 8x8 Block, maacht invers Run-Längt an Delta Kodéierungstransformatiounen.
  3. Kombinéiert Kosinus baséiert op Koeffizienten fir Pixelwäerter fir all 8x8 Block ze kréien.
  4. Skala Faarfkomponenten wann Ënnersampling duerchgefouert gouf (dës Informatioun ass am Header).
  5. Konvertéiert déi resultéierend YCbCr Wäerter fir all Pixel op RGB.
  6. Weist d'Bild um Écran!

Serious Aarbecht fir einfach eng Foto mat enger Kaz ze kucken! Wéi och ëmmer, wat ech doriwwer gär hunn ass datt et weist wéi mënschlech zentréiert JPEG Technologie ass. Et baséiert op de Besonderheete vun eiser Perceptioun, wat eis erlaabt vill besser Kompressioun ze erreechen wéi konventionell Technologien. An elo wou mir verstinn wéi JPEG funktionnéiert, kënne mir eis virstellen wéi dës Technologien op aner Beräicher transferéiert kënne ginn. Zum Beispill, Delta Kodéierung am Video kann eng bedeitend Reduktioun vun der Dateigréisst ubidden, well et dacks ganz Beräicher sinn déi net vu Frame zu Frame änneren (zum Beispill den Hannergrond).

Code am Artikel benotzt, ass op, an enthält Instruktioune wéi Dir d'Biller mat Ären eegenen ersetzt.

Source: will.com

Setzt e Commentaire