2017. okt. 3.

JPEG alapok 5 - color subsampling

a 8x8-as tömbösödés mellett egy 16*16-os színtömbösödés is észrevehető helyenként. Ennek a 2:2 subsampling az oka.
Ez a lépés nem kötelezően fordul elő a JPEG kódolása során. Ezért, külön próbálunk kapcsolódni hozzá. Ha valaki tudja a magyar szakkifejezést, ne titkolja. Amúgy meg voltam győződve, hogy nem is nehéz téma, kicsi átlagolás ide-oda. De nem. A bejegyzés végére sem fogunk sokkal közelebb kerülni a megértéshez.

Az RGB - YCbCr átalakítás után következik, még a DCT előtti lépésben, így használható ki legjobban a fileméret csökkentő hatása. Definíció szerint a kroma subsampling alacsonyabb felbontású színcsatorna kódolást jelent (a luminancia csatorna kódolásához képest), egy chrominance pixel 2, 4, 8 szorosa a luminance pixelnek, kihasználja a szem gyengeségét a színek észlelésében. YCbCr színtérben gondolkodva, ez azt jelenti, hogy a luminancia csatorna érintetlen marad, a Cr és a Cb csatornákat pedig lehet rozsolni. Persze vannak olyan esetek, ahol a színinformáció is irtó fontos tud lenni, pl. orvosi, térinformatikai képalkotásban. De a facebookon aztán töknyolc. Mellesleg ott 2x2-es. Kipróbáltam.

RGB és Lab összehasonlítás 2x2-es color (a,b) subsampling
A Lab a,b csatornáin jól látszik, hogy 4 pixel ugyanazt a színt kódolja.



Ha az interneten keresgélni kezdenél ebben a témában, tuttifix, hogy a J:a:b  rendszer lesz amibe leginkább belebotlasz. Ideszúrom azért Douglas A. Kerr munkáját, amiben az elnevezések között vág rendet. Ennyire mélyen most nem megyünk bele, csupán pár szóban, a J a blokk (általában 4x2 pixel) száma vízszintesen , az a a felső vízszintes sorban, a b az alsó sorban található kroma-pixelek száma.  Ezt csak itt megmutatjuk, majd megyünk is tovább...
Forrás
...ugyanis nekünk a JPGsnoop, exiftool meg a társaik teljesen más elnevezést mutatnak, ezért ennek eredünk a nyomába.
A fenti ábra a Nikon D5000 Fine beállítás subsamplingjét mutatja.
Még egy indok, hogy RAW-ba dolgozzunk, a drága cucc simán kidobja az információ 33 százalékát.

Az 1x1 (4:4:4) gyakorlatilag nem is subsampling, minden pixel a maga jogán van elkódolva, ahogy kell.  A luminanciát nem is szokás subsamplingelni, mert minek.
Amennyiben minden csatorna 1x1 lenne, akkor valahogy így történne a kódolás:
YCbCr, YCbCr, YCbCr... stb., azaz pixelenként 3 byte. Így ment a PS 7-es minőségtől felfele.
A két kroma csatornának a fenti példában viszont 2x1-es subsamplingja van (4:2:2), ami azt jelenti, hogy két szomszédos kroma-pixel értéke kiátlagolódva egyetlen egyszer kerül elkódolásra. Így:
YYCbCr, YYCbCr, YYCbCr...  vagyis két pixelenként 4 byteon kódol 6 helyett. Így ment a Nikon D5000 Fine módban.
Van ennél is durvább tömörítése a színeknek, a 2x2 (4:2:0), ami értelemszerűen mindkét irányba két pixelt, vagyis négyet átlagol ki.
YYYYCbCr, YYYYCbCr...  négy pixelen 6 byte, 12 helyett. Ilyen az Assus Fine beállítása (!), a Photoshop JPEG mentése 6-os szint alatt, facebook stb.
Van még olyan is, hogy 4x4, de ezt pl. a PS nem alkalmazza, ilyenkor aztán 16 kroma pixel kerül kiátlagolásra, ami már azért a színlátásban bénácska látást sem tudja kicselezni.
YYYYYYYYYYYYYYYYCbCr - viszont csökkenti a fileméretet rendesen, 16 pixel csak 18 byte.


A fenti ábra jól mutatja mivel jár a color subsampling pixeles szinten. A PS 12-7-es JPEG minőségnél 1X1-es chroma subsamplinget használ. 6-0 között viszont 2x2-est.  Erről majd lesz szó. Persze egy 2x2-es beállítás nem fog jelentős colorshiftet eredményezni >4 pixeles színfoltok esetén, de viszont előfordulhatnak olyan helyzetek a képen, finom textúrák, pl. színes tarka ruhadarab, amin a csíkok nagyságrendje a subsampling zónába esik, és emiatt teljesen más színt fogunk kapni a JPEG kódolása után.
De azért nem egy rossz technika, mert bár teljesen más színek keletkeznek (jobb és baloldal)...

... viszont a mindennapi fotográfiában. 1:1 méretben, azért elég jól eltalálja a tónusokat:


Másik érdekesség a PS 00 értákre tömörített képen, hogy YCbCr módban ugyan látszik a két chroma csatornán a 2x2-es tömbösítés, de valamiféle turpisságot használ visszakonvertáláskor. Gyanítjuk, hogy valamilyen antialiase lehet. 

Nincsenek megjegyzések:

Megjegyzés küldése