YUV 與RGB之間的變換

2021-07-27 03:58:34 字數 3191 閱讀 4204

大多數的計算機圖形工作者熟悉 rgb,而大多數的具有影象背景的則熟悉 yuv。rgb可以認為是三個分別表示紅,綠,藍顏色的灰度影象。把它們組合在一起就可以產生各種各樣的顏色。

yuv 使用rgb的資訊,但它從全彩色影象中產生乙個黑白影象,然後提取出三個主要的顏色變成兩個額外的訊號來描述顏色。把這三個訊號組合回來就可以產生乙個全彩色影象。

那麼 yuv 是怎麼產生的呢?當時,工程師們需要找到一種辦法來使彩色電視廣播可以相容黑白電視。他們使用的彩色訊號也需要保全頻寬因為 rgb 資料不能適合訊號空間的限制。通過合併顏色資訊,yuv 使用比 rgb 更小的頻寬,並且與黑白電視相容。

yuv 使用紅,綠,藍的點陣組合來減少訊號中的資訊量。y 通道描述 luma 訊號,它與亮度訊號有一點點不同,值的範圍介於亮和暗之間。 luma 是黑白電視可以看到的訊號。u (cb) 和 v (cr) 通道從紅 (u) 和藍 (v) 中提取亮度值來減少顏色資訊量。這些值可以從新組合來決定紅,綠和藍的混合訊號。

luma = 30% 紅 + 59% 綠 + 11% 藍

下面簡介一下yuv和rgb的轉換。

vga**過設定紅,藍,綠三色的強度來顯示顏色。這三種顏色形成笛卡爾座標系統的軸線。任何一種顏色都是這個顏色空間的一點。你不需要使用這個座標來定義顏色空間的一點。乙個灰度影象只使用顏色空間中那些有著相同紅,藍,綠強度的點。

我們可以作乙個座標,其中紅,藍,綠是相等的。這個座標叫做亮度座標。我們還可以通過從亮度中提取紅和藍部份作兩個新的座標。新的座標是紅和藍的色度值,用於新增顏色到影象中。亮度座標標識為 y,藍的色度座標標識為 u,紅的色度座標標識為 v。我們建立的這三個新座標形成了jpeg影象中使用的三個部份。以下的公式用於在這兩個座標系統之間互相轉換。

y=0.299r+0.587g+0.114b

u=-0.1687r-0.3313g+0.5b+128

v=0.5r-0.4187g-0.0813b+128

r=y+1.402 (v-128)g

=y-0.34414 (u-128)-0.71414(v-128)b

=y+1.772(u-128)

需要注意的是我們只使用rgb顏色空間中三個座標都為正的象限。當我們從yuv轉換到rgb時,我們必須確保座標不是負數而且它們沒有超過允許的最大值。那麼為什麼我們要使用yuv顏色空間呢?那時因為人的眼睛對亮度的敏感高於對色度的敏感。通常 jpeg 在進行其它任何壓縮前會丟掉 3/4 的色度資訊。這可以減少影象所要儲存資訊的1/2。如果三個部份全部儲存的話,4 pixels就需要3 x 4 = 12個值。如果兩個部份的 3/4 的資訊可以丟掉不要的話,我們就只需要 1 x 4 + 2 x 1 = 6 個值。

yuv圖象儲存機制: 

y:u:v=8:4:4 

y: 占用1個位元組(8bit) 

u,v: 每2個象素占用1個位元組(8bit),及每個象素佔4bit 

y:u:v=8:2:2 

y: 占用1個位元組(8bit) 

u,v: 每4個象素占用1個位元組(8bit),及每個象素佔2bit 

用解碼器對該檔案(clock.mpg)解壓後產生的"yuv"目標碼檔案的說明: 

y檔案的長度為:84,480 

byte 

u,v檔案的長度分別為:21,120 

byte 

84480/21120=4 

對該組yuv檔案可得出結論:y:u:v=8:2:2 

rgb圖象儲存機制: 

r:表示紅色資訊,占用1個位元組(8bit) 

g:表示綠色資訊,占用1個位元組(8bit) 

b:表示藍色資訊,占用1個位元組(8bit) 

r:g:b 

=  8:8:8 

yuv與rgb圖象之間的變換關係: 

y= 0.2990r+0.5870g+0.1140b 

u=-0.1687r-0.3313g+0.5000b 

+  128 

v= 0.5000r-0.4187g-0.0813b 

+  128 

反變換關係: 

r= 1.0y 

+  0 

+1.402 

(v-128) 

g= 1.0y 

-  0.34413(u-128)-0.71414(v-128) 

b= 1.0y 

+  1.772 

(u-128)+0 

另一種變換關係: 

y  = 

<(r 

+  2g 

+  b)/4> 

u  = 

r  - 

g  v 

=  b 

-  g 

反變換: 

g  = 

y  - 

<(u 

+v)/4> 

r  = 

u  + 

g  b 

=  v 

+  g 

說明:式中表示<=w的最大整數 

以前曾見看過這類的文章, 

下面是他們的轉換公式。 

y =  0.299 

r  + 

0.587 

g  + 

0.114 

b    u 

=  - 

0.1687 

r  - 

0.3313 

g  + 

0.5 

b  + 

128 

v =  0.5 

r  - 

0.4187 

g  - 

0.0813 

b  + 

128 

r =  y 

+  1.402 

(v -  128) 

g =  y 

-  0.34414 

(u -  128) 

-  0.71414 

(v -  128) 

b =  y 

+  1.772 

(u -  128) 

yuv的顏色空間和rgb的顏色空間範圍有些差異,而且yuv色系的顏色不是線性變化的,實際處理上有很多麻煩的地方。 

不然當年的486下不可能那麼流暢。 

由於在"y檔案"中,乙個象素佔乙個byte,所以一幀資料應該是:352*240=84480 

byte 

在"u,v"檔案中,每四個象素佔乙個byte,所以一幀資料的長度因該是:352*240/4=21120 

byte  

YUV 與RGB之間的變換

大多數的計算機圖形工作者熟悉 rgb,而大多數的具有影象背景的則熟悉 yuv。rgb可以認為是三個分別表示紅,綠,藍顏色的灰度影象。把它們組合在一起就可以產生各種各樣的顏色。yuv 使用rgb的資訊,但它從全彩色影象中產生乙個黑白影象,然後提取出三個主要的顏色變成兩個額外的訊號來描述顏色。把這三個訊...

RGB模型與YUV模型

來了解以下rgb與yuv 我們知道物理三基色分別是紅 red 綠 green 藍 blue 現代的顯示器技術就是通過組合不同強度的紅綠藍三原色,來達成幾乎任何一種可見光的顏色。在影象儲存中,通過記錄每個畫素的紅綠藍強度,來記錄像象的方法,稱為rgb模型 rgb model 常見的格式中,png和bm...

RGB與YUV格式 四

一 rgb rgb24一幀的大小size width heigth 3 byte,rgb32的size width heigth 4byte.1.rgb為紅綠藍三原色 yuv,rgb是色彩空間模型,而bmp,png,jpeg,gif是影象的檔案儲存格式。影象的每個畫素的三個分量為r g b,每個顏色...