RGB és YCbCr, teljes és szűkített kódkészlet

Frissítve: 2023. május 6.

A színes képjel alapformátuma az elektronikus képfelvevő és megjelenítő eszközeinkben az RGB. Bizonyos nyomós okok miatt – amelyeket írásunkban részletezünk – a televíziós/videós világban, már az analóg televíziózás kezdetén meghonosodott az ún. komponens, YUV jelformátum, amelyet a digitális videó/televízió is átvett, YCbCr néven. Írásunk másik témája a részben szintén történeti okokból létező kétféle, teljes és szűkített kvantálási kódkészlet.  

Bevezetőnket ki kell egészítenünk azzal, hogy amint az optikai képből elektromos jel lesz, tipikusan gammakorrekciónak kell alávetni, ezért igazából az R’G’B’ és a belőle származtatott Y’CbCr jelölést kellene használnunk. Jelen mondanivalónk szempontjából azonban ennek most nincs jelentősége, ezért a vesszőket elhagyjuk. Továbbá azt is el kell mondanunk, hogy az Y’ (a továbbiakban Y) neve luma jel, a Cb a kék, a Cr pedig a vörös chroma jel. Az egyszerűség kedvéért az Y jelet olykor világosságjelnek, a Cb, Cr jeleket pedig színkülönbségi jeleknek fogjuk nevezni. Ez utóbbiakat a megfelelő együtthatókkal a B-Y, illetve R-Y különbségi jelből képezik. A digitális YCbCr a korábbi analóg YPbPr komponens formátum digitális megfelelője, általánosságban pedig szokás YUV komponens jelről beszélni.

A digitális R, G, B jeleknek – színenként 8 bites kvantálás esetén – lehet teljes (0-255) és szűkített (16-235) kódtartományú változata is, ez utóbbi tipikusan videojel feldolgozásakor fordul elő, a számítástechnikában egyébként általános a teljes kódtartomány használata. Értelemszerűen, 10 bit színmélység esetén a teljes tartományhoz (full range) a 0-1023 kvantálási szintek („kódok”), a szűkített tartományhoz (limited range) pedig a 64-940 kvantálási szintek tartoznak. Mivel minden mai digitális kijelző az R, G és B alapszínek összeadó keverésével dolgozik, az alapszínű szubpixelek meghajtásához R, G, B jelekre van szükség.

Az Y, Cb, Cr jelek kódolásához – szintén 8 bites kvantálást feltételezve – tipikusan a 16-235, vagy (a Cr, Cb jelek esetében) a 16-240 tartományt használják a televíziós és videós gyakorlatban (olykor előfordul a 16-255 kiterjesztett kódtartomány is). 10 bites kvantálásban gondolkodva ezeket a számokat természetesen néggyel kell szorozni.

Miért komponens jel?

De egyáltalán miért van arra szükség, hogy a jól kezelhető és megszokott (pl. a kamerából kapott) R, G, B jeleket a videó és a televízió világában a komponens Y, Pb, Pr (analóg), illetve ma már az Y, Cb, Cr (digitális) jelhármassá konvertálják? A részletes magyarázat a színes televízió kezdeteitől indulna, és talán próbára tenné olvasóink türelmét. A rövid magyarázat: 1) A fekete-fehér és a színes tv-rendszerek kompatibilitásához elengedhetetlen volt a világosság-információ és a színesség-információ elválaszthatóak legyenek egymástól, és külön kezelhetők legyenek, 2) a látásunk sokkal érzékenyebb a világosság-információ, mint a színesség-információ (színezet és színtelítettség) részletezettségére.

A színes televíziós rendszereket kifejlesztő szakemberek következtetése a 2) pont alapján: az RGB reprezentáció az érzékelés szempontjából „fölöslegesen sok” (redundáns) információt tartalmaz, ami csökkenthető, ha az YUV komponens formátumot választva a színesség-információt hordozó jelek (ezeket reprezentálta az analóg világban a Pb és Pr vagy U és V jel, ma pedig a Cb és a Cr jel) sávszélességét/bitrátáját csökkentik. Így drámai mértékben csökkenthető a „hasznos” információtartalom, anélkül, hogy a képminőséget számottevően befolyásolná. Annak idején ez azért volt nagyon nagy jelentőségű, mert a televíziós csatornák átvitelére korlátozott frekvenciatartomány állt rendelkezésre – ami ma is így van. Igaz, a digitális jelátvitel önmagában is megnövelte a lehetséges csatornaszámot az addig nem létező tömörítési technológiák megjelenésével, bár a komponens jel is egyfajta „tömörítés” eredménye. A komponens formátum a jóval kisebb sávszélesség-igénye miatt nemcsak a televíziós műsorterjesztésben, hanem a képrögzítésben is nagyon előnyös, hiszen nem mindegy, hogy mekkora kapacitású tárolóeszközöket kell használni.

A redundanciacsökkentés fent bemutatott elvét a digitális AV szektor is átvette és megtartotta, éspedig úgy, hogy a mintavételi séma csak kivételesen és átmenetileg (stúdió- vagy utómunka-környezetben) lehet 4:4:4, egyébként az Y, Cb, Cr mintavételezési aránya 4:2:2, vagy még gyakrabban 4:2:0. (A „0” itt nem azt jelenti, hogy az egyik színinformáció nincs mintavételezve, hanem azt, hogy a két színinformáció mintavételezése időben felváltva történik, és nem egyszerre). A 4:2:0 YCbCr jel átvitele 25%-kal kisebb bitrátát igényel, mint a 4:2:2 jel, és fele annyit, mint a 4:4:4.

A mondottakból következik, hogy az RGB formátumú színes televízió- vagy videojelet (az RGB formátum mintavételezése mindig 4:4:4) az átvitel vagy rögzítés előtt a többnyire konvertálni kell komponens jellé, majd a megjelenítéshez vissza kell alakítani az alapszíneknek megfelelő jelekké, legkésőbb a kijelző panelek/pixelek meghajtása előtt, hiszen az R, G, B jelekre van szükség az additív színkeveréshez.

A kódtartományt tekintve, a televíziós/videós világban, illetve a számítástechnikában (túlnyomórészt) használt kódtartomány különbözőségének más oka van, nem a sávszélességgel való takarékoskodás. Erről fogunk beszélni a következőkben.

Szűkített és teljes kódkészlet

Fontos kérdés, hogy míg a számítógépes grafikában, és egyáltalán a számítástechnikában – ahol az RGB reprezentáció volt és maradt az uralkodó – a rendelkezésre álló kódkészletet teljes terjedelmében kihasználják (full range), a komponens vagy akár RGB videojel miért csak egy szűkített részét használja (limited range)? 8 bites kvantálás esetén a „teljes” itt a 0-255 kódtartomány jelenti (10-bites kvantálásnál ez 0-1023, 12-bitesnél 0-4095 stb.). A „szűkített” kódtartomány, ha RGB-ről van szó, 16-235, a komponens színmodellben a luma jel esetében a 16-235, a chroma jelek esetében 16-240.

Nos, a magyarázat részben ismét történeti. Még az analóg világban a referencia-fehér fölött és a referencia-fekete alatt hagytak egy-egy sávot („feketénél feketébb”, azaz BtB footroom, és „fehérnél fehérebb”, azaz WtW headroom). Ennek egyrészt az (volt), hogy az alsó tartományban a pontatlanul beállított analóg szinteket is kezelni lehessen, másrészt, hogy a szűrők okozta túllövéseknek, amennyire lehet, helyet hagyjanak (ne legyen éles limitálás). Az első ok ma már nem létezik, a második még mindig fontos. Ezen felül további érvek is szólnak a headroom és a footroom megtartása mellett a digitális jel esetében is – ezeket most nem részletezzük).

Megjegyzés: a video- és televízió-stúdiókban a különféle utómunkálati fázisokban a teljes kódtartományú RGB jelet is előszeretettel használják, azzal a megszorítással, hogy 8 biten a 0 és a 255-ös kód, 10 biten a 0-3 és az 1020-1023 kódtartomány az SDI szinkron számára van fenntartva.

Színtérváltás és a kódtartomány illesztése

Vegyünk egy nagyon egyszerű esetet egy lejátszó és egy megjelenítő eszközzel. Egy videó lejátszásakor a lejátszó által lejátszott és a megjelenítő által fogadható jel színmodelljének (formátumának) meg kell egyeznie, ez alapkövetelmény. Ha ez nem teljesül, és pl. komponens jelet küldünk egy RGB jel fogadására beállított kijelzőre, vagy fordítva (ha a forrásoldallal végeztetjük el az YCbCr/RGB átalakítást, de a kijelző komponens jelet vár), akkor azonnal felismerjük a hibás képet.

Amikor a kijelző RGB jelet vár, de komponens YCbCr jel érkezik a bemenetére

Ha a bemenetre RGB jel érkezik, de a kijelző YCbCr fogadására van beállítva

Szerencsére mind a mai lejátszó hardverek kimenete (PC videokártya, médiacenter, Blu-ray lejátszó stb.), mind a mai kijelzők bemenete (projektor, televízió, monitor) bemenete a legtöbb esetben átállítható YCbCr-ről RGB-re vagy fordítva, illetve a kijelzők automatikusan felismerik a jel formátumát.

A konverziót akár a lejátszó, akár a megjelenítő elvégezheti, de ajánlatos a forrás natív formátumát (ha videóról van szó, akkor legtöbbször a komponens jelet) megtartani, és a megjelenítő bemenetét erre átállítani, vagy hagyni, hogy automatikusan érzékelje. Ekkor a színtér-konverziót (YCbCr-ről RGB-re) a megjelenítő eszköz elektronikája végzi el.

Más a helyzet a kódkészlettel! Ha 16-235 kódkészletű (limited range) videojelet kap a megjelenítő, de 0-255-re van beállítva, akkor a kép „lapos” lesz, „kivasalt” benyomást kelt. Ha a lejátszóból full range videojel érkezik (mert a lejátszó pl. a 16-235 komponens jelet átalakította 0-255-ös RGB jellé), és a TV, a projektor vagy a monitor limited range RGB-re van beállítva, akkor a 16 alatti feketék és a 235 fölötti fehérek „becsukódnak”, azaz összemosódnak. Mindkét esetben hibás képet kapunk.

Videó lejátszása PC-ről

Némileg izgalmasabb az az eset, amikor egy PC-re telepített videolejátszó szoftverrel játsszuk le a videót/filmet. Ez háromszereplős játék (lejátszó szoftver, grafikus kártya, megjelenítő). Tegyük fel, hogy mind a háromnak állítható a kódkészlete teljesre vagy szűkítettre. Feltételezzük, hogy maga a videó forrásjel (pl. DVD vagy Blu-ray film) YCbCr formátumban van kódolva, vagyis a kódkészlet eleve szűkített. A lejátszó szoftver ezt a jelet megkapja, de átalakítás után a kimeneti jele lehet teljes vagy szűkített RGB. Vegyük ehhez hozzá a grafikus kártya kimenetét (teljes vagy szűkített RGB, vagy átállított, eleve szűkített komponens jel), és a kijelző bemenetét (teljes vagy szűkített RGB, vagy eleve szűkített komponens jel fogadása). A lehetséges kombinációk száma ez esetben kettő a harmadikon, azaz nyolc, amennyiben a szükséges vagy szándékolt komponens/RGB, illetve RGB/komponens átalakítások lehetőségét evidensnek vesszük. Számunkra most az a fontos, hogy a kódkészlet illesztése helyes legyen.

A lejátszó szoftver által kiadott jel (8 bit színmélység mellett) lehet 0-255 vagy 16-235 kódtartományú, a videokártya kimenete is lehet 0-255 vagy a Control Panelen beállíthatóan 16-235. A kijelzők egy része – ahogy már említettük – automatikusan érzékeli a kódtartományt, de jól jöhet, ha van kézi átállítási lehetőség. Az utóbbi pár évben gyártott projektorokon és televíziókon többnyire mind a két lehetőség megtalálható. A PC monitorokon a DVI digitális bemenet nem tudja értelmezni a szűkített RGB tartományt, míg a HDMI és a DisplayPort interfész ezt tudja, bár ez még nem feltétlenül garancia arra, hogy a monitor ténylegesen átáll a kívánt színtérre és kódtartományra.

A három eszköz kódtartományának (a szoftver kimenete, a videokártya kimenete és a kijelző bemenete) nyolcféle kombinációjából három tudja helyesen reprodukálni a komponens, vagy akár RGB videotartalmat:

1) Teljes/teljes/teljes (Full/Full/Full). A lejátszó szoftver ekkor konvertálja a forrás szűkített kódtartományú videojelét teljes RGB-be. Mivel a kódértékek egész számok, a hozzárendelés nem egészen pontos, hiszen 220 számot kell leképezni 256 számra (olykor „ugrani” kell egy kvantálási szintet), egyszeri skálázás történik, de a videószint korrekt lesz.

2) Teljes/szűkített/szűkített (Full/Limited/Limited). Ez kerülendő, mivel a videokártya is, és a kijelző is átskálázza a kódtartományt (azaz kétszer történik skálázás), ami sávosodáshoz vezethet.

3) Szűkített/teljes/szűkített (Limited/Full/Limited). A szoftver szűkített (16-235) RGB tartományt küld a videokártyára, így nincs átskálázás. A kártya a szűkített kódtartományú jelet beavatkozás nélkül átengedi, ha a kimenete 0-255-re van állítva. A szűkített RGB-re állított kijelző pedig azt kapja, amit vár a videotartalom korrekt megjelenítéséhez – feltéve, hogy a szűkített RGB beállítása lehetséges, vagy ezt a kijelző automatikusan felismeri. Amennyiben a kijelző (monitor, ha éppen ezen akarunk filmet nézni) csak a teljes RGB kódtartományt hajlandó fogadni, akkor az 1) alatt leírt kombinációt kell használni.

A helyes kódtartomány-kombinációk egyikének, nevezetesen a legutóbb említett Limited/Full/Limited beállításnak az eredménye

***

Rövidke írásunkban megpróbáltuk érzékeltetni a színkódolás és a kódtartomány váltásának buktatóit a hagyományos komponens video- vagy filmes tartalom megjelenítésekor. Bonyolultabb esetekben szerencsére a szemünk is pompásan eligazít: a színtérkonverzió szükségessége azonnal kiderül, a kódkészlet sikeres illesztése pedig pici tapasztalattal, jó eséllyel szintén megítélhető. Ha becsukódó feketéket és összenyomott fehéreket látunk, vagy ellenkezőleg, lapos, szürke tónusokat fekete helyett, akkor változtatnunk kell a full/limited (teljes/szűkített) kombináción. Ám a helyes kombinációk nem mindig adnak teljesen egyforma eredményt.

colorlove

Legyen Ön az első hozzászóló

Várjuk hozzászólását!

Az Ön email címe nem kerül nyilvánosságra.


*


Ez az oldal az Akismet szolgáltatást használja a spam csökkentésére. Ismerje meg a hozzászólás adatainak feldolgozását .