JPEG. Սեղմման ալգորիթմ

Կրկին ողջույն! Ես գտա այս հոդվածը գրված դեռ 2019 թվականի մայիսին: Սա WAVE-ի և JPEG-ի մասին հոդվածների շարունակությունն է՝ այստեղ առաջին. Այս հրապարակումը կներառի տեղեկատվություն պատկերի կոդավորման ալգորիթմի և ձևաչափի մասին որպես ամբողջություն:

Մի պտղունց պատմություն

Վիքիպեդիայի հոդվածի մի ճաշի գդալ.

JPEG-ը (Joint Photographic Experts Group) ռաստերային գրաֆիկայի հայտնի ձևաչափերից մեկն է, որն օգտագործվում է լուսանկարներ և նմանատիպ պատկերներ պահելու համար:

Այս ստանդարտը մշակվել է Joint Photographic Experts Group-ի կողմից դեռևս 1991 թվականին՝ պատկերի արդյունավետ սեղմման համար:

Ինչպե՞ս են պատկերները հումքից դառնում JPEG:

Որոշ մարդիկ կարծում են, որ JPEG պատկերները հում տվյալներ են, որոնք սեղմված են Huffman մեթոդով, բայց դա ճիշտ չէ: Նախքան հսկիչ սեղմումը, տվյալները երկար ճանապարհ են անցնում:

Նախ, գունային մոդելը փոխվում է RGB-ից YCbCr-ի: Դրա համար նույնիսկ հատուկ ալգորիթմ կա. այստեղ. Y-ն չի շոշափվում, քանի որ այն պատասխանատու է պայծառության համար, և դրա փոփոխությունը նկատելի կլինի:

Պատկերի հետ կապված առաջին բանը «նոսրացում» (ենթանմուշառում): Հեշտ է հասկանալ. վերցվում է պիքսելների 2x2 զանգված, այնուհետև վերցվում են Cb և Cr - այս 4 պիքսելների YCbCr բաղադրիչներից յուրաքանչյուրի միջին արժեքները: Այսպիսով, մենք շահեցինք 6 բայթ, 4 Y, 4 Cb, 4 Cr-ի փոխարեն ստացանք 4 Y և նրանցից յուրաքանչյուրի համար նույն Cb և Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6): Նույնիսկ 2x2 մասշտաբով, 2:1 սեղմման հարաբերակցությամբ կորստի սեղմումը ամուր է հնչում: Սա վերաբերում է ամբողջ պատկերին: Եվ այսպես, նրանք կիսով չափ գցեցին: Եվ մենք կարող ենք օգտագործել այս տեխնիկան մեր գունային ընկալման շնորհիվ: Մարդը հեշտությամբ կնկատի պայծառության տարբերությունը, բայց ոչ գույնի, եթե այն միջինացված լինի պիքսելների փոքր բլոկի վրա: Նիհարելը կարող է կատարվել նաև գծով՝ 4 պիքսել հորիզոնական և ուղղահայաց։ Առաջին տարբերակը ավելի հաճախ օգտագործվում է. Եթե ​​պատկերի որակը կարևոր է, ապա ջնջում ընդհանրապես չի իրականացվում:
Նիհարելու տեսողական նկարազարդում (Հաբրը թույլ չտվեց ինձ տեղադրել gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Նախապատրաստման հիմնական մասը

PrEP

Հիմա գալիս է ամենադժվարն ու անհրաժեշտ մասը։ Ամբողջ պատկերը բաժանված է 8x8 բլոկների (լրացումն օգտագործվում է, եթե լուծումը բլոկի կողմի բազմապատիկ չէ):

Այժմ կիրառեք յուրաքանչյուր բլոկի վրա DCT (դիսկրետ կոսինուսի փոխակերպում). Այս հատվածում պատկերից հանված է ամեն ավելորդ։ Օգտագործելով DCT, դուք պետք է հասկանաք, թե արդյոք տվյալ բլոկը (8×8) նկարագրում է պատկերի որևէ միապաղաղ հատված՝ երկինք, պատ; կամ այն ​​պարունակում է բարդ կառուցվածք (մազեր, սիմվոլներ և այլն): Տրամաբանական է, որ նմանատիպ գույնի 64 պիքսել կարելի է նկարագրել ընդամենը 1-ով, քանի որ բլոկի չափն արդեն հայտնի է։ Այսքանը սեղմման համար՝ 64-ից 1:

DCT-ը բլոկը վերածում է սպեկտրի, և որտեղ ցուցումները կտրուկ փոխվում են, գործակիցը դառնում է դրական, և որքան կտրուկ է անցումը, այնքան բարձր կլինի ելքը: Այնտեղ, որտեղ գործակիցն ավելի բարձր է, նկարը ցույց է տալիս գույնի և պայծառության հստակ անցումներ, որտեղ այն ավելի ցածր է՝ բլոկում YCbCr բաղադրիչների արժեքների թույլ (սահուն) փոփոխությունները:

Քվանտացում

Այստեղ արդեն կիրառվում են սեղմման կարգավորումները: 8x8 մատրիցներից յուրաքանչյուրի գործակիցներից յուրաքանչյուրը բաժանվում է որոշակի թվի։ Եթե ​​դուք չեք նվազեցնի պատկերի որակը նրա բոլոր փոփոխություններից հետո, ապա բաժանարարը պետք է լինի մեկը: Եթե ​​այս լուսանկարի զբաղեցրած հիշողությունը ձեզ համար ավելի կարևոր է, ապա բաժանարարը մեծ կլինի 1-ից, իսկ գործակիցը կկլորացվի։ Պարզվում է, որ կլորացումից հետո դուք հաճախ հայտնվում եք շատ զրոներով։

Քվանտացումը կատարվում է նույնիսկ ավելի մեծ սեղմման հնարավորություն ստեղծելու համար։ Ահա թե ինչ տեսք ունի՝ օգտագործելով y = sin(x) գրաֆիկի քանակականացման օրինակը.

JPEG. Սեղմման ալգորիթմ

Սեղմում

Սկզբում մենք անցնում ենք մատրիցով զիգ-զագ ձևով.

JPEG. Սեղմման ալգորիթմ

Ստանում ենք թվերով միաչափ զանգված։ Մենք տեսնում ենք, որ դրա մեջ շատ զրոներ կան, դրանք կարելի է հեռացնել։ Դա անելու համար բազմաթիվ զրոների հաջորդականության փոխարեն մուտքագրում ենք 1 զրո, իսկ դրանից հետո հաջորդականության մեջ դրանց թիվը ցույց տվող թիվ։ Այս կերպ Դուք կարող եք վերականգնել ամբողջ զանգվածի 1/3 չափը: Եվ հետո մենք պարզապես սեղմում ենք այս զանգվածը՝ օգտագործելով Huffman մեթոդը և գրում այն ​​հենց ֆայլում:

Որտեղ օգտագործել

Ամենուր. Ինչպես PNG-ը, JPEG-ն օգտագործվում է տեսախցիկներում, ՕՀ-ներում (որպես ընկերության լոգոներ, հավելվածների պատկերակներ, մանրապատկերներ) և բոլոր հնարավոր տարածքներում, որտեղ պատկերները պետք է արդյունավետ կերպով պահվեն:

Արտադրողականություն

Այս պահին JPEG-ի մասին գիտելիքն այժմ արժեքավոր է միայն կրթական նպատակներով, քանի որ այն արդեն կառուցված է ամենուր և օպտիմիզացված է մարդկանց մեծ խմբերի կողմից, բայց գիտության գրանիտը դեռ համեղ է։

Տեղեկատվության աղբյուրներ

Հոդված YCbCr-ի մասին Վիքիպեդիայում
Վիքիպեդիայի հոդված JPEG-ի մասին
Մի փոքր PrEP-ի մասին Pikabu-ի գրառումից
Վիքիպեդիայի հոդված PrEP-ի մասին

Source: www.habr.com

Добавить комментарий