JPEG. Kompressie-algoritme

Hallo weer! Ek het hierdie artikel gevind wat in Mei 2019 geskryf is. Dit is 'n voortsetting van 'n reeks artikels oor WAVE en JPEG, hier 1. Hierdie publikasie sal inligting oor die beeldkoderingsalgoritme en die formaat self in die algemeen insluit.

'n Knippie geskiedenis

'n Eetlepel Wikipedia-artikel:

JPEG (Joint Photographic Experts Group) is een van die gewilde rastergrafiese formate wat gebruik word vir die stoor van fotografiese beelde en soortgelyke beelde.

Hierdie standaard is in 1991 deur die Joint Photographic Experts Group ontwikkel vir doeltreffende beeldkompressie.

Hoe gaan beelde van rou na JPEG

Sommige mense dink JPEG-beelde is Huffman-saamgeperste rou data, maar dit is nie die geval nie. Data gaan 'n lang pad voor beheer kompressie.

Eerstens word die kleurmodel van RGB na YCbCr verander. Daar is selfs 'n spesiale algoritme hiervoor - hier. Y word nie aangeraak nie, aangesien dit verantwoordelik is vir die helderheid, en die verandering daarvan sal merkbaar wees.

Die eerste ding om te doen met 'n beeld is "uitdunning" (substeekproefneming). Dit is maklik om te verstaan: 'n 2x2-skikking pixels word geneem, dan word Cb en Cr geneem - die gemiddelde waardes van elk van die YCbCr-komponente van hierdie 4 pixels. Dus, ons het 6 grepe gewen, in plaas van 4 Y, 4 Cb, 4 Cr het ons 4 Y en dieselfde Cb en Cr vir elkeen van hulle gekry (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Op selfs 2x2-skale klink 2:1-verlies-kompressie solied. Dit geld vir die hele beeld. En so - die helfte van die grootte gedaal. En ons kan hierdie tegniek gebruik danksy ons kleurpersepsie. 'n Persoon sal maklik 'n verskil in helderheid opmerk, maar nie in kleur nie, as dit in 'n klein blokkie pixels gemiddeld is. Dunner kan ook in 'n lyn uitgevoer word, 4 pixels horisontaal en vertikaal. Die eerste opsie word meer gereeld gebruik. As beeldkwaliteit belangrik is, word desimering glad nie uitgevoer nie.
'n Visuele illustrasie van uitdunning (Habr het nie toegelaat om 'n gif in te voeg nie) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Die belangrikste deel van die voorbereiding

Dkp

Nou die moeilikste en nodigste deel. Die hele prentjie word in 8×8 blokke verdeel (vulsel word gebruik as die resolusie nie 'n veelvoud van die blokkant is nie).

Dien nou toe op elke blokkie DCT (Discrete Cosinus Transform). In hierdie deel word alles wat oorbodig is uit die prentjie gehaal. Deur DCT te gebruik is dit nodig om te verstaan ​​of die gegewe blok (8×8) enige eentonige deel van die beeld beskryf: lug, mure; of dit bevat 'n komplekse struktuur (hare, simbole, ens.). Dit is logies dat 64 pixels soortgelyk in kleur met net 1 beskryf kan word, want blokgrootte is reeds bekend. Hier is die kompressie: 64 tot 1.

DCT verander die blok in 'n spektrum, en waar die lesings skielik verander, word die koëffisiënt positief, en hoe skerper die oorgang, hoe hoër is die uitset. Waar die koëffisiënt hoër is, toon die prentjie duidelike oorgange in kleur en helderheid, waar dit laer is - swak (gladde) veranderinge in die waardes van die YCbCr-komponente in die blok.

Kwantifisering

Kompressie-instellings word reeds hier toegepas. Elk van die koëffisiënte in elk van die 8×8-matrikse is deelbaar deur 'n sekere getal. As jy nie die beeldkwaliteit sal verminder na al sy wysigings nie, moet die deler een wees. As die geheue wat deur hierdie foto in beslag geneem word vir jou belangriker is, sal die deler groter as 1 wees, en die kwosiënt sal afgerond word. Dit blyk dus dat jy na afronding dikwels baie nulle kry.

Kwantisering word gedoen om die moontlikheid van selfs groter kompressie te skep. Hier is hoe dit lyk op die voorbeeld van kwantisering van die grafiek y = sin(x):

JPEG. Kompressie-algoritme

Kompressie

Eerstens gaan ons deur die matriks in 'n sigsag:

JPEG. Kompressie-algoritme

Ons kry 'n eendimensionele skikking met getalle. Ons sien dat daar baie nulle in is, hulle kan verwyder word. Om dit te doen, in plaas van 'n ry van 'n stel nulle, voer ons 1 nul in en daarna 'n getal wat hul getal in die ry aandui. Op hierdie manier kan jy terugstel na 1/3 van die grootte van die hele skikking. En dan komprimeer dit eenvoudig hierdie skikking deur die Huffman-metode te gebruik en skryf dit in die lêer self.

Waar word gebruik

Oral. Soos PNG, word JPEG gebruik in kameras, OS's (as maatskappylogo's, toepassingsikone, duimnaels) en in alle moontlike areas waar beelde doeltreffend gestoor moet word.

Output

Op die oomblik is kennis oor JPEG nou net waardevol vir opvoedkundige doeleindes, want dit is reeds oral in groot groepe mense ingebou en geoptimaliseer, maar die graniet van wetenskap is steeds heerlik.

bronne

Artikel oor YCbCr op Wikipedia
Wikipedia-artikel oor JPEG
'n Bietjie oor die DCT uit die berig Peekaboo
Artikel oor PrEP op Wikipedia

Bron: will.com

Voeg 'n opmerking