Si funksionon formati JPEG

Imazhet JPEG janë të kudondodhura në jetën tonë dixhitale, por pas kësaj veshjeje ndërgjegjësimi janë algoritme që heqin detaje që nuk janë të dukshme për syrin e njeriut. Rezultati është cilësia më e lartë vizuale në madhësinë më të vogël të skedarit - por si funksionon saktësisht gjithçka? Le të shohim se çfarë saktësisht nuk shohin sytë tanë!

Si funksionon formati JPEG

Është e lehtë ta marrësh si të mirëqenë aftësinë për t'i dërguar një fotografi një miku dhe të mos shqetësohesh se çfarë pajisjeje, shfletuesi ose sistemi operativ po përdorin - por nuk ishte gjithmonë kështu. Nga fillimi i viteve 1980, kompjuterët mund të ruanin dhe shfaqnin imazhe dixhitale, por kishte shumë ide konkurruese për mënyrën më të mirë për ta bërë këtë. Ju nuk mund të dërgoni thjesht një imazh nga një kompjuter në tjetrin dhe të shpresoni se do të funksiononte.

Për të zgjidhur këtë problem, në vitin 1986 u mblodh një komitet ekspertësh nga e gjithë bota i quajtur "Grupi i Përbashkët i Ekspertëve të Fotografisë» (Joint Photographic Experts Group, JPEG), i themeluar si një përpjekje e përbashkët midis Organizatës Ndërkombëtare për Standardizim (ISO) dhe Komisionit Ndërkombëtar Elektroteknik (IEC), dy organizata ndërkombëtare të standardeve me seli në Gjenevë, Zvicër.

Një grup njerëzish të quajtur JPEG krijuan standardin e kompresimit të imazhit dixhital JPEG në 1992. Kushdo që ka përdorur internetin ndoshta ka hasur në imazhe të koduara JPEG. Kjo është mënyra më e zakonshme për të koduar, dërguar dhe ruajtur imazhe. Nga faqet e internetit tek emailet tek mediat sociale, JPEG përdoret miliarda herë në ditë—praktikisht çdo herë që shohim një imazh në internet ose e dërgojmë atë. Pa JPEG, uebi do të ishte më pak i gjallë, më i ngadalshëm dhe ndoshta do të kishte më pak foto macesh!

Ky artikull ka të bëjë me mënyrën e deshifrimit të një imazhi JPEG. Me fjalë të tjera, çfarë kërkohet për të kthyer të dhënat e kompresuara të ruajtura në një kompjuter në një imazh që shfaqet në ekran. Kjo ia vlen të dihet, jo vetëm sepse është e rëndësishme të kuptojmë teknologjinë që përdorim çdo ditë, por edhe sepse duke zhbllokuar nivelet e kompresimit, mësojmë më shumë rreth perceptimit dhe vizionit, si dhe për detajet ndaj të cilave sytë tanë janë më të ndjeshëm.

Përveç kësaj, të luash me imazhe në këtë mënyrë është shumë interesante.

Si funksionon formati JPEG

Duke kërkuar brenda JPEG

Në një kompjuter, gjithçka ruhet si një sekuencë numrash binarë. Në mënyrë tipike, këto pjesë, zero dhe njëshe, grupohen në grupe prej tetë për të krijuar bajt. Kur hapni një imazh JPEG në një kompjuter, diçka (një shfletues, një sistem operativ, diçka tjetër) duhet të deshifrojë bajtet, duke rikthyer imazhin origjinal si një listë ngjyrash që mund të shfaqen.

Nëse e shkarkoni këtë ëmbëlsirë foto e një mace dhe hapeni në një redaktues teksti, do të shihni një mori karakteresh jokoherente.

Si funksionon formati JPEG
Këtu po përdor Notepad++ për të ekzaminuar përmbajtjen e skedarit, pasi redaktuesit e rregullt të tekstit si Notepad në Windows do të korruptojnë skedarin binar pas ruajtjes dhe ai nuk do të plotësojë më formatin JPEG.

Hapja e një imazhi në një përpunues teksti e ngatërron kompjuterin, ashtu si ngatërroni trurin kur fërkoni sytë dhe filloni të shihni njolla ngjyrash!

Këto pika që shihni njihen si fosfenet, dhe nuk janë rezultat i një stimuli të lehtë ose një halucinacioni të krijuar nga mendja. Ato ndodhin sepse truri juaj mendon se çdo sinjal elektrik në nervat optikë përcjell informacion rreth dritës. Truri duhet të bëjë këto supozime sepse nuk ka asnjë mënyrë për të ditur nëse një sinjal është një tingull, një vizion apo diçka tjetër. Të gjithë nervat në trup transmetojnë saktësisht të njëjtat impulse elektrike. Duke ushtruar presion në sytë tuaj, ju dërgoni sinjale që nuk janë vizuale, por aktivizojnë receptorët e syrit, të cilët truri juaj i interpreton - në këtë rast, gabimisht - si diçka vizuale. Ju mund ta shihni fjalë për fjalë presionin!

Është qesharake të mendosh se sa të ngjashëm janë kompjuterët me trurin, por është gjithashtu një analogji e dobishme për të ilustruar se sa domethënia e të dhënave – qofshin të bartura nëpër trup nga nervat apo të ruajtura në një kompjuter – varet nga mënyra se si interpretohen. Të gjitha të dhënat binare përbëhen nga 0 dhe 1, komponentët bazë që mund të përcjellin informacion të çdo lloji. Kompjuteri juaj shpesh kupton se si t'i interpretojë ato duke përdorur të dhëna të tilla si shtesat e skedarëve. Tani e detyrojmë t'i interpretojë si tekst, sepse këtë e pret redaktori i tekstit.

Për të kuptuar se si të deshifrojmë JPEG, duhet të shohim vetë sinjalet origjinale - të dhënat binare. Kjo mund të bëhet duke përdorur një redaktues heksadecimal, ose drejtpërdrejt faqja origjinale e artikullit në internet! Ekziston një imazh, pranë të cilit në fushën e tekstit janë të gjitha bajtet e tij (përveç titullit), të paraqitur në formë dhjetore. Ju mund t'i ndryshoni ato dhe skripti do të rikodojë dhe do të prodhojë një imazh të ri në fluturim.

Si funksionon formati JPEG

Ju mund të mësoni shumë vetëm duke luajtur me këtë redaktues. Për shembull, a mund të tregoni se në çfarë rendi janë ruajtur pikselët?

Gjëja e çuditshme e këtij shembulli është se ndryshimi i disa numrave nuk ndikon aspak në imazh, por, për shembull, nëse zëvendësoni numrin 17 me 0 në rreshtin e parë, fotografia do të shkatërrohet plotësisht!

Si funksionon formati JPEG

Ndryshime të tjera, si zëvendësimi i 7 on line 1988 me numrin 254, ndryshon ngjyrën, por vetëm të pikselëve të mëpasshëm.

Si funksionon formati JPEG

Ndoshta gjëja më e çuditshme është se disa numra ndryshojnë jo vetëm ngjyrën, por edhe formën e imazhit. Ndrysho numrin 70 në rreshtin 12 në 2 dhe shiko në rreshtin e sipërm të figurës për të parë se çfarë dua të them.

Si funksionon formati JPEG

Dhe pavarësisht se çfarë imazhi JPEG përdorni, gjithmonë do t'i gjeni këto modele misterioze shahu kur redaktoni bajt.

Kur luani me redaktuesin, është e vështirë të kuptosh se si rikrijohet një foto nga këto bajtë, pasi kompresimi JPEG përbëhet nga tre teknologji të ndryshme, të aplikuara në mënyrë sekuenciale në nivele. Ne do ta studiojmë secilin veç e veç për të zbuluar sjelljen misterioze që po shohim.

Tre nivele të kompresimit JPEG:

  1. Nënmostrimi me ngjyra.
  2. Transformimi i kosinusit diskret dhe marrja e mostrave.
  3. Kodimi i gjatësisë së ekzekutimit, deltë и Huffman

Për t'ju dhënë një ide të madhësisë së ngjeshjes, vini re se imazhi i mësipërm përfaqëson 79 numra, ose rreth 819 KB. Nëse e ruanim pa kompresim, çdo piksel do të kërkonte tre numra - për komponentët e kuq, jeshil dhe blu. Kjo do të arrinte në 79 numra, ose përafërsisht. 917 KB. Si rezultat i kompresimit JPEG, skedari përfundimtar u reduktua me më shumë se 700 herë!

Në fakt, ky imazh mund të kompresohet shumë më tepër. Më poshtë janë dy imazhe krah për krah - fotografia në të djathtë është ngjeshur në 16 KB, domethënë 57 herë më e vogël se versioni i pakompresuar!

Si funksionon formati JPEG

Nëse shikoni me vëmendje, do të shihni se këto imazhe nuk janë identike. Të dyja janë imazhe me kompresim JPEG, por e djathta është shumë më e vogël në vëllim. Gjithashtu duket pak më keq (shikoni katrorët e ngjyrës së sfondit). Kjo është arsyeja pse JPEG quhet edhe kompresim me humbje; Gjatë procesit të kompresimit, imazhi ndryshon dhe humbet disa detaje.

1. Nën-mostra me ngjyra

Këtu është një imazh me vetëm nivelin e parë të kompresimit të aplikuar.

Si funksionon formati JPEG
(Versioni interaktiv - në origjinale artikuj). Heqja e një numri shkatërron të gjitha ngjyrat. Sidoqoftë, nëse hiqen saktësisht gjashtë numra, praktikisht nuk ka asnjë efekt në imazh.

Tani numrat janë pak më të lehtë për t'u deshifruar. Kjo është pothuajse një listë e thjeshtë ngjyrash, në të cilën çdo bajt ndryshon saktësisht një piksel, por në të njëjtën kohë është tashmë gjysma e madhësisë së imazhit të pakompresuar (që do të merrte rreth 300 KB në këtë madhësi të reduktuar). A mund ta merrni me mend pse?

Ju mund të shihni se këta numra nuk përfaqësojnë komponentët standarde të kuqe, jeshile dhe blu, pasi nëse i zëvendësojmë të gjithë numrat me zero, do të marrim një imazh të gjelbër (në vend të bardhë).

Si funksionon formati JPEG

Kjo është për shkak se këto byte qëndrojnë për Y (shkëlqim),

Si funksionon formati JPEG

Cb (kaltërsi relative),

Si funksionon formati JPEG

dhe fotografitë Cr (skuqje relative).

Si funksionon formati JPEG

Pse të mos përdorni RGB? Në fund të fundit, kështu funksionojnë ekranet më moderne. Monitori juaj mund të shfaqë çdo ngjyrë, duke përfshirë të kuqe, jeshile dhe blu, me intensitet të ndryshëm për çdo piksel. E bardha fitohet duke i ndezur të treja me ndriçim të plotë dhe e zeza duke i fikur.

Si funksionon formati JPEG

Kjo është gjithashtu shumë e ngjashme me mënyrën se si funksionon syri i njeriut. Receptorët e ngjyrave në sytë tanë quhen "kone", dhe ndahen në tre lloje, secila prej të cilave është më e ndjeshme ndaj ngjyrave të kuqe, jeshile ose blu [konet e tipit S janë të ndjeshëm në vjollcë-blu (S nga spektri anglez Short - me valë të shkurtër), M -tipi - në pjesët jeshile-verdhë (M nga anglishtja Medium - valë e mesme), dhe L-lloji - në pjesët e verdha-të kuqe (L nga anglishtja Long - me valë të gjatë) të spektrit. Prania e këtyre tre llojeve të konëve (dhe shufrave, të cilat janë të ndjeshme në pjesën e gjelbër smerald të spektrit) i jep një personi vizion me ngjyra. / përafërsisht. përkth.]. shkopinj, një lloj tjetër fotoreceptori në sytë tanë, është i aftë të zbulojë ndryshimet në shkëlqim, por është shumë më i ndjeshëm ndaj ngjyrave. Sytë tanë kanë rreth 120 milionë shufra dhe vetëm 6 milionë kone.

Kjo është arsyeja pse sytë tanë janë shumë më të mirë në zbulimin e ndryshimeve në shkëlqim sesa ndryshimet në ngjyrë. Nëse ndani ngjyrën nga shkëlqimi, mund të hiqni pak ngjyrë dhe askush nuk do të vërejë asgjë. Nën-kampionimi i kromës është procesi i përfaqësimit të përbërësve të ngjyrave të një imazhi me një rezolucion më të ulët se përbërësit e ndriçimit. Në shembullin e mësipërm, çdo piksel ka saktësisht një komponent Y, dhe çdo grup individual prej katër pikselësh ka saktësisht një komponent Cb dhe një Cr. Prandaj, imazhi përmban katër herë më pak informacion ngjyrash sesa origjinali.

Hapësira e ngjyrave YCbCr përdoret jo vetëm në JPEG. Fillimisht u shpik në 1938 për programe televizive. Jo të gjithë kanë një televizor me ngjyra, kështu që ndarja e ngjyrës dhe shkëlqimit i lejoi të gjithë të merrnin të njëjtin sinjal, dhe televizorët pa ngjyra thjesht përdorën vetëm komponentin e ndriçimit.

Pra, heqja e një numri nga redaktori shkatërron plotësisht të gjitha ngjyrat. Komponentët ruhen në formën YYYY Cb Cr (në fakt, jo domosdoshmërisht në atë renditje - rendi i ruajtjes është specifikuar në kokën e skedarit). Heqja e numrit të parë do të bëjë që vlera e parë e Cb të perceptohet si Y, Cr si Cb dhe në përgjithësi do të keni një efekt domino që ndërron të gjitha ngjyrat e figurës.

Specifikimi JPEG nuk ju detyron të përdorni YCbCr. Por shumica e skedarëve e përdorin atë sepse prodhon imazhe më të mira të shkurtuara sesa RGB. Por ju nuk duhet të pranoni fjalën time për të. Shihni vetë në tabelën më poshtë se si do të duket nën-kampionimi i secilit komponent individual si në RGB ashtu edhe në YCbCr.

Si funksionon formati JPEG
(Versioni interaktiv - në origjinale artikuj).

Heqja e ngjyrës blu nuk është aq e dukshme sa ajo e së kuqes apo e gjelbër. Kjo për shkak të gjashtë milionë konëve në sytë tuaj, rreth 64% janë të ndjeshëm ndaj të kuqes, 32% ndaj jeshiles dhe 2% ndaj blusë.

Zvogëlimi i mostrës së komponentit Y (poshtë majtas) shihet më së miri. Edhe një ndryshim i vogël është i dukshëm.

Konvertimi i një imazhi nga RGB në YCbCr nuk zvogëlon madhësinë e skedarit, por e bën më të lehtë gjetjen e detajeve më pak të dukshme që mund të hiqen. Kompresimi me humbje ndodh në fazën e dytë. Ai bazohet në idenë e paraqitjes së të dhënave në një formë më të kompresueshme.

2. Transformimi i kosinusit diskret dhe kampionimi

Ky nivel kompresimi është, në pjesën më të madhe, ajo që ka të bëjë me JPEG. Pas konvertimit të ngjyrave në YCbCr, komponentët kompresohen individualisht, kështu që ne mund të përqendrohemi vetëm në komponentin Y dhe ja se si duken bajtet e komponentit Y pas aplikimit të kësaj shtrese.

Si funksionon formati JPEG
(Versioni interaktiv - në origjinale artikuj). Në versionin interaktiv, duke klikuar mbi një piksel lëviz redaktorin në vijën që e përfaqëson atë. Provoni të hiqni numrat nga fundi ose të shtoni disa zero në një numër të caktuar.

Në pamje të parë, duket si kompresim shumë i keq. Ka 100 pikselë në një imazh dhe nevojiten 000 numra për të përfaqësuar shkëlqimin e tyre (komponentët Y)—kjo është më keq se të mos kompresosh asgjë!

Megjithatë, vini re se shumica e këtyre numrave janë zero. Për më tepër, të gjitha ato zero në fund të rreshtave mund të hiqen pa ndryshuar imazhin. Kanë mbetur rreth 26 numra, dhe kjo është pothuajse 000 herë më pak!

Ky nivel përmban sekretin e modeleve të shahut. Ndryshe nga efektet e tjera që kemi parë, pamja e këtyre modeleve nuk është një defekt. Ato janë blloqet ndërtuese të të gjithë imazhit. Çdo rresht i redaktorit përmban saktësisht 64 numra, koeficientë të transformimit diskretë të kosinusit (DCT) që korrespondojnë me intensitetin e 64 modeleve unike.

Këto modele formohen në bazë të grafikut kosinus. Ja si duken disa prej tyre:

Si funksionon formati JPEG
8 nga 64 shanset

Më poshtë është një imazh që tregon të 64 modelet.

Si funksionon formati JPEG
(Versioni interaktiv - në origjinale artikuj).

Këto modele kanë një rëndësi të veçantë sepse ato përbëjnë bazën e imazheve 8x8. Nëse nuk jeni të njohur me algjebrën lineare, kjo do të thotë se çdo imazh 8x8 mund të bëhet nga këto 64 modele. DCT është procesi i ndarjes së imazheve në blloqe 8x8 dhe konvertimit të secilit bllok në një kombinim të këtyre 64 koeficientëve.

Duket si magji që çdo imazh mund të përbëhet nga 64 modele specifike. Sidoqoftë, kjo është njësoj sikur të thuash se çdo vend në Tokë mund të përshkruhet me dy numra - gjerësi dhe gjatësi [duke treguar hemisferat / përafërsisht. përkth.]. Ne shpesh mendojmë për sipërfaqen e Tokës si dy-dimensionale, kështu që na duhen vetëm dy numra. Një imazh 8x8 ka 64 dimensione, kështu që na duhen 64 numra.

Nuk është ende e qartë se si kjo na ndihmon për sa i përket kompresimit. Nëse na duhen 64 numra për të përfaqësuar një imazh 8x8, pse do të ishte më mirë se vetëm ruajtja e 64 komponentëve të ndriçimit? Ne e bëjmë këtë për të njëjtën arsye që i shndërruam tre numra RGB në tre numra YCbCr: na lejon të heqim detaje delikate.

Është e vështirë të shihet saktësisht se çfarë detaj është hequr në këtë fazë, sepse JPEG aplikon DCT në blloqet 8x8. Sidoqoftë, askush nuk na ndalon ta zbatojmë atë në të gjithë pamjen. Ja se si duket DCT për komponentin Y të aplikuar në të gjithë foton:

Si funksionon formati JPEG

Më shumë se 60 numra mund të hiqen nga fundi pa pothuajse asnjë ndryshim të dukshëm në foto.

Si funksionon formati JPEG

Megjithatë, vini re se nëse zero pesë numrat e parë, ndryshimi do të jetë i dukshëm.

Si funksionon formati JPEG

Numrat në fillim përfaqësojnë ndryshime me frekuencë të ulët në imazh, të cilat sytë tanë i kapin më së miri. Numrat drejt fundit tregojnë ndryshime në frekuencat e larta që janë më të vështira për t'u vërejtur. Për të "shikuar atë që syri nuk mund të shohë", ne mund t'i izolojmë këto detaje me frekuencë të lartë duke zeruar 5000 numrat e parë.

Si funksionon formati JPEG

Ne shohim të gjitha zonat e imazhit ku ndodh ndryshimi më i madh nga piksel në piksel. Bien në sy sytë e maces, mustaqet e tij, batanija dhe hijet në këndin e poshtëm majtas. Mund të shkoni më tej duke zeruar 10 numrat e parë:

Si funksionon formati JPEG

20 000:

Si funksionon formati JPEG

40 000:

Si funksionon formati JPEG

60 000:

Si funksionon formati JPEG

Këto detaje me frekuencë të lartë hiqen nga JPEG gjatë fazës së kompresimit. Nuk ka humbje në konvertimin e ngjyrave në koeficientët DCT. Humbja ndodh në hapin e kampionimit, ku hiqen vlerat me frekuencë të lartë ose afër zeros. Kur ulni cilësinë e ruajtjes JPEG, programi rrit pragun për numrin e vlerave të hequra, gjë që zvogëlon madhësinë e skedarit, por e bën figurën më të pikselezuar. Kjo është arsyeja pse imazhi në seksionin e parë, i cili ishte 57 herë më i vogël, dukej kështu. Çdo bllok 8x8 përfaqësohej nga shumë më pak koeficientë DCT krahasuar me versionin me cilësi më të lartë.

Ju mund të krijoni një efekt kaq të lezetshëm si transmetimi gradual i imazheve. Mund të shfaqni një foto të paqartë që bëhet gjithnjë e më e detajuar ndërsa shkarkohen gjithnjë e më shumë koeficientë.

Këtu, vetëm për argëtim, është ajo që merrni duke përdorur vetëm 24 numra:

Si funksionon formati JPEG

Ose vetëm 5000:

Si funksionon formati JPEG

Shumë e paqartë, por disi e dallueshme!

3. Run gjatësinë e kodimit, delta dhe Huffman

Deri më tani, të gjitha fazat e kompresimit kanë qenë me humbje. Faza e fundit, përkundrazi, vazhdon pa humbje. Nuk fshin informacionin, por zvogëlon ndjeshëm madhësinë e skedarit.

Si mund të kompresoni diçka pa hedhur informacione? Imagjinoni se si do të përshkruanim një drejtkëndësh të thjeshtë të zi 700 x 437.

JPEG përdor 5000 numra për këtë, por mund të arrihen rezultate shumë më të mira. A mund të imagjinoni një skemë kodimi që do të përshkruante një imazh të tillë në sa më pak bajt të jetë e mundur?

Skema minimale që mund të krijoja përdor katër: tre për të përfaqësuar një ngjyrë dhe një e katërt për të treguar sa piksel ka ajo ngjyrë. Ideja e përfaqësimit të vlerave të përsëritura në këtë mënyrë të kondensuar quhet kodim në gjatësi. Është pa humbje sepse ne mund t'i rivendosim të dhënat e koduara në formën e tyre origjinale.

Një skedar JPEG me një drejtkëndësh të zi është shumë më i madh se 4 bajt - mbani mend se në nivelin DCT, kompresimi aplikohet në blloqe pikselësh 8x8. Prandaj, së paku, na duhet një koeficient DCT për çdo 64 piksele. Ne kemi nevojë për një sepse në vend që të ruajmë një koeficient DCT të ndjekur nga 63 zero, kodimi i gjatësisë së ekzekutimit na lejon të ruajmë një numër dhe të tregojmë se "të gjithë të tjerët janë zero".

Kodimi Delta është një teknikë në të cilën çdo bajt përmban një ndryshim nga një vlerë, në vend të një vlerë absolute. Prandaj, redaktimi i disa bajteve ndryshon ngjyrën e të gjithë pikselëve të tjerë. Për shembull, në vend të ruajtjes

12 13 14 14 14 13 13 14

Mund të fillojmë me 12 dhe më pas thjesht të tregojmë se sa duhet të shtojmë ose zbresim për të marrë numrin tjetër. Dhe kjo sekuencë në kodimin delta merr formën:

12 1 1 0 0 -1 0 1

Të dhënat e konvertuara nuk janë më të vogla se të dhënat origjinale, por është më e lehtë t'i kompresosh ato. Aplikimi i kodimit delta përpara kodimit të gjatësisë së ekzekutimit mund të ndihmojë shumë, ndërkohë që është ende kompresim pa humbje.

Kodimi Delta është një nga teknikat e pakta të përdorura jashtë blloqeve 8x8. Nga 64 koeficientët DCT, një është thjesht një funksion valor konstant (ngjyrë të ngurtë). Ai përfaqëson ndriçimin mesatar të çdo blloku për komponentët luma, ose bluzën mesatare për komponentët Cb, e kështu me radhë. Vlera e parë e çdo blloku DCT quhet vlera DC, dhe çdo vlerë DC është e koduar në delta në lidhje me ato të mëparshme. Prandaj, ndryshimi i shkëlqimit të bllokut të parë do të ndikojë në të gjitha blloqet.

Misteri i fundit mbetet: si e shkatërron tërësisht tablonë ndryshimi i njëjës? Deri më tani, nivelet e kompresimit nuk kanë pasur veti të tilla. Përgjigja qëndron në kokën JPEG. 500 bajtët e parë përmbajnë meta të dhëna për imazhin - gjerësi, lartësi, etj., dhe ne nuk kemi punuar ende me to.

Pa një kokë është pothuajse e pamundur (ose shumë e vështirë) të deshifrosh JPEG. Do të duket sikur po përpiqem t'ju përshkruaj foton dhe po filloj të shpik fjalë për të përcjellë përshtypjen time. Përshkrimi do të jetë ndoshta mjaft i ngjeshur, pasi unë mund të shpik fjalë pikërisht me kuptimin që dua të përcjell, por për të gjithë të tjerët nuk do të kenë kuptim.

Duket marrëzi, por kjo është pikërisht ajo që ndodh. Çdo imazh JPEG është i ngjeshur me kode specifike për të. Fjalori i kodit ruhet në kokë. Kjo teknikë quhet kodi Huffman dhe fjalori quhet tabela Huffman. Në kokë, tabela shënohet me dy bajt - 255 dhe më pas 196. Çdo komponent ngjyrë mund të ketë tabelën e vet.

Ndryshimet në tabela do të ndikojnë rrënjësisht çdo imazh. Një shembull i mirë është ndryshimi i rreshtit të 15-të në 1.

Si funksionon formati JPEG

Kjo ndodh sepse tabelat specifikojnë se si duhet të lexohen bitet individuale. Deri tani kemi punuar vetëm me numra binarë në formë dhjetore. Por kjo na fsheh faktin që nëse dëshironi të ruani numrin 1 në një bajt, ai do të duket si 00000001, pasi çdo bajt duhet të ketë saktësisht tetë bit, edhe nëse nevojitet vetëm një prej tyre.

Kjo është potencialisht një humbje e madhe e hapësirës nëse keni shumë numra të vegjël. Kodi Huffman është një teknikë që na lejon të relaksojmë këtë kërkesë që çdo numër duhet të zërë tetë bit. Kjo do të thotë se nëse shihni dy bajt:

234 115

Pastaj, në varësi të tabelës Huffman, këta mund të jenë tre numra. Për t'i nxjerrë ato, së pari duhet t'i ndani në pjesë individuale:

11101010 01110011

Më pas shikojmë tabelën për të kuptuar se si t'i grupojmë ato. Për shembull, ky mund të jetë gjashtë bitët e parë, (111010), ose 58 në dhjetor, të ndjekur nga pesë bit (10011), ose 19, dhe në fund katër bitet e fundit (0011), ose 3.

Prandaj, është shumë e vështirë të kuptohen bajtet në këtë fazë të kompresimit. Bajt nuk përfaqësojnë atë që duken. Nuk do të hyj në detaje të punës me tabelën në këtë artikull, por materiale për këtë çështje në internet mjaft mirë.

Një truk interesant që mund të bëni me këtë njohuri është të ndani kokën nga JPEG dhe ta ruani atë veçmas. Në fakt, rezulton se vetëm ju mund ta lexoni skedarin. Facebook e bën këtë për t'i bërë skedarët edhe më të vegjël.

Çfarë tjetër mund të bëhet është të ndryshohet paksa tabela Huffman. Për të tjerët do të duket si një foto e thyer. Dhe vetëm ju do të dini mënyrën magjike për ta rregulluar atë.

Le të përmbledhim: atëherë çfarë nevojitet për të deshifruar JPEG? E nevojshme:

  1. Ekstraktoni tabelën(t) Huffman nga kreu dhe deshifroni bitet.
  2. Ekstraktoni koeficientët diskretë të transformimit të kosinusit për secilën përbërës të ngjyrës dhe ndriçimit për çdo bllok 8x8, duke kryer transformime të gjatësisë së kundërt dhe të kodimit delta.
  3. Kombinoni kosinuset bazuar në koeficientët për të marrë vlera pikselësh për çdo bllok 8x8.
  4. Shkallëzimi i komponentëve të ngjyrave nëse është kryer nën-kampionimi (ky informacion është në kokë).
  5. Konvertoni vlerat që rezultojnë YCbCr për çdo piksel në RGB.
  6. Shfaqni imazhin në ekran!

Punë serioze për të parë thjesht një foto me një mace! Megjithatë, ajo që më pëlqen në lidhje me të është se tregon se sa është teknologjia JPEG e përqendruar te njeriu. Ai bazohet në veçoritë e perceptimit tonë, duke na lejuar të arrijmë kompresim shumë më të mirë se teknologjitë konvencionale. Dhe tani që kuptojmë se si funksionon JPEG, mund të imagjinojmë se si këto teknologji mund të transferohen në fusha të tjera. Për shembull, kodimi delta në video mund të sigurojë një reduktim të ndjeshëm në madhësinë e skedarit, pasi shpesh ka zona të tëra që nuk ndryshojnë nga korniza në kornizë (për shembull, sfondi).

Kodi i përdorur në artikull, është i hapur dhe përmban udhëzime se si t'i zëvendësoni fotografitë me tuajat.

Burimi: www.habr.com

Shto një koment