JPEG. Compression algorithm

Hello usab! Nakita nako kini nga artikulo nga gisulat kaniadtong Mayo 2019. Kini usa ka pagpadayon sa serye sa mga artikulo bahin sa WAVE ug JPEG, dinhi una. Ang kini nga publikasyon maglakip sa kasayuran bahin sa algorithm sa pag-encode sa imahe ug ang format mismo sa kinatibuk-an.

Usa ka pitsa sa kasaysayan

Usa ka kutsara sa artikulo sa Wikipedia:

Ang JPEG (Joint Photographic Experts Group) maoy usa sa popular nga raster graphics formats nga gigamit sa pagtipig og mga litrato ug susamang mga hulagway.

Kini nga sumbanan gimugna sa Joint Photographic Experts Group kaniadtong 1991 alang sa episyente nga pag-compress sa imahe.

Sa unsa nga paagi ang mga imahe moadto gikan sa hilaw hangtod sa JPEG?

Ang ubang mga tawo naghunahuna nga ang JPEG nga mga hulagway kay hilaw nga datos nga gi-compress gamit ang Huffman nga pamaagi, apan kini dili tinuod. Sa dili pa makontrol ang compression, ang data mobiyahe ug layo.

Una, ang modelo sa kolor giusab gikan sa RGB ngadto sa YCbCr. Adunay bisan usa ka espesyal nga algorithm alang niini - dinhi. Ang Y dili matandog, tungod kay kini ang responsable sa kahayag, ug ang pagbag-o niini mamatikdan.

Ang una nga butang nga buhaton sa imahe mao ang "pagnipis" (subsampling). Sayon nga sabton: gikuha ang usa ka 2x2 nga laray sa mga piksel, unya gikuha ang Cb ug Cr - ang kasagaran nga mga kantidad sa matag usa sa mga sangkap sa YCbCr sa kini nga 4 nga mga piksel. Busa, nakadaog mi ug 6 bytes, imbes nga 4 Y, 4 Cb, 4 Cr nakuha namo ang 4 Y ug parehas nga Cb ug Cr sa matag usa kanila (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Bisan sa 2x2 scale, ang lossy compression nga adunay 2:1 compression ratio daw solid. Kini magamit sa tibuok nga hulagway. Ug mao nga - sila mihulog sa katunga sa usa ka gidak-on. Ug magamit nato kini nga teknik salamat sa atong panglantaw sa kolor. Ang usa ka tawo dali nga makamatikod sa usa ka kalainan sa kahayag, apan dili sa kolor, kung kini gi-average sa usa ka gamay nga bloke sa mga pixel. Ang pagpanipis mahimo usab nga buhaton sa usa ka linya, 4 ka pixel nga pinahigda ug patindog. Ang una nga kapilian gigamit nga mas kanunay. Kung ang kalidad sa imahe hinungdanon, nan ang pag-decimation wala gyud gihimo.
Usa ka biswal nga ilustrasyon sa pagnipis (wala ako gitugutan ni Habr nga magsal-ot ug gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Ang nag-unang bahin sa pagpangandam

Dkp

Karon moabut ang pinakalisud ug gikinahanglan nga bahin. Ang tibuok nga hulagway gibahin ngadto sa 8x8 nga mga bloke (gigamit ang pagpuno kon ang resolusyon dili usa ka multiple sa block side).

Karon i-apply sa matag bloke DCT (Discrete Cosine Transform). Niini nga bahin, ang tanan nga wala kinahanglana gikuha gikan sa litrato. Gamit ang DCT, kinahanglan nimong masabtan kung ang gihatag nga bloke (8 Γ— 8) naghulagway sa bisan unsang monotonous nga bahin sa imahe: ang langit, ang bungbong; o kini adunay komplikado nga istruktura (buhok, mga simbolo, ug uban pa). Makataronganon nga ang 64 ka pixel nga parehas nga kolor mahulagway sa 1 lang, tungod kay nahibal-an na ang gidak-on sa block. Daghan kaayo alang sa compression: 64 hangtod 1.

Gihimo sa DCT ang bloke nga usa ka spectrum, ug kung diin ang mga pagbasa mabag-o, ang coefficient mahimong positibo, ug ang labi ka hait nga pagbalhin, labi ka taas ang output. Kung ang coefficient mas taas, ang hulagway nagpakita sa tin-aw nga mga transisyon sa kolor ug kahayag, diin kini mas ubos - huyang (hapsay) nga mga pagbag-o sa mga bili sa mga sangkap sa YCbCr sa block.

Quantization

Ang mga setting sa compression gipadapat na dinhi. Ang matag usa sa mga coefficient sa matag usa sa 8x8 matrices gibahin sa usa ka piho nga numero. Kung dili nimo mapakunhod ang kalidad sa imahe pagkahuman sa tanan nga mga pagbag-o, nan ang divisor kinahanglan usa. Kung ang panumduman nga giokupar niini nga litrato mas importante kanimo, nan ang divisor mas dako pa kay sa 1, ug ang quotient mabilog. Kini nahimo nga pagkahuman sa pag-rounding kanunay ka nga adunay daghang mga zero.

Gihimo ang quantization aron mahimo ang posibilidad nga mas dako pa ang compression. Ania kung unsa ang hitsura gamit ang pananglitan sa pag-quantize sa graph y = sin (x):

JPEG. Compression algorithm

Pagpugong

Una kita moagi sa matrix sa usa ka zig-zag pattern:

JPEG. Compression algorithm

Nakuha namon ang usa ka dimensyon nga array nga adunay mga numero. Nakita namon nga adunay daghang mga sero niini, mahimo silang makuha. Aron mahimo kini, imbes nga usa ka han-ay sa daghang mga zero, kita mosulod sa 1 zero ug human niini usa ka numero nga nagpakita sa ilang numero sa han-ay. Niining paagiha mahimo nimong i-reset sa 1/3 ang gidak-on sa tibuuk nga array. Ug dayon gi-compress lang namo kini nga array gamit ang Huffman nga pamaagi ug isulat kini sa file mismo.

Kung diin gigamit

Bisan asa. Sama sa PNG, ang JPEG gigamit sa mga camera, OS (isip mga logo sa kompanya, mga icon sa aplikasyon, mga thumbnail) ug sa tanan nga posible nga mga lugar diin ang mga imahe kinahanglan nga maayo nga tipigan.

konklusyon

Sa pagkakaron, ang kahibalo bahin sa JPEG karon bililhon lamang alang sa mga katuyoan sa edukasyon, tungod kay kini gitukod na bisan asa ug gi-optimize sa daghang mga grupo sa mga tawo, apan ang granite sa siyensya lami gihapon.

Mga tinubdan

Artikulo bahin sa YCbCr sa Wikipedia
Artikulo sa Wikipedia sa JPEG
Usa ka gamay bahin sa PrEP gikan sa post sa Pikabu
Artikulo sa Wikipedia sa PrEP

Source: www.habr.com

Idugang sa usa ka comment