Imazhet nĂ« formatin JPEG i gjejmĂ« kudo nĂ« jetĂ«n tonĂ« digjitale, por pas kĂ«saj njohurie fshihet algoritmi qĂ« heq detajet qĂ« nuk perceptohen nga syri njerĂ«zor. NĂ« fund, rezultati Ă«shtĂ« cilĂ«si vizuale e jashtĂ«zakonshme me madhĂ«si minimale skedari â por si funksionon konkretisht gjithĂ« kjo? Le tĂ« shohim se çfarĂ« nuk shohin sytĂ« tanĂ«!

ĂshtĂ« e lehtĂ« ta pranojmĂ« si tĂ« natyrshme mundĂ«sinĂ« pĂ«r tĂ« dĂ«rguar njĂ« foto mikut dhe tĂ« mos shqetĂ«sohemi pĂ«r pajisjen, shfletuesin ose sistemin operativ qĂ« po pĂ«rdor â por nuk ka qenĂ« gjithmonĂ« kĂ«shtu. NĂ« fillim tĂ« viteve 1980, kompjuterĂ«t dinin tĂ« ruanin dhe tĂ« shfaqin imazhe digjitale, megjithatĂ« kishte shumĂ« ide konkurruese pĂ«r mĂ«nyrĂ«n mĂ« tĂ« mirĂ« pĂ«r ta bĂ«rĂ« kĂ«tĂ«. Nuk munde thjesht tĂ« dĂ«rgosh njĂ« imazh nga njĂ« kompjuter nĂ« njĂ« tjetĂ«r dhe tĂ« shpresosh se gjithçka do tĂ« funksionojĂ«.
PĂ«r tĂ« zgjidhur kĂ«tĂ« problem, nĂ« vitin 1986 u krijua njĂ« komitet ekspertĂ«sh nga mbarĂ« bota i quajtur «» (Grupi i FotografĂ«ve tĂ« Bashkuar, JPEG), i themeluar si rezultat i bashkĂ«punimit mes OrganizatĂ«s NdĂ«rkombĂ«tare tĂ« Standardizimit (ISO) dhe Komisionit NdĂ«rkombĂ«tar tĂ« ElektronikĂ«s (IEC) â dy organizata ndĂ«rkombĂ«tare standardizuese me seli nĂ« GjenevĂ« (ZvicĂ«r).
NjĂ« grup njerĂ«zish me emrin JPEG krijoi standardin e kompresimit tĂ« imazheve digjitale JPEG nĂ« vitin 1992. Ădo person qĂ« ka pĂ«rdorur internetin, me siguri Ă«shtĂ« pĂ«rballur me imazhe tĂ« koduara nĂ« formatin JPEG. Ky Ă«shtĂ« mĂ«nyra mĂ« e zakonshme pĂ«r kodimin, dĂ«rgimin dhe ruajtjen e imazheve. Nga faqet e internetit deri te emaili dhe rrjetet sociale, JPEG pĂ«rdoret miliarda herĂ« nĂ« ditĂ« â pothuajse çdo herĂ« qĂ« shohim njĂ« imazh nĂ« internet apo e dĂ«rgojmĂ« atĂ«. Pa JPEG, uebi do tĂ« ishte mĂ« pak ngjyror, mĂ« i ngadalshĂ«m, dhe me shumĂ« mĂ« pak foto mace!
Kyë kjo është një artikull mbi si të dekodoni një imazh JPEG. Me fjalë të tjera, çfarë nevojitet për të transformuar të dhënat e kompresuara, të ruajtura në komputer, në një imazh që shfaqet në ekran. Ky informacion është i rëndësishëm jo vetëm për të kuptuar teknologjinë që përdorim çdo ditë, por gjithashtu sepse duke zbuluar nivelet e kompresimit, ne mësojmë më mirë perceptimin dhe shikimin, si dhe se cilave detaje sytë tanë janë më të ndjeshëm.
Për më tepër, është shumë interesante të eksperimentoni me imazhet në këtë mënyrë.

Shikimi brenda JPEG
Në komputer gjithçka ruhet si një sekuencë numrash binarë. Zakonisht këto bita, nja dhe zeros, grupohen në grupe nga tetë, duke formuar bajta. Kur hapni një imazh JPEG në komputer, diçka (në shfletues, operativ system, ose ndonjë gjë tjetër) duhet të dekodoni bajtat, duke rikonstruktuar imazhin origjinal në një listë ngjyrash që mund të shfaqen.
Nëse shkarkoni këtë imazh të bukur dhe e hapni atë në një redaktues teksti, do të shihni një sasi të madhe simboresh të pa lidhura.

Këtu përdor Notepad++ për të studiuar përmbajtjen e skedarit, pasi redaktorët e zakonshëm të tekstit, si Notepad-i i Windows, do ta prishnin skedarin binar pas ruajtjes, dhe ai do të ndalonte së përmbushuri formatin JPEG.
Duke hapur një imazh në redaktorin e tekstit, ju e shkeletoni kompjuterin, ashtu siç e shkelni trurin tuaj kur fërkoni sytë dhe filloni të shihni pika me ngjyra!
KĂ«to pika qĂ« shihni janĂ« tĂ« njohura si , dhe nuk janĂ« rezultat i ndonjĂ« stimulli tĂ« dritĂ«s ose halucinacioneve tĂ« shkaktuara nga mendja. Ato ndodhin sepse truri juaj mendon se çdo sinjal elektrik nĂ« nervat e syve pĂ«rcjell informacion mbi dritĂ«n. Truri ka nevojĂ« tĂ« bĂ«jĂ« kĂ«so supozime, pasi nuk Ă«shtĂ« e mundur tĂ« dihet nĂ«se sinjali Ă«shtĂ« zĂ«, vizion, ose diçka tjetĂ«r. TĂ« gjitha nervat nĂ« trup pĂ«rcjellin impuls elektrik tĂ« njĂ«jtĂ«. Duke shtypur sytĂ«, dĂ«rgoni sinjale qĂ« nuk janĂ« vizuale, por aktivizoni receptorĂ«t e syrit, qĂ« truri juaj e interpreton â nĂ« kĂ«tĂ« rast, gabimisht â si njĂ« gjĂ« vizuale. Ju jeni literalĂ« tĂ« aftĂ« tĂ« shihni presionin!
ĂshtĂ« interesante tĂ« mendojmĂ« se sa shumĂ« kompjuterĂ«t ngjajnĂ« me trurin, megjithatĂ« kjo Ă«shtĂ« gjithashtu njĂ« analogji e dobishme qĂ« ilustron sa shumĂ« vlera ka informacioni â qĂ« transmetohet pĂ«rmes trupit nga nervat, apo ruhet nĂ« kompjuter â nĂ« varĂ«si tĂ« interpretimit tĂ« tij. TĂ« gjithĂ« tĂ« dhĂ«nat binare pĂ«rbĂ«hen nga nula dhe njĂ«si, komponentĂ« bazikĂ« qĂ« janĂ« nĂ« gjendje tĂ« pĂ«rcjellin informacion tĂ« çdo lloji. Kompjuteri juaj shpesh e ndjen se si ta interpretojĂ« atĂ« me ndihmĂ«n e nĂ«nshkrimeve, siç janĂ« shtesat e skedarĂ«ve. Tani po e detyrojmĂ« atĂ« ta interpretojĂ« si tekst, pasi kjo Ă«shtĂ« ajo qĂ« pret redaktori i tekstit.
PĂ«r tĂ« kuptuar se si tĂ« dekodojmĂ« njĂ« JPEG, na nevojitet tĂ« shohim sinjalet fillestare â tĂ« dhĂ«nat binare. Kjo mund tĂ« bĂ«het me ndihmĂ«n e njĂ« editori hexadecimal, ose direkt nĂ« ! Aty ka njĂ« imazh, pranĂ« tĂ« cilit nĂ« fushĂ«n e tekstit janĂ« tĂ« gjitha bajtat e tij (pĂ«rveç titullit), tĂ« paraqitura nĂ« formĂ« dekimali. Ju mund tâi ndryshoni ato, dhe skripti do ta rikodifikojĂ« dhe do tĂ« japĂ« njĂ« imazh tĂ« ri nĂ« çast.

Mund të mësoni shumë, thjesht duke luajtur me këtë redaktues. Për shembull, a mund të thoni se në çfarë renditje ruhen pikselët?
E çuditshme në këtë shembull është se ndryshimi i disa numrave nuk ndikon aspak në imazh, ndërsa, për shembull, nëse zëvendësoni numrin 17 me 0 në rreshtin e parë, atëherë fotografia do të prishësh plotësisht!

Ndryshime të tjera, për shembull, zëvendësimi i 7 në rreshtin 1988 me numrin 254 ndryshon ngjyrën, por vetëm të pikselëve pasues.

Mund të jetë më e çuditshme se disa numra ndryshojnë jo vetëm ngjyrën, por edhe formën e imazhit. Ndryshoni 70 në rreshtin 12 me 2 dhe shikoni radhën e sipërme të imazhit për të parë se çfarë kam në mendje.

Dhe pavarësisht nga cilin imazh JPEG përdorni, gjithmonë do të gjeni këto sekuenca enigmatike në redaktimin e byte-ve.
Duke luajtur me redaktuesin, është e vështirë të kuptohet se si rindërtohet fotografia nga këto byte, pasi kompresimi JPEG përbëhet nga tre teknologji të ndryshme që aplikohet njëri pas tjetrit në nivele. Ne do të shqyrtojmë secilin prej tyre veç e veç për të zbuluar këtë sjellje enigmatike që po vërejmë.
Tre nivele të kompresimit JPEG:
- .
- .
- , dhe
Për t'ju ndihmuar të kuptoni shkallën e kompresimit, vini re se imazhi i paraqitur më lart përmban 79,819 numra, që është rreth 79 Kb. Nëse do ta ruanim pa kompresim, për secilin piksel do të ishin të nevojshme tre numra - për komponentin e kuq, të gjelbër dhe të blerë. Kjo do të jepte 917,700 numra, ose rreth 917 Kb. Si rezultat i kompresimit JPEG, skedari përfundimtar u zvogëlua më shumë se 10 herë!
NĂ« tĂ« vĂ«rtetĂ«, ky imazh mund tĂ« kompresohet edhe mĂ« shumĂ«. MĂ« poshtĂ« janĂ« dy imazhe pranĂ« njĂ«ri-tjetrit â fotografia nĂ« tĂ« djathtĂ« Ă«shtĂ« kompresuar nĂ« 16 Kb, qĂ« do tĂ« thotĂ« 57 herĂ« mĂ« pak se versioni i pa kompresuar!

Nëse shikoni me kujdes, do të vëreni se këto imazhe nuk janë identike. Të dy janë imazhe të kompresuara me JPEG, megjithatë e djathta është shumë më e vogël në përmasë. Ajo duket gjithashtu pak më keq (shihni katrorët e ngjyrave të sfondit). Prandaj JPEG njihet gjithashtu si kompresim me humbje; gjatë procesit të kompresimit, imazhi ndryshon dhe humb disa detaje.
1. Subdiskretizimi i ngjyrave
Ja një imazh me aplikimin e vetëm të nivelit të parë të kompresimit.

(Versioni interaktiv â nĂ« artikulli). Heqja e njĂ« numri shkatĂ«rron tĂ« gjitha ngjyrat. MegjithatĂ«, nĂ«se hiqni saktĂ«sisht gjashtĂ« numra, kjo nuk ka ndonjĂ« ndikim tĂ« konsiderueshĂ«m nĂ« imazh.
Tani numrat janë pak më të lehtë për t'u dekoduar. Ajo është pothuajse një listë e thjeshtë ngjyrash, ku çdo bajt ndryshon saktësisht një piksel, por në të njëjtën kohë ajo është tashmë dy herë më e vogël se imazhi i pa kompresuar (i cili do të zinte rreth 300 KB në këtë madhësi të zvogëluar). A e dini se pse?
Eshte e dukshme se këto numra nuk përfaqësojnë komponentet standarde të kuqe, të gjelbër dhe të blu, pasi nëse zëvendësojmë të gjithë numrat me zeros, do të marrim një imazh të gjelbër (e jo të bardhë).

Kjo është sepse këta bajtë përfaqësojnë Y (ndriçimi),

Cb (blu relativ),

dhe Cr (të kuqe relative) të imazhit.

Pse tĂ« mos pĂ«rdorim RGB? Sepse kĂ«shtu funksionon shumica e ekranĂ«ve modernĂ«. Monitori juaj mund tĂ« tregojĂ« çdo ngjyrĂ«, duke pĂ«rfshirĂ« tĂ« kuq, tĂ« gjelbĂ«r dhe tĂ« blu me intensitet tĂ« ndryshĂ«m pĂ«r çdo piksel. E bardha arrihet duke ndriçuar tĂ« tri ngjyrat nĂ« maksimum, ndĂ«rsa e zeza â duke i ndezur ato.

Kjo Ă«shtĂ« gjithashtu shumĂ« e ngjashme me mĂ«nyrĂ«n se si funksionon syri i njeriut. DritĂ«pĂ«rceptuesit nĂ« sytĂ« tanĂ« quhen "", dhe ndahen nĂ« tri tipe, secili mĂ« i ndjeshĂ«m ndaj tĂ« kuqes, tĂ« gjelbrĂ«s, ose tĂ« kaltĂ«rtĂ«s [koniçkat e tipit S janĂ« tĂ« ndjeshme nĂ« pjesĂ«n e violetĂ«s-kaltĂ« (S nga anglishtja Short â spektri mĂ« i shkurtĂ«r), M-tipi â nĂ« tĂ« gjelbra-tĂ« verdha (M nga anglishtja Medium â spektri mesatar), dhe L-tipi â nĂ« pjesĂ«t e verdhĂ«-tĂ« kuqe (L nga anglishtja Long â spektri mĂ« i gjatĂ«). Prania e kĂ«tyre tre tipeve tĂ« koniçkave (dhe stĂ«rlinĂ«ve, tĂ« ndjeshĂ«m nĂ« pjesĂ«n e gjelbĂ«r tĂ« turqisĂ«) i jep njeriut shikim me ngjyra. / shĂ«nim nga pĂ«rkthyesi.] , njĂ« tjetĂ«r tip dritĂ«pĂ«rceptuesish nĂ« sytĂ« tanĂ«, janĂ« nĂ« gjendje tĂ« kapin ndryshimet nĂ« shkĂ«lqim, megjithatĂ« janĂ« shumĂ« mĂ« tĂ« ndjeshĂ«m ndaj ngjyrĂ«s. NĂ« sytĂ« tanĂ« ka rreth 120 milion stĂ«rlina dhe vetĂ«m 6 milion koniçka.
Prandaj syt tanë e vërejnë shumë më mirë ndryshimet në ndriçim sesa ndryshimet në ngjyrë. Nëse e ndan ngjyrën nga ndriçimi, mund të hiqni ca ngjyrë dhe askush nuk do ta vërejë. Nënndërtesa e ngjyrave është procesi i paraqitjes së komponenteve ngjyrë të imazhit në një rezolutë më të ulët krahasuar me komponentët e ndriçimit. Në shembullin e mësipërm, çdo piksel ka saktësisht një komponent Y, ndërsa çdo grup i veçantë prej katër pikselëve ka saktësisht një komponent Cb dhe një Cr. Prandaj imazhi përmban katër herë më pak informacion në ngjyrë se sa origjinali.
Hapësira e ngjyrave YCbCr përdoret jo vetëm në JPEG. Ajo u shpik fillimisht në vitin 1938 për transmetimet televizive. Jo të gjithë kanë një televizor të ngjyrave, prandaj ndarja e ngjyrës dhe ndriçimit i mundëson të gjithëve të marrin të njëjtin sinjal, ndërsa televizorët pa ngjyrë thjesht përdorin vetëm komponentin e ndriçimit.
Prandaj, heqja e njĂ« numri nga redaktori shkatĂ«rron plotĂ«sisht tĂ« gjitha ngjyrat. KomponentĂ«t ruhen nĂ« formatin Y Y Y Y Cb Cr (nĂ« tĂ« vĂ«rtetĂ«, nuk Ă«shtĂ« domosdoshmĂ«risht nĂ« kĂ«tĂ« renditje â renditja e ruajtjes pĂ«rcaktohet nĂ« titullin e skedarit). Heqja e numrit tĂ« parĂ« do tĂ« bĂ«jĂ« qĂ« vlera e parĂ« Cb tĂ« perceptohet si Y, Cr si Cb, dhe nĂ« pĂ«rgjithĂ«si do tĂ« keni njĂ« efekt domino qĂ« aktivizon tĂ« gjitha ngjyrat e imazhit.
Specifikimi JPEG nuk ju obligon të përdorni YCbCr. Por në shumicën e skedarëve, përdoren sepse ofrojnë imazhe me cilësi më të mirë pas subdiscretizimit në krahasim me RGB. Por nuk është e nevojshme të më besoni mua. Shikoni vetë në tabelën më poshtë, si do të duket subdiscretizimi i secilit komponent në RGB dhe YCbCr.

(Versioni interaktiv â nĂ« artikuj).
Heqja e blusë nuk është kaq e dukshme si ajo e kuqe ose e gjelbër. Kjo është për arsye se nga gjashtë milion konishtesh në sytë tuaj rreth 64% janë të ndjeshëm ndaj të kuqeve, 32% ndaj të gjelbërve dhe 2% ndaj të blusë.
Subdiscretizimi i komponentit Y (poshtë në majë) është më i dukshëm. Ndryshimi edhe i vogël është i perceptueshëm.
Kthimi i imazhit nga RGB në YCbCr nuk e zvogëlon madhësinë e skedarit, por e lehtëson gjetjen e detajeve më pak të dukshme që mund të hiqen. Pastaçimi me humbje ndodh në hapin e dytë. Në bazë të saj është ideja e paraqitjes së të dhënave në një formë më të kompresueshme.
2. Transformimi diskret i kosinusit dhe diskretizimi
Ky nivel kompresimi pothuajse përcakton thelbin e JPEG. Pasi të ketë ndodhur kthimi i ngjyrave në YCbCr, komponentët kompresohen veçmas, kështu që më pas mund të përqendrohemi vetëm në komponentin Y. Ja si duken bajtët e komponentit Y pas aplikimit të këtij niveli.

(Versioni interaktiv â nĂ« artikuj). NĂ« versionin interaktiv, klikimi mbi njĂ« piksel shfaq redaktorin nĂ« rreshtin qĂ« e pĂ«rfaqĂ«son atĂ«. Provo tĂ« hiqni numrat nga fundi ose tĂ« shtoni disa zero nĂ« njĂ« numĂ«r tĂ« caktuar.
Me sa duket, duket si njĂ« kompresim shumĂ« i dobĂ«t. NĂ« imazh ka 100,000 pikselĂ«, dhe pĂ«r tĂ« pĂ«rfaqĂ«suar ndriçimin e tyre (komponenti Y) kĂ«rkohen 102,400 numra â kjo Ă«shtĂ« mĂ« keq se sa tĂ« mos kompresosh fare!
Sidoq të keni parasysh se shumica e këtyre numrave janë zero. Për më tepër, të gjitha këto zero në fund të rreshtave mund të hiqen pa ndryshuar imazhin. Mbeten rreth 26,000 numra, që është pothuajse katërfish më pak!
Në këtë nivel ndodhet sekreti i modeleve të shahut. Ndryshe nga efektet e tjera që kemi parë, shfaqja e këtyre modeleve nuk është një defekt. Ato janë blloqet ndërtimore të gjithë imazhit. Në secilën linjë të redaktuesit ka pikërisht 64 numra, koeficientë të transformimit të kosinusit diskret (DCT), që përkojnë me intensitetet e 64 modeleve unike.
Këto modele formohen mbi bazën e grafikut të kosinusit. Ja se si duken disa prej tyre:

8 nga 64 koeficientët
Më poshtë është një imazh që demonstrojnë të gjitha 64 modelet.

(Versioni interaktiv â nĂ« artikuj).
Këto modele kanë një rëndësi të veçantë, pasi formojnë bazën e imazheve me përmasa 8x8. Nëse nuk jeni familjarë me algebra lineare, kjo do të thotë se çdo imazh me përmasa 8x8 mund të gjenerohet nga këto 64 modele. DCT është një proces që ndan imazhet në blloqe 8x8 dhe e shndërron secilin bllok në një kombinim të këtyre 64 koeficientëve.
Ajo qĂ« çdo imazh mund tĂ« pĂ«rbĂ«het nga 64 modele tĂ« caktuara duket si magji. MegjithatĂ«, Ă«shtĂ« e njĂ«jtĂ« si tĂ« thuash se çdo vend nĂ« TokĂ« mund tĂ« pĂ«rshkruhet me dy numra â gjerĂ«sinĂ« dhe gjatĂ«si [me shĂ«nimin e hemisferave / shĂ«nim i pĂ«rkthyesit]. Ne shpesh e perceptojmĂ« sipĂ«rfaqen e TokĂ«s si dy-dimensionale, prandaj na duhen vetĂ«m dy numra. NjĂ« imazh 8x8 ka 64 dimensione, prandaj na duhen 64 numra.
Ende nuk është e qartë se si ndihmon kjo në aspektin e kompresimit. Nëse na duhen 64 numra për të përfaqësuar një imazh 8x8, pse ky metodë duhet të jetë më e mirë se sa thjesht ruajtja e 64 komponenteve të ndritshmërisë? E bëjmë këtë për të njëjtën arsye pse e kemi kthyer tre numra RGB në tre numra YCbCr: kjo na lejon të heqim detajet e padukshme.
ĂshtĂ« e vĂ«shtirĂ« tĂ« shohim se cilat detaje pĂ«rfundojnĂ« duke u hequr nĂ« kĂ«tĂ« fazĂ«, pasi JPEG aplikohet DCT nĂ« blloqet 8x8. SidoqoftĂ«, askush nuk na ndalon tĂ« aplikojmĂ« atĂ« nĂ« njĂ« imazh tĂ« tĂ«rĂ«. Kjo Ă«shtĂ«, si duket DCT pĂ«r komponentin Y nĂ« aplikim pĂ«r njĂ« imazh tĂ« tĂ«rĂ«:

Nga fundi, mund të hiqen më shumë se 60,000 numra pothuajse pa ndryshime të dukshme në fotografi.

Megjithatë, vini re se nëse anulojme pesë numrat e parë, diferenca do të jetë e dukshme.

Numrat në fillim tregojnë ndryshimet e frekuencave të ulëta në imazh, dhe sytë tanë i kapin më mirë ato. Numrat më afër fundin tregojnë ndryshimet e frekuencave të larta, të cilat janë më të vështira për t'u vënë re. Për të "shikuar atë që nuk është e dukshme", mund të izolojmë këto detaje me frekuencë të lartë duke anuluar numrat e parë 5000.

Ne shohim të gjitha zonat e imazhit ku ndodhin ndryshimet më të mëdha nga pikseli në piksël. Shquhen sytë e maceve, mustaqet e saj, batanijet dhe hije në këndin e poshtëm të majtë. Mund të shkojmë edhe më tej, duke anuluar numrat e parë 10 000:

20 000:

40 000:

60 000:

KĂ«to detaje me frekuencĂ« tĂ« lartĂ« JPEG dhe eliminon nĂ« fazĂ«n e kompresimit. Transformimi i ngjyrave nĂ« koeficientĂ« DCT nuk ka humbje. Humbjet ndodhin nĂ« hapin e diskretizimit, ku hiqen vlerat me frekuencĂ« tĂ« lartĂ« ose afĂ«r zeros. Kur ulni cilĂ«sinĂ« e ruajtjes JPEG, programi rrit pragun e numrit tĂ« vlerave qĂ« hiqen, gjĂ« qĂ« çon nĂ« reduktimin e madhĂ«sisĂ« sĂ« skedarit, por e bĂ«n imazhin mĂ« pikselizuar. Prandaj, imazhi nĂ« seksionin e parĂ«, i cili ishte 57 herĂ« mĂ« i vogĂ«l, dukej kĂ«shtu. Ădo bllok 8x8 paraqitej me njĂ« numĂ«r shumĂ« mĂ« tĂ« vogĂ«l koeficientĂ«sh DCT krahasuar me versionin mĂ« cilĂ«sor.
Mund të bëni një efekt të tillë të mrekullueshëm si transmetimi i gradualizuar i imazheve. Mund të shfaqni një imazh të mjegullt, i cili bëhet gjithnjë e më i detajuar ndërsa shkarkohet një numër në rritje koeficientësh.
Ja, thjesht për interes, çfarë do të ndodhë duke përdorur vetëm 24,000 numra:

Ose vetëm 5,000:

Shumë i mjegullt, por duket si i njohur!
3. Kodimi i serive të gjata, delta dhe Huffman
Der bisherige Kompressionsprozess hat immer verlustbehaftet funktioniert. Die letzte Phase hingegen erfolgt verlustfrei. Sie entfernt keine Informationen, reduziert jedoch erheblich die DateigröĂe.
Wie kann man etwas komprimieren, ohne Informationen zu verlieren? Stellen Sie sich vor, wie wir ein einfaches schwarzes Rechteck mit 700 x 437 beschreiben wĂŒrden.
JPEG verwendet dafĂŒr 5000 Zahlen, aber man könnte viel bessere Ergebnisse erzielen. Können Sie sich ein Kodierungsschema vorstellen, das ein solches Bild mit der geringstmöglichen Byte-Anzahl beschreibt?
Schematisch habe ich vier Zahlen entwickelt: drei zur Farbdarstellung und die vierte, um anzugeben, wie viele Pixel diese Farbe haben. Die Idee, wiederkehrende Werte auf diese kompakte Weise darzustellen, heiĂt Laufzeitkodierung. Sie ist verlustfrei, da wir die kodierten Daten in ihrer ursprĂŒnglichen Form wiederherstellen können.
TĂ« dhĂ«nat JPEG me njĂ« drejtkĂ«ndĂ«sh tĂ« zi janĂ« shumĂ« mĂ« tĂ« mĂ«dha se 4 byte â mbani mend se nĂ« nivelin DCT, kompresimi aplikohet nĂ« blloqe 8x8 piksel. Prandaj, na nevojitet tĂ« paktĂ«n njĂ« koeficient DCT pĂ«r çdo 64 piksel. NjĂ« koeficient Ă«shtĂ« i nevojshĂ«m sepse, nĂ« vend qĂ« tĂ« ruajmĂ« njĂ« koeficient DCT pas tĂ« cilit ndodhin 63 zero, kodimi i seri-zhgjidhjeve na lejon tĂ« ruajmĂ« njĂ« numĂ«r dhe tĂ« tregojmĂ« se "tĂ« gjitha tĂ« tjerat janĂ« zero".
Delta-kodimi është një teknikë në të cilën çdo byte përmban ndryshimin nga një vlerë e caktuar, dhe jo një sasi absolute. Prandaj, redaktimi i disa byte përmban ndryshimin e ngjyrës së të gjitha pikseve të tjera. Për shembull, në vend që të ruajmë
12 13 14 14 14 13 13 14
Mund të fillonim me 12, e pastaj thjesht të tregojmë se sa duhen shtuar ose zbritur për të marrë numrin pasues. Dhe kjo sekuencë në delta-kodim merr këtë formë:
12 1 1 0 0 -1 0 1
Të dhënat e përpunuara nuk bëhen më të vogla se të dhënat origjinale, por kompresimi bëhet më i lehtë. Përdorimi i delta-kodimit para kodimit të seri-zhgjidhjeve mund të ndihmojë shumë, duke mbetur gjithashtu me kompresim pa humbje.
Kodimi i delta-së është një nga pak teknikat që përdoren jashtë blloqeve 8x8. Nga 64 koeficientët DCT, njëri është thjesht një funksion valë konstant (ngjyrë e njëtrajtshme). Ai paraqet ndriçimin mesatar të çdo blloku për komponentët e ndriçimit, ose bluazë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 kalon përmes kodimit delta në marrëdhënie me të mëparshmet. Prandaj, ndryshimi i ndriçimit të bllokut të parë do të ndikojë te të gjithë blloçet.
Nuk mbetet veçse misteri i fundit: si ndryshimi i njĂ« numri tĂ« vetĂ«m shkatĂ«rron krejtĂ«sisht tĂ«rĂ« imazhin? Deri tani, nivelet e kompresionit nuk kishin kĂ«tĂ« pronĂ«. PĂ«rgjigja qĂ«ndron nĂ« titullin JPEG. 500 bajtĂ«ve tĂ« parĂ« pĂ«rmbajnĂ« treguesit mbi imazhin â gjerĂ«sinĂ«, lartĂ«sinĂ«, etj., dhe derisa ne nuk kemi punuar me ta.
Pa të zhveshësh një JPEG, pa një krye është pothuajse e pamundur (ose shumë e vështirë). Do të dukej sikur po përpiqem t'i përshkruaj një pikturë dhe filloj të shpik fjalë për të shprehur përshtypjen time. Përshkrimi do të jetë, ndoshta, mjaft i shkurtër, pasi mund të shpik fjalë me kuptimin që dua të shpreh, por për të tjerët ato nuk do të kenë sens.
Mund tĂ« tingĂ«llojĂ« e çuditshme, por kĂ«shtu ndodh. Ădo imazh JPEG kompresohet me kode specifike vetĂ«m pĂ«r tĂ«. Fjalori i kodeve ruhet nĂ« krye. Kjo teknikĂ« quhet "kode Haffman", dhe fjalori Ă«shtĂ« tabela Haffman. NĂ« krye, tabela shĂ«nohet me dy bajta â 255 dhe pastaj 196. Ădo pĂ«rbĂ«rĂ«s ngjyrĂ« mund tĂ« ketĂ« tabelĂ«n e vet.
Ndryshimet në tabela do të ndikojnë në mënyrë radikale në çdo imazh. Një shembull i mirë është ndërrimi i 1 me 12 në rreshtin e 15.

Kjo ndodh sepse në tabela përcaktohet se si duhet lexuar secili bit. Deri tani kemi punuar vetëm me numra binarë në formën dhjetore. Por kjo na fsheh faktin se nëse dëshironi të ruani numrin 1 në një byte, ai do të duket si 00000001, pasi në çdo byte duhet të ketë saktësisht tetë bite, edhe nëse ne na nevojitet vetëm një prej tyre.
Potencialisht, kjo është një humbje e madhe hapsire, nëse keni shumë numra të vegjël. Kodi Huffman është një teknikë që na lejon të zbusim këtë kërkesë, sipas së cilës çdo numër duhet të marrë tetë bite. Kjo do të thotë se nëse shihni dy byte:
234 115
atĂ«herĂ«, nĂ« varĂ«si tĂ« tabelĂ«s Huffman, kĂ«to mund tĂ« jenĂ« tri numra. PĂ«r tâi nxjerrĂ«, ju duhet sĂ« pari tâi ndani ato nĂ« bite tĂ« veçantĂ«:
11101010 01110011
Pastaj kthehemi te tabela pĂ«r tĂ« kuptuar se si tâi gruponi. PĂ«r shembull, kĂ«to mund tĂ« jenĂ« gjashtĂ« bitet e para (111010), ose 58 nĂ« sistemin dhjetor, pas tĂ« cilave vijnĂ« pesĂ« bite (10011), ose 19, dhe pĂ«rfundimisht katĂ«r bitet e fundit (0011), ose 3.
Prandaj është shumë e vështirë të kuptosh bajtat në këtë fazë të kompresimit. Bajtat nuk përfaqësojnë atë që duken. Nuk do të thellohem në detajet e punës me tabelën në këtë artikull, por për këtë çështje në internet .
NjĂ« nga truket interesante qĂ« mund tĂ« bĂ«ni, duke e ditur kĂ«tĂ« â Ă«shtĂ« tĂ« ndaheni titulli nga JPEG dhe ta ruani atĂ« veçmas. NĂ« thelb, do tĂ« rezultojĂ« qĂ« vetĂ«m ju do tĂ« mund ta lexoni skedarin. Facebook e bĂ«n kĂ«tĂ« pĂ«r tĂ« reduktuar edhe mĂ« shumĂ« skedarĂ«t.
ĂfarĂ« tjetĂ«r mund tĂ« bĂ«ni â ndryshoni paksa tabelĂ«n e Huffman-it. PĂ«r tĂ« tjerĂ«t, do tĂ« duket si njĂ« imazh i prishur. Dhe vetĂ«m ju do tĂ« dini versionin magjik pĂ«r ta korrigjuar atĂ«.
TĂ« pĂ«rmbledhim: çfarĂ« nevojitet pĂ«r dekodimin e JPEG? ĂshtĂ« e nevojshme:
- Të nxirren tabelat e Huffman-it nga titulli dhe të dekodohen bitët.
- Të nxirren koeficientët e transformimit të kosinusit të diskretuar për çdo komponent ngjyre dhe ndriçimi për çdo bllok 8x8, duke kryer transformimet inverse të kodimit të gjatë të serive dhe delta.
- Të kombinohen kosinusët bazuar në koeficientët për të marrë vlerat e pikselëve për secilin bllok 8x8.
- Të shkallëzoni komponentët e ngjyrave, nëse është kryer subdisekrimi (kjo informacion është në titull).
- Përcaktoni vlerat e marra YCbCr për çdo piksel në RGB.
- Shfaqni imazhin në ekran!
Një punë e rëndë për një shikim të thjeshtë të një fotografie me mace! Megjithatë, ajo që më pëlqen është se tregon se sa e orientuar ndaj njeriut është teknologjia JPEG. Ajo bazohet në karakteristikat e perceptimit tonë, duke lejuar një komprimim shumë më të mirë se teknologjitë e zakonshme. Tani, duke kuptuar se si funksionon JPEG, mund të imagjinojmë se si këto teknologji mund të aplikohen në fusha të tjera. Për shembull, kodimi delta në video mund të sjellë një reduktim të rëndësishëm të madhësisë së skedarit, pasi shpesh ka zona të tëra që nuk ndryshojnë nga kadri në kadër (p.sh., sfondi).
, është i hapur dhe përmban udhëzime për të zëvendësuar imazhet me ato të tuat.
Burimi: habr.com
