Přeskočit na obsah

YCbCr

Z Wikipedie, otevřené encyklopedie
Vizualizace barevného prostoru YCbCr
CbCr rovina s konstantní luminancí Y′=0,5
Barevný obraz a jeho složky Y′, CB a CR. Složka Y′ je v zásadě černobílá verze původního obrazu.

YCbCr (YCBCR) a Y′CbCr (Y′CBCR) je skupina barevných prostorů používaných v procesu zpracování barevného obrazu v systémech digitálního videa a digitální fotografie. Je v zásadě ekvivalentní s barevným prostorem YPBPR, který také vychází z barevných složek RGB; YCBCR je však určen pro digitální video, YPBPR pro analogové systémy.[1]

Y nebo Y′ je jasová složka, barvonosné složky jsou CB = B - Y (modrá rozdílová složka) a CR = R - Y (červená rozdílová složka). Y je relativní jas (luminance), Y′ (Y s čárkou) anglicky nazývané luma je vážený součet složek R′G′B′, což jsou barevné složky, na které je uplatněna gama korekce.

Barevné prostory Y′CbCr jsou definovány matematickou transformací souřadnic složek RGB a bílého bodu. Pokud je podkladový barevný prostor RGB absolutní, Y′CbCr barevný prostor je také absolutní; opačně, pokud RGB prostor je špatně definovaný, Y′CbCr je také špatně definovaný. Transformace je definována rovnicemi 32 a 33 v ITU-T H.273.[2]

V době nástupu barevné televize bylo zavedené vysílání černobílé televize. Kvůli velkému množství existujících televizorů a kamer bylo nutné při přechodu na barevného vysílání zachovat zpětnou kompatibilitu. Francouzský inženýr Georges Valensi již v roce 1938 vyvinul a patentoval systém pro přenos RGB barev ve formě jasového a barevného signálu, který umožňuje, aby existující černobílé televizory zpracovávaly pouze jasovou složku obrazu a ignorovaly informace o barvě, což v zásadě znamená přenos černobílého videa uvnitř barevného. Zpětně kompatibilní systémy založené na Valensiho myšlence se nazývají barevně kompatibilní. Kompatibilita funguje i v opačném směru – černobílé vysílání lze přijímat barevným televizorem bez jakéhokoli zvláštního zpracování. Aby se videosignál i s barevnou informací vešel do kmitočtového pásma původně určeného pro černobílé video, je pro informace o barvě použito menší rozlišení, takže zabírají menší šířku pásma než jasové informace. V praxi to nepředstavuje velký problém, protože lidský zrak má vyšší rozlišení pro černobílý obraz (viz příklad obrazu vpravo). Toto řešení se nazývá podvzorkování barvonosných složek.

YCbCr a Y′CbCr jsou praktické aproximace při zpracování barev pro zachování jednotnosti vjemů, kdy základní barvy zhruba odpovídající červené, zelené a modré jsou zpracovány do vjemově smysluplné informace. Díky tomu nedokonalosti při zpracování obrazu nebo videa a jeho přenosu a ukládání nezpůsobují chyby, které by byly příliš rušivé. V praxi se proto používá barevný model Y′CbCr, ve kterém se samostatně zpracovává jasový signál (Y′) ve vyšším rozlišení a dvě barevné složky (CB a CR) v nižším rozlišení – tzv. podvzorkování barvonosných složek.

YCbCr se někdy zkracuje na YCC a označení Y′CbCr, YCbCr, YPbPr a YUV se často zaměňují, což může způsobovat nedorozumění. Hlavním rozdílem je, že YPbPr se používá pro analogový obraz, a YCbCr pro digitální, kvůli čemuž se používají různé škálovací hodnoty pro Umax a Vmax (v YCbCr modelech jsou obě ) při konverzi na YUV nebo z YUV. Y′CbCr a YCbCr se liší použitím nebo nepoužitím gama korekce.

Následující rovnice detailně popisují obecné principy a hlavní rozdíly mezi různými barevnými modely.

RGB konverze

[editovat | editovat zdroj]

R'G'B' na Y′PbPr

[editovat | editovat zdroj]
Převod RGB na YCbCr
Podrobnější informace naleznete v článku YPbPr.

Y′CbCr signály (před škálováním a posunutím při převádění signálů do digitální podoby) se nazývají YPbPr a vytvářejí se z RGB (červený, zelený a modrý) zdroje úpravou gama korekcí použitím tří konstant KR, KG a KB definovaných takto:

kde KR, KG, a KB se normálně odvodí z definice odpovídajícího RGB prostoru tak, aby platilo .

Ekvivalentní maticová manipulace se často nazývá „barevná matice“:

A její inverze:

Symboly s čárkou (′) znamenají složky, na které byla uplatněna gama korekce; tedy R′, G′ a B′ nominálně z intervalu 0 až 1, kde 0 reprezentuje minimální intenzitu (například, černou) a 1 maximální (například bílou). Výsledná hodnota luminance (Y) pak bude mít jmenovitý rozsah 0 až 1, a hodnoty chrominance (PB a PR) budou mít jmenovitý rozsah -0,5 až +0,5. Opačný proces konverze lze jednoduše odvodit obrácením výše uvedených rovnic.

Y′PbPr na Y′CbCr

[editovat | editovat zdroj]

Při reprezentaci signálů v digitální formě jsou výsledky škálované a zaokrouhlené, a jsou k nim typicky přičtena posunutí (anglicky offsets). Například při použití osmibitové reprezentace vede škálování a posunutí aplikované na složku Y′ podle specifikace (např. MPEG-2[3]) k hodnotě 16 pro černou barvu a hodnotě 235 pro bílou. Norma má osmibitové digitalizované verze složek CB a CR škálované do jiného intervalu 16 až 240. Následně je někdy požadované přeškálování zlomkem (235-16)/(240-16) = 219/224 když se vytváří barevná matice nebo se provádí zpracování v prostoru YCbCr, což způsobuje kvantizační zkreslení, když se další zpracování neprovádí s použitím vyšších bitových hloubek.

Škálování, které vede k použití menšího rozsahu digitálních hodnot, než jaké by mohlo být žádoucí pro reprezentaci jmenovitého rozsahu vstupních dat dovoluje určité „překmity“ a „podkmity“ během zpracování bez nutnosti nežádoucího ořezání. Tento prostor okolo maxima nebo minima („headroom“ resp. „toeroom“)[4] se může také použit pro rozšíření jmenovitého barevného gamutu, jak je uvedeno v xvYCC.

Hodnota 235 vyhovuje maximálnímu překmitu (255 - 235) / (235 - 16) = 9,1%, který je nepatrně větší než teoretický maximální překmit (způsobený Gibbsovým jevem) přibližně 8,9% maximálního rozdílu (od černé k bílé). Toeroom je menší, s překmitem asi 16 / 219 = 7,3%, což je méně než teoretický maximální překmit 8,9%. Protože hodnoty 0 a 255 jsou v HDMI rezervované, je prostor ve skutečnosti ještě nepatrně menší.

Y′CbCr na xvYCC

[editovat | editovat zdroj]
Podrobnější informace naleznete v článku xvYCC.

Protože rovnice definující Y′CbCr jsou utvořeny tak, že celou jmenovitou barevnou krychli RGB rotují a škálují, aby se vešla do (větší) barevné krychle YCbCr, existují v barevné krychli Y′CbCr určité oblasti, které nelze reprezentovat v odpovídající doméně RGB (přinejmenším ne ve jmenovitém rozsahu RGB). To způsobuje určité potíže při určování, jak správně interpretovat a zobrazovat některé Y′CbCr signály. Tyto hodnoty Y′CbCr mimo rozsah se používají v xvYCC pro kódování barev mimo gamut definovaný v BT.709.

Konverze ITU-R BT.601

[editovat | editovat zdroj]
Podrobnější informace naleznete v článku Rec. 601.

Forma Y′CbCr definovaná pro použití v televizi se standardním rozlišením normou ITU-R BT.601 (dříve CCIR 601) pro digitální komponentní video, je odvozena z příslušného prostoru RGB (se složkami podle ITU-R BT.470-6 System M) takto:

Z výše uvedených konstant a vzorců lze pro ITU-R BT.601 odvodit následující:

Analogové YPbPr z analogového R'G'B' je odvozeno takto:

Digitální Y′CbCr (s 8 bity na vzorek) je odvozeno z analogového R'G'B' takto:

nebo jednoduše po složkách

Rozsah výsledných signálů je 16 až 235 pro Y′ (16 až 240 pro Cb a Cr); hodnoty 0 až 15 se nazývají footroom, a hodnoty 236 až 255 se headroom. Stejné kvantizační rozsahy, různé pro Y a Cb, Cr platí také pro BT.2020 a BT.709.

Digitální prostor Y′CbCr je možné odvodit z digitálního prostoru R'dG'dB'd (s 8 bity na vzorek, každý používá plný rozsah, tj. nula reprezentuje černou a 255 bílou barvu) podle následujících rovnic:

V následujících vzorcích jsou škálovací faktory znásobeny zlomkem . Díky tomu se ve jmenovatelích objeví hodnota 256, což umožňuje dělení nahradit bitovým posuvem.

Pokud digitální zdroj R'd G'd B'd obsahuje footroom a headroom, je třeba z každého signálu odečíst posunutí 16 pro footroom, a použít škálovací faktor .

Inverzní transformace je:

Inverzní transformace bez zaokrouhlování (s použitím hodnot přímo z doporučení ITU-R BT.601) je:

Tento barevný prostor Y′CbCr se používá především ve starších systémech televize se standardním rozlišením, protože používá RGB model, který lépe vyhovuje emisním charakteristikám luminiforů starších vakuových obrazovek.

Konverze ITU-R BT.709

[editovat | editovat zdroj]
Podrobnější informace naleznete v článku Rec. 709.
Porovnání Rec. 709 a Rec. 2020

Norma ITU-R BT.709 definuje jiný tvar Y′CbCr, určený primárně pro HDTV. Novější tvar se používá také v některých aplikacích určených pro počítačové displeje jako SRGB (ačkoli matice sYCC používaná pro sRGB tvar YCbCr je stále BT.601). V tomto případě se hodnoty Kb a Kr liší, ale vzorce pro jejich použití jsou stejné. Konstanty pro ITU-R BT.709 jsou:

Tento barevný prostor Y′CbCr je založen na modelu RGB, který lépe vyhovuje vyzařovacím charakteristikám luminiforů novějších CRT obrazovek a jiných moderních displejů.[zdroj?] Konverzní matice pro BT.709 jsou následující:

Definice signálů R', G' a B' se mezi BT.709 a BT.601 také liší, a liší se i v rámci BT.601 podle používaného televizního systému (625 řádků pro PAL a SECAM a 525 řádků pro NTSC), a odlišují se i v jiných specifikacích. V různých konstrukcích jsou rozdíly v definici barevných souřadnic R, G a B, v referenčním bílém bodě, v podporovaném rozsahu gamutu, přesných funkcích pro předkompenzaci gama pro odvozování R', G' a B' z R, G a B, a ve škálováních i offsetech, které se mají použít při konverzi z R'G'B' na Y′CbCr. Správná konverze Y′CbCr z jednoho tvaru do jiného není proto záležitostí pouze inverze matice a jejího použití. Ve skutečnosti, když je Y′CbCr navrženo ideálně, hodnoty KB a KR jsou odvozeny z přesné specifikace základních barevných signálů RGB, takže složka luminance (Y′) odpovídá co nejlépe měření jasu s gama korekcí (vycházející typicky z měření odezvy lidského zraku na barevné podněty, které provedla komise CIE v roce 1931).[5]

Konverze ITU-R BT.2020

[editovat | editovat zdroj]
Podrobnější informace naleznete v článku Rec. 2020.

Norma ITU-R BT.2020 používá stejné gama funkce jako BT.709. Definuje:[6]

  • Barevný prostor Y'CbCr s nekonstantním jasem, podobný předchozím, ale s jinými KB a KR.
  • Barevný prostor Y'cCbcCrc s konstantním jasem, ve kterém je Y' hodnota skutečného jasu s gama kodekem.[6]

Pro oba barevné prostory jsou ze složek odvozené koeficienty:

Pro NCL je definice klasická: ; ; . Konverze kódování může být také zapsána maticí.[6] Dekódovací matice pro BT.2020-NCL se 14 desetinnými místy je následující:

Hodnoty s méně desetinnými místy nejsou zaokrouhlené, ale jde o přesné hodnoty. Pro systémy s omezenou barevnou hloubkou (např. 8 nebo 10 bitů) se může používat matice se zaokrouhlenými hodnotami, například použitím pouze 6 desetinných číslic.[7]

Verze CL barevného modelu YcCbcCrc kóduje:[6]

  • . Gama funkce je aplikovaná na skutečný jas spočítaný z lineárního RGB.
  • pokud jinak . a jsou teoretická minima a maxima odpovídající gamutu. Zaokrouhlené „praktické“ hodnoty jsou , . Úplné odvození lze nalézt v doporučení.[6]
  • pokud jinak . a jsou opět teoretické limity. Zaokrouhlené hodnoty jsou , .

Funkci CL lze použít, pokud jde především o zachování jasu (viz Podvzorkování barvonosných složek), nebo když „je třeba provést zlepšení účinnosti kódování pro doručení.“ Specifikace se v tomto bodě odvolává na ITU-R zprávu BT.2246.[6] BT.2246 uvádí, že CL vylepšilo účinnost komprimace při zachování jasu, ale o NCL je známo, že nejdříve provádí míchání barev a jiné produkční postupy v HDTV YCbCr.[8]

BT.2020 nedefinuje PQ ani HDR, které je definováno v SMPTE ST 2084 a BT.2100. BT.2100 zavádí použití ICTCP, téměř vjemového barevného prostoru odvozeného z lineárního RGB s dobrou linearitou odstínu. Má „téměř konstantní jas“.[9]

Konverze SMPTE 240M

[editovat | editovat zdroj]
Podrobnější informace naleznete v článku Multiple sub-Nyquist sampling encoding.

Norma SMPTE 240M (používaná v systémech MUSE analogové HD televize) definuje YCC s těmito koeficienty:

Koeficienty jsou odvozené ze složek SMPTE 170M a bílého bodu definovaného v normě 240M.

Konverze JPEG

[editovat | editovat zdroj]

JFIF použití JPEG podporuje upravené doporučení Rec. 601 Y′CbCr kde Y′, CB a CR mají plný osmibitový rozsah [0...255].[10] Následují konverzní rovnice vyjádřené s přesností na šest desetinných míst (přesné rovnice jsou v ITU-T T.871).[11]) V následujícím vzorci je pro každou vstupní složku (R,G,B) použit plný osmibitový rozsah [0...255].

A zpět:

Výše uvedená konverze je identická s sYCC, pokud je vstup zadán jako sRGB, ale IEC 61966-2-1:1999/Amd1:2003 uvádí pouze čtyři desetinné číslice.

JPEG také definuje formát „YCCK“ společnosti Adobe pro CMYK vstup. V tomto formát se hodnota „K“ předává beze změn, zatímco CMY se používají pro odvozovat YCbCr pomocí výše uvedené matice s tím, že , a . V důsledku toho lze používat podobnou sadu metod podvzorkování.[12]

Koeficienty základních složek B, G v systému BT.470-6

[editovat | editovat zdroj]

Tyto koeficienty se nepoužívají, ani se nikdy nepoužívaly.[13]

Systémy luminance odvozené od chromatičnosti

[editovat | editovat zdroj]

H.273 popisuje také systémy s konstantním a nekonstantním jasem, které jsou striktně odvozeny ze základních složek a bílého bodu, takže nedochází k situacím, kdy jsou např. implicitní složky JPEG sRGB/BT.709 použity s maticí BT.601 (která je odvozena z BT.470-6 System M).

Numerické aproximace

[editovat | editovat zdroj]

Dokud nebyly dostupné rychlé SIMD procesory s pohyblivou řádovou čárkou, používala většina digitálních implementací převodu RGB → Y′UV celočíselné operace, především aproximace s pevnou řádovou čárkou. Aproximace znamená, že přesnost používaných čísel (vstupní data, výstupní data a konstanty) je omezená, a tedy kdokoli používá tuto metodu, musí počítat se ztrátou přesnosti obvykle v poslední binární číslici jako kompromisem se zlepšením výpočetní rychlosti.

Hodnoty Y′ jsou tradičně posunuty a škálovány do rozsahu [16, 235] (nazývanému „studio swings“ nebo „TV levels“) místo použití plného rozsahu [0, 255] (nazývanému „full swings“ nebo „PC úrovně“). Tato praxe byla standardizována v SMPTE-125M, aby dovolovala překmity signálu („vyzvánění“) způsobené filtrováním.[14] K hodnotám U a V, které mohou být kladné nebo záporné, se přičítá 128, aby byly vždy kladné, což dává studiový rozsah pro U a V 16–240. (Tyto rozsahy jsou důležité při editaci videa a produkci, protože použití chybného rozsahu způsobí obraz s „ořezanou“ černou a bílou nebo obraz s nízkým kontrastem.)

Aproximace osmibitové matice pro BT.601

[editovat | editovat zdroj]

V těchto maticích jsou všechny složky zaokrouhlené na nejbližší násobek 1/256. Proto pro každou složku je mezivýsledkem pouze jedna 16bitová hodnota, a dělení lze nahradit jednoduchých bitovým posuvem doprava (x + 128) >> 8.[14]

Pro studio swing:

Pro full swing:

Grafický stroj Skia společnosti Google používal výše uvedenou osmibitovou matici s plným rozsahem, což způsobovalo mírné zelenání JPEG obrazů zakódovaných na zařízeních s operačním systémem Android, které bylo zřetelnější při opakovaném ukládání. Problém byl opraven v roce 2016, kdy začaly být používány přesnější verze. Díky SIMD optimalizacím v libjpeg-turbo je přesná verze dokonce rychlejší.[15]

Formáty a konverze pakovaných pixelů

[editovat | editovat zdroj]
Podrobnější informace naleznete v článku Pakované pixely.

V RGB souborech se typicky používá 8, 12, 16 nebo 24 bitů na jeden pixel. V těchto příkladech budeme předpokládat 24 bitů na pixel, což se zapisuje jako RGB888. Standardní byte formát je jednoduše r0, g0, b0, r1, g1, b1, ....

YCbCr formáty s pakovanými pixely se často označují „YUV“. Takové soubory lze zakódovat použitím 12, 16 nebo 24 bitů na pixel. Podle podvzorkování barvonosných složek lze většinu formátů popsat jako 4:4:4, 4:2:2, a 4:2:0p. Apostrof za Y se často vynechává, stejně jako „p“ (znamenající {{Cizojazyčně|en|planar} – rovinný) na konci YUV420p. Z hlediska skutečných formátů souborů je 4:2:0 nejobvyklejší, protože redukce velikosti je významná, a přípona jména souboru je obvykle „.YUV“. Vztah mezi přenosovou rychlostí a vzorkováním (A:B:C) je dán poměrem mezi Y a U nebo V kanálem.[16][17] Zápis „YUV“ následovaný třemi číslicemi je nejednoznačný: tři číslice mohou vyjadřovat podvzorkování barvonosných složek (např. „YUV420“) nebo bitovou hloubku v každém kanálu (např. „YUV565“). Jednoznačným způsobem označování těchto formátů je FourCC kód.[18]

Pro konverze z RGB na YUV nebo zpět je nejjednodušší použít RGB888 a 4:4:4. Pro 4:1:1, 4:2:2 a 4:2:0 je třeba nejdřív zkonvertovat bajty na 4:4:4.

Pakování 4:4:4 je přímočaré, protože neprovádí žádné seskupování pixelů: jediným rozdílem je počet bitů pro každý kanál a jejich rozložení. Základní YUV3 schéma používá 3 bajty na pixel s pořadím y0, u0, v0, y1, u1, v1 (kde „u“ je hodnota Cb a „v“ hodnota Cr; totéž platí pro dále uvedené formáty).[18] V počítačích je obvyklejší formát AYUV, který přidává alfa kanál a používá pořadí a0, y0, u0, v0, a1, y1, u1, v1, protože se skupinami 32 bitů se snáze pracuje.[16]

Pakování 4:2:2 seskupuje 2 sousední pixely vodorovně do „kontejneru“. Dvě hlavní uspořádání jsou:[17]

  • YUY2: také nazývaný YUYV, s hodnotami ve formátu y0, u, y1, v.
    Formát YUY2
  • UYVY: inverzní YUY2 s prohozenými bajty, s hodnotami ve formátu u, y0, v, y1.

Pakování 4:1:1 se používá zřídka. Pixely jsou ve vodorovném směru po čtyřech.[17]

Pakování 4:2:0 se používá velmi často. Hlavními formáty jsou IMC2, IMC4, YV12, a NV12.[17] Všechny čtyři formáty jsou „rovinné“, což znamená, že hodnoty Y, U a V jsou sdružené dohromady, nikoli proložené. Všechny formáty používají 12 bitů na pixel pro osmibitový kanál.

  • IMC2 nejprve rozvrhne celé obrázky ve složce Y. Pak uspořádá jednotlivé řádky barevných informací v pořadí V0 ... Vn, U0 ... Un, kde n je počet barevných vzorků na řádek rovný poloviční šířce Y.
  • IMC4 se podobá IMC2, ale pracuje v pořadí U0 ... Un, V0 ... Vn.
  • I420 je jednodušší konstrukce a používá se častěji. Ukládá celý obraz v Y, pak celý obraz v U, a nakonec celý obraz ve V.
    Struktura I420
  • YV12 používá stejnou obecnou konstrukci jako I420, ale s obráceným pořadím U a V.[19]
  • NV12 je pravděpodobně nejpoužívanější osmibitový formát 4:2:0. Je implicitním formátem pro preview kamer v systému Android.[20] Zapisuje se celý obraz v Y, následují prokládané řádky v pořadí U0, V0, U1, V1, atd.

Existují i „dlaždicové“ varianty rovinných formátů.[21]

V tomto článku byl použit překlad textu z článku YCbCr na anglické Wikipedii.

  1. , 2024. YUV, YCbCr, YPbPr colour spaces [online]. 2024 [cit. 2021-04-16]. Dostupné online. 
  2. H.273: Coding-independent code points for video signal type identification [online]. [cit. 2025-01-06]. Dostupné online. 
  3. e.g. the MPEG-2 specification, ITU-T H.262 2000 E pg. 44
  4. MFNominalRange (mfobjects.h) - Win32 apps [online]. [cit. 2020-11-10]. Dostupné online. (anglicky) 
  5. Charles Poynton, Digital Video and HDTV, Chapter 24, pp. 291–292, Morgan Kaufmann, 2003.
  6. a b c d e f BT.2020 : Parameter values for ultra-high definition television systems for production and international programme exchange. www.itu.int. Mezinárodní telekomunikační unie, June 2014. Dostupné online [cit. 2014-09-08]. 
  7. ITU-T H Suppl. 18 [online]. October 2017. Dostupné online. 
  8. BT.2246-8 (03/2023) The present state of ultra-high definition television [online]. Dostupné online. 
  9. Subsampling in ICtCp vs YCbCr [online]. Dolby Laboratories, Inc.. Dostupné v archivu pořízeném dne 2018-10-13. 
  10. JPEG File Interchange Format Version 1.02
  11. T.871: Information technology – Digital compression and coding of continuous-tone still images: JPEG File Interchange Format (JFIF). [s.l.]: ITU-T, 2012-09-11. Dostupné online. 
  12. See libjpeg-turbo documentation for: CS_YCCK 'YCCK (AKA "YCbCrK") is not an absolute barevný prostor but rather a mathematical transformation of CMYK designed solely for storage and transmission', cmyk_ycck_convert(); see
  13. EBU Tech 3237 Supplement 1 [online]. [cit. 2021-04-15]. S. 18. Dostupné online. 
  14. a b JACK, Keith, 1993. Video Demystified. [s.l.]: HighText Publications. Dostupné online. ISBN 1-878707-09-4. S. 30. 
  15. Use libjpeg-turbo for YUV->RGB conversion in jpeg encoder · google/skia@c7d01d3 [online]. Dostupné online. (anglicky) 
  16. a b msdn.microsoft.com, YUV Video Subtypes
  17. a b c d msdn.microsoft.com, Recommended 8-Bit YUV Formats for Video Rendering
  18. a b 2.7.1.1. Packed YUV formats — The Linux Kernel documentation [online]. Dostupné online. 
  19. VideoLAN Wiki: YUV [online]. Dostupné online. 
  20. fourcc.com YUV pixel formas
  21. 2.7.1.2. Planar YUV formats — The Linux Kernel documentation [online]. Dostupné online. 

Externí odkazy

[editovat | editovat zdroj]

Softwarové nástroje na balení pixelů: