JPEG. Suspaudimo algoritmas

Labas dar kartą! Radau šį straipsnį parašytą 2019 m. gegužės mėn. Čia yra straipsnių apie WAVE ir JPEG tęsinys pirmasis. Šiame leidinyje bus pateikta informacija apie vaizdo kodavimo algoritmą ir patį formatą kaip visumą.

Žiupsnelis istorijos

Šaukštas Vikipedijos straipsnio:

JPEG (Joint Photography Experts Group) yra vienas iš populiariausių rastrinės grafikos formatų, naudojamų nuotraukoms ir panašiems vaizdams saugoti.

Šį standartą 1991 m. sukūrė Jungtinė fotografijos ekspertų grupė, siekdama efektyvaus vaizdo glaudinimo.

Kaip vaizdai iš neapdorotų į JPEG?

Kai kurie žmonės mano, kad JPEG vaizdai yra neapdoroti duomenys, suspausti naudojant Huffman metodą, tačiau tai netiesa. Prieš valdant suspaudimą, duomenys nukeliauja ilgą kelią.

Pirma, spalvų modelis pakeičiamas iš RGB į YCbCr. Tam yra net specialus algoritmas - čia. Y neliečiamas, nes jis yra atsakingas už ryškumą, o jo pokytis bus pastebimas.

Pirmas dalykas, susijęs su vaizdu "retinimas" (subimtinė). Tai lengva suprasti: imamas 2x2 pikselių masyvas, tada paimami Cb ir Cr - vidutinės šių 4 taškų kiekvieno YCbCr komponento vertės. Taigi, laimėjome 6 baitus, vietoj 4 Y, 4 Cb, 4 Cr gavome 4 Y ir kiekvienam iš jų vienodus Cb ir Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Net 2x2 mastelyje nuostolingas glaudinimas su 2:1 suspaudimo laipsniu skamba tvirtai. Tai taikoma visam vaizdui. Ir taip – ​​nukrito per pusę dydžio. Ir mes galime naudoti šią techniką dėl savo spalvų suvokimo. Žmogus nesunkiai pastebės ryškumo, bet ne spalvos skirtumą, jei jis bus apskaičiuojamas per mažą pikselių bloką. Retinimas gali būti atliekamas ir linijoje, 4 pikseliais horizontaliai ir vertikaliai. Pirmoji parinktis naudojama dažniau. Jei vaizdo kokybė yra svarbi, naikinimas iš viso neatliekamas.
Vizuali retinimo iliustracija (Habras neleido man įterpti gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Pagrindinė pasiruošimo dalis

Dkp

Dabar ateina sunkiausia ir reikalingiausia dalis. Visas vaizdas yra padalintas į 8x8 blokus (užpildymas naudojamas, jei skiriamoji geba nėra bloko pusės kartotinė).

Dabar pritaikykite kiekvienam blokui DCT (diskretinė kosinuso transformacija). Šioje dalyje viskas, kas nereikalinga, išimama iš paveikslo. Naudojant DCT, reikia suprasti, ar duotas blokas (8×8) apibūdina kokią nors monotonišką vaizdo dalį: dangų, sieną; arba jame yra sudėtinga struktūra (plaukai, simboliai ir kt.). Logiška, kad 64 panašios spalvos pikselius galima apibūdinti tik 1, nes bloko dydis jau žinomas. Tiek apie suspaudimą: nuo 64 iki 1.

DCT paverčia bloką į spektrą, o ten, kur rodmenys smarkiai keičiasi, koeficientas tampa teigiamas, o kuo ryškesnis perėjimas, tuo didesnis bus išėjimas. Kur koeficientas didesnis, paveikslėlyje matomi aiškūs spalvų ir ryškumo perėjimai, kur mažesni – silpni (tolygūs) YCbCr komponentų reikšmių pokyčiai bloke.

Kvantizavimas

Čia jau pritaikyti glaudinimo nustatymai. Kiekvienas koeficientas kiekvienoje iš 8x8 matricų yra padalintas iš tam tikro skaičiaus. Jei nesumažinsite vaizdo kokybės po visų jo modifikacijų, daliklis turėtų būti vienas. Jei šios nuotraukos užimama atmintis jums yra svarbesnė, tada daliklis bus didesnis nei 1, o koeficientas bus suapvalintas. Pasirodo, suapvalinus dažnai lieka daug nulių.

Kvantifikavimas atliekamas siekiant sukurti dar didesnio suspaudimo galimybę. Štai kaip tai atrodo naudojant grafiko kvantavimo pavyzdį y = sin(x):

JPEG. Suspaudimo algoritmas

Suspaudimas

Pirmiausia pereiname per matricą zigzago būdu:

JPEG. Suspaudimo algoritmas

Gauname vienmatį masyvą su skaičiais. Matome, kad jame daug nulių, juos galima nuimti. Norėdami tai padaryti, vietoj daugelio nulių sekos įrašome 1 nulį ir po jo skaičių, nurodantį jų skaičių sekoje. Tokiu būdu galite iš naujo nustatyti 1/3 viso masyvo dydžio. Tada mes tiesiog suspaudžiame šį masyvą naudodami Huffman metodą ir įrašome jį į patį failą.

Kur naudotis

Visur. Kaip ir PNG, JPEG yra naudojamas fotoaparatuose, OS (kaip įmonės logotipai, programų piktogramos, miniatiūros) ir visose įmanomose srityse, kur reikia efektyviai saugoti vaizdus.

Produkcija

Šiuo metu žinios apie JPEG dabar vertingos tik edukaciniais tikslais, nes jos jau visur įmontuotos ir optimizuotos didelių žmonių grupių, tačiau mokslo granitas vis tiek skanus.

Informacijos šaltiniai

Straipsnis apie YCbCr Vikipedijoje
Vikipedijos straipsnis JPEG formatu
Šiek tiek apie PrEP iš Pikabu įrašo
Vikipedijos straipsnis apie PrEP

Šaltinis: www.habr.com

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