YCbCr


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]
Účel
[editovat | editovat zdroj]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.
Konverze
[editovat | editovat zdroj]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]
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]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]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]
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]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]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]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.
4:4:4
[editovat | editovat zdroj]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]
4:2:2
[editovat | editovat zdroj]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
.
4:1:1
[editovat | editovat zdroj]Pakování 4:1:1 se používá zřídka. Pixely jsou ve vodorovném směru po čtyřech.[17]
4:2:0
[editovat | editovat zdroj]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]
Odkazy
[editovat | editovat zdroj]Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku YCbCr na anglické Wikipedii.
- ↑ , 2024. YUV, YCbCr, YPbPr colour spaces [online]. 2024 [cit. 2021-04-16]. Dostupné online.
- ↑ H.273: Coding-independent code points for video signal type identification [online]. [cit. 2025-01-06]. Dostupné online.
- ↑ e.g. the MPEG-2 specification, ITU-T H.262 2000 E pg. 44
- ↑ MFNominalRange (mfobjects.h) - Win32 apps [online]. [cit. 2020-11-10]. Dostupné online. (anglicky)
- ↑ Charles Poynton, Digital Video and HDTV, Chapter 24, pp. 291–292, Morgan Kaufmann, 2003.
- ↑ 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].
- ↑ ITU-T H Suppl. 18 [online]. October 2017. Dostupné online.
- ↑ BT.2246-8 (03/2023) The present state of ultra-high definition television [online]. Dostupné online.
- ↑ Subsampling in ICtCp vs YCbCr [online]. Dolby Laboratories, Inc.. Dostupné v archivu pořízeném dne 2018-10-13.
- ↑ JPEG File Interchange Format Version 1.02
- ↑ 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.
- ↑ 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
- ↑ EBU Tech 3237 Supplement 1 [online]. [cit. 2021-04-15]. S. 18. Dostupné online.
- ↑ a b JACK, Keith, 1993. Video Demystified. [s.l.]: HighText Publications. Dostupné online. ISBN 1-878707-09-4. S. 30.
- ↑ Use libjpeg-turbo for YUV->RGB conversion in jpeg encoder · google/skia@c7d01d3 [online]. Dostupné online. (anglicky)
- ↑ a b msdn.microsoft.com, YUV Video Subtypes
- ↑ a b c d msdn.microsoft.com, Recommended 8-Bit YUV Formats for Video Rendering
- ↑ a b 2.7.1.1. Packed YUV formats — The Linux Kernel documentation [online]. Dostupné online.
- ↑ VideoLAN Wiki: YUV [online]. Dostupné online.
- ↑ fourcc.com YUV pixel formas
- ↑ 2.7.1.2. Planar YUV formats — The Linux Kernel documentation [online]. Dostupné online.
Externí odkazy
[editovat | editovat zdroj]- Y′CbCr calculator, včetně BT.1886
- Charles Poynton — Color FAQ
- Charles Poynton — Video engineering
- Color Space Visualization Archivováno 7. 12. 2008 na Wayback Machine.
- YUV, YCbCr, YPbPr color spaces.
- YCbCr Definition
Softwarové nástroje na balení pixelů:
- Kohn, Mike. Y′UV422 to RGB using SSE/Assembly
- libyuv
- pixfc-sse – knihovna konverzí barevných formátů pro jazyk C optimalizovaná pro SSE
- YUV files – Ukázkové a demonstrační YUV/RGB video soubory v mnoha formátech YUV, mohou pomoci s testováním.