Üdv újra! Találtam egy cikket, amelyet 2019 májusában írtak. Ez a WAVE és JPEG sorozat cikkjeinek folytatása. . Ez a publikáció információt tartalmaz a képkódolási algoritmusról és magáról a formátumról egyaránt.
Egy csipet történelem
Egy evőkanálnyi cikk a Wikipédiából:
A JPEG (Joint Photographic Experts Group) az egyik legnépszerűbb raszteres grafikai formátum, amelyet fényképek és hasonlók tárolására használnak.
Ezt a szabványt a fényképezéshez kapcsolódó szakértőcsoport 1991-ben alkotta meg a képek hatékony tömörítése érdekében.
Milyen utat járnak be a képek a nyers formátumtól a JPEG-ig
Néhányan azt hiszik, hogy a JPEG-képek a Huffman-kódolás által tömörített nyers adatok, de ez nem igaz. A végső tömörítés előtt az adatok hosszú utat járnak be.
Először a színmodell átalakul RGB-ből YCbCr-re. Ehhez még egy külön algoritmus is rendelkezésre áll — . Az Y értéket nem változtatjuk meg, mivel az felelős a fényerőért, és a módosítása észlelhető lenne.
Az első lépés, ami a képpel történik — a "minta csökkentés" (subsampling). Szerezd ezt meg könnyen: egy 2x2 pixel tömböt veszünk, majd a Cb és Cr értékeket — az YCbCr összetevők átlagos értékeit a négy pixelből. Így 6 bájt nyertünk, a 4 Y, 4 Cb, 4 Cr helyett 4 Y-t és mindegyikhez azonos Cb és Cr-t kaptunk (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 — 6 = 6). Még a 2×2 esetén is a 2:1 arányú tömörítés jelentősnek hangzik. Ezt az egész képre alkalmazzák. Így fél méretet ledobtunk. Ezt a technikát a színérzékelésünkből tudjuk alkalmazni. Az ember könnyen észreveszi a fényerő különbségét, de nem a színét, ha az egy kis pixeltömbben van átlagolva. A minta csökkentés egy vonalban is elvégezhető, 4 pixel vízszintesen és függőlegesen. Az első változat a gyakoribb. Ha a kép minősége fontos, akkor a minta csökkentés egyáltalán nem történik meg.
A minta csökkentést szemléltető ábra (a Habr nem engedte a gif beillesztését) —
A felkészülés fő része
DCT
Most jön a legnehezebb és legszükségesebb rész. Az egész kép 8x8 blokkra van felosztva (kitöltést használnak, ha a felbontás nem osztható a blokk oldalával).
Most minden blokkra alkalmazzák a DCT-t (Diszkrét Koszinusz Transzformáció)Ebben a részben a képből eltávolítják az összes felesleget. A DCT segítségével meg kell értenünk, hogy a megadott blokk (8×8) leír-e valamilyen monoton részt a képen: az eget, a falakat; vagy bonyolult struktúrát tartalmaz (hajat, szimbólumokat stb.). Logikus, hogy 64 hasonló színű pixel leírható egyetlen pixellel, mivel a blokk mérete már ismert. Íme, így történik a tömörítés: 64-ből 1.
A DCT egy blokkot spektrumra alakít át, és ahol az értékek éles váltásokon mennek keresztül, a koefficiens pozitívvá válik, és minél élesebb a váltás, annál magasabb lesz az eredmény. Ahol a koefficiens magasabb, ott a képen éles szín- és fényerő-átmenetek láthatók, ahol alacsonyabb, ott enyhe (lágy) változások vannak a YCbCr komponensek mértékeiben a blokkban.
Kvantisálás
Itt már alkalmazzák a tömörítési beállításokat. Minden koefficienst minden 8×8-as mátrixban egy meghatározott számra osztanak. Ha a képkiváló minőség után már nem csökkentjük tovább, akkor a osztó egységnyi lesz. Ha viszont fontosabb a fénykép által elfoglalt memória, akkor az osztó több mint 1 lesz, és a hányadost kerekítjük. Így gyakran sok nulla jön létre a kerekítés után.
A kvantisálást azért végzik, hogy lehetővé tegyék a további tömörítést. Íme, hogy néz ki a kvantisálás példája a y = sin(x) grafikonon:

Tömörítés
Először végigjárjuk a mátrixot zig-zag irányban:

Kapunk egy egy dimenziós tömböt számokkal. Látjuk, hogy sok nulla van benne, amelyeket el lehet távolítani. Ehhez a sok nulla helyett 1 nullát írunk, majd utána egy számot, amely a sorozatban található nullák számát jelöli. Így a teljes tömb mérete akár 1/3-ra is csökkenhet. Aztán ezt a tömböt egyszerűen a Huffman-módszerrel tömörítjük, és máris beírjuk a fájlba.
Hol használják
Mindenhol. Akárcsak a PNG, a JPEG fotókamerákban, operációs rendszerekben (céges logók, alkalmazásikonok, miniatűrök formájában) és minden olyan területen használatos, ahol hatékonyan kell tárolni a képeket.
Következtetés
Jelenleg a JPEG ismerete csak oktatási célokra értékes, mivel már mindenhol be van építve és nagy csoportok optimalizálták, de a tudomány sziklái mégis ízletesek.
Források
Forrás: habr.com
