Hvernig JPEG sniðið virkar

JPEG myndir eru alls staðar nálægar í stafrænu lífi okkar, en á bak við þessa vitundarspón eru reiknirit sem fjarlægja smáatriði sem eru ekki skynjanleg fyrir mannlegt auga. Niðurstaðan er hæstu sjónræn gæði í minnstu skráarstærð - en hvernig nákvæmlega virkar þetta allt saman? Við skulum sjá hvað nákvæmlega augun okkar sjá ekki!

Hvernig JPEG sniðið virkar

Það er auðvelt að taka sem sjálfsögðum hlut að senda mynd til vinar og hafa ekki áhyggjur af því hvaða tæki, vafra eða stýrikerfi þeir eru að nota - en það var ekki alltaf raunin. Í upphafi níunda áratugarins gátu tölvur geymt og sýnt stafrænar myndir, en það voru margar samkeppnishugmyndir um hvernig best væri að gera þetta. Þú gætir ekki bara sent mynd úr einni tölvu í aðra og vona að það myndi virka.

Til að leysa þetta vandamál var nefnd sérfræðinga víðsvegar að úr heiminum sett saman árið 1986 sem heitir "Sameiginlegur hópur ljósmyndasérfræðinga» (Joint Photographic Experts Group, JPEG), stofnað sem sameiginlegt átak milli International Organization for Standardization (ISO) og International Electrotechnical Commission (IEC), tveggja alþjóðlegra staðlastofnana með höfuðstöðvar í Genf, Sviss.

Hópur fólks sem heitir JPEG bjó til JPEG stafræna myndþjöppunarstaðalinn árið 1992. Allir sem hafa notað internetið hafa líklega rekist á JPEG-kóðaðar myndir. Þetta er algengasta leiðin til að umrita, senda og geyma myndir. Allt frá vefsíðum til tölvupósts til samfélagsmiðla, JPEG er notað milljarða sinnum á dag - nánast í hvert skipti sem við skoðum mynd á netinu eða sendum hana. Án JPEG væri vefurinn litríkari, hægari og líklega færri kattamyndir!

Þessi grein er um hvernig á að afkóða JPEG mynd. Með öðrum orðum, það sem þarf til að breyta þjöppuðum gögnum sem geymd eru á tölvu í mynd sem birtist á skjánum. Þetta er þess virði að vita, ekki aðeins vegna þess að það er mikilvægt að skilja tæknina sem við notum á hverjum degi, heldur einnig vegna þess að með því að opna þjöppunarstig lærum við meira um skynjun og sjón og hvaða smáatriði augun okkar eru næmust fyrir.

Að auki er mjög áhugavert að leika sér með myndir á þennan hátt.

Hvernig JPEG sniðið virkar

Horft í JPEG

Í tölvu er allt geymt sem röð af tvöföldum tölum. Venjulega eru þessir bitar, núll og einir, flokkaðir í átta hópa til að mynda bæti. Þegar þú opnar JPEG mynd í tölvu verður eitthvað (vafri, stýrikerfi, eitthvað annað) að afkóða bætin og endurheimta upprunalegu myndina sem lista yfir liti sem hægt er að sýna.

Ef þú halar niður þessu sætu mynd af kötti og opnaðu það í textaritli, þú munt sjá fullt af ósamhengilegum stöfum.

Hvernig JPEG sniðið virkar
Hér er ég að nota Notepad++ til að skoða innihald skráarinnar, þar sem venjulegir textaritlar eins og Notepad á Windows munu skemma tvíundarskrána eftir vistun og hún mun ekki lengur uppfylla JPEG sniðið.

Að opna mynd í ritvinnsluforriti ruglar tölvuna, alveg eins og þú ruglar heilann þegar þú nuddar augun og byrjar að sjá litabletti!

Þessir blettir sem þú sérð eru þekktir sem fosfen, og eru ekki afleiðing af léttu áreiti eða ofskynjunum sem hugurinn framkallar. Þau eiga sér stað vegna þess að heilinn þinn heldur að öll rafboð í sjóntaugunum beri upplýsingar um ljós. Heilinn þarf að gera þessar forsendur vegna þess að það er engin leið að vita hvort merki er hljóð, sýn eða eitthvað annað. Allar taugar líkamans senda nákvæmlega sömu rafboðin. Með því að beita þrýstingi á augun sendir þú merki sem eru ekki sjónræn, heldur virkjar viðtaka augans, sem heilinn þinn túlkar - í þessu tilviki rangt - sem eitthvað sjónrænt. Þú getur bókstaflega séð þrýstinginn!

Það er fyndið að hugsa til þess hversu svipaðar tölvur eru heilanum, en það er líka gagnleg samlíking til að sýna hversu mikið merking gagna – hvort sem þau eru flutt í gegnum líkamann með taugum eða geymd í tölvu – fer eftir því hvernig þau eru túlkuð. Öll tvöfaldur gögn eru samsett úr XNUMXs og XNUMXs, grunnþáttum sem geta miðlað upplýsingum af hvaða tagi sem er. Tölvan þín finnur oft hvernig á að túlka þær með því að nota vísbendingar eins og skráarendingar. Nú neyðum við það til að túlka þær sem texta, því það er það sem textaritillinn býst við.

Til að skilja hvernig á að afkóða JPEG þurfum við að sjá upprunalegu merkin sjálf - tvíundargögnin. Þetta er hægt að gera með sextánsíma ritli, eða beint á upprunalega grein vefsíða! Það er mynd, við hliðina á henni í textareitnum eru öll bæti hennar (nema hausinn), sett fram í aukastaf. Þú getur breytt þeim og handritið mun endurkóða og framleiða nýja mynd á flugi.

Hvernig JPEG sniðið virkar

Þú getur lært mikið bara með því að spila með þessum ritstjóra. Geturðu til dæmis sagt í hvaða röð punktarnir eru geymdir?

Það skrítna við þetta dæmi er að það að breyta sumum tölum hefur engin áhrif á myndina, en til dæmis ef þú skiptir út tölunni 17 fyrir 0 í fyrstu línu þá eyðileggst myndin algjörlega!

Hvernig JPEG sniðið virkar

Aðrar breytingar, eins og að skipta út 7 á línu 1988 fyrir númerið 254, breyta litnum, en aðeins á síðari pixlum.

Hvernig JPEG sniðið virkar

Það undarlegasta er kannski að sumar tölur breyta ekki bara litnum heldur líka lögun myndarinnar. Breyttu 70 í línu 12 í 2 og skoðaðu efstu röð myndarinnar til að sjá hvað ég á við.

Hvernig JPEG sniðið virkar

Og það er sama hvaða JPEG mynd þú notar, þú munt alltaf finna þessi dularfullu skákmynstur þegar þú breytir bætum.

Þegar leikið er með ritlinum er erfitt að skilja hvernig mynd er endurgerð úr þessum bætum, þar sem JPEG-þjöppun samanstendur af þremur mismunandi tækni, sem er beitt í röð í stigum. Við munum rannsaka hvern og einn fyrir sig til að afhjúpa dularfulla hegðunina sem við erum að sjá.

Þrjú stig af JPEG þjöppun:

  1. Litaundirsýni.
  2. Stöðug kósínusumbreyting og sýnatöku.
  3. Kóðun hlaupalengdar, delta и Huffman

Til að gefa þér hugmynd um stærð þjöppunarinnar skaltu athuga að myndin hér að ofan táknar 79 tölur, eða um 819 KB. Ef við geymum það án þjöppunar myndi hver pixla þurfa þrjár tölur - fyrir rauða, græna og bláa hluti. Þetta myndi nema 79 númerum eða u.þ.b. 917 KB. Sem afleiðing af JPEG-þjöppun minnkaði lokaskráin meira en 700 sinnum!

Í raun er hægt að þjappa þessari mynd miklu meira saman. Hér að neðan eru tvær myndir hlið við hlið - myndin til hægri hefur verið þjappað niður í 16 KB, það er 57 sinnum minni en óþjappaða útgáfan!

Hvernig JPEG sniðið virkar

Ef þú skoðar vel muntu sjá að þessar myndir eru ekki eins. Báðar eru þær myndir með JPEG-þjöppun, en sú hægri er mun minni í magni. Það lítur líka aðeins verra út (horfðu á bakgrunnslitareitina). Þess vegna er JPEG einnig kallað tapsþjöppun; Meðan á þjöppunarferlinu stendur breytist myndin og missir smá smáatriði.

1. Litaundirsýni

Hér er mynd þar sem aðeins fyrsta stig þjöppunar er beitt.

Hvernig JPEG sniðið virkar
(Gagnvirk útgáfa - í frumlegt greinar). Að fjarlægja eina tölu eyðileggur alla liti. Hins vegar, ef nákvæmlega sex tölur eru fjarlægðar, hefur það nánast engin áhrif á myndina.

Nú er aðeins auðveldara að ráða tölurnar. Þetta er nánast einfaldur listi yfir liti, þar sem hvert bæti breytist nákvæmlega um einn pixla, en á sama tíma er það þegar helmingi stærri en óþjappað mynd (sem myndi taka um 300 KB í þessari minni stærð). Geturðu giskað á hvers vegna?

Þú getur séð að þessar tölur tákna ekki staðlaða rauða, græna og bláa hluti, þar sem ef við skiptum út öllum tölunum með núllum fáum við græna mynd (frekar en hvíta).

Hvernig JPEG sniðið virkar

Þetta er vegna þess að þessi bæti standa fyrir Y (birtustig),

Hvernig JPEG sniðið virkar

Cb (hlutfallslegur bláleiki),

Hvernig JPEG sniðið virkar

og Cr (relative roði) myndir.

Hvernig JPEG sniðið virkar

Af hverju ekki að nota RGB? Eftir allt saman, þetta er hvernig flestir nútíma skjáir virka. Skjárinn þinn getur sýnt hvaða lit sem er, þar á meðal rauðan, grænan og blár, með mismunandi styrkleika fyrir hvern pixla. Hvítt fæst með því að kveikja á öllum þremur á fullri birtu og svart með því að slökkva á þeim.

Hvernig JPEG sniðið virkar

Þetta er líka mjög svipað því hvernig mannsaugað virkar. Litaviðtakarnir í augum okkar eru kallaðir "keilur“, og skiptast í þrjár gerðir, sem hver um sig er næmari fyrir annaðhvort rauðum, grænum eða bláum litum [Keilur af S-gerð eru viðkvæmar í fjólubláu (S úr enska stuttbylgjurófinu), M -gerð - í grængulum (M frá ensku Medium - miðbylgju) og L-gerð - í gulrauðu (L frá ensku Long - langbylgju) hlutum litrófsins. Tilvist þessara þriggja tegunda keilna (og stanga, sem eru viðkvæmar í smaragðgræna hluta litrófsins) gefur manni litasjón. / u.þ.b. þýð.]. Stafur, önnur tegund ljósnema í augum okkar, er fær um að greina breytingar á birtustigi, en er mun næmari fyrir litum. Augun okkar eru með um 120 milljón stangir og aðeins 6 milljónir keilur.

Þess vegna eru augun okkar miklu betri í að greina breytingar á birtustigi en breytingar á lit. Ef þú aðskilur lit frá birtu geturðu fjarlægt smá lit og enginn tekur eftir neinu. Chroma subsampling er ferlið við að tákna litahluti myndar í lægri upplausn en birtuhlutirnir. Í dæminu hér að ofan hefur hver pixla nákvæmlega einn Y ​​hluti og hver einstakur hópur fjögurra pixla hefur nákvæmlega einn Cb og einn Cr hluti. Þess vegna inniheldur myndin fjórfalt minni litaupplýsingar en upprunalega.

YCbCr litarýmið er ekki aðeins notað í JPEG. Það var upphaflega fundið upp árið 1938 fyrir sjónvarpsþætti. Það eru ekki allir með litasjónvarp, svo að aðskilja lit og birtustig leyfðu öllum að fá sama merkið og sjónvörp án lita notuðu einfaldlega aðeins birtuþáttinn.

Svo að taka eina tölu úr ritlinum eyðileggur algjörlega alla liti. Íhlutirnir eru geymdir á formi YYYY Cb Cr (reyndar ekki endilega í þeirri röð - geymsluröðin er tilgreind í skráarhausnum). Ef fyrsta númerið er fjarlægt verður fyrsta gildi Cb litið á sem Y, Cr sem Cb, og almennt muntu hafa domino áhrif sem skiptir um alla liti myndarinnar.

JPEG forskriftin neyðir þig ekki til að nota YCbCr. En flestar skrár nota það vegna þess að það framleiðir betri niðursýndar myndir en RGB. En þú þarft ekki að taka orð mín fyrir það. Sjáðu sjálfur í töflunni hér að neðan hvernig undirsýni hvers einstaks íhluta mun líta út í bæði RGB og YCbCr.

Hvernig JPEG sniðið virkar
(Gagnvirk útgáfa - í frumlegt greinar).

Fjarlæging bláa er ekki eins áberandi og rauð eða græn. Það er vegna sex milljóna keilanna í augum þínum, um 64% eru viðkvæm fyrir rauðu, 32% fyrir grænu og 2% fyrir bláu.

Niðursýni Y-hlutans (neðst til vinstri) sést best. Jafnvel lítil breyting er áberandi.

Að breyta mynd úr RGB í YCbCr minnkar ekki skráarstærð, en það gerir það auðveldara að finna minna sýnilegar upplýsingar sem hægt er að fjarlægja. Lossy samþjöppun á sér stað á öðru stigi. Það er byggt á hugmyndinni um að kynna gögn á samþjöppunarhæfara formi.

2. Stöðug kósínusumbreyting og sýnatöku

Þetta þjöppunarstig er að mestu leyti það sem JPEG snýst um. Eftir að litunum hefur verið breytt í YCbCr eru íhlutirnir þjappaðir hver fyrir sig, svo við getum þá einbeitt okkur að Y-hlutanum. Og hér er hvernig Y-hlutabætin líta út eftir að hafa sett þetta lag á.

Hvernig JPEG sniðið virkar
(Gagnvirk útgáfa - í frumlegt greinar). Í gagnvirku útgáfunni, með því að smella á pixla, fletta ritlinum að línunni sem táknar hann. Prófaðu að fjarlægja tölur af endanum eða bæta nokkrum núllum við ákveðna tölu.

Við fyrstu sýn lítur það út fyrir að vera mjög slæm þjöppun. Það eru 100 pixlar í mynd og það þarf 000 tölur til að tákna birtustig þeirra (Y-hlutar) - það er verra en að þjappa engu!

Athugaðu samt að flestar þessar tölur eru núll. Þar að auki er hægt að fjarlægja öll þessi núll í lok lína án þess að breyta myndinni. Það eru um 26 númer eftir og þetta er næstum 000 sinnum minna!

Þetta stig inniheldur leyndarmál skákmynstra. Ólíkt öðrum áhrifum sem við höfum séð er útlit þessara mynstra ekki galli. Þeir eru byggingareiningar allrar myndarinnar. Hver lína ritstjórans inniheldur nákvæmlega 64 tölur, staka kósínusumbreytingu (DCT) stuðla sem samsvara styrkleika 64 einstakra mynstra.

Þessi mynstur eru mynduð út frá kósínusfléttunni. Svona líta sumir þeirra út:

Hvernig JPEG sniðið virkar
8 af 64 líkur

Hér að neðan er mynd sem sýnir öll 64 mynstrin.

Hvernig JPEG sniðið virkar
(Gagnvirk útgáfa - í frumlegt greinar).

Þessi mynstur eru sérstaklega mikilvæg vegna þess að þau mynda grunninn að 8x8 myndunum. Ef þú þekkir ekki línulega algebru þýðir þetta að hægt er að búa til hvaða 8x8 mynd sem er úr þessum 64 mynstrum. DCT er ferlið við að skipta myndum í 8x8 blokkir og breyta hverjum blokk í samsetningu þessara 64 stuðla.

Það virðist vera galdur að hvaða mynd sem er getur verið samsett úr 64 sérstökum mynstrum. Hins vegar er þetta það sama og að segja að hvaða stað á jörðinni sem er er hægt að lýsa með tveimur tölum - breiddar- og lengdargráðu [sem gefur til kynna hálfhvel / u.þ.b. þýð.]. Við hugsum oft um yfirborð jarðar sem tvívítt, þannig að við þurfum aðeins tvær tölur. 8x8 mynd hefur 64 stærðir, þannig að við þurfum 64 tölur.

Það er ekki enn ljóst hvernig þetta hjálpar okkur hvað varðar þjöppun. Ef við þurfum 64 tölur til að tákna 8x8 mynd, hvers vegna væri þetta betra en bara að geyma 64 birtuhluti? Við gerum þetta af sömu ástæðu og við breyttum þremur RGB númerum í þrjú YCbCr númer: það gerir okkur kleift að fjarlægja fíngerðar upplýsingar.

Það er erfitt að sjá nákvæmlega hvaða smáatriði eru fjarlægð á þessu stigi vegna þess að JPEG beitir DCT á 8x8 blokkir. Enginn bannar okkur hins vegar að heimfæra það á heildarmyndina. Svona lítur DCT út fyrir Y íhlutinn sem er notaður á alla myndina:

Hvernig JPEG sniðið virkar

Hægt er að fjarlægja meira en 60 númer frá endanum með nánast engum áberandi breytingum á myndinni.

Hvernig JPEG sniðið virkar

Athugaðu samt að ef við núllum út fyrstu fimm tölurnar verður munurinn augljós.

Hvernig JPEG sniðið virkar

Tölurnar í upphafi tákna lágtíðnibreytingar á myndinni, sem augu okkar ná best. Tölur undir lok gefa til kynna breytingar á háu tíðnum sem erfiðara er að taka eftir. Til að „sjá það sem augað getur ekki séð,“ getum við einangrað þessar hátíðniupplýsingar með því að núllstilla fyrstu 5000 tölurnar.

Hvernig JPEG sniðið virkar

Við sjáum öll svæði myndarinnar þar sem mesta breytingin verður frá pixla til pixla. Augu kattarins, hárhöndin hans, terry teppið og skuggarnir í neðra vinstra horninu standa upp úr. Þú getur náð lengra með því að núllstilla fyrstu 10 tölurnar:

Hvernig JPEG sniðið virkar

20 000:

Hvernig JPEG sniðið virkar

40 000:

Hvernig JPEG sniðið virkar

60 000:

Hvernig JPEG sniðið virkar

Þessar hátíðniupplýsingar eru fjarlægðar með JPEG á þjöppunarstigi. Það er ekkert tap á því að breyta litum í DCT-stuðla. Tap á sér stað í sýnatökuþrepinu, þar sem hátíðni eða nærri núllgildi eru fjarlægð. Þegar þú lækkar JPEG-vistunargæði eykur forritið þröskuldinn fyrir fjölda gilda sem eru fjarlægð, sem minnkar skráarstærðina en gerir myndina pixlaðri. Þess vegna leit myndin í fyrsta hlutanum, sem var 57 sinnum minni, svona út. Hver 8x8 blokk var táknuð með mun færri DCT-stuðlum samanborið við hærri gæðaútgáfuna.

Þú getur búið til svo flott áhrif eins og smám saman streymi mynda. Þú getur birt óskýra mynd sem verður ítarlegri og ítarlegri eftir því sem fleiri og fleiri stuðlar eru hlaðnir niður.

Hér, bara til gamans, er það sem þú færð með því að nota aðeins 24 númer:

Hvernig JPEG sniðið virkar

Eða bara 5000:-

Hvernig JPEG sniðið virkar

Mjög óskýrt, en einhvern veginn auðþekkjanlegt!

3. Runlengdarkóðun, delta og Huffman

Hingað til hafa öll stig þjöppunar verið tapsöm. Síðasti áfanginn, þvert á móti, gengur án taps. Það eyðir ekki upplýsingum, en það minnkar verulega skráarstærðina.

Hvernig er hægt að þjappa einhverju saman án þess að henda upplýsingum? Ímyndaðu þér hvernig við myndum lýsa einföldum svörtum rétthyrningi 700 x 437.

JPEG notar 5000 tölur til þess en hægt er að ná mun betri árangri. Geturðu ímyndað þér kóðunarkerfi sem myndi lýsa slíkri mynd í eins fáum bætum og mögulegt er?

Lágmarkskerfið sem ég gæti komið með notar fjóra: þrír til að tákna lit og fjórða til að gefa til kynna hversu marga punkta sá litur hefur. Hugmyndin um að tákna endurtekin gildi á þennan þétta hátt er kölluð run-length kóðun. Það er taplaust vegna þess að við getum endurheimt kóðuðu gögnin í upprunalegt form.

JPEG skrá með svörtum rétthyrningi er miklu stærri en 4 bæti - mundu að á DCT stigi er þjöppun beitt á 8x8 pixla blokkir. Þess vegna þurfum við að minnsta kosti einn DCT-stuðul fyrir hverja 64 pixla. Við þurfum einn vegna þess að í stað þess að geyma einn DCT-stuðul og fylgt eftir af 63 núllum, gerir kóðun með runlengd okkur kleift að geyma eina tölu og gefa til kynna að „allir aðrir eru núll“.

Delta kóðun er tækni þar sem hvert bæti inniheldur mun frá einhverju gildi, frekar en algildi. Þess vegna breytir breyting á ákveðnum bætum lit allra annarra punkta. Til dæmis í stað þess að geyma

12 13 14 14 14 13 13 14

Við gætum byrjað á 12 og svo einfaldlega gefið til kynna hversu mikið við þurfum að bæta við eða draga frá til að fá næstu tölu. Og þessi röð í deltakóðun tekur á sig form:

12 1 1 0 0 -1 0 1

Umbreyttu gögnin eru ekki minni en upprunalegu gögnin, en það er auðveldara að þjappa þeim saman. Að beita delta kóðun fyrir kóðun á keyrslulengd getur hjálpað mikið á meðan það er enn tapslaus þjöppun.

Delta kóðun er ein af fáum aðferðum sem notuð eru utan 8x8 blokka. Af 64 DCT-stuðlum er einn einfaldlega stöðugt bylgjufall (fastur litur). Það táknar meðalbirtustig hvers blokkar fyrir luma íhlutina, eða meðalbláleika fyrir Cb hluti, og svo framvegis. Fyrsta gildi hvers DCT blokk er kallað DC gildi og hvert DC gildi er delta kóðað með tilliti til fyrri. Þess vegna mun breyting á birtustigi fyrstu blokkarinnar hafa áhrif á allar blokkir.

Endanleg ráðgáta er eftir: hvernig eyðileggur það að breyta eintölunni algjörlega heildarmyndina? Hingað til hafa þjöppunarstig ekki haft slíka eiginleika. Svarið liggur í JPEG hausnum. Fyrstu 500 bætin innihalda lýsigögn um myndina - breidd, hæð o.s.frv., og við höfum ekki unnið með þau ennþá.

Án haus er næstum ómögulegt (eða mjög erfitt) að afkóða JPEG. Það mun líta út eins og ég sé að reyna að lýsa myndinni fyrir þér og ég er farin að finna upp orð til að koma tilfinningum mínum á framfæri. Lýsingin verður líklega frekar þétt, þar sem ég get fundið upp orð með nákvæmlega þeirri merkingu sem ég vil koma á framfæri, en fyrir alla aðra munu þau ekki meika sens.

Það hljómar heimskulega, en það er einmitt það sem gerist. Hver JPEG mynd er þjappuð með sérkóðum fyrir hana. Kóðaorðabókin er geymd í hausnum. Þessi tækni er kölluð Huffman kóða og orðaforðinn er kallaður Huffman table. Í hausnum er taflan merkt með tveimur bætum - 255 og síðan 196. Hver litahluti getur haft sína eigin töflu.

Breytingar á töflum munu hafa róttæk áhrif á hvaða mynd sem er. Gott dæmi er að breyta 15. línu í 1.

Hvernig JPEG sniðið virkar

Þetta gerist vegna þess að töflurnar tilgreina hvernig einstaka bita á að lesa. Hingað til hefur aðeins verið unnið með tvíundartölur á tugaformi. En þetta felur okkur þá staðreynd að ef þú vilt geyma töluna 1 í bæti, mun það líta út eins og 00000001, þar sem hvert bæti verður að hafa nákvæmlega átta bita, jafnvel þótt aðeins þurfi einn þeirra.

Þetta er hugsanlega mikil sóun á plássi ef þú ert með mikið af litlum númerum. Huffman kóða er tækni sem gerir okkur kleift að slaka á þessari kröfu um að hver tala verði að taka átta bita. Þetta þýðir að ef þú sérð tvö bæti:

234 115

Síðan, allt eftir Huffman töflunni, gætu þetta verið þrjár tölur. Til að draga þær út þarftu fyrst að skipta þeim niður í einstaka bita:

11101010 01110011

Síðan skoðum við töfluna til að finna út hvernig á að flokka þá. Til dæmis gæti þetta verið fyrstu sex bitarnir, (111010), eða 58 í aukastaf, fylgt eftir af fimm bitum (10011), eða 19, og að lokum fjórir síðustu bitarnir (0011), eða 3.

Þess vegna er mjög erfitt að skilja bætin á þessu stigi þjöppunar. Bæti tákna ekki það sem þau virðast. Ég mun ekki fara í smáatriði um að vinna með töfluna í þessari grein, en efni um þetta mál á netinu nóg.

Eitt áhugavert bragð sem þú getur gert með þessari þekkingu er að skilja hausinn frá JPEG og geyma hann sérstaklega. Reyndar kemur í ljós að aðeins þú getur lesið skrána. Facebook gerir þetta til að gera skrár enn minni.

Það sem annað er hægt að gera er að breyta Huffman borðinu töluvert. Fyrir aðra mun það líta út eins og brotin mynd. Og aðeins þú munt vita töfrandi leið til að laga það.

Við skulum draga saman: svo hvað þarf til að afkóða JPEG? Nauðsynlegt:

  1. Dragðu Huffman töfluna/töflurnar út úr hausnum og afkóðaðu bitana.
  2. Dragðu út staka kósínusumbreytingarstuðlana fyrir hvern lita- og birtuþátt fyrir hverja 8x8 blokk, framkvæmdu umbreytingar á öfugri run-lengd og delta-kóðun.
  3. Sameina kósínus byggt á stuðlum til að fá pixlagildi fyrir hverja 8x8 blokk.
  4. Skala litahluti ef undirsýnataka var framkvæmd (þessar upplýsingar eru í hausnum).
  5. Umbreyttu YCbCr-gildunum sem myndast fyrir hvern pixla í RGB.
  6. Sýndu myndina á skjánum!

Alvarleg vinna fyrir einfaldlega að skoða mynd með kött! Hins vegar, það sem mér líkar við það er að það sýnir hversu mannmiðuð JPEG tækni er. Það er byggt á sérkennum skynjunar okkar, sem gerir okkur kleift að ná mun betri þjöppun en hefðbundin tækni. Og nú þegar við skiljum hvernig JPEG virkar getum við ímyndað okkur hvernig hægt er að flytja þessa tækni yfir á önnur svæði. Til dæmis getur deltakóðun í myndbandi veitt verulega minni skráarstærð, þar sem oft eru heil svæði sem breytast ekki frá ramma til ramma (til dæmis bakgrunnur).

Kóði sem notaður er í greininni, er opið og inniheldur leiðbeiningar um hvernig eigi að skipta út myndunum fyrir þínar eigin.

Heimild: www.habr.com

Bæta við athugasemd