天天看點

RGB與YUV之間的轉換

一.RGB模型與YUV模型

1.RGB模型

我們知道實體三基色分别是紅(Red)、綠(Green)、藍(Blue)。現代的顯示器技術就是通過組合不同強度的紅綠藍三原色,來達成幾乎任何一種可見光的顔色。在圖像儲存中,通過記錄每個像素的紅綠藍強度,來記錄圖像的方法,稱為RGB模型 (RGB Model)。常見的圖檔格式中,PNG和BMP這兩種就是基于RGB模型的。

2.YUV模型

除了RGB模型外,還有一種廣泛采用的模型,稱為YUV模型,又被稱為亮度-色度模型(Luma-ChromaModel)。它是通過數學轉換,将RGB三通道轉換為一個代表亮度的通道(Y,又稱為Luma),和兩個代表色度的通道(UV,并稱為Chroma)來記錄圖像的模型。

二.RGB與YUV之間的轉換

1.為何要進行RGB與YUV之間的轉換

我們實際傳輸的信号為YUV信号,而不是RGB信号,那麼為什麼要進行RGB與YUV之間的轉換呢,這主要是考慮了以下幾個方面:

a.為了與黑白電視系統相容,因為在黑白電視系統中隻需要傳輸亮度信号Y即可,而不需要傳輸色度信号;

b.轉換成YUV信号可以節省信号的帶寬;

c.恒定亮度原理告訴我們在傳輸過程中,若色差信号受到幹擾,在最後還原三基色時,不會影響亮度;

d.混合高頻原理告訴我們利用人眼對彩色細節分辨力較低的這一特點,在圖像的高頻部分中我們隻需要傳輸亮度信号,而不必傳送色度信号。

此外,現在基本所有的顯示器都是通過組合RGB三原色來重制圖像的,是以在顯示端也必須将YUV信号轉換成RGB信号,這就是我們要進行RGB信号與YUV信号互相轉換的原因。

2.轉換過程

1.RGB2YUV

在做RGB信号到YUV信号的轉換時,一般是先轉換到YUV444格式(參見色度信号取樣格式),然後再将UV信号的分辨率降低,變成我們所需的格式。

2.YUV2RGB

在播放視訊或顯示圖像的時候,我們需要将YUV信号轉換為RGB信号。這個步驟稱為渲染(Rendering)。

在做YUV到RGB的轉換時,首先需要将縮水的UV信号的分辨率拉升到與Y信号相同的分辨率,然後再轉換到RGB信号。

三.轉換公式

下面是RGB與YUV之間的轉換公式:

RGB與YUV之間的轉換
RGB與YUV之間的轉換
RGB與YUV之間的轉換

一般這一步驟可通過編碼矩陣來實作,寫成矩陣的形式為:

RGB與YUV之間的轉換
RGB與YUV之間的轉換
RGB與YUV之間的轉換

上圖中的兩個矩陣即為編碼矩陣。