Dela via


Om YUV-video

Digital video kodas ofta i ett YUV- format. Den här artikeln förklarar de allmänna begreppen för YUV-video, tillsammans med viss terminologi, utan att gå djupt in i matematiken för YUV-videobearbetning.

Om du har arbetat med datorgrafik är du förmodligen bekant med RGB-färg. En RGB-färg kodas med tre värden: röd, grön och blå. Dessa värden motsvarar direkt delar av det synliga spektrumet. De tre RGB-värdena utgör ett matematiskt koordinatsystem som kallas färgrymd. Den röda komponenten definierar en axel i det här koordinatsystemet, blått definierar den andra och grönt definierar den tredje, enligt följande bild. Alla giltiga RGB-färger hamnar någonstans inom det här färgområdet. Till exempel är ren magenta 100% blå, 100% röd och 0% grön.

diagram som visar rgb-färgrymd

Även om RGB är ett vanligt sätt att representera färger är andra koordinatsystem möjliga. Termen YUV- refererar till en familj med färgutrymmen, som alla kodar ljusstyrkainformation separat från färginformation. Precis som RGB använder YUV tre värden för att representera valfri färg. Dessa värden kallas Y, U och V. (I själva verket är den här användningen av termen "YUV" tekniskt felaktig. I datorvideo refererar termen YUV nästan alltid till ett visst färgutrymme med namnet Y'CbCr, som diskuteras senare. YUV används dock ofta som en allmän term för alla färgrymder som fungerar enligt samma principer som Y'CbCr.)

Komponenten Y, som även kallas luma, representerar färgens ljusstyrka. Den primära symbolen (') används för att skilja luma från ett nära relaterat värde, luminans, som är Y. Luminance härleds från linjära RGB-värden, medan luma härleds från icke-linjära (gammakorrigerade) RGB-värden. Luminans är ett närmare mått på sann ljusstyrka, men luma är mer praktiskt att använda av tekniska skäl. Den främsta symbolen utelämnas ofta, men YUV-färgutrymmen använder alltid luma, inte luminans.

Luma härleds från en RGB-färg genom att ta ett viktat medelvärde av de röda, gröna och blå komponenterna. För standarddefinitions-TV används följande formel:

Y' = 0.299R + 0.587G + 0.114B

Denna formel återspeglar det faktum att det mänskliga ögat är mer känsligt för vissa våglängder av ljus än andra, vilket påverkar den upplevda ljusstyrkan i en färg. Blått ljus visas som mörkast, grönt ser ljusast ut och rött är någonstans däremellan. Denna formel återspeglar också de fysiska egenskaperna hos fosforerna som används i tidiga TV-apparater. En nyare formel, med hänsyn till modern TV-teknik, används för hd-tv:

Y' = 0.2125R + 0.7154G + 0.0721B

Luma-ekvationen för standarddefinitions-TV definieras i en specifikation med namnet ITU-R BT.601. För hd-tv är den relevanta specifikationen ITU-R BT.709.

U- och V-komponenterna, som även kallas chroma värden eller färgskillnad värden, härleds genom att subtrahera Y-värdet från de röda och blå komponenterna i den ursprungliga RGB-färgen:

U = B - Y'

V = R - Y'

Tillsammans innehåller dessa värden tillräckligt med information för att återställa det ursprungliga RGB-värdet.

Fördelar med YUV

Analog television använder YUV delvis av historiska skäl. Analoga färg-TV-signaler utformades för att vara bakåtkompatibla med svartvita TV-apparater. Färg-TV-signalen bär kromainformationen (U och V) överlagrad på lumasignalen. Svartvita TV-apparater ignorerar kroman och visar den kombinerade signalen som en gråskalebild. (Signalen är utformad så att kroma inte avsevärt stör lumasignalen.) Färg-TV kan extrahera kroma och konvertera signalen tillbaka till RGB.

YUV har en annan fördel som är mer relevant idag. Det mänskliga ögat är mindre känsligt för förändringar i nyans än förändringar i ljusstyrka. Därför kan en bild ha mindre kromainformation än lumainformation utan att offra bildens upplevda kvalitet. Det är till exempel vanligt att sampla kromavärdena till hälften av lumaprovernas vågräta upplösning. Med andra ord finns det ett U-exempel och ett V-exempel för vartannat lumaexempel i en rad bildpunkter. Om vi antar att 8 bitar används för att koda varje värde krävs totalt 4 byte för varannan bildpunkt (två Y, ett U och ett V) för i genomsnitt 16 bitar per pixel eller 30% mindre än motsvarande 24-bitars RGB-kodning.

YUV är inte i sig mer kompakt än RGB. Om inte kromet är nedsamplat är en YUV-pixel samma storlek som en RGB-pixel. Dessutom är konverteringen från RGB till YUV förlustfri. Om det inte finns någon nedsampling kan en YUV-pixel konverteras tillbaka till RGB utan förlust av information. Downsampling gör en YUV-bild mindre och förlorar även en del av färginformationen. Om den utförs korrekt är förlusten dock inte märkbart betydande.

YUV inom datorvideo

De formler som angavs tidigare för YUV är inte de exakta konverteringar som används i digital video. Digital video använder vanligtvis en form av YUV som heter Y'CbCr. I huvudsak fungerar Y'CbCr genom att skala YUV-komponenterna till följande intervall:

Komponent Omfång
Y' 16–235
Cb/Cr 16–240, med 128 som representerar noll

 

Dessa intervall förutsätter 8 bitars precision för Y'CbCr-komponenterna. Här är den exakta härledning av Y'CbCr, med hjälp av BT.601-definitionen av luma:

  1. Börja med RGB-värden i intervallet [0...1]. Med andra ord är rent svart 0 och rent vitt är 1. Viktigt är att dessa är icke-linjära (gamma korrigerade) RGB-värden.

  2. Beräkna luma. För BT.601, Y' = 0.299R + 0.587G + 0.114B, enligt beskrivningen tidigare.

  3. Beräkna mellanliggande kromskillnadsvärden (B – Y) och (R - Y). Dessa värden har ett intervall på +/- 0,886 för (B - Y) och +/- 0,701 för (R - Y).

  4. Skala värdena för kromskillnad enligt följande:

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

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

    Dessa skalningsfaktorer är utformade för att ge båda värdena samma numeriska intervall, +/- 0,5. Tillsammans definierar de ett YUV-färgutrymme med namnet Y'PbPr. Det här färgutrymmet används i analog komponentvideo.

  5. Skala Y'PbPr-värdena för att hämta de slutliga Y'CbCr-värdena:

    Y' = 16 + 219 × Y'

    Cb = 128 + 224 × Pb

    Cr = 128 + 224 × Pr

De senaste skalningsfaktorerna ger det värdeintervall som anges i föregående tabell. Naturligtvis kan du konvertera RGB direkt till Y'CbCr utan att lagra mellanliggande resultat. Stegen visas separat här för att visa hur Y'CbCr härleds från de ursprungliga YUV-ekvationerna som angavs i början av den här artikeln.

I följande tabell visas RGB- och YCbCr-värden för olika färger, återigen med hjälp av BT.601-definitionen av luma.

Färg R G B Y' Cb Cr
Svart 0 0 0 16 128 128
Röd 255 0 0 81 90 240
Grön 0 255 0 145 54 34
Blå 0 0 255 41 240 110
Cyan 0 255 255 170 166 16
Magenta 255 0 255 106 202 222
Gul 255 255 0 210 16 146
Vit 255 255 255 235 128 128

 

Som den här tabellen visar motsvarar Cb och Cr inte intuitiva idéer om färg. Till exempel innehåller både rent vitt och rent svart neutrala nivåer av Cb och Cr (128). De högsta och lägsta värdena för Cb är blå respektive gul. För Cr är de högsta och lägsta värdena röda och cyan.

Mer information

Videomediatyper

Medietyper