YCbCr

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj
Barns grand tetons YCbCr separation.jpg

YCbCr – model przestrzeni kolorów, używany do cyfrowego przesyłania oraz przechowywania obrazów i wideo. Wykorzystuje do tego trzy typy danych: Y – składową luminancji, Cb – składową różnicową chrominancji Y-B, stanowiącą różnicę między luminancją a niebieskim, oraz Cr – składową chrominancji Y-R, stanowiącą różnicę między luminancją a czerwonym. Kolor zielony jest uzyskiwany na podstawie tych trzech wartości.

YCbCr nie jest bezwzględną przestrzenią kolorów, jest sposobem na opisanie informacji na podstawie danych o kolorze w postaci RGB. Wartość YCbCr można określić tylko na podstawie tych danych.

Wykorzystanie[edytuj | edytuj kod]

Wyświetlacze CRT do wyświetlania obrazu wykorzystują sygnały RGB w postaci wartości napięć koloru czerwonego, zielonego i niebieskiego. Sygnały te jednak nie są optymalne dla przechowywania lub wykorzystania pasma transmisji, gdyż zawierają dużo redundantnych danych. Model YCbCr wykorzystuje fakt, że ludzkie oko jest bardziej podatne na informacje o jasności obrazu niż informacje o kolorze. Wykorzystując ten fakt, dane o luminancji przechowywane lub transmitowane są w wysokiej rozdzielczości, a dane o chrominancji (Cb, Cr) są kompresowane, dzięki czemu mogą być przesyłane wykorzystując mniejszą szerokość pasma.

Praktyczny przykład widoczny jest na obrazku po prawej, gdzie mniejsza ilość pasma jest wykorzystana na informacje o kolorze, a większa na czerń i biel, ponieważ ludzki wzrok jest bardziej czuły na te informacje.

Szczegóły techniczne[edytuj | edytuj kod]

Sygnały YCbCr są nazywane YPbPr i są tworzone na podstawie odpowiadającego obrazu RGB, używając dwóch stałych Kb i Kr w sposób następujący:

YPbPr (analogowa wersja Y'CbCr) z R'G'B'

====================================================
Y' =  Kr * R'        + (1 - Kr - Kb) * G' + Kb * B'
Pb = 0.5 * (B' - Y') / (1 - Kb)
Pr = 0.5 * (R' - Y') / (1 - Kr)
....................................................
R', G', B' in [0; 1]
Y' w [0; 1]
Pb w [-0.5; 0.5]
Pr w [-0.5; 0.5]


Y' =  Kr * R' + (1 - Kr - Kb) * G' + Kb * B' \,

Pb =\frac12 * \frac{B' - Y'}{1 - Kb}

Pr =\frac12 * \frac{R' - Y'}{1 - Kr}

gdzie Kb i Kr są wyprowadzane z odpowiadającej przestrzeni RGB.

Symbol prim (') oznacza tutaj, że korekcja gammy jest w użyciu; zatem R', G' i B' są nominalnie wartością między 0 a 1, gdzie 0 oznacza najmniejszą intensywność (np. wyświetlanie koloru czarnego), a 1 największą (np. wyświetlanie koloru białego). Wartość luma (Y) także będzie miała nominalną wartość pomiędzy 0 a 1, a wartości chroma (Cb i Cr) będą między -0.5 a +0.5. Odwrotny proces konwersji może być wyprowadzony poprzez odwrócenie powyższych równań.

Przy reprezentowaniu sygnałów w formie cyfrowej, wyniki są skalowane i zaokrąglane, i zazwyczaj dodawane są offsety. Na przykład, skalowanie i offset nakładane na komponent Y' według specyfikacji (np. MPEG-2[1]) daje wyniki w wartościach od 16 dla czarnego i 235 dla białego, używając 8-bitowej reprezentacji. Standard ma 8-bitowe cyfrowe wersje Cb i Cr skalowane do innego przedziału od 16 do 240. W konsekwencji, ponowne skalowanie przez iloraz (235-6)/(240-16) = 219/224 jest czasem wymagane przy matrycowaniu kolorów lub przetwarzaniu w przestrzeni YCbCr.

Forma Y'CbCr zdefiniowana dla telewizji standardowej rozdzielczości w ITU-R BT.601, do użytku z cyfrowym złączem Component video jest wyprowadzana z odpowiadającej przestrzeni RGB w sposób następujący:

K_B = 0.114
K_R = 0.299

Z powyższych stałych i równań, można wyprowadzić co następuje dla ITU-R BT.601 Najpierw analogowe YPbPr:

YPbPr (ITU-R BT.601)
========================================================
Y' =     + 0.299    * R' + 0.587    * G' + 0.114    * B'
Pb =     – 0.168736 * R' – 0.331264 * G' + 0.5      * B'
Pr =     + 0.5      * R' – 0.418688 * G' – 0.081312 * B'
........................................................
R', G', B' in [0; 1]
Y' w [0; 1]
Pb w [-0.5; 0.5]
Pr w [-0.5; 0.5]

Następnie jest to próbkowane 8 bitowo na Y'CbCr:

Y'CbCr (601) z przestrzeni R'G'B'
========================================================
Y' = 16  + ( 65.481  * R' + 128.553  * G' +  24.966  * B')
Cb = 128 + (-37.797  * R' –  74.203  * G' + 112.0    * B')
Cr = 128 + (112.0    * R' –  93.786  * G' –  18.214  * B')
........................................................
R', G', B' w [0; 1]
Y'               w {16, 17, ..., 235}
        footroom w {1, 2, ..., 15}
        headroom w {236, 237, ..., 254}
        sync.    w {0, 255}
Cb, Cr           w {16, 17, ..., 240}

Jeśli R', G' i B' są dane z 8-bitową dokładnością, wtedy:

YCbCr (601) z cyfrowego 8-bitowego R'G'B'
========================================================================
Y' = 16  + 1/256 * (   65.738  * R'd +  129.057  * G'd +  25.064  * B'd)
Cb = 128 + 1/256 * ( – 37.945  * R'd –   74.494  * G'd + 112.439  * B'd)
Cr = 128 + 1/256 * (  112.439  * R'd –   94.154  * G'd –  18.285  * B'd)
........................................................................
R'd, G'd, B'd w {0, 1, 2, ..., 255}
Y'               w {16, 17, ..., 235}
        footroom w {1, 2, ..., 15}
        headroom w {236, 237, ..., 254}
        sync.    w {0, 255}
Cb, Cr           w {16, 17, ..., 240}

Ten typ Y'CbCr jest używany dla starszych systemów telewizji standardowej, jako że wykorzystuje model RGB który pasuje najlepiej do charakterystyk emisji fosforu w starszych kineskopach CRT. Odwrotne równanie do powyższego wygląda następująco:

8-bit R'G'B' z przestrzeni YCbCr (601)
=====================================================================
R'd = ( 298.082 * Y'                + 408.583 * Cr ) / 256 – 222.921
G'd = ( 298.082 * Y' – 100.291 * Cb – 208.120 * Cr ) / 256 + 135.576
B'd = ( 298.082 * Y' + 516.412 * Cb                ) / 256 – 276.836
.....................................................................

Jeszcze inny typ Y'CbCr jest wyznaczony w standardzie ITU-R BT.709, stworzony dla telewizji wysokiej rozdzielczości HDTV. Ta nowsza forma jest też wykorzystywana w niektórych aplikacjach komputerowych do wyświetlania obrazu. W tym wypadku wartości Kb i Kr się różnią, ale równania pozostają te same dla ITU-R BT.709 stałe wynoszą:

K_B = 0.0722
K_R = 0.2126

Ten typ Y'CbCr jest oparty na modelu RGB który bardziej pasuje do charakterystyk emisji fosforu nowych CRT i innego współczesnego sprzętu do wyświetlania obrazu.

Choć dwie powyższe formy Y'CbCr są dominujące, istnieją jeszcze inne warianty. Na przykład standard SMPTE 240M określa YCbCr używając Kb = 0.087 i Kr = 0.212.

Definicje sygnałów R', G' i B' różnią się między BT.709 i Bt.601, różnią się także wewnątrz BT.601, zależnie od tego jaki system telewizji jest używany (625 linii w PAL i SECAM lub 525 linii w NTSC) i różnią się w innych specyfikacjach.

Ponieważ równania definiujące YCbCr są tworzone w sposób, który obraca cały nominalny sześcian kolorów RGB i skaluje go żeby wypełnić (większy) sześcian kolorów YCbCr, są takie punkty wewnątrz YCbCr które nie mogą być reprezentowane w odpowiadającym RGB (a przynajmniej nie w nominalnych przedziale RGB). To powoduje problemy w określaniu, jak prawidłowo interpretować i wyświetlać niektóre sygnały YCbCr.

Użycie JPEG ze standardu JFIF dopuszcza Y'CbCr, gdzie Y', Cb i Cr mają wszystkie 256 wartości:[2]

JFIF-Y'CbCr (601) z cyfrowego 8-bitowego R'G'B'

========================================================================
Y' =       + 0.299    * R'd + 0.587    * G'd + 0.114    * B'd
Cb = 128   – 0.168736 * R'd – 0.331264 * G'd + 0.5      * B'd
Cr = 128   + 0.5      * R'd – 0.418688 * G'd – 0.081312 * B'd
........................................................................
R'd, G'd, B'd   w {0, 1, 2, ..., 255}
Y', Cb, Cr      w {0, 1, 2, ..., 255}

Konwersja powrotna:

R = Y                        + 1.402   * (Cr - 128)
G = Y – 0.34414 * (Cb - 128) – 0.71414 * (Cr - 128)
B = Y + 1.772   * (Cb - 128)

Przypisy

  1. specyfikacja MPEG-2, ITU H.262 2000 E str. 44
  2. JPEG File Interchange Format Version 1.02

Linki zewnętrzne[edytuj | edytuj kod]