YUV與RGB格式詳解

數(shù)字媒體壓縮

為縮小數(shù)字媒體文件的大小,我們需要對其使用壓縮技術,一般來說我們所欣賞的媒體內(nèi)容都進行過一定程度的壓縮,無論在電視上的視頻還是網(wǎng)頁上的視頻流,其實都是和這些內(nèi)容的原始文件的壓縮格式打交道,對數(shù)字媒體進行壓縮可以大幅度縮小文件的尺寸,但是通常會在資源的質(zhì)量上有小幅可見的衰減。

色彩的二次采樣

視頻數(shù)據(jù)是使用稱之為YCbCr顏色模式,它也是常稱為YUV,雖然YUV術語并不準確,但是讀起來比較方便,大部分的軟件開發(fā)者都更熟悉RGB顏色模式,即每個像素點都由紅,綠,藍三個顏色組合而成,YCbCr或者是YUV則使用色彩(顏色)通道UV替換了像素的亮度通道.

  1. RGB的顏色編碼
    RGB三個字母分別代表了紅(red)、綠(green)、藍(blue),這三種顏色稱為三原色,將它們以不同的比例相加,可以產(chǎn)生多種多樣的顏色。


    一個像素點的RGB

    在圖像顯示中,一張1280 * 720 大小的圖片,就代表著它有1280 * 720 個像素點。其中每?個像素點的顏?顯示都采?RGB 編碼?法,將RGB 分別取不同的值,就會展示不同的顏?。
    RGB 圖像中,每個像素點都有紅、綠、藍三個原?,其中每種原?都占?8 bit,也就是?個字節(jié),那么?個像素點也就占?24 bit,也就是三個字節(jié)。

    ?張1280 * 720 ??的圖?,就占?1280 * 720 * 3 / 1024 / 1024 = 2.63 MB 存儲空間

YUV的顏色編碼

YUV顏色編碼采用的是明亮度和色度來指定像素的顏色。其中,Y代表明亮度(Luminance、Luma),而U和V表示色度(Chrominance、Chroma)。而色度又定義了顏色的兩個方面:色調(diào)和飽和度


YUV表示一個像素點

和RGB表示圖像類似,每個像素點包含了Y、U、V分量。但是它的Y和UV分量是可以分離的,如果沒有UV分量一樣可以顯示完整的圖像,只不過是黑白的。對應YUV圖像來說,并不是每個像素點都需要包含Y、U、V三個分量,根據(jù)不同的采樣格式,可以每個分量Y都對應自己的UV分量,也可以結果Y分量公用UV分量

YUV4:4:4

在4:4:4的模式下,色彩的全部信息被保存下來,如圖:


相鄰的四個像素點

可以簡單理解為:原始像素原樣輸出,沒有任何壓縮,如下圖所示


YUV4:4:4采樣格式圖

相鄰的四個像素點ABCD,每個像素點有自己的YUV,在色彩的二次采樣的過程中,分別保留自己的YUV,每個分量占用8bit,一個像素點占用1個字節(jié)。與RGB顏色編碼相比,并沒有節(jié)省帶寬,占用的存儲空間也沒有減少,稱為4:4:4??梢约雍唵卫斫鉃椋?code>原始像素原樣輸出,沒有任何壓縮。

YUV4:2:2

YUV4:2:2采樣,意味著UV分量是Y分量采樣的一半,Y分量和UV分量按照2:1的比例采樣。舉例說明:如果水平方向有10個像素點,通過這種采樣格式,最終采樣了10個Y分量,5個UV分量
可以通俗的理解為:每采樣一個像素點都會采樣Y分量,而U、V分量則會間隔一個采集一個
如圖所示:

YUV4:2:2采樣格式圖

假設原始圖像的像素為(一對[]表示一個像素點):
[Y0, U0, V0]; [Y1, U1, V1]; [Y2, U2, V2]; [Y3, U3, V3];

將原始圖像像素按照YUV4:2:2采樣的碼流為:
Y0, U0, Y1, V1, Y2, U2, Y3, V3
其中,每采樣過?個像素點,都會采樣其 Y 分量,? U、V 分量就會間隔?個采集?個。
最后映射還原的像素點為:
[Y0, U0, V1]; [Y1, U0, V1]; [Y2, U2, V3]; [Y3, U2, V3];

結論:1、YUV4:2:2采樣格式中是兩個Y分量共用一套UV分量
2、相比RGB顏色編碼格式節(jié)省了1/3的存儲空間。在傳送時占用的寬帶也會隨之減少
一張1280 * 720大小的圖片在YUV4:2:2采樣時的大小為:
Y的字節(jié)數(shù)=1280 * 720 * 8
UV的字節(jié)數(shù) = 1280 * 720 * (2/4)
8 * 2
(Y的字節(jié)數(shù) + UV的字節(jié)數(shù))/ 8 /1024 /1024 = 1.76MB 存儲空間
*

YUV4:2:0

YUV4:2:0采樣,并不是只采樣U分量而不采樣V分量.而是指,在每一行掃描時,只掃描一種色度分量(U或者V),和Y分量按照2:1的方式采樣。比如,第一行掃描時,YU按照2:1的方式采樣,那么第??掃描時,YV 分量按照2:1 的?式采樣。對于每個?度分量來說,它的?平?向和豎直?向的采樣和Y 分量相?都是2:1 。假設第??掃描了U 分量,第??掃描了V 分量,那么需要掃描兩?才能夠組成完整的UV 分量,可以簡單的理解為:在田字格的4個像素點中,4個Y分量共用了一套UV分量,如圖所示:


YUV4:2:0采樣格式圖

假設原始圖像的像素為(一對[]表示一個像素點):
[Y0, U0, V0]; [Y1, U1, V1]; [Y2, U2, V2]; [Y3, U3, V3];
[Y5, U5, V5]; [Y6, U6, V6]; [Y7, U7, V7]; [Y8, U8, V8];

其中,每采樣過?個像素點,都會采樣其 Y 分量,? U、V 分量就會間隔??按照 2 : 1 進?采樣。
將原始圖像像素按照YUV4:2:0采樣的碼流為:
Y0, U0, Y1, Y2, U2, Y3,
Y5, V5, Y6, Y7, V7, Y8,

最后映射還原的像素點為:
[Y0, U0, V5]; [Y1, U0, V5]; [Y2, U2, V7]; [Y3, U2, V7];
[Y5, U0, V5]; [Y6, U0, V5]; [Y7, U2, V7]; [Y8, U2, V7];

從映射出的像素點中可以看到,四個Y 分量是共?了?套UV 分量,?且是按照2*2 的??格的形式分布的,相?YUV 4:2:2 采樣中兩個Y 分量共??套UV 分量,這樣更能夠節(jié)省空間。?張1280 * 720 ??的圖?,在YUV 4:2:0 采樣時的??為:

(1280 * 720 * 8 + 1280 * 720 * 0.25 * 8 * 2)/ 8 / 1024 / 1024 = 1.32 MB 相對于2.63M節(jié)省了一半的空間

RGB 與 YUV 顏色編碼轉(zhuǎn)換

對于圖像顯示器(即屏幕)來說,是通過RGB模型來展示圖像的
傳輸時的圖像數(shù)據(jù)使用的是YUV模型,主要是因為YUV可以節(jié)省帶寬
所以在圖像采集時需要將RGB模型轉(zhuǎn)換到YUV模型顯示時將YUV模型轉(zhuǎn)換到RGB模型

RGB 到 YUV的轉(zhuǎn)換,其實就是將圖像所有像素點的R、G、B分量 轉(zhuǎn)換到 Y、U、V分量,其對應的轉(zhuǎn)換公式如下(這個并不需要死記硬背):

//YUV和RGB的轉(zhuǎn)換:
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)
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容