關於YUV影片
數字視訊通常會以 YUV 格式編碼。 本文說明 YUV 影片的一般概念,以及一些術語,而不深入討論 YUV 影片處理的數學。
如果您已使用電腦圖形,您可能已熟悉 RGB 色彩。 RGB 色彩會使用三個值來編碼:紅色、綠色和藍色。 這些值會直接對應至可見光譜的部分。 這三個 RGB 值會形成數學座標系統,稱為 色彩空間。 紅色元件會定義這個座標系統的一個座標軸,藍色定義第二個座標軸,而綠色則定義第三個座標軸,如下圖所示。 任何有效的 RGB 色彩都落在此色彩空間內的某個位置。 例如,純洋紅是 100% 藍色、100% 紅色,以及 0% 綠色。
顯示 rgb 色彩空間的
雖然 RGB 是代表色彩的常見方式,但可能會有其他座標系統。 YUV 一詞是指一系列色彩空間,這些色彩空間全都會將亮度資訊與色彩資訊分開編碼。 如同 RGB,YUV 會使用三個值來表示任何色彩。 這些值稱為 Y'、U 和 V.(事實上,使用 “YUV” 一詞在技術上不正確。在計算機影片中,YUV 一詞幾乎一律是指一個名為 Y'CbCr 的特定色彩空間,稍後討論。不過,YUV 通常用於任何與 Y'CbCr 相同的原則運作的色彩空間的一般詞彙。
Y 的元件也稱為 luma,代表色彩的亮度值。 撇號(')用來區分 luma 與緊密相關的值,亮度,此值指定為 Y。亮度衍生自 線性 RGB 值,而 luma 則衍生自 非線性 (伽馬校正)RGB 值。 亮度是衡量真實亮度的更準確指標,但由於技術上的實用性,luma 更便於使用。 主要符號經常省略,但 YUV 色彩空間一律使用 luma,而不是亮度。
Luma 衍生自 RGB 色彩,方法是採用紅色、綠色和藍色元件的加權平均值。 針對標準定義電視,會使用下列公式:
Y' = 0.299R + 0.587G + 0.114B
這個公式反映了人眼對某些波長的光比其他波長更加敏感的事實,這會影響色彩的感知亮度。 藍燈呈現最暗,綠色看起來最亮,紅色位於兩者之間的某個位置。 這個公式還反映了早期電視中使用的磷的身體特徵。 考慮到現代電視技術,較新的公式用於高清電視:
Y' = 0.2125R + 0.7154G + 0.0721B
標準定義電視的 luma 方程式是在名為 bt.601 ITU-R 的規格中定義的。 對於高清電視,相關規格 ITU-R BT.709。
U 和 V 元件也稱為 色度 值或 色彩差異 值,是藉由從原始 RGB 色彩的紅色和藍色元件中減去 Y 值而得出。
U = B - Y'
V = R - Y'
這些值一起包含足夠的資訊來復原原始 RGB 值。
YUV 的優點
模擬電視由於歷史原因而部分使用 YUV。 類比彩色電視信號旨在與黑白電視回溯相容。 彩色電視信號帶有色度資訊(U 和 V),疊加到亮度信號上。 黑白電視會忽略色度,並將結合的訊號顯示為灰階圖像。 (信號的設計目的是使色度不會顯著干擾 luma 訊號。彩色電視可以擷取色度,並將訊號轉換回 RGB。
YUV 有另一個優勢,在現今時代更具相關性。 人眼對色調變化的敏感度比亮度的變化要低。 因此,影像的色度資訊可能比 luma 資訊少,而不會犧牲影像的感知品質。 例如,在 luma 樣本的水平解析度的一半處取樣色度值很常見。 換句話說,針對每一排像素中的每兩個 luma 樣本,會有一個 U 樣本和一個 V 樣本。 假設使用 8 個位來編碼每個值,則每兩個圖元需要 4 個字節(兩個 Y'、一個 U 和一個 V),平均每圖元 16 位,或比對等 24 位 RGB 編碼少 30%。
YUV 原本就不比 RGB 更精簡。 如果不是因為色度向下取樣,YUV 像素的大小就和 RGB 像素相同。 此外,從 RGB 轉換為 YUV 是無損的。 如果沒有向下取樣,則 YUV 像素可以轉換成 RGB,且不會遺失資訊。 縮小取樣會使 YUV 影像更小,也會失去一些色彩資訊。 不過,如果正確執行,則損失並不明顯。
計算機影片中的 YUV
先前針對 YUV 列出的公式不是數位視訊中使用的確切轉換。 數字視頻通常會使用一種稱為 Y'CbCr 的 YUV 形式。 基本上,Y'CbCr 的運作方式是將 YUV 元件調整為下列範圍:
元件 | 範圍 |
---|---|
Y' | 16–235 |
Cb/Cr | 16–240,128 代表零 |
這些範圍假設 Y'CbCr 元件具有 8 位的精度。 以下是 Y'CbCr 的確切衍生,使用 luma 的 BT.601 定義:
從範圍 [0...1] 中的 RGB 值開始。 換句話說,純黑色是0,純白色是1。 重要的是,這些是非線性(伽瑪更正)RGB 值。
計算亮度。 若為 BT.601,Y' = 0.299R + 0.587G + 0.114B,如先前所述。
計算中繼色度差異值 (B - Y') 和 (R - Y')。 這些值的範圍是 +/- 0.886 代表 (B - Y'),而 +/- 0.701 代表 (R - Y')。
調整色度差異值,如下所示:
Pb = (0.5 / (1 - 0.114)) × (B - Y')
Pr = (0.5 / (1 - 0.299)) × (R - Y')
這些縮放比例的設計目的是為兩個值提供相同的數值範圍 +/- 0.5。 它們會一起定義名為 Y'PbPr 的 YUV 色彩空間。 此色彩空間用於類比元件視訊。
調整 Y'PbPr 值以取得最終的 Y'CbCr 值:
Y' = 16 + 219 × Y'
Cb = 128 + 224 × Pb
Cr = 128 + 224 × Pr
這些最後一個縮放比例會產生上表所列的值範圍。 當然,您可以直接將 RGB 轉換成 Y'CbCr,而不需要儲存中繼結果。 此處分別列出這些步驟,說明 Y'CbCr 如何衍生自本文開頭所提供的原始 YUV 方程式。
下表顯示各種色彩的 RGB 和 YCbCr 值,再次使用 luma 的 BT.601 定義。
顏色 | R | G | B | Y' | Cb | 鉻 |
---|---|---|---|---|---|---|
黑 | 0 | 0 | 0 | 16 | 128 | 128 |
紅 | 255 | 0 | 0 | 81 | 90 | 240 |
綠 | 0 | 255 | 0 | 145 | 54 | 34 |
藍 | 0 | 0 | 255 | 41 | 240 | 110 |
青色 | 0 | 255 | 255 | 170 | 166 | 16 |
品紅 | 255 | 0 | 255 | 106 | 202 | 222 |
黃色 | 255 | 255 | 0 | 210 | 16 | 146 |
白 | 255 | 255 | 255 | 235 | 128 | 128 |
如下表所示,Cb 和 Cr 不會對應到有關色彩的直覺式想法。 例如,純白色和純黑色都包含 Cb 和 Cr (128) 的中性層級。 Cb 的最高值和最低值分別為藍色和黃色。 針對Cr,最高和最低的值為紅色和青色。
如需詳細資訊
- 推薦的 8 位元 YUV 格式用於影片渲染
- 基思·傑克 影像揭秘,第五版。 紐恩斯,2007年。
- 查理斯·龐頓 數字視訊的技術簡介。 威利,1996年。
相關主題