JPEG. Algorithm teannachaidh

Halo a-rithist! Lorg mi an artaigil seo sgrìobhte air ais sa Chèitean 2019. Tha seo a’ leantainn air sreath de artaigilean mu WAVE agus JPEG, an seo an toiseach. Bidh an fhoillseachadh seo a’ toirt a-steach fiosrachadh mun algairim còdachadh ìomhaighean agus an cruth fhèin gu h-iomlan.

Pìos de dh'eachdraidh

spàin-bùird de artaigil Wikipedia:

Tha JPEG (Co-bhuidheann de eòlaichean dhealbhan) mar aon de na cruthan grafaigean raster mòr-chòrdte a thathas a’ cleachdadh airson dealbhan agus ìomhaighean coltach ris a stòradh.

Chaidh an inbhe seo a leasachadh leis a’ Bhuidheann Eòlaichean Dealbhan air ais ann an 1991 airson teannachadh ìomhaigh èifeachdach.

Ciamar a thèid dealbhan bho amh gu JPEG?

Tha cuid den bheachd gur e dàta amh a th’ ann an ìomhaighean JPEG a’ cleachdadh modh Huffman, ach chan eil seo fìor. Mus tèid smachd a chumail air teannachadh, bidh dàta a’ siubhal astar fada.

An toiseach, tha am modail dath air atharrachadh bho RGB gu YCbCr. Tha eadhon algorithm sònraichte ann airson seo - an seo. Chan eilear a’ suathadh ri Y, oir tha e an urra ri soilleireachd, agus bidh an atharrachadh aige follaiseach.

Is e a 'chiad rud a nì thu leis an ìomhaigh "tanadh" (fo-shamhlachadh). Tha e furasta a thuigsinn: thèid sreath 2 × 2 de piogsail a ghabhail, an uairsin thèid Cb agus Cr a ghabhail - luachan cuibheasach gach aon de na pàirtean YCbCr de na 4 piogsail sin. Mar sin, Bhuannaich sinn 6 bytes, an àite 4 Y, 4 Cb, 4 Cr fhuair sinn 4 Y agus an aon Cb agus Cr airson gach fear dhiubh (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Aig eadhon sgèile 2 × 2, tha teannachadh cally le co-mheas teannachaidh 2: 1 a ’fuaimeachadh cruaidh. Tha seo a 'buntainn ris an ìomhaigh gu lèir. Agus mar sin - thuit iad gu leth meud. Agus is urrainn dhuinn an dòigh seo a chleachdadh le taing don tuigse dath againn. Mothaichidh neach gu furasta eadar-dhealachadh ann an soilleireachd, ach chan ann ann an dath, ma tha e cuibheasach thairis air bloc beag de piogsail. Faodar tanachadh a dhèanamh cuideachd ann an loidhne, 4 piogsail gu còmhnard agus gu dìreach. Tha a 'chiad roghainn air a chleachdadh nas trice. Ma tha càileachd ìomhaigh cudromach, chan eil lughdachadh sam bith air a dhèanamh.
Dealbh lèirsinneach de tanachadh (cha leig Habr leam gif a chuir a-steach) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Am prìomh phàirt den ullachadh

PrEP

A-nis thig am pàirt as cruaidhe agus as fheumaile. Tha an ìomhaigh gu lèir air a roinn ann am blocaichean 8 × 8 (tha lìonadh air a chleachdadh mura h-eil an rùn iomadaidh taobh a’ bhloc).

A-nis cuir a-steach airson gach bloc DCT (cruth-atharrachadh cosine air leth). Anns a 'phàirt seo, thèid a h-uile dad neo-riatanach a thoirt a-mach às an dealbh. A’ cleachdadh DCT, feumaidh tu tuigsinn a bheil bloc sònraichte (8 × 8) a’ toirt cunntas air pàirt monotonous sam bith den ìomhaigh: an speur, am balla; no tha structar iom-fhillte ann (falt, samhlaidhean, msaa). Tha e loidsigeach gum faodar 64 piogsail den aon dath a mhìneachadh le dìreach 1, oir tha fios mu mheud a’ bhloca mu thràth. Na h-uimhir airson an teannachadh: 64 gu 1.

Bidh DCT a ’tionndadh a’ bhloc gu speactram, agus far a bheil na leughaidhean ag atharrachadh gu mòr, bidh an co-èifeachd a ’fàs deimhinneach, agus mar as gèire a bhios an gluasad, is ann as àirde a bhios an toradh. Far a bheil an co-èifeachd nas àirde, tha an dealbh a 'sealltainn eadar-ghluasadan soilleir ann an dath agus soilleireachd, far a bheil e nas ìsle - atharrachaidhean lag (rèidh) ann an luachan co-phàirtean YCbCr sa bhloc.

Cainntearachd

Tha roghainnean teannachaidh air an cur an sàs an seo mu thràth. Tha gach aon de na co-èifeachdan anns gach aon de na matrices 8x8 air a roinn le àireamh sònraichte. Mura lughdaich thu càileachd ìomhaigh às deidh a h-uile atharrachadh, bu chòir don roinnear a bhith mar aon. Ma tha an cuimhne a tha san dealbh seo nas cudromaiche dhut, bidh an roinnear nas motha na 1, agus thèid an àireamh a chruinneachadh. Tha e a 'tionndadh a-mach gu bheil an dèidh cruinneachadh thu gu tric a' tighinn gu crìch le tòrr neoni.

Bithear a’ tomhas gus am bi e comasach teannachadh eadhon nas motha a chruthachadh. Seo cò ris a tha e coltach a’ cleachdadh an eisimpleir de bhith a’ tomhas a’ ghraf y = sin(x):

JPEG. Algorithm teannachaidh

Compression

An toiseach thèid sinn tron ​​​​mhaitris ann am pàtran zig-zag:

JPEG. Algorithm teannachaidh

Gheibh sinn sreath aon-thaobhach le àireamhan. Tha sinn a 'faicinn gu bheil tòrr neamhan ann, faodar an toirt air falbh. Gus seo a dhèanamh, an àite sreath de iomadh neoni, bidh sinn a’ dol a-steach 1 neoni agus às a dhèidh àireamh a’ sealltainn an àireamh aca san t-sreath. San dòigh seo faodaidh tu ath-shuidheachadh gu 1/3 meud an t-sreath gu lèir. Agus an uairsin bidh sinn dìreach a’ teannachadh an t-sreath seo a ’cleachdadh modh Huffman agus ga sgrìobhadh a-steach don fhaidhle fhèin.

Far a bheilear a ’cleachdadh

Anns gach àite. Coltach ri PNG, tha JPEG air a chleachdadh ann an camarathan, OSn (mar suaicheantasan companaidh, ìomhaighean tagraidh, òrdagan) agus anns a h-uile raon a dh’ fhaodadh a bhith ann far am feumar ìomhaighean a stòradh gu h-èifeachdach.

co-dhùnadh

Aig an àm seo, tha eòlas air JPEG a-nis luachmhor a-mhàin airson adhbharan foghlaim, oir tha e mu thràth air a thogail anns a h-uile àite agus air a bharrrachadh le buidhnean mòra de dhaoine, ach tha clach-ghràin saidheans fhathast blasta.

Stòran

Artaigil mu YCbCr air Wikipedia
Artaigil Wikipedia air JPEG
Beagan mu PrEP bhon phost Pikabu
Artaigil Wikipedia air PrEP

Source: www.habr.com

Cuir beachd ann