JPEG formatuak nola funtzionatzen duen

JPEG irudiak nonahi daude gure bizitza digitalean, baina kontzientziaren kapa horren atzean giza begiak ikusi ezin dituen xehetasunak kentzen dituzten algoritmoak ezkutatzen dira. Emaitza ikusizko kalitate handiena da fitxategi-tamaina txikienean, baina nola funtzionatzen du zehazki? Ikus dezagun gure begiek zer ez duten ikusten!

JPEG formatuak nola funtzionatzen duen

Erraza da lagun bati argazki bat bidaltzeko eta zer gailu, arakatzaile edo sistema eragile erabiltzen ari den kezkatu ez izatea, baina ez da beti horrela izan. 1980ko hamarkadaren hasieran, ordenagailuek irudi digitalak gorde eta bistaratu ahal izan zituzten, baina hainbat ideia lehian zeuden horretarako modurik onenari buruz. Ezin zenuen irudi bat ordenagailu batetik bestera bidali eta funtzionatuko zuela espero.

Arazo hau konpontzeko, mundu osoko adituen batzorde bat bildu zen 1986an " izenarekin "Argazkilaritza Adituen Talde Mistoa” (Joint Photographic Experts Group, JPEG), Normalizaziorako Nazioarteko Erakundearen (ISO) eta Nazioarteko Batzorde Elektroteknikoaren (IEC) lanaren baitan sortua, Genevan (Suitza) egoitza duten nazioarteko arau-erakunde bik.

JPEG izeneko pertsona talde batek JPEG irudi digitalaren konpresio estandarra sortu zuen 1992an. Internet erabili duen edonork ziurrenik JPEG kodetutako irudiak topatu ditu. Irudiak kodetzeko, bidaltzeko eta gordetzeko modurik ohikoena da. Web orrietatik hasi eta mezu elektronikoetaraino sare sozialetaraino, JPEG egunean milaka milioi aldiz erabiltzen da, irudi bat sarean ikusten edo bidaltzen dugun ia bakoitzean. JPEGrik gabe, weba ez litzateke hain distiratsua, motelagoa eta ziurrenik katu-irudi gutxiago izango!

Artikulu hau JPEG irudi bat deskodetzeari buruzkoa da. Beste era batera esanda, ordenagailuan gordetako datu konprimituak pantailan agertzen den irudi bihurtzeko behar denari buruz. Hori jakitea merezi du, ez bakarrik egunerokoan erabiltzen dugun teknologia ulertzeko garrantzitsua delako, baizik eta konpresio mailak agerian utziz, pertzepzioa eta ikusmena hobeto ezagutuko ditugulako, baita gure begiak zein detaile diren gehien. sentibera.

Gainera, oso interesgarria da irudiekin horrela jolastea.

JPEG formatuak nola funtzionatzen duen

JPEG barrura begira

Ordenagailu batean, dena zenbaki bitarren sekuentzia gisa gordetzen da. Normalean bit hauek, zeroak eta batak, zortzitan biltzen dira, byteak osatuz. Zure ordenagailuan JPEG irudi bat irekitzen duzunean, zerbaitek (arakatzailea, sistema eragilea, dena delakoa) byteak deskodetu behar ditu, jatorrizko irudia bistaratu daitekeen koloreen zerrenda gisa berreskuratuz.

Polita hau deskargatzen baduzu katu baten argazkia eta ireki testu-editore batean, karaktere nahasi asko ikusiko dituzu.

JPEG formatuak nola funtzionatzen duen
Hemen Notepad++ erabiltzen ari naiz fitxategiaren edukia ikuskatzeko, Windows-eko Notepad bezalako testu editore arruntek bitarra nahastuko dutelako gorde ondoren eta ez baita JPEG formatura egokitzen.

Irudi bat testu-editore batean irekitzeak zure ordenagailua nahasten du, begiak igurtzi eta koloretako orbanak ikusten hasten zarenean burmuina nahasten duzun bezala!

Ikusten dituzun leku hauek bezala ezagutzen dira fosfenoak, eta ez dira adimenak sortutako argi-estimulu edo aluzinazioen eraginpean egotearen ondorio. Zure garunak nerbio optikoetako edozein seinale elektriko argiari buruzko informazioa daramala uste duelako gertatzen dira. Garunak halako hipotesiak egin behar ditu, ez baitago jakiterik seinalea soinua, ikusmena edo beste zerbait den. Gorputzeko nerbio guztiek bulkada elektriko berdinak transmititzen dituzte. Begiei presioa egiten diozunean, bisualak ez diren seinaleak bidaltzen dituzu, baina begiko errezeptoreak aktibatzen ditu, zure garunak β€”kasu honetan, gaizkiβ€” ikusizko zerbait bezala interpretatzen dituena. Presioa literalki ikus dezakezu!

Dibertigarria da ordenagailuak garunaren antzekoak diren pentsatzea, baina analogia baliagarria ere bada, datuen esanahia β€”nerbioek gorputzean zehar eraman edo ordenagailuan gordetaβ€” nola interpretatzen denaren araberakoa den ilustratzen duena. Datu bitar guztiak XNUMX eta XNUMXez osatuta daude, edozein motatako informazioa transmititzeko gai diren oinarrizko osagaiak. Zure ordenagailuak askotan asmatzen du nola interpretatu fitxategien luzapenak bezalako arrastoak erabiliz. Orain testu gisa interpretatzen ari gara, hori baita testu editoreak espero duena.

JPEG bat nola deskodetu ulertzeko, jatorrizko seinaleak beraiek ikusi behar ditugu - datu bitarrak. Hau hex editore batekin edo zuzenean egin daiteke jatorrizko artikuluaren web orria! Irudi bat dago, eta ondoan testu-eremuan bere byte guztiak (goiburua izan ezik) hamartar formatuan aurkezten dira. Horiek alda ditzakezu eta gidoiak birkodetu eta irudi berri bat sortuko du hegan.

JPEG formatuak nola funtzionatzen duen

Editore honekin jolastuz, asko ikas dezakezu. Esaterako, esan al dezakezu zein ordenatan gordetzen diren pixelak?

Adibide honetan, gauza bitxia da zenbaki batzuk aldatzeak ez duela batere eraginik irudian, eta, adibidez, lehenengo lerroan 17 zenbakia 0rekin ordezkatzen baduzu, argazkia erabat hondatuko da!

JPEG formatuak nola funtzionatzen duen

Beste aldaketa batzuek, adibidez, 7 lerroko 1988a 254ra aldatzea, kolorea aldatzen dute, baina ondorengo pixelak soilik.

JPEG formatuak nola funtzionatzen duen

Agian bitxiena da zenbaki batzuek kolorea ez ezik, irudiaren forma ere aldatzen dutela. Aldatu 70 12. lerroan 2ra eta begiratu irudiaren goiko ilarara zer esan nahi dudan ikusteko.

JPEG formatuak nola funtzionatzen duen

Eta edozein JPEG irudia erabiltzen duzun, beti aurkituko dituzu xake eredu kriptiko horiek byteak editatzerakoan.

Editorearekin jolastuz, zaila da asmatzea nola birsortu argazki bat byte horietatik, JPEG konpresioa mailaka sekuentzialki aplikatzen diren hiru teknologia ezberdinez osatuta baitago. Horietako bakoitza banan-banan aztertuko dugu, behatzen dugun portaera misteriotsua ezagutzeko.

JPEG konpresioaren hiru maila:

  1. Koloreen azpilaginketa.
  2. Kosinuaren transformazio diskretua eta diskretizazioa.
  3. Korrikaren luzera kodetzea, delta ΠΈ huffman

Konpresioaren eskalaren ideia bat emateko, kontuan izan goiko irudiak 79 zenbaki adierazten dituela, hau da, 819 KB inguru. Konpresiorik gabe gordeko bagenu, pixel bakoitzeko hiru zenbaki beharko genituzke, osagai gorri, berde eta urdinetarako. Hau 79 zenbaki izango litzateke, edo gutxi gorabehera. 917 Kb. JPEG konpresioaren ondorioz, azken fitxategia 700 aldiz baino gehiago murriztu da!

Izan ere, irudi hau askoz gehiago konprimitu daiteke. Behean bi irudi daude elkarren ondoan - eskuineko argazkia 16 KB-ra konprimitu zen, hau da, konprimitu gabeko bertsioa baino 57 aldiz gutxiago!

JPEG formatuak nola funtzionatzen duen

Ondo begiratuz gero, ikusiko duzu irudi hauek ez direla berdinak. Biak JPEG konpresioa duten irudiak dira, baina eskuinekoa bolumen askoz txikiagoa da. Itxura apur bat okerragoa ere bada (begira ezazu atzeko koloreko karratuei). Horregatik, JPEG galerazko konpresioa ere deitzen zaio; konpresio-prozesuan, irudia aldatzen da eta xehetasun batzuk galtzen ditu.

1. Koloreen azpilaginketa

Hona hemen lehen konpresio-maila soilik aplikatutako irudi bat.

JPEG formatuak nola funtzionatzen duen
(Bertsio interaktiboan jatorrizkoa artikuluak). Zenbaki bat kentzeak kolore guztiak suntsitzen ditu. Hala ere, zehatz-mehatz sei zenbaki kentzen badira, ez du eragin handirik irudian.

Orain zenbakiak apur bat errazago deszifratzen dira. Hau kolore-zerrenda ia sinplea da, byte bakoitzak pixel bat aldatzen du zehazki, baina dagoeneko konprimitu gabeko irudi baten tamainaren erdia da (gutxi gorabehera 300 KB beharko lituzke hain tamaina murriztuan). Asmatu zergatik?

Ikusten duzu zenbaki hauek ez dituztela osagai gorri, berde eta urdin estandarrak adierazten, zeren zenbaki guztiak zeroekin ordezkatzen baditugu, irudi berdea (ez zuria) lortzen dugu.

JPEG formatuak nola funtzionatzen duen

Hau da byte hauek Y (distira) adierazten dutelako.

JPEG formatuak nola funtzionatzen duen

Cb (urdin erlatiboa),

JPEG formatuak nola funtzionatzen duen

eta Cr (gorritasun erlatiboa) irudiak.

JPEG formatuak nola funtzionatzen duen

Zergatik ez erabili RGB? Azken finean, horrela funtzionatzen dute pantaila modernoenak. Zure monitoreak edozein kolore bistaratu ditzake, gorria, berdea eta urdina barne, pixel bakoitzeko intentsitate ezberdinetan. Zuria hirurak distira osoarekin piztuta lortzen da, eta beltza itzaltzen ari da.

JPEG formatuak nola funtzionatzen duen

Giza begiaren funtzionamenduaren oso antzekoa da ere. Gure begietako kolore-hartzaileei " deitzen zaiekonoak", eta hiru motatan banatzen dira, eta horietako bakoitza kolore gorri, berde edo urdinekiko sentikorragoa da [S motako konoak bioleta-urdinean sentikorrak dira (S ingelesetik. Short - uhin-luzera motzeko espektroa), M mota - berde-horian (M ingelesetik. Medium - uhin ertainean), eta L mota - hori-gorriz (L ingelesetik. Long - uhin luzea) espektroaren zatietan. Hiru kono mota hauen presentziak (eta espektro esmeralda berdearen zatian sentikorrak diren hagaxkak) pertsona bati kolore-ikusmena ematen dio. / gutxi gorabehera. itzul.]. Makilak, gure begietako beste fotorrezeptore mota, distira aldaketak hautemateko gai da baina kolorearekiko askoz sentikorragoa da. Gure begiek 120 milioi haga inguru eta 6 milioi kono baino ez dituzte.

Hori dela eta, gure begiek kolore aldaketak baino askoz hobeto nabaritzen dituzte distira aldaketak. Kolorea distiratik bereizten baduzu, kolore apur bat kendu dezakezu eta inork ez du ezer nabarituko. Kroma azpilaginketa irudi baten kolore osagaiak luminantzia osagaiak baino bereizmen baxuagoan irudikatzeko prozesua da. Goiko adibidean, pixel bakoitzak Y osagai bat du eta lau pixeleko talde indibidual bakoitzak Cb eta Cr osagai bat du. Beraz, irudiak jatorrizkoak baino lau aldiz kolore-informazio gutxiago dauka.

YCbCr kolore-espazioa ez da JPEGetan soilik erabiltzen. Hasiera batean 1938an asmatu zuten telebistako emankizunetarako. Denek ez dute koloretako telebistarik, beraz, kolorea eta distira bereizteak denek seinale bera lortu ahal izan zuten, eta kolorerik gabeko telebistek distira osagaia soilik erabiltzen zuten.

Hori dela eta, zenbaki bat editoretik kentzeak kolore guztiak erabat suntsitzen ditu. Osagaiak YYYY Cb Cr forman gordetzen dira (egia esan, ez nahitaez ordena honetan - biltegiratze-ordena fitxategiaren goiburuan zehazten da). Lehenengo zenbakia kenduz gero, Cb-ren lehen balioa Y, Cr Cb bezala hautemango da eta, oro har, domino efektua lortuko da, irudiaren kolore guztiak aldatuz.

JPEG zehaztapenak ez du YCbCr erabiltzea eskatzen. Baina fitxategi gehienek erabiltzen dute, RGB-rekin alderatuta, kalitate hobeko irudiak ematen baitituzte laginketa txikitu ondoren. Baina ez duzu nire hitza hartu beharrik. Ikus ezazu zuk zeuk beheko taulan osagai bakoitzaren azpilaginketa nola izango litzatekeen RGB eta YCbCr-en.

JPEG formatuak nola funtzionatzen duen
(Bertsio interaktiboan jatorrizkoa artikuluak).

Urdinaren kentzea ez da gorria edo berdea bezain nabarmena. Hori da zure begietako sei milioi konoengatik, % 64 inguru gorriarekiko sentikorra da, % 32 berdearekiko eta % 2 urdinarekiko.

Y osagaiaren azpilaginketa (behean ezkerrean) ikusten da hobekien. Aldaketa txiki bat ere nabaria da.

Irudi bat RGB-tik YCbCr-era bihurtzeak ez du fitxategiaren tamaina murrizten, baina ezabatu daitezkeen xehetasun ez hain nabarmenak aurkitzea errazten du. Konpresio galera bigarren fasean gertatzen da. Datuak forma konprimagarriago batean aurkezteko ideian oinarritzen da.

2. Kosinu-transformazio diskretua eta diskretizazioa

Konpresio maila honek, gehienetan, JPEG-en funtsa definitzen du. Koloreak YCbCr bihurtu ondoren, osagaiak banan-banan konprimitzen dira, beraz, Y osagaian bakarrik kontzentratu ahal izango gara hemendik aurrera.Eta hona hemen Y osagaiaren byteen itxura maila hau aplikatu ondoren.

JPEG formatuak nola funtzionatzen duen
(Bertsio interaktiboan jatorrizkoa artikuluak). Bertsio interaktiboan, pixel batean klik eginez gero, editorea irudikatzen duen lerroraino mugitzen da. Saiatu amaieratik zenbakiak kentzen edo zenbaki jakin bati zero batzuk gehitzen.

Lehen begiratuan, oso konpresio txarra dirudi. Irudi batean 100 pixel daude, eta 000 zenbaki behar dira haien distira adierazteko (Y-osagaiak) - hori ezer ez konprimitzea baino okerragoa da!

Hala ere, kontuan izan zenbaki horietako gehienak zero direla. Gainera, lerroen amaierako zero horiek guztiak kendu daitezke irudia aldatu gabe. 26 zenbaki inguru geratzen dira, hau da, ia 000 aldiz gutxiago!

Maila honek xake ereduen sekretua dauka. Ikusi ditugun beste efektu batzuk ez bezala, eredu horien agerpena ez da akats bat. Irudi osoaren oinarriak dira. Editorearen lerro bakoitzak zehazki 64 zenbaki ditu, 64 eredu bereziren intentsitateei dagozkien kosinu-transformazio diskretua (DCT) koefizienteak.

Eredu hauek kosinuaren grafikoan oinarrituta eratzen dira. Hona hemen horietako batzuk nolakoak diren:

JPEG formatuak nola funtzionatzen duen
8 aukeratik 64

Jarraian, 64 eredu guztiak erakusten dituen irudi bat dago.

JPEG formatuak nola funtzionatzen duen
(Bertsio interaktiboan jatorrizkoa artikuluak).

Eredu hauek garrantzi berezia dute, 8x8 irudien oinarria baita. Aljebra lineala ezagutzen ez baduzu, horrek esan nahi du 8 eredu hauetatik edozein 8x64 irudi lor daitekeela. DCT irudiak 8x8 blokeetan zatitzeko eta bloke bakoitza 64 koefiziente hauen konbinazio batean bihurtzeko prozesua da.

Edozein irudi 64 eredu zehatzez osatuta egotea magia dirudi. Hala ere, hauxe da Lurreko edozein leku bi zenbakiz deskriba daitekeela esatea: latitudea eta longitudea [hemisferioak adieraziz / gutxi gorabehera. itzul.]. Askotan Lurraren gainazala bi dimentsio dela uste dugu, beraz, bi zenbaki baino ez ditugu behar. 8x8ko irudi batek 64 dimentsio ditu, beraz, 64 zenbaki behar ditugu.

Oraindik ez dago argi nola laguntzen digun horrek konpresio aldetik. 64x8 irudi bat irudikatzeko 8 zenbaki behar baditugu, zergatik izango litzateke hau 64 luminantzia osagai gordetzea baino hobea? Hori egiten dugu hiru RGB zenbaki hiru YCbCr zenbaki bihurtu ditugun arrazoi beragatik: xehetasun sotilak kentzeko aukera ematen digu.

Zaila da fase honetan zehatz-mehatz zein xehetasun kentzen ari diren ikustea, JPEG-k DCT 8x8 blokeei aplikatzen dielako. Hala ere, inork ez digu debekatzen argazki osoan aplikatzea. Hona hemen DCT-ak Y osagaiaren itxura duen irudi guztiari aplikatzen zaionean:

JPEG formatuak nola funtzionatzen duen

Amaieratik 60 zenbaki baino gehiago kendu daitezke argazkian ia aldaketa nabarmenik gabe.

JPEG formatuak nola funtzionatzen duen

Kontuan izan, hala ere, lehenengo bost zenbakiak zeroratzen baditugu, aldea nabaria izango dela.

JPEG formatuak nola funtzionatzen duen

Hasierako zenbakiek maiztasun baxuko aldaketak adierazten dituzte irudian, eta gure begiek ondoen jasotzen dituzte. Bukaeran dauden zenbakiek nabaritzen zailagoak diren maiztasun handiko aldaketak adierazten dituzte. "Begiak ikusi ezin duena ikusteko" maiztasun handiko xehetasun hauek isola ditzakegu lehen 5000 zenbakiak zeroz.

JPEG formatuak nola funtzionatzen duen

Aldaketa handiena pixeletik pixelera gertatzen den irudiaren eremu guztiak ikusten ditugu. Katuaren begiak, bere biboteak, felpazko manta eta beheko ezkerreko izkinan dauden itzalak nabarmentzen dira. Harago joan zaitezke lehen 10 zenbakiak zero jarriz:

JPEG formatuak nola funtzionatzen duen

20:

JPEG formatuak nola funtzionatzen duen

40:

JPEG formatuak nola funtzionatzen duen

60:

JPEG formatuak nola funtzionatzen duen

Maiztasun handiko xehetasun hauek JPEG-k kentzen ditu konpresio fasean. Koloreak DCT koefizienteetara bihurtzea ez da galerarik. Laginketa-urratsean galerak sortzen dira, non maiztasun handiko edo zerotik gertu dauden balioak kentzen diren. JPEG gordetzeko kalitatea jaisten duzunean, programak kendu beharreko balio kopuruaren atalasea handitzen du, eta horrek fitxategiaren tamaina murrizten du, baina irudia pixelatuago bihurtzen du. Beraz, lehenengo ataleko irudiak, 57 aldiz txikiagoa zen, itxura hau zuen. 8x8 bloke bakoitzak DCT koefiziente kopuru askoz txikiagoa irudikatzen zuen kalitate handiagoko bertsioarekin alderatuta.

Irudiak pixkanaka erreproduzitzea bezain polita egin dezakezu. Koefiziente gehiago deskargatu ahala gero eta zehatzagoa den irudi lauso bat bistaratu dezakezu.

Hona hemen, ondo pasatzeko, zer gertatzen den 24 zenbaki soilik erabiltzean:

JPEG formatuak nola funtzionatzen duen

Edo 5000 besterik ez:

JPEG formatuak nola funtzionatzen duen

Oso lausoa baina ezagugarria!

3. Korrika luzeen, delta eta Huffmanen kodeketa

Orain arte, konpresioaren fase guztiak galerak izan dira. Azken etapa, aitzitik, galdu gabe doa. Ez du informazioa kentzen, baina fitxategiaren tamaina nabarmen murrizten du.

Nola konprimi dezakezu zerbait informazioa baztertu gabe? Imajinatu nola deskribatuko genukeen 700 x 437 laukizuzen beltz soil bat.

JPEG-k 5000 zenbaki erabiltzen ditu horretarako, baina askoz emaitza hobeak lor daitezke. Imajinatzen al duzu irudi bat ahalik eta byte gutxienetan deskribatzen duen kodeketa-eskema bat?

Asma nezakeen gutxieneko eskemak lau erabiltzen ditu: hiru kolorerako, eta laugarren bat kolore horrek zenbat pixel dituen. Errepikaturiko balioak modu konprimituan adierazteko ideia korrika-luzera kodetzea deitzen zaio. Galerarik gabekoa da, kodetutako datuak jatorrizko forman berreskura ditzakegulako.

Laukizuzen beltza duen JPEG fitxategi baten tamaina 4 byte baino askoz handiagoa da - gogoratu DCT mailan konpresioa 8x8 pixeleko blokeetan aplikatzen dela. Horregatik, gutxienez, 64 pixel bakoitzeko DCT koefiziente bat behar dugu. Bat behar dugu, DCT koefiziente bakarra eta 63 zeroz jarraian gorde beharrean, korrika-luzera kodetzeak zenbaki bakar bat gordetzeko aukera ematen digu eta "beste guztiak zeroak dira" adierazteko.

Delta kodeketa teknika bat da, non byte bakoitzak balio batekiko aldea duen balio absolutu bat baino. Hori dela eta, byte batzuk editatzeak beste pixel guztien kolorea aldatzen du. Esaterako, gorde beharrean

12 13 14 14 14 13 13 14

12rekin hasi eta gero idatzi zenbat gehitu edo kendu behar den hurrengo zenbakia lortzeko. Eta delta kodeketaren sekuentzia honek honela hartzen du:

12 1 1 0 0 -1 0 1

Bihurtutako datuak ez dira jatorrizko datuak baino txikiagoak, baina errazagoa da konprimitzea. Delta kodeketa exekuzio-luzera kodetzearen aurretik aplikatzeak asko lagun dezake konpresio galerarik izaten jarraitzen duen bitartean.

Delta kodeketa 8x8 blokeetatik kanpo erabiltzen den teknika bakanetako bat da. 64 DCT koefizienteetatik bat uhin-funtzio konstante bat besterik ez da (kolore solidoa). Bloke bakoitzaren batez besteko distira adierazten du luminantzia osagaietarako, edo Cb osagaietarako batez besteko urdintasuna eta abar. DCT bloke bakoitzaren lehen balioari DC balioa deitzen zaio, eta DC balio bakoitza aurrekoekiko delta kodetuta dago. Beraz, lehenengo blokearen distira aldatzeak bloke guztiei eragingo die.

Azken misterioa geratzen da: nola zenbaki singularra aldatzeak guztiz hondatzen du irudi osoa? Orain arte, konpresio-mailek ez zuten halako propietaterik. Erantzuna JPEG goiburuan dago. Lehenengo 500 byteek irudiari buruzko metadatuak dituzte -zabalera, altuera, etab.- eta orain arte ez dugu haiekin landu.

Goibururik gabe, ia ezinezkoa da (beno, oso zaila) JPEG bat deskodetzea. Irudi bat zuri deskribatzen saiatzen ari naizela dirudi, eta nire inpresioa helarazteko hitzak asmatzen hasi naiz. Deskribapena oso zehatza izango da ziurrenik, nik adierazi nahi dudan esanahiarekin hitzak asma ditzaket, baina beste guztientzat ez dute zentzurik izango.

Tontakeria dirudi, baina horrela gertatzen da. JPEG irudi bakoitza berariazko kodeekin konprimitzen da. Kode hiztegia goiburuan gordetzen da. Teknika honi "Huffman kodea" deitzen zaio eta hiztegiari Huffman taula. Goiburuan, taula bi bytez markatuta dago - 255 eta gero 196. Kolore-osagai bakoitzak bere taula izan dezake.

Taularen aldaketek izugarri eragingo dute edozein irudi. Adibide ona 15. lerroan 1etik 12ra aldatzea da.

JPEG formatuak nola funtzionatzen duen

Taulek bit indibidualak nola irakurri behar diren zehazten dutelako gertatzen da. Orain arte, zenbaki bitarrekin bakarrik landu dugu hamartar forman. Baina honek ezkutatzen digu 1 zenbakia byte batean gorde nahi baduzu, 00000001 itxura izango duela, byte bakoitzak zehatz-mehatz zortzi bit izan behar dituelako, horietako bakarra behar bada ere.

Hau espazio alferrik galtzea izan daiteke kopuru txiki asko badituzu. Huffman kodea zenbaki bakoitzak zortzi bit okupatu behar duen eskakizun hori lasaitzen uzten duen teknika da. Horrek esan nahi du bi byte ikusten badituzu:

234 115

Orduan, Huffmanen taularen arabera, hiru zenbaki izan daitezke. Horiek ateratzeko, lehenengo zati banatan banatu behar dituzu:

11101010 01110011

Ondoren, mahaira jotzen dugu horiek nola taldekatu ulertzeko. Adibidez, lehenengo sei bitak izan daitezke, (111010), edo 58 hamartarrez, ondoren bost bit (10011), edo 19, eta azkenik azken lau bitak (0011), edo 3.

Hori dela eta, oso zaila da konpresio fase honetan byteak ulertzea. Byteek ez dute diruditena adierazten. Ez naiz artikulu honetan mahaiarekin lan egiteko xehetasunetan sartuko, baina material gai honi buruz sarean nahikoa da.

Ezagutza honekin egin dezakezun trikimailu politetako bat goiburua JPEGtik bereiztea eta bereizita gordetzea da. Izan ere, ikusten da zuk bakarrik irakur dezakezula fitxategia. Facebookek hori egiten du fitxategiak gehiago murrizteko.

Zer gehiago egin daiteke Huffmanen taula dezente aldatzea. Beste batzuentzat, argazki hondatu baten itxura izango du. Eta zuk bakarrik ezagutuko duzu hori konpontzeko aukera magikoa.

Laburbilduz: zer behar da JPEG bat deskodetzeko? Beharrezkoa:

  1. Atera Huffman taula(k) goiburutik eta deskodetu bitak.
  2. Atera ezazu 8x8 bloke bakoitzeko kolore eta luminantzia-osagai bakoitzeko kosinu-transformazio-koefiziente diskretuak korrika-luzera kodeketa eta delta alderantziz eraldatuz.
  3. Konbinatu koefizienteetan oinarritutako kosinuak 8x8 bloke bakoitzeko pixel balioak lortzeko.
  4. Eskalatu kolore-osagaiak azpilaginketa egin bada (informazio hau goiburuan dago).
  5. Bihurtu pixel bakoitzeko YCbCr balioak RGB bihurtu.
  6. Ekarri irudia pantailara!

Lan serioa katu batekin argazki bat ikusteko! Hala ere, gustuko dudana da erakusten duela gizakiarengan oinarritutako JPEG teknologia nola dagoen. Gure pertzepzioaren ezaugarrietan oinarritzen da, eta horrek ohiko teknologiak baino konpresio askoz hobea lortzeko aukera ematen digu. Eta orain, JPEG nola funtzionatzen duen ulertuta, teknologia hauek beste arlo batzuetara nola transferi daitezkeen imajina dezakezu. Adibidez, bideoan delta kodetzeak fitxategiaren tamaina nabarmen murriztea eragin dezake, askotan fotogramaz fotograma aldatzen ez diren eremu osoak baitaude (adibidez, atzeko planoa).

artikuluan erabilitako kodea, irekita dago eta argazkiak zurearekin ordezkatzeko argibideak ditu.

Iturria: www.habr.com

Gehitu iruzkin berria