JPEG. Algoritmi i kompresimit

Përsëri përshëndetje! E kam gjetur këtë artikull të shkruar që në maj 2019. Ky është vazhdimi i një serie artikujsh mbi WAVE dhe JPEG. Këtu e parë. Kjo publikim do të përfshijë informacione në lidhje me algoritmin e kodimit të imazheve dhe formatin si të tillë.

Një dozë historie

Një lugë artikulli nga Wikipedia:

JPEG (Grupi i Ekspertëve Përfotografik) është një nga formatet më të njohura grafike raster, të përdorura për ruajtjen e imazheve fotografike dhe imazheve të ngjashme.

Ky standard është zhvilluar nga një grup i bashkuar ekspertësh në fotografinë që në vitin 1991 për kompresimin efikas të imazheve.

Cili është rrugëtimi i imazheve nga forma e papërpunuar në JPEG

Disa mendojnë se imazhet JPEG janë të dhëna të papërpunuara të kompresuara me metodën Huffman, por kjo nuk është e vërtetë. Para kompresimit final, të dhënat kalojnë një rrugë të gjatë.

Fillimisht, modeli i ngjyrĂ«s ndryshohet nga RGB nĂ« YCbCr. PĂ«r kĂ«tĂ« ka njĂ« algoritĂ«m tĂ« veçantĂ« — kĂ«tu. Y-nuk preket pasi ai Ă«shtĂ« pĂ«rgjegjĂ«s pĂ«r ndriçimin, dhe ndryshimi i tij do tĂ« jetĂ« i dukshĂ«m.

E para qĂ« bĂ«het me imazhin Ă«shtĂ« «subsampling» . E kuptoni lehtĂ«sisht: merret njĂ« grumbull 2x2 pikselĂ«sh, dhe pastaj Cb dhe Cr janĂ« vlerat mesatare tĂ« secilĂ«s nga pĂ«rbĂ«rĂ«sit YCbCr tĂ« kĂ«tyre 4 pikselĂ«ve. KĂ«shtu fituam 6 byte, nĂ« vend tĂ« 4 Y, 4 Cb, 4 Cr ne morĂ«m 4 Y dhe tĂ« njĂ«jtat pĂ«r secilin Cb dhe Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 — 6 = 6). NĂ« masat e dyfishta 2×2, kompresimi me humbje me njĂ« raport kompresimi prej 2:1 duket i pĂ«rshtatshĂ«m. Kjo aplikohet nĂ« tĂ« gjithĂ« imazhin. Dhe kĂ«shtu — e kemi ulur gjysmĂ«n e madhĂ«sisĂ«. TĂ« tillĂ« njĂ« teknikĂ« mund tĂ« pĂ«rdoret falĂ« perceptimit tonĂ« tĂ« ngjyrave. Njeriu e vĂ« re lehtĂ«sisht ndryshimin nĂ« ndriçim, por jo nĂ« ngjyrĂ«, nĂ«se ajo Ă«shtĂ« mesatarizuar nĂ« njĂ« bllok tĂ« vogĂ«l pikselesh. Gjithashtu, subsampling mund tĂ« bĂ«het nĂ« vijĂ«, 4 pikselĂ« horizontalisht dhe verticalisht. Varianti i parĂ« pĂ«rdoret mĂ« shpesh. NĂ«se cilĂ«sia e imazhit Ă«shtĂ« e rĂ«ndĂ«sishme, atĂ«herĂ« subsampling nuk bĂ«het aspak.
Ilustrimi vizual i subsampling-ut (Habr nuk dha mundĂ«si tĂ« ngarkohej njĂ« gif) — https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Pjesa kryesore e përgatitjes

DCP

Tani pjesa mĂ« e ndĂ«rlikuar dhe e nevojshme. Imazhi ndahet nĂ« bllok 8×8 (pĂ«rdoret mbushja nĂ« rast se rezolucioni nuk Ă«shtĂ« shumĂ«fish i anĂ«s sĂ« bllokut).

Tani çdo bllok i nĂ«nshtrohet DCP (Transformimi Diskret i Kosinuseve). NĂ« kĂ«tĂ« pjesĂ«, heqim gjithçka tĂ« tepĂ«rt nga imazhi. Duke pĂ«rdorur DCP Ă«shtĂ« e nevojshme tĂ« kuptohet se a pĂ«rshkruan ky bllok (8x8) ndonjĂ« pjesĂ« monotone tĂ« imazhit: qielli, muret; apo ai pĂ«rmban njĂ« strukturĂ« tĂ« ndĂ«rlikuar (flokĂ«, simbole etj.). ËshtĂ« logjike qĂ« 64 pikselĂ« tĂ« ngjashĂ«m me ngjyrĂ« mund tĂ« pĂ«rshkruhen vetĂ«m me 1, pasi madhĂ«sia e bllokut Ă«shtĂ« tashmĂ« e njohur. KĂ«shtu kemi kompresim: 64 deri nĂ« 1.

DCP e kthen bllokun nĂ« spektrin, dhe atje ku treguesit ndahen menjĂ«herĂ«, koeficienti bĂ«het pozitiv, dhe sa mĂ« sharp tĂ« jetĂ« kalimi, aq mĂ« i lartĂ« do tĂ« jetĂ« rezultati. Atje ku koeficienti Ă«shtĂ« mĂ« i lartĂ«, nĂ« imazh janĂ« pasqyruar kalime tĂ« qarta tĂ« ngjyrĂ«s dhe ndriçimit, ku ai Ă«shtĂ« mĂ« i ulĂ«t — ndĂ«rrime tĂ« dobĂ«ta (tĂ« qetĂ«) tĂ« vlerave tĂ« pĂ«rbĂ«rĂ«sve YCbCr nĂ« bllok.

Kuantimi

KĂ«tu veprohen cilĂ«simet e kompresimit. Çdo koeficient nĂ« çdo matricĂ« 8×8 ndahet me njĂ« numĂ«r tĂ« caktuar. NĂ«se cilĂ«sia e imazhit pas tĂ« gjitha modifikimeve nuk do tĂ« ulet mĂ«, atĂ«herĂ« ndahĂ«si duhet tĂ« jetĂ« njĂ«si. NĂ«se ju Ă«shtĂ« mĂ« e rĂ«ndĂ«sishme memoria qĂ« zĂ« kjo fotografi, atĂ«herĂ« ndahĂ«si do tĂ« jetĂ« mĂ« i madh se 1, dhe rezultati rroundohet. KĂ«shtu ndodh qĂ« pas rroundimit shpesh rezulton shumĂ« zero.

Kuantimi bëhet për të krijuar mundësi për kompresim edhe më të madh. Kështu duket shembulli i kuantimit të grafikës y = sin(x):

JPEG. Algoritmi i kompresimit

Komprimi

Fillimisht kalojmë përmes matricës zig-zag:

JPEG. Algoritmi i kompresimit

Marrim një varg të vetëm me numra. Shohim se ka shumë zero, ato mund të hiqen. Për këtë, në vend të një sekuence me shumë zero vendosim 1 zero dhe pas tij numrin që tregon sasinë e tyre në sekuencë. Kështu, mund të ulim deri në 1/3 të madhësisë së gjithë vargut. Më pas, thjesht e kompresojmë këtë varg me metodën e Huffman-it dhe e shkruajmë në vetë skedarin.

Ku përdoret

Këtu. Ashtu si me PNG, JPEG përdoret në aparat fotografikë, OS-e (si logo kompanish, ikona aplikacionesh, thumbnail-e) dhe në të gjitha fushat ku nevojitet ruajtja efikase e imazheve.

Përfundim

Aktualisht, njohuritë mbi JPEG janë të vlefshme vetëm për qëllime edukative, sepse ato janë tashmë të integruara kudo dhe optimizuar nga grupe të mëdha njerëzish, megjithatë, shkenca është akoma një gjë e këndshme.

Burimet

Artikulli mbi YCbCr në Wikipedia
Artikulli mbi JPEG në Wikipedia
Pak mbi DCP nga postimi në Pikabu
Artikulli mbi DCP në Wikipedia

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster