YCbCr
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 stosowane w systemach analogowych (component video) 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]
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:
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ą:
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
[edytuj | edytuj kod]- ↑ Specyfikacja MPEG-2, ITU H.262 2000 E, s. 44.
- ↑ JPEG File Interchange Format Version 1.02. jpeg.org. [zarchiwizowane z tego adresu (2014-09-03)]..
Linki zewnętrzne
[edytuj | edytuj kod]- Charles Poynton – Color FAQ
- Charles Poynton – Video engineering
- YCrCb to RGB converter
- Color Space Visualization. couleur.org. [zarchiwizowane z tego adresu (2013-11-28)].
- PC Magazine Encyclopedia: YCbCr