JPEG. Tömörítési algoritmus

Szia ismét! Ezt a cikket még 2019 májusában találtam. Ez a WAVE-ról és a JPEG-ről szóló cikksorozat folytatása itt első. Ez a kiadvány információkat tartalmaz a képkódoló algoritmusról és magáról a formátumról mint egészről.

Egy csipetnyi történelem

Egy evőkanál Wikipédia-cikk:

A JPEG (Joint Photographic Experts Group) az egyik legnépszerűbb rasztergrafikus formátum, amelyet fényképek és hasonló képek tárolására használnak.

Ezt a szabványt a Joint Photographic Experts Group fejlesztette ki 1991-ben a hatékony képtömörítés érdekében.

Hogyan válnak a képek nyersből JPEG-be?

Vannak, akik úgy gondolják, hogy a JPEG képek Huffman-módszerrel tömörített nyers adatok, de ez nem igaz. A vezérlés tömörítése előtt az adatok hosszú utat tesznek meg.

Először is, a színmodell RGB-ről YCbCr-re változik. Még egy speciális algoritmus is létezik erre - itt. Az Y-t nem érinti meg, mivel ez felelős a fényerőért, és ennek változása észrevehető lesz.

A képpel kapcsolatos első dolog az "ritkítás" (almintavétel). Könnyen érthető: egy 2x2-es pixeltömböt veszünk, majd a Cb-t és a Cr-t - ennek a 4 pixelnek az egyes YCbCr-komponenseinek átlagértékeit. Így, 6 bájtot nyertünk, 4 Y, 4 Cb, 4 Cr helyett 4 Y-t és ugyanazt a Cb-t és Cr-t kaptunk mindegyikre (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Még 2x2 léptékben is szilárdan hangzik a veszteséges tömörítés 2:1 tömörítési aránnyal. Ez a teljes képre vonatkozik. És így - fél méretet estek. Ezt a technikát pedig színérzékelésünknek köszönhetően használhatjuk. Az ember könnyen észreveszi a különbséget a fényerőben, de nem a színben, ha azt egy kis pixeltömbre átlagolja. A ritkítás vonalban is elvégezhető, 4 pixel vízszintesen és függőlegesen is. Az első lehetőséget gyakrabban használják. Ha a képminőség fontos, akkor a tizedelés egyáltalán nem történik meg.
A ritkítás vizuális illusztrációja (Habr nem engedte, hogy gif-et szúrjak be) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Az előkészítés fő része

Dkp

Most jön a legnehezebb és legszükségesebb rész. A teljes kép 8x8-as blokkra van osztva (kitöltést használunk, ha a felbontás nem a blokkoldal többszöröse).

Most alkalmazza minden blokkra DCT (diszkrét koszinusz transzformáció). Ebben a részben minden felesleges kikerül a képből. A DCT használatával meg kell értened, hogy egy adott blokk (8×8) leírja-e a kép bármely monoton részét: az eget, a falat; vagy összetett szerkezetet tartalmaz (haj, szimbólumok stb.). Logikus, hogy 64 hasonló színű pixel csak 1-gyel írható le, mert a blokk mérete már ismert. Ennyit a tömörítésről: 64 az 1-hez.

A DCT a blokkot spektrummá alakítja, és ahol a leolvasások élesen változnak, ott az együttható pozitív lesz, és minél élesebb az átmenet, annál nagyobb lesz a kimenet. Ahol magasabb az együttható, a képen világos átmenetek láthatók a színben és a fényerőben, ahol alacsonyabb - gyenge (sima) változások a blokk YCbCr komponenseinek értékében.

Kvantálás

Itt már alkalmazták a tömörítési beállításokat. A 8x8-as mátrixok mindegyik együtthatóját elosztjuk egy bizonyos számmal. Ha nem csökkenti a képminőséget az összes módosítás után, akkor az osztónak egynek kell lennie. Ha a fénykép által elfoglalt memória fontosabb Önnek, akkor az osztó nagyobb lesz, mint 1, és a hányados kerekítve lesz. Kiderült, hogy a kerekítés után gyakran sok nullát kapunk.

A kvantálás a még nagyobb tömörítés lehetőségének megteremtése érdekében történik. Így néz ki az y = sin(x) gráf kvantálásának példájával:

JPEG. Tömörítési algoritmus

Tömörítés

Először cikk-cakk mintában megyünk végig a mátrixon:

JPEG. Tömörítési algoritmus

Kapunk egy egydimenziós tömböt számokkal. Azt látjuk, hogy sok nulla van benne, kivehetők. Ehhez a sok nullából álló sorozat helyett 1 nullát írunk be, és utána egy számot, amely jelzi a számukat a sorozatban. Így visszaállíthatja a teljes tömb méretének 1/3-át. Ezután egyszerűen tömörítjük ezt a tömböt a Huffman-módszerrel, és beírjuk magába a fájlba.

Hol használják

Mindenhol. A PNG-hez hasonlóan a JPEG-et is használják kamerákban, operációs rendszerekben (vállalati logóként, alkalmazásikonként, miniatűrként) és minden olyan területen, ahol a képeket hatékonyan kell tárolni.

Teljesítmény

Jelenleg a JPEG-ről szóló tudás ma már csak oktatási célokra értékes, mert már mindenhol be van építve és nagy csoportok optimalizálják, de a tudomány gránitja még mindig ízletes.

forrás

Cikk az YCbCr-ről a Wikipédián
Wikipédia cikk JPEG-ről
Egy kicsit a PrEP-ről a Pikabu bejegyzésből
Wikipédia-cikk a PrEP-ről

Forrás: will.com

Hozzászólás