1. 程式人生 > >H264編碼器10( H.264 探索 第一部分 色彩模型)

H264編碼器10( H.264 探索 第一部分 色彩模型)

來自:https://segmentfault.com/a/1190000006695679

H.264 探索 第一部分 色彩模型

 

目前,我正在做的H.264視訊訊號解碼相關的一些研究工作。所以,我決定我的第一篇獻給色彩模型。因為如果我們拋開一切不必要的(現在)的資訊 - 我們將看到,解碼視訊訊號將規約為一個問題:如何從位元流中提取出畫素顏色?

什麼是數字訊號?就像在數字世界中的一切 - 這是位序列。它可以儲存,複製,傳播或壓縮。

視訊是一組圖片,每一個圖片是由畫素組成的。和每一個畫素具有其自己的色彩和/或亮度,並以數字形式儲存此值。讓我們看看,我們怎麼可以儲存色彩值。這通過色彩模型(色彩空間)來實現的.什麼是色彩模型?它是一個數學模型,通過數字序列來表示色彩。讓我們先從最流行 的一種開始。

1.RGB模型

看看下面的圖片,這是眾所周知的RGB合成模型。

 

任何顏色可以在三個數字來表示。例如(255,0,0)表示紅色。很清楚,但不是很實用:我們需要知道所有三個數字以重建顏色。我們肯定需要更高效的模型,並且存在這種模型。

2.YCbCr色彩模型

那麼,如何更有效地用數字代表色彩?
假設我們用luminance程式碼色彩亮度,那麼我們可以用RGB來表示,

Y = krR + kgG + kbB

其中 Y – luminance (luma), 
k – 權重 (described in ITU-R BT.601-7 recommendation)

接下來計算計算色度(色差)表示的色彩資訊:

Cr = R - Y
Cg = G - Y 
Cb = B - Y

現在我們可以從ITU-R BT.601-7 recommendation獲得權重,跳過一些數學計算,得到以下公式:

Y = 0.299R + 0.587G + 0.114B
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)
R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y - 0.344Cb - 0.714Cr

現在我們可以用亮度和兩個色差來代表任何色彩。
所以,我們有什麼?代表一種顏色在YCbCr模型我們需要3個數字。代表相同顏色的RGB模型我們需要…等一下- 3數字。但是為什麼YCbCr應該更有效率呢?

要回答這個問題,讓我們視訊分割成圖片,檢查其中一張圖片。這張照片由畫素組成。像這樣:

這一個是真正的低成本二次抽樣,並且質量依舊優良.可以沒有質量顯著損失的情況下大大降低圖片的大小。