原文地址html
目前,我正在作的H.264視頻信號解碼相關的一些研究工做。因此,我決定個人第一篇獻給色彩模型。由於若是咱們拋開一切沒必要要的(如今)的信息 - 咱們將看到,解碼視頻信號將規約爲一個問題:如何從比特流中提取出像素顏色?spa
什麼是數字信號?就像在數字世界中的一切 - 這是位序列。它能夠儲存,複製,傳播或壓縮。code
視頻是一組圖片,每個圖片是由像素組成的。和每個像素具備其本身的色彩和/或亮度,並以數字形式存儲此值。讓咱們看看,咱們怎麼能夠存儲色彩值。這經過色彩模型(色彩空間)來實現的.什麼是色彩模型?它是一個數學模型,經過數字序列來表示色彩。讓咱們先從最流行 的一種開始。視頻
看看下面的圖片,這是衆所周知的RGB合成模型。htm
任何顏色能夠在三個數字來表示。例如(255,0,0)表示紅色。很清楚,但不是很實用:咱們須要知道全部三個數字以重建顏色。咱們確定須要更高效的模型,而且存在這種模型。blog
那麼,如何更有效地用數字表明色彩?
假設咱們用luminance代碼色彩亮度,那麼咱們能夠用RGB來表示,圖片
Y = krR + kgG + kbB
其中 Y – luminance (luma),
k – 權重 (described in ITU-R BT.601-7 recommendation)get
接下來計算計算色度(色差)表示的色彩信息:數學
Cr = R - Y Cg = G - Y Cb = B - Y
如今咱們能夠從ITU-R BT.601-7 recommendation得到權重,跳過一些數學計算,獲得如下公式:it
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應該更有效率呢?
要回答這個問題,讓咱們視頻分割成圖片,檢查其中一張圖片。這張照片由像素組成。像這樣:
圖片由一個像素集合組成:
技巧在於:咱們能夠不犧牲視覺損失的狀況下減小色差值。例如,咱們能夠這樣表示咱們的圖片:
一行裏的每一個像素都luma(亮度),奇數列有兩個色差值.咱們仍然能夠在減少數據量的同時得到相同的質量.咱們甚至能夠這樣作:
這一個是真正的低成本二次抽樣,而且質量依舊優良.能夠沒有質量顯著損失的狀況下大大下降圖片的大小。