Delen via


Over YUV Video

Digitale video wordt vaak gecodeerd in een YUV--indeling. In dit artikel worden de algemene concepten van YUV-video uitgelegd, samen met een aantal terminologie, zonder diep in de wiskunde van YUV-videoverwerking te gaan.

Als u met computerafbeeldingen hebt gewerkt, bent u waarschijnlijk bekend met RGB-kleur. Een RGB-kleur wordt gecodeerd met drie waarden: rood, groen en blauw. Deze waarden komen rechtstreeks overeen met delen van het zichtbare spectrum. De drie RGB-waarden vormen een wiskundig coördinaatsysteem, een kleurruimtegenoemd. Het rode onderdeel definieert één as van dit coördinaatsysteem, blauw definieert de tweede en groen definieert het derde, zoals wordt weergegeven in de volgende afbeelding. Elke geldige RGB-kleur valt ergens binnen deze kleurruimte. Pure magenta is bijvoorbeeld 100% blauw, 100% rood en 0% groen.

diagram met rgb-kleurruimte

Hoewel RGB een veelgebruikte manier is om kleuren weer te geven, zijn andere coördinatensystemen mogelijk. De term YUV- verwijst naar een familie van kleurruimten, die allemaal helderheidsinformatie afzonderlijk coderen van kleurinformatie. Net als RGB gebruikt YUV drie waarden om elke kleur weer te geven. Deze waarden worden aangeduid als Y, U en V. (In feite is dit gebruik van de term "YUV" technisch onnauwkeurig. In computervideo verwijst de term YUV bijna altijd naar een bepaalde kleurruimte met de naam Y'CbCr, die later wordt besproken. YUV wordt echter vaak gebruikt als een algemene term voor elke kleurruimte die op dezelfde principes als Y'CbCr werkt.)

Het onderdeel Y, ook wel lumagenoemd, vertegenwoordigt de helderheidswaarde van de kleur. Het primeymbool (') wordt gebruikt om luma te onderscheiden van een nauw verwante waarde, luminantie, die Y is aangewezen. Luminantie wordt afgeleid van lineaire RGB-waarden, terwijl luma wordt afgeleid van niet-lineaire (gamma-gecorrigeerde) RGB-waarden. Luminantie is een hechtere meting van ware helderheid, maar luma is praktischer te gebruiken om technische redenen. Het prime-symbool wordt vaak weggelaten, maar YUV-kleurruimten gebruiken altijd luma, niet luminantie.

Luma is afgeleid van een RGB-kleur door een gewogen gemiddelde van de rode, groene en blauwe componenten te nemen. Voor televisie met standaarddefinitie wordt de volgende formule gebruikt:

Y' = 0.299R + 0.587G + 0.114B

Deze formule weerspiegelt het feit dat het menselijk oog gevoeliger is voor bepaalde golflengten van licht dan andere, wat van invloed is op de waargenomen helderheid van een kleur. Blauw licht lijkt het minst helder, groen lijkt het helderst en rood zit daar ergens tussenin. Deze formule weerspiegelt ook de fysieke kenmerken van de fosforen die in vroege televisies worden gebruikt. Een nieuwere formule, rekening houdend met moderne televisietechnologie, wordt gebruikt voor high-definition televisie:

Y' = 0.2125R + 0.7154G + 0.0721B

De luma-vergelijking voor standaarddefinitie-televisie wordt gedefinieerd in een specificatie met de naam ITU-R BT.601. Voor high-definition televisie is de relevante specificatie ITU-R BT.709.

De u- en V-onderdelen, ook wel chroma waarden of kleurverschil waarden genoemd, worden afgeleid door de Y-waarde af te trekken van de rode en blauwe onderdelen van de oorspronkelijke RGB-kleur:

U = B - Y'

V = R - Y'

Samen bevatten deze waarden voldoende informatie om de oorspronkelijke RGB-waarde te herstellen.

Voordelen van YUV

Analoge televisie gebruikt YUV deels om historische redenen. Analoge kleuren televisiesignalen zijn ontworpen om achterwaarts compatibel te zijn met zwart-wit televisies. Het kleuren televisiesignaal draagt de chroma informatie (u en V) superimposeerd op het luma signaal. Zwart-wit televisies negeren het chroma en geven het gecombineerde signaal weer als een grijswaardenbeeld. (Het signaal is zodanig ontworpen dat het chroma niet significant interfereert met het luma-signaal.) Kleuren-televisies kunnen het chroma extraheren en het signaal weer converteren naar RGB.

YUV heeft een ander voordeel dat vandaag relevanter is. Het menselijke oog is minder gevoelig voor veranderingen in tint dan veranderingen in helderheid. Als gevolg hiervan kan een afbeelding minder chroma-informatie hebben dan luma-informatie zonder de waargenomen kwaliteit van de afbeelding op te offeren. Het is bijvoorbeeld gebruikelijk om de chromawaarden te steekproefen bij de helft van de horizontale resolutie van de lumamonsters. Met andere woorden, voor elke twee lumavoorbeelden in een rij met pixels is er één U-voorbeeld en één V-voorbeeld. Ervan uitgaande dat 8 bits worden gebruikt om elke waarde te coderen, is er een totaal van 4 bytes nodig voor elke twee pixels (twee Y', één U en één V), voor een gemiddelde van 16 bits per pixel, of 30% kleiner dan de equivalente RGB-codering van 24 bits.

YUV is niet inherent compacter dan RGB. Tenzij de chroma downsampled is, is een YUV-pixel dezelfde grootte als een RGB-pixel. Ook is de conversie van RGB naar YUV niet verliesachtig. Als er geen downsampling is, kan een YUV-pixel zonder verlies van informatie worden geconverteerd naar RGB. Downsampling maakt een YUV-afbeelding kleiner en verliest ook een deel van de kleurinformatie. Als het echter correct wordt uitgevoerd, is het verlies niet perceptueel significant.

YUV in Computervideo

De eerder vermelde formules voor YUV zijn niet de exacte conversies die worden gebruikt in digitale video. Digitale video maakt over het algemeen gebruik van een vorm van YUV genaamd Y'CbCr. Het komt erop neer dat Y'CbCr werkt door de YUV-onderdelen naar de volgende bereiken te schalen:

Bestanddeel Bereik
Y' 16–235
Cb/Cr 16-240, met 128 die nul vertegenwoordigen

 

Bij deze bereiken wordt uitgegaan van 8 bits precisie voor de Y'CbCr-componenten. Hier volgt de exacte afleiding van Y'CbCr, met behulp van de BT.601-definitie van luma:

  1. Begin met RGB-waarden in het bereik [0...1]. Met andere woorden, puur zwart is 0 en puur wit is 1. Belangrijk is dat dit NIET-lineaire (gamma gecorrigeerde) RGB-waarden zijn.

  2. Bereken de luma. Voor BT.601, Y' = 0,299R + 0,587G + 0,114B, zoals eerder beschreven.

  3. Bereken de tussenliggende chromaverschilwaarden (B - Y') en (R - Y'). Deze waarden hebben een bereik van +/- 0,886 voor (B - Y) en +/- 0,701 voor (R - Y').

  4. Schaal de waarden van het chroma-verschil als volgt:

    Pb = (0,5 / (1 - 0,114)) × (B - Y')

    Pr = (0,5 / (1 - 0,299)) × (R - Y')

    Deze schaalfactoren zijn ontworpen om beide waarden hetzelfde numerieke bereik te geven, +/- 0,5. Samen definiëren ze een YUV-kleurruimte met de naam Y'PbPr. Deze kleurruimte wordt gebruikt in analoge componentvideo.

  5. Schaal de Y'PbPr-waarden om de uiteindelijke Y'CbCr-waarden op te halen:

    Y' = 16 + 219 × Y'

    Cb = 128 + 224 × Pb

    Cr = 128 + 224 × Pr

Deze laatste schaalfactoren produceren het bereik van waarden die in de vorige tabel worden vermeld. Natuurlijk kunt u RGB rechtstreeks converteren naar Y'CbCr zonder de tussenliggende resultaten op te slaan. De stappen worden hier afzonderlijk vermeld om te laten zien hoe Y'CbCr is afgeleid van de oorspronkelijke YUV-vergelijkingen die aan het begin van dit artikel zijn gegeven.

In de volgende tabel ziet u RGB- en YCbCr-waarden voor verschillende kleuren, opnieuw met behulp van de BT.601-definitie van luma.

Kleur R G B Y' Cb Cr
Zwart 0 0 0 16 128 128
Rood 255 0 0 81 90 240
Groen 0 255 0 145 54 34
Blauw 0 0 255 41 240 110
Cyaan 0 255 255 170 166 16
Magenta 255 0 255 106 202 222
Geel 255 255 0 210 16 146
Wit 255 255 255 235 128 128

 

Zoals in deze tabel wordt weergegeven, komen Cb en Cr niet overeen met intuïtieve ideeën over kleur. Zo bevatten puur wit en puur zwart beide neutrale niveaus van Cb en Cr (128). De hoogste en laagste waarden voor Cb zijn respectievelijk blauw en geel. Voor Cr zijn de hoogste en laagste waarden rood en cyaan.

Voor meer informatie

videomediatypen

Mediatypen