4. lépés a kvantálás. Itt történik meg a veszteség, a későbbi tömöríthetőséget előkészítendő. De nem maga a veszteség az, ami miatt kisebb lesz a file.
Az előbbi lépésben képzett 8x8-as DCT együtthatók kvantálása következik, a kvantálási mátrix segítségével. A nagyfrekvenciás részletekből fog kidobni többet az eljárás (a DCT mátrix jobb alsó régiójából), az alacsonyakat (lassabban változó képi információkat) egyre kevésbé bántja (a DCT tábla bal felső régiója).
Ezeket a wikiről fogdostuk össze. |
A kvantálási mátrixok létrehozására van ezerféle ajánlás (pl. IJG standard 0-99), abszolút nem mindegy a képek felhasználási területe. A kamerák és szoftverek kvantálási mátrixai finomhangoltak, ezért nehéz megfeleltetni őket egymással. Ebben nem segít a fileméretek összehasonlítása sem (pl. lásd később a PS 6-7-es tömörítési érték körüli érdekességet). A PS saját custom fix táblákat használ, nem az IJG standardot. Ezt csak pár képpel teszteltük és csakis a 12-es értéket - ott igaz a hír - logikus is, a többszöri újramentésnél ennek lehet értelme. Vannak alkalmazások, amelyek a mátrix kialakításakor figyelembe veszik a kép egészét, körülményeket, általában a kamerák saját szoftverei ilyenek (custom adaptive tables - on the fly computing). A Nikon D5000 például két ugyanolyan beállítással (ugyanolyan programautomatika) készített képeken is különféle táblázatokat használt. Pláne nem egységes két különböző típusú gép Fine beállítása. A kvantálási táblák annyira specifikusak is lehetnek, hogy forensic alkalmazások ebből tudják megtippelni, hogy volt e matatva egy kép, és ha igen, milyen szoftverekkel. Erre később visszatérünk.
A fenti ábrán jól látszik, hogy a kis DCT együtthatók, és/vagy nagy kvantálási osztók esetén nagyobb az esély, hogy 0 legyen a kerekítés eredménye. A kerekítés során elveszett információ a veszteség. Minél jobb minőségű kódolást alkalmazunk (több 1-es áll a kvantálási mátrixban), annál több DCT együttható értéke marad érintetlen, kevesebb veszteség lesz, viszont a kvantálás során kevesebb lesz a 0, amit tömöríteni lehetne, tehát nagyobb lesz a fileméret.
Leegyszerűsítve, a kvantálási mátrixban a nagyobb szám szarabb képet okoz, de nagyobb tömörítést.
Tehát a példában -415/16= -26, a -33/11= -3 lesz és így tovább. A kerekítésekben elég nagy veszteség tud keletkezni (ez amúgy is egy közepesen durva beállítás), viszont hatalmas 0-val töltött mezők jönnek létre, ami jól tömöríthető később. Visszaalakításnál pl. a második elem -3*11 pontosan visszaadja a -33-at, de a -6*10 már nem lesz 58 többé. Sokkal durvább a veszteség ott, ahol 0 keletkezik a kvantálás után, hiszen ott az eredeti AC érték már egyáltalán nem állítható vissza. A DC értékét is érintheti a veszteség, ez pl. a 8*8-as blokk tónusában, colorshiftben mutatkozhat meg.
Amennyiben az összes AC értéke 0 lenne a kvantálás után, az egyben azt is jelentené, hogy a 8x8-as blokkunk tónusa (vagy színe, ha a chroma csatornáról beszélünk) kiátlagolódott, hiszen akkor csak a DC érték állítható vissza.
Összefoglalva: a kerekítés során elveszett információ tehát a veszteség. Ha a kvantálási táblában csupa 1-es állna, az azt jelentené, hogy nem történt veszteség (de igen, egy kevés a lebegőpontosról átalakítás miatt is lenne), viszont a kevés 0 érték miatt tömöríteni se fog túl sokat az eljárás.
A legtöbb veszteség tehát ennél a lépésnél keletkezik a folyamatban, emiatt egy JPEG más eszközön (más kvantálási mátrix) történő egyszerű újramentése is újabb veszteséget fog okozni. Minden JPEG file hordozza magában a kvantálási mátrixot, amivel kvantálták, hiszen csak így lehet visszafejteni amikor megnyitjuk bármiben, ezért a JPEGsnoop-al ki is lehet nyerni belőle, hogy össze-vissza hasonlíthassuk:
![]() |
A PS kvantálási mátrixai, 12-es és 0-ás tömörítési szintek esetén. |
Nincsenek megjegyzések:
Megjegyzés küldése