Kā darbojas JPEG formāts

JPEG attēli ir visuresoÅ”i mÅ«su digitālajā dzÄ«vē, taču aiz Ŕī izpratnes finiera slēpjas algoritmi, kas noņem detaļas, kas nav uztveramas cilvēka acij. Rezultāts ir augstākā vizuālā kvalitāte mazākajā faila izmērā ā€“ bet kā tieÅ”i tas viss darbojas? PaskatÄ«simies, ko tieÅ”i mÅ«su acis neredz!

Kā darbojas JPEG formāts

Ir viegli uztvert iespēju nosÅ«tÄ«t fotoattēlu draugam un neuztraukties par to, kādu ierÄ«ci, pārlÅ«kprogrammu vai operētājsistēmu viņi izmanto, taču tas ne vienmēr bija tā. LÄ«dz 1980. gadu sākumam datori varēja uzglabāt un parādÄ«t digitālos attēlus, taču bija daudz konkurējoÅ”u ideju par labāko veidu, kā to izdarÄ«t. JÅ«s nevarat vienkārÅ”i nosÅ«tÄ«t attēlu no viena datora uz otru un cerēt, ka tas darbosies.

Lai atrisinātu Å”o problēmu, 1986. gadā tika sapulcināta ekspertu komiteja no visas pasaules ar nosaukumu "Apvienotā fotogrāfijas ekspertu grupaĀ» (Joint Photography Experts Group, JPEG), kas dibināta, kopÄ«gi strādājot starp Starptautisko standartizācijas organizāciju (ISO) un Starptautisko elektrotehnisko komisiju (IEC), divām starptautiskām standartizācijas organizācijām, kuru galvenā mÄ«tne atrodas Ženēvā, Å veicē.

Cilvēku grupa JPEG izveidoja JPEG digitālo attēlu saspieÅ”anas standartu 1992. gadā. Ikviens, kurÅ” izmantojis internetu, droÅ”i vien ir saskāries ar JPEG kodētiem attēliem. Å is ir visizplatÄ«tākais attēlu kodÄ“Å”anas, sÅ«tÄ«Å”anas un uzglabāŔanas veids. No tÄ«mekļa lapām lÄ«dz e-pastam un sociālajiem saziņas lÄ«dzekļiem JPEG tiek izmantots miljardiem reižu dienā ā€” praktiski katru reizi, kad mēs skatāmies attēlu tieÅ”saistē vai nosÅ«tām to. Bez JPEG tÄ«meklis bÅ«tu mazāk krāsains, lēnāks un, iespējams, tajā bÅ«tu mazāk kaÄ·u attēlu!

Å is raksts ir par to, kā atÅ”ifrēt JPEG attēlu. Citiem vārdiem sakot, kas ir nepiecieÅ”ams, lai datorā saglabātos saspiestos datus pārvērstu attēlā, kas parādās ekrānā. To ir vērts zināt ne tikai tāpēc, ka ir svarÄ«gi izprast katru dienu lietojamo tehnoloÄ£iju, bet arÄ« tāpēc, ka, atbloķējot saspieÅ”anas lÄ«meņus, mēs uzzinām vairāk par uztveri un redzi un uz kādām detaļām mÅ«su acis ir visjutÄ«gākās.

Turklāt Ŕādā veidā spēlēties ar attēliem ir ļoti interesanti.

Kā darbojas JPEG formāts

Skatos iekŔā JPEG

Datorā viss tiek saglabāts kā bināro skaitļu secÄ«ba. Parasti Å”ie biti, nulles un vieninieki, tiek grupēti grupās pa astoņiem, lai veidotu baitus. Atverot JPEG attēlu datorā, kaut kam (pārlÅ«kam, operētājsistēmai, kaut kam citam) ir jāatÅ”ifrē baiti, atjaunojot sākotnējo attēlu kā krāsu sarakstu, ko var parādÄ«t.

Ja lejupielādējat Å”o saldo kaÄ·a fotogrāfija un atveriet to teksta redaktorā, jÅ«s redzēsiet virkni nesakarÄ«gu rakstzÄ«mju.

Kā darbojas JPEG formāts
Å eit es izmantoju Notepad++, lai pārbaudÄ«tu faila saturu, jo parastie teksta redaktori, piemēram, Notepad operētājsistēmā Windows, pēc saglabāŔanas sabojās bināro failu un tas vairs neatbilst JPEG formātam.

Attēla atvērÅ”ana tekstapstrādes programmā mulsina datoru, tāpat kā jÅ«s sajaucat smadzenes, kad berzējat acis un sākat redzēt krāsu plankumus!

Å Ä«s redzamās vietas ir zināmas kā fosfēni, un tie nav gaismas stimula vai prāta radÄ«tas halucinācijas rezultāts. Tie rodas tāpēc, ka jÅ«su smadzenes domā, ka jebkuri elektriskie signāli redzes nervos pārraida informāciju par gaismu. Smadzenēm ir jāizdara Å”ie pieņēmumi, jo nevar zināt, vai signāls ir skaņa, vÄ«zija vai kas cits. Visi Ä·ermeņa nervi pārraida tieÅ”i tādus paÅ”us elektriskos impulsus. Izdarot spiedienu uz acÄ«m, jÅ«s sÅ«tāt signālus, kas nav vizuāli, bet aktivizē acs receptorus, kurus jÅ«su smadzenes interpretē - Å”ajā gadÄ«jumā nepareizi - kā kaut ko vizuālu. JÅ«s varat burtiski redzēt spiedienu!

Ir smieklÄ«gi domāt par to, cik datori ir lÄ«dzÄ«gi smadzenēm, taču tā ir arÄ« noderÄ«ga lÄ«dzÄ«ba, lai ilustrētu, cik lielā mērā datu nozÄ«me - neatkarÄ«gi no tā, vai tie tiek pārnesti caur Ä·ermeni ar nerviem vai saglabāti datorā - ir atkarÄ«ga no to interpretācijas. Visi binārie dati sastāv no 0 un 1 ā€” pamata komponentiem, kas var nodot jebkāda veida informāciju. JÅ«su dators bieži izdomā, kā tos interpretēt, izmantojot norādes, piemēram, failu paplaÅ”inājumus. Tagad mēs piespiežam tos interpretēt kā tekstu, jo tas ir tas, ko teksta redaktors sagaida.

Lai saprastu, kā atÅ”ifrēt JPEG, mums ir jāredz paÅ”i sākotnējie signāli - binārie dati. To var izdarÄ«t, izmantojot heksadecimālo redaktoru vai tieÅ”i uz oriÄ£inālā raksta tÄ«mekļa lapa! Ir attēls, kuram blakus teksta laukā ir visi tā baiti (izņemot galveni), kas parādÄ«ti decimāldaļā. Varat tos mainÄ«t, un skripts tiks atkārtoti kodēts un lidojuma laikā izveidos jaunu attēlu.

Kā darbojas JPEG formāts

Spēlējot ar Å”o redaktoru, jÅ«s varat daudz uzzināt. Piemēram, vai varat pateikt, kādā secÄ«bā pikseļi tiek glabāti?

DÄ«vainākais Å”ajā piemērā ir tas, ka dažu skaitļu maiņa vispār neietekmē attēlu, bet, piemēram, ja pirmajā rindā ciparu 17 nomainÄ«sit ar 0, fotogrāfija tiks pilnÄ«bā sabojāta!

Kā darbojas JPEG formāts

Citas izmaiņas, piemēram, 7. rindas 1988 aizstāŔana ar numuru 254, maina krāsu, bet tikai nākamajiem pikseļiem.

Kā darbojas JPEG formāts

VarbÅ«t dÄ«vainākais ir tas, ka daži cipari maina ne tikai attēla krāsu, bet arÄ« formu. Mainiet 70 12. rindā uz 2 un skatiet attēla augŔējo rindu, lai redzētu, ko es domāju.

Kā darbojas JPEG formāts

Un neatkarÄ«gi no tā, kādu JPEG attēlu jÅ«s izmantojat, jÅ«s vienmēr atradÄ«sit Å”os noslēpumainos Å”aha modeļus, rediģējot baitus.

Spēlējot ar redaktoru, ir grÅ«ti saprast, kā no Å”iem baitiem tiek atjaunots fotoattēls, jo JPEG saspieÅ”ana sastāv no trÄ«s dažādām tehnoloÄ£ijām, kas tiek lietotas secÄ«gi pa lÄ«meņiem. Mēs izpētÄ«sim katru atseviŔķi, lai atklātu noslēpumaino uzvedÄ«bu, ko mēs redzam.

TrÄ«s JPEG saspieÅ”anas lÄ«meņi:

  1. Krāsu apakŔizlase.
  2. Diskrētā kosinusa transformācija un izlase.
  3. Run garuma kodējums, delta Šø Hufmens

Lai sniegtu priekÅ”statu par saspieÅ”anas apjomu, ņemiet vērā, ka iepriekÅ” redzamajā attēlā ir 79 819 skaitļi jeb aptuveni 79 KB. Ja mēs to saglabātu bez saspieÅ”anas, katram pikselim bÅ«tu nepiecieÅ”ami trÄ«s skaitļi - sarkanajam, zaļajam un zilajam komponentam. Tas bÅ«tu 917 700 numuri jeb aptuveni. 917 KB. JPEG saspieÅ”anas rezultātā gala fails tika samazināts vairāk nekā 10 reizes!

PatiesÄ«bā Å”o attēlu var saspiest daudz vairāk. Zemāk ir divi attēli blakus - labajā pusē esoÅ”ais fotoattēls ir saspiests lÄ«dz 16 KB, tas ir, 57 reizes mazāks nekā nesaspiestā versija!

Kā darbojas JPEG formāts

Ieskatoties uzmanÄ«gi, jÅ«s redzēsiet, ka Å”ie attēli nav identiski. Abi ir attēli ar JPEG saspieÅ”anu, bet labajam ir daudz mazāks apjoms. Tas arÄ« izskatās nedaudz sliktāk (paskatieties uz fona krāsu kvadrātiem). Tāpēc JPEG tiek saukta arÄ« par zudumu saspieÅ”anu; SaspieÅ”anas procesā attēls mainās un zaudē dažas detaļas.

1. Krāsu apakŔizlase

Å eit ir attēls, kuram ir piemērots tikai pirmais saspieÅ”anas lÄ«menis.

Kā darbojas JPEG formāts
(InteraktÄ«vā versija ā€” in oriÄ£ināls raksti). Noņemot vienu numuru, tiek iznÄ«cinātas visas krāsas. Tomēr, ja tiek noņemti tieÅ”i seÅ”i skaitļi, tas praktiski neietekmē attēlu.

Tagad skaitļus ir nedaudz vieglāk atÅ”ifrēt. Å is ir gandrÄ«z vienkārÅ”s krāsu saraksts, kurā katrs baits maina tieÅ”i vienu pikseļu, bet tajā paŔā laikā tas jau ir uz pusi mazāks nekā nesaspiestā attēla izmērs (kas Å”ajā samazinātajā izmērā aizņemtu ap 300 KB). Vai varat uzminēt, kāpēc?

Var redzēt, ka Å”ie skaitļi neatspoguļo standarta sarkano, zaļo un zilo komponentu, jo, ja visus skaitļus aizstāsim ar nullēm, mēs iegÅ«sim zaļu attēlu (nevis baltu).

Kā darbojas JPEG formāts

Tas ir tāpēc, ka Å”ie baiti apzÄ«mē Y (spilgtums),

Kā darbojas JPEG formāts

Cb (relatīvais zilums),

Kā darbojas JPEG formāts

un Cr (relatīvais apsārtums) attēli.

Kā darbojas JPEG formāts

Kāpēc neizmantot RGB? Galu galā Ŕādi darbojas lielākā daļa mÅ«sdienu ekrānu. JÅ«su monitors var attēlot jebkuru krāsu, tostarp sarkanu, zaļu un zilu, ar atŔķirÄ«gu intensitāti katram pikselim. Balto krāsu iegÅ«st, ieslēdzot visus trÄ«s ar pilnu spilgtumu, un melno, tos izslēdzot.

Kā darbojas JPEG formāts

Tas ir arÄ« ļoti lÄ«dzÄ«gs tam, kā darbojas cilvēka acs. Krāsu receptorus mÅ«su acÄ«s sauc par "konusiā€œ, un ir sadalÄ«ti trÄ«s veidos, no kuriem katrs ir jutÄ«gāks pret sarkanu, zaļu vai zilu krāsu [S veida konusi ir jutÄ«gi violeti zilā krāsā (S no angļu valodas Short - Ä«sviļņu spektrs), M -tips - zaļi-dzeltenajā (M no angļu valodas Medium - vidējais vilnis) un L-tips - dzeltensarkanajā (L no angļu valodas Long - long-wave) spektra daļās. Å o trÄ«s veidu konusu (un stieņu, kas ir jutÄ«gi smaragdzaļajā spektra daļā) klātbÅ«tne sniedz cilvēkam krāsu redzi. / apm. tulk.]. NÅ«jas, cita veida fotoreceptoru mÅ«su acÄ«s, spēj noteikt spilgtuma izmaiņas, taču tas ir daudz jutÄ«gāks pret krāsām. MÅ«su acÄ«m ir aptuveni 120 miljoni stieņu un tikai 6 miljoni konusu.

Tāpēc mÅ«su acis daudz labāk nosaka spilgtuma izmaiņas nekā krāsas izmaiņas. Ja atdala krāsu no spilgtuma, varat noņemt nedaudz krāsas, un neviens neko nepamanÄ«s. Krāsu apakÅ”izlase ir process, kurā attēla krāsu komponenti tiek attēloti ar zemāku izŔķirtspēju nekā spilgtuma komponenti. IepriekÅ” minētajā piemērā katram pikselim ir tieÅ”i viens Y komponents, un katrai atseviŔķai četru pikseļu grupai ir tieÅ”i viens Cb un viens Cr komponents. Tāpēc attēlā ir četras reizes mazāk krāsu informācijas nekā oriÄ£inālā.

YCbCr krāsu telpa tiek izmantota ne tikai JPEG formātā. Sākotnēji tas tika izgudrots 1938. gadā televÄ«zijas programmām. Ne visiem ir krāsu televizors, tāpēc krāsu un spilgtuma atdalÄ«Å”ana ļāva visiem iegÅ«t vienādu signālu, un televizori bez krāsām vienkārÅ”i izmantoja tikai spilgtuma komponentu.

Tātad viena numura noņemÅ”ana no redaktora pilnÄ«bā sabojā visas krāsas. Komponenti tiek glabāti formā Y Y Y Y Cb Cr (patiesÄ«bā, ne obligāti tādā secÄ«bā - uzglabāŔanas pasÅ«tÄ«jums ir norādÄ«ts faila galvenē). Noņemot pirmo skaitli, Cb pirmā vērtÄ«ba tiks uztverta kā Y, Cr kā Cb, un kopumā jÅ«s iegÅ«sit domino efektu, kas pārslēdz visas attēla krāsas.

JPEG specifikācija neliek jums izmantot YCbCr. Bet lielākā daļa failu to izmanto, jo tas rada labākus samazinātus attēlus nekā RGB. Bet jums nav jāpieņem mans vārds. Skatieties tālāk esoÅ”ajā tabulā, kā katra atseviŔķa komponenta apakÅ”iztverÅ”ana izskatÄ«sies gan RGB, gan YCbCr.

Kā darbojas JPEG formāts
(InteraktÄ«vā versija ā€” in oriÄ£ināls raksti).

Zilās krāsas noņemÅ”ana nav tik pamanāma kā sarkanā vai zaļā. Tas ir tāpēc, ka jÅ«su acÄ«s ir seÅ”i miljoni konusu, apmēram 64% ir jutÄ«gi pret sarkanu, 32% pret zaļu un 2% pret zilu.

Vislabāk ir redzama Y komponenta izlases samazināŔana (apakŔējā kreisajā pusē). Pat nelielas izmaiņas ir pamanāmas.

Attēla konvertÄ“Å”ana no RGB uz YCbCr nesamazina faila lielumu, taču atvieglo mazāk redzamu detaļu atraÅ”anu, kuras var noņemt. Zaudējumu saspieÅ”ana notiek otrajā posmā. Tā pamatā ir ideja par datu uzrādÄ«Å”anu saspiežamākā formā.

2. Diskrētā kosinusa transformācija un izlase

Å is saspieÅ”anas lÄ«menis lielākoties ir JPEG. Pēc krāsu konvertÄ“Å”anas YCbCr, komponenti tiek saspiesti atseviŔķi, lai mēs varētu koncentrēties tikai uz Y komponentu. Un lÅ«k, kā izskatās Y komponenta baiti pēc Ŕī slāņa uzklāŔanas.

Kā darbojas JPEG formāts
(InteraktÄ«vā versija ā€” in oriÄ£ināls raksti). InteraktÄ«vajā versijā, noklikŔķinot uz pikseļa, redaktors tiek ritināts lÄ«dz rindai, kas to attēlo. Mēģiniet noņemt skaitļus no beigām vai pievienot noteiktam skaitlim dažas nulles.

No pirmā acu uzmetiena izskatās, ka kompresija ir ļoti slikta. Attēlā ir 100 000 pikseļu, un ir nepiecieÅ”ami 102 400 skaitļi, lai attēlotu to spilgtumu (Y komponenti) ā€” tas ir sliktāk nekā neko nesaspiest!

Tomēr ņemiet vērā, ka lielākā daļa no Å”iem skaitļiem ir nulle. Turklāt visas Ŕīs nulles rindu beigās var noņemt, nemainot attēlu. PalikuÅ”i aptuveni 26 000 numuru, un tas ir gandrÄ«z 4 reizes mazāk!

Å ajā lÄ«menÄ« ir ietverts Å”aha modeļu noslēpums. AtŔķirÄ«bā no citiem efektiem, ko esam redzējuÅ”i, Å”o rakstu izskats nav kļūme. Tie ir visa attēla veidoÅ”anas bloki. Katrā redaktora rindā ir precÄ«zi 64 skaitļi, diskrētās kosinusa transformācijas (DCT) koeficienti, kas atbilst 64 unikālu modeļu intensitātei.

Šie modeļi tiek veidoti, pamatojoties uz kosinusa diagrammu. Lūk, kā daži no tiem izskatās:

Kā darbojas JPEG formāts
8 no 64 koeficientiem

Zemāk ir attēls, kurā parādīti visi 64 modeļi.

Kā darbojas JPEG formāts
(InteraktÄ«vā versija ā€” in oriÄ£ināls raksti).

Å ie modeļi ir Ä«paÅ”i svarÄ«gi, jo tie veido 8x8 attēlu pamatu. Ja jÅ«s nepazÄ«stat lineāro algebru, tas nozÄ«mē, ka no Å”iem 8 modeļiem var izveidot jebkuru 8x64 attēlu. DCT ir process, kurā attēlus sadala 8x8 blokos un katru bloku pārvērÅ” Å”o 64 koeficientu kombinācijā.

Å Ä·iet maÄ£iski, ka jebkuru attēlu var veidot no 64 konkrētiem rakstiem. Taču tas ir tas pats, kas teikt, ka jebkuru vietu uz Zemes var raksturot ar diviem cipariem ā€“ platumu un garumu [norāda puslodes / apm. tulk.]. Mēs bieži domājam par Zemes virsmu kā divdimensiju, tāpēc mums ir nepiecieÅ”ami tikai divi skaitļi. 8x8 attēlam ir 64 izmēri, tāpēc mums ir nepiecieÅ”ami 64 cipari.

Vēl nav skaidrs, kā tas mums palÄ«dz saspieÅ”anas ziņā. Ja mums ir nepiecieÅ”ami 64 skaitļi, lai attēlotu 8x8 attēlu, kāpēc tas bÅ«tu labāk nekā tikai 64 spilgtuma komponentu saglabāŔana? Mēs to darām tā paÅ”a iemesla dēļ, ka trÄ«s RGB skaitļus pārvērtām trÄ«s YCbCr skaitļos: tas ļauj noņemt smalkas detaļas.

Å ajā posmā ir grÅ«ti precÄ«zi redzēt, kura detaļa ir noņemta, jo JPEG 8 x 8 blokiem izmanto DCT. Taču neviens mums neliedz to attiecināt uz visu attēlu. LÅ«k, kā DCT izskatās Y komponentam, kas tiek lietots visam attēlam:

Kā darbojas JPEG formāts

Vairāk nekā 60 000 skaitļu var noņemt no beigām, praktiski bez manāmām izmaiņām fotoattēlā.

Kā darbojas JPEG formāts

Tomēr ņemiet vērā, ka, ja mēs noņemsim pirmos piecus skaitļus, atŔķirÄ«ba bÅ«s acÄ«mredzama.

Kā darbojas JPEG formāts

Cipari sākumā attēlo zemas frekvences izmaiņas attēlā, kuras mÅ«su acis uztver vislabāk. Skaitļi beigās norāda uz izmaiņām augstajās frekvencēs, kuras ir grÅ«tāk pamanÄ«t. Lai "redzētu to, ko acs neredz", mēs varam izolēt Ŕīs augstfrekvences detaļas, atceļot pirmos 5000 skaitļus.

Kā darbojas JPEG formāts

Mēs redzam visus attēla apgabalus, kuros notiek vislielākās izmaiņas no pikseļa uz pikseļu. Izceļas kaÄ·a acis, Å«sas, frotē sega un ēnas apakŔējā kreisajā stÅ«rÄ«. Varat iet tālāk, atceļot pirmos 10 000 skaitļus:

Kā darbojas JPEG formāts

20 000:

Kā darbojas JPEG formāts

40 000:

Kā darbojas JPEG formāts

60 000:

Kā darbojas JPEG formāts

Å Ä«s augstfrekvences detaļas tiek noņemtas, izmantojot JPEG kompresijas stadijā. PārvērÅ”ot krāsas DCT koeficientos, nav nekādu zaudējumu. Zudumi rodas paraugu ņemÅ”anas posmā, kur tiek noņemtas augstfrekvences vai nullei tuvu vērtÄ«bas. Samazinot JPEG saglabāŔanas kvalitāti, programma palielina noņemto vērtÄ«bu skaita slieksni, kas samazina faila lielumu, bet padara attēlu vairāk pikseļu. Tāpēc attēls pirmajā sadaļā, kas bija 57 reizes mazāks, izskatÄ«jās Ŕādi. Katrs 8x8 bloks tika attēlots ar daudz mazāk DCT koeficientu, salÄ«dzinot ar augstākas kvalitātes versiju.

Varat izveidot tik forÅ”u efektu kā pakāpeniska attēlu straumÄ“Å”ana. Varat parādÄ«t izplÅ«duÅ”u attēlu, kas kļūst arvien detalizētāks, jo tiek lejupielādēti arvien vairāk koeficientu.

Lūk, tikai prieka pēc, ko jūs iegūstat, izmantojot tikai 24 000 ciparu:

Kā darbojas JPEG formāts

Vai tikai 5000:

Kā darbojas JPEG formāts

Ļoti miglaini, bet kaut kā atpazīstami!

3. Palaist garuma kodējumu, delta un Huffman

LÄ«dz Å”im visi saspieÅ”anas posmi ir bijuÅ”i ar zaudējumiem. Pēdējais posms, gluži pretēji, norit bez zaudējumiem. Tas neizdzÄ“Å” informāciju, bet ievērojami samazina faila lielumu.

Kā var kaut ko saspiest, neizmetot informāciju? Iedomājieties, kā mēs aprakstÄ«tu vienkārÅ”u melnu taisnstÅ«ri 700 x 437.

JPEG Å”im nolÅ«kam tiek izmantoti 5000 skaitļi, taču var sasniegt daudz labākus rezultātus. Vai varat iedomāties kodÄ“Å”anas shēmu, kas Ŕādu attēlu aprakstÄ«tu pēc iespējas mazākā baitā?

Minimālā shēma, ko es varētu nākt klajā, izmanto četrus: trÄ«s, lai attēlotu krāsu, un ceturtā, lai norādÄ«tu, cik pikseļu ir Å”ai krāsai. Ideju attēlot atkārtotas vērtÄ«bas Ŕādā saÄ«sinātā veidā sauc par izpildes garuma kodÄ“Å”anu. Tas ir bez zudumiem, jo ā€‹ā€‹mēs varam atjaunot kodētos datus to sākotnējā formā.

JPEG fails ar melnu taisnstÅ«ri ir daudz lielāks par 4 baitiem ā€” atcerieties, ka DCT lÄ«menÄ« saspieÅ”ana tiek piemērota 8x8 pikseļu blokiem. Tāpēc mums ir nepiecieÅ”ams vismaz viens DCT koeficients katriem 64 pikseļiem. Mums tas ir vajadzÄ«gs, jo tā vietā, lai saglabātu vienu DCT koeficientu, kam seko 63 nulles, darbÄ«bas garuma kodÄ“Å”ana ļauj mums saglabāt vienu skaitli un norādÄ«t, ka "visi pārējie ir nulles".

Delta kodÄ“Å”ana ir metode, kurā katrs baits satur atŔķirÄ«bu no kādas vērtÄ«bas, nevis absolÅ«to vērtÄ«bu. Tāpēc, rediģējot noteiktus baitus, tiek mainÄ«ta visu pārējo pikseļu krāsa. Piemēram, glabāŔanas vietā

12 13 14 14 14 13 13 14

Mēs varētu sākt ar 12 un tad vienkārÅ”i norādÄ«t, cik daudz mums jāsaskaita vai jāatņem, lai iegÅ«tu nākamo skaitli. Un Ŕī secÄ«ba delta kodÄ“Å”anā izpaužas Ŕādā formā:

12 1 1 0 0 -1 0 1

Konvertētie dati nav mazāki par sākotnējiem datiem, taču tos ir vieglāk saspiest. Delta kodējuma lietoÅ”ana pirms darbÄ«bas ilguma kodÄ“Å”anas var ievērojami palÄ«dzēt, vienlaikus saglabājot bezzudumu saspieÅ”anu.

Delta kodÄ“Å”ana ir viena no nedaudzajām metodēm, ko izmanto ārpus 8x8 blokiem. No 64 DCT koeficientiem viens ir vienkārÅ”i nemainÄ«ga viļņa funkcija (vienkrāsaina). Tas atspoguļo katra bloka vidējo spilgtumu luma komponentiem vai vidējo zilumu Cb komponentiem utt. Katra DCT bloka pirmo vērtÄ«bu sauc par lÄ«dzstrāvas vērtÄ«bu, un katra lÄ«dzstrāvas vērtÄ«ba ir delta kodēta attiecÄ«bā pret iepriekŔējām. Tāpēc pirmā bloka spilgtuma maiņa ietekmēs visus blokus.

Pēdējais noslēpums paliek: kā vienskaitļa maiņa pilnÄ«bā sabojā visu attēlu? LÄ«dz Å”im kompresijas lÄ«meņiem Ŕādas Ä«paŔības nebija. Atbilde ir JPEG galvenē. Pirmie 500 baiti satur metadatus par attēlu ā€“ platumu, augstumu utt., un mēs ar tiem vēl neesam strādājuÅ”i.

Bez galvenes ir gandrÄ«z neiespējami (vai ļoti grÅ«ti) atÅ”ifrēt JPEG. Å Ä·iet, ka es mēģinātu jums aprakstÄ«t attēlu, un es sāku izdomāt vārdus, lai nodotu savu iespaidu. Iespējams, apraksts bÅ«s diezgan saÄ«sināts, jo es varu izdomāt vārdus ar tieÅ”i tādu nozÄ«mi, kādu vēlos nodot, bet visiem pārējiem tie nebÅ«s jēgas.

Tas izklausās muļķīgi, bet tieÅ”i tā notiek. Katrs JPEG attēls tiek saspiests ar tam raksturÄ«giem kodiem. Kodu vārdnÄ«ca tiek saglabāta galvenē. Å o paņēmienu sauc par Hafmena kodu, un vārdu krājumu sauc par Hafmana tabulu. Galvenē tabula ir atzÄ«mēta ar diviem baitiem - 255 un pēc tam 196. Katrai krāsu sastāvdaļai var bÅ«t sava tabula.

Tabulu izmaiņas radikāli ietekmēs jebkuru attēlu. Labs piemērs ir mainīt 15. rindiņu uz 1.

Kā darbojas JPEG formāts

Tas notiek tāpēc, ka tabulās ir norādÄ«ts, kā atseviŔķi biti jālasa. LÄ«dz Å”im mēs esam strādājuÅ”i tikai ar binārajiem skaitļiem decimāldaļā. Bet tas slēpj no mums to, ka, ja vēlaties baitā saglabāt skaitli 1, tas izskatÄ«sies kā 00000001, jo katram baitam jābÅ«t tieÅ”i astoņiem bitiem, pat ja nepiecieÅ”ams tikai viens no tiem.

Ja jums ir daudz mazu skaitļu, tas, iespējams, ir liels vietas izŔķieÅ”ana. Huffman kods ir paņēmiens, kas ļauj atvieglot Å”o prasÄ«bu, ka katram skaitlim ir jāaizņem astoņi biti. Tas nozÄ«mē, ka, ja redzat divus baitus:

234 115

Tad atkarÄ«bā no Huffman tabulas tie varētu bÅ«t trÄ«s skaitļi. Lai tos iegÅ«tu, vispirms tie jāsadala atseviŔķos bitos:

11101010 01110011

Tad mēs skatāmies uz tabulu, lai saprastu, kā tos grupēt. Piemēram, tie varētu bÅ«t pirmie seÅ”i biti (111010) vai 58 decimāldaļās, kam seko pieci biti (10011) vai 19 un visbeidzot pēdējie četri biti (0011) vai 3.

Tāpēc Å”ajā saspieÅ”anas posmā ir ļoti grÅ«ti saprast baitus. Baiti neatspoguļo to, kas Ŕķiet. Å ajā rakstā es neiedziļināŔos detaļās par darbu ar tabulu, bet materiāli par Å”o jautājumu tieÅ”saistē ir pietiekams.

Viens interesants triks, ko varat veikt, izmantojot Ŕīs zināŔanas, ir atdalÄ«t galveni no JPEG un saglabāt to atseviŔķi. Faktiski izrādās, ka tikai jÅ«s varat lasÄ«t failu. Facebook to dara, lai padarÄ«tu failus vēl mazākus.

Ko vēl var izdarīt, ir diezgan nedaudz mainīt Huffman tabulu. Citiem tas izskatīsies pēc salauztas bildes. Un tikai jūs zināt maģisko veidu, kā to novērst.

Apkoposim: kas ir nepiecieŔams JPEG atŔifrēŔanai? NepiecieŔams:

  1. Izņemiet Huffman tabulu(-as) no galvenes un atÅ”ifrējiet bitus.
  2. Izņemiet diskrētos kosinusa pārveidoÅ”anas koeficientus katrai krāsas un spilgtuma komponentei katram 8x8 blokam, veicot apgrieztas darbÄ«bas garuma un delta kodÄ“Å”anas transformācijas.
  3. Apvienojiet kosinusus, pamatojoties uz koeficientiem, lai iegūtu pikseļu vērtības katram 8x8 blokam.
  4. Mērogojiet krāsu komponentus, ja tika veikta apakÅ”izlase (Ŕī informācija ir galvenē).
  5. Konvertējiet iegūtās YCbCr vērtības katram pikselim uz RGB.
  6. Parādiet attēlu uz ekrāna!

Nopietns darbs, lai vienkārÅ”i noskatÄ«tos fotoattēlu ar kaÄ·i! Tomēr man tajā patÄ«k tas, ka tas parāda, cik JPEG tehnoloÄ£ija ir vērsta uz cilvēku. Tas ir balstÄ«ts uz mÅ«su uztveres Ä«patnÄ«bām, ļaujot sasniegt daudz labāku kompresiju nekā parastās tehnoloÄ£ijas. Un tagad, kad mēs saprotam, kā darbojas JPEG, mēs varam iedomāties, kā Ŕīs tehnoloÄ£ijas var pārnest uz citām jomām. Piemēram, delta kodējums video var ievērojami samazināt faila lielumu, jo bieži vien ir veseli apgabali, kas nemainās no kadra uz otru (piemēram, fons).

Rakstā izmantotais kods, ir atvērts, un tajā ir norādījumi par to, kā attēlus aizstāt ar saviem.

Avots: www.habr.com

Pievieno komentāru