筆記-YUV和RGB的那些事~

在學習Metal繪製渲染的過程當中,看到了顏色編碼轉換有關的YUV,以前知道YUV和RGB都是顏色變色編碼種類,可是一直不知道具體是啥以及有啥聯繫。因此花了點時間翻看資料並思考理解和整理了一下知識點。學習

RGB和YUV

​ 咱們知道顏色都是有三原色(紅、綠、藍)組成的,也就是RGB,能夠組成很是多的顏色,這些咱們都知道的知識。在咱們錄製視頻和播放視頻的時候採用的通常都是RGB編碼格式,在屏幕上每個像素點都含有R份量、G份量、B份量,由這些一個個的像素上展現的顏色才構成了咱們看見的圖片,視頻是一幀幀圖片組成的。 說完了RGB,寡下YUV,YUV和RGB同樣,也是每一個像素都含有Y、U、V三中份量。YUV和黑白電視有關,正是由於工程師想要在黑白設備上呈現彩色而發明的編碼格式😝,YUV是由Y(明亮度)、UV(色度)組成的,其實只要有Y值就能看見圖片、視頻,只不過是黑白的。編碼

​ RGB編碼格式中每一個份量佔一個字節,即8bit,一個像素佔用24bit空間,而YUV4:4:4編碼格式中也是同樣的(後面會說到YUV編碼格式)大小。3d

假如一張圖片大小爲1024*1024,那麼他的大小爲:cdn

imageSize = 1024x1024x3x8/8/1024/1024 = 3.0MB視頻

RGB和YUV的轉換

Y = 0.299R + 0.587G + 0.114Bblog

U = -0.14713R - 0.28886G + 0.436B排序

V = 0.615G - 0.51499G - 0.10001B圖片

R = 1.0Y + 1.13983V資源

G = 1.0Y - 0.39465U - 0.58060V開發

B = 1.0Y + 2.03211U

YUV編碼格式

主流採樣方式三種:YUV4:4:四、YUV4:2:二、YUV4:2:0。YUV編碼方式能夠減小圖片的大小,減小帶寬和資源。

YUV 4:4:4採樣

圖中展現的有6個像素,每一個像素有YUV份量組成。從圖片咱們知道YUV4:4:4採樣方式每一個份量都採樣,因此同等寬高的圖片的大小和RGB的大小是一致的。經過這個採樣方式圖片大小並無減小,可是在編碼轉換的時候,圖像從RGB轉YUV,首先轉成該採樣方式的圖像,而後再經過其餘採樣方式進行轉換。

YUV 4:2:2採樣

從這張圖片咱們知道該採樣的特色就是UV份量分別隔一個像素進行採樣,即兩個像素共用一個UV份量,Y和UV份量按2:1的比例取樣。採用這種編碼方式,圖片大小是原圖大小的66.7%,這就是爲啥會普遍採用YUV編碼方式來進行傳輸,能夠減小帶寬、節約資源。

YUV 4:2:0採樣

從上面咱們知道YUV4:2:2方式圖片大小就減小了1/3,可是經常使用的是YUV 4:2:0採樣方式。

從上圖可知,咱們知道圖片比在RGB空間的大小減小了50%,是否是很誇張!但這就是他的神奇之處。圖中有兩行像素,每行像素有6個像素。該採樣方式的特色就是4個像素共用一套UV份量,每一個像素均取Y份量,一行像素取U份量,鄰行像素取V份量,而且UV份量像素取一次。例如圖中的第0、一、七、8像素共用了U0和V8。正是因爲該採樣方式能夠直接減小一半的圖片大小,該方式很經常使用。

YUV存儲格式

YUV採樣存儲數據有兩種方式:

  • planr: 平面格式,先連續存儲像素點的Y份量,其次存儲U份量,最後存儲V份量。
  • packed: 打包模式,每一個像素點的Y份量、U份量、V份量連續交替存儲的。

正式因爲採樣的方式不一樣和存儲格式的不一樣因此有多種YUV格式,這些格式主要基於YUV 4:2:2採樣和YUV4:2:0採樣。

YUV存儲格式 基於YUV 4:2:2採樣格式 基於YUV 4:2:0採樣格式
planr YUV420P、YUV420SP
packed YUYV、UYVY、YUV422P(I422)
packed方式

上表中的打包樣式YUYV、UYVY都是根據每一個像素均取Y份量,隔像素取U、V份量。因此他的存儲排序以下:

YUYV:

Y0U0 Y1V0 Y2U2 Y3V2 Y4U4 Y5V4 Y6U6

UYVY:

U0Y0 V0Y1 U2Y2 V2Y3 U4Y4 V4Y5 U6Y6

YUV422P格式和上面差很少,都是相似的組合方式。

planr方式
基於YUV 4:2:0樣式 格式
YUV420P YU十二、YV12
YUV420SP NV十二、NV21

YU12和YV12是YUV420P類型,先存儲Y份量,而後在存儲UV份量,不一樣的是YU12是先Y再U後V,YV12是先Y再V後U存儲。

Y0 Y1 Y2 Y3 Y4 ...

Uo U1 ...

V0 V1 ...

YUV420SP有NV12和NV21兩種格式。與YUV 420P不一樣的是先存儲Y份量,而後UV份量交替存儲。其中NV12是iOS中有的模式,就是先存儲Y份量,UV份量交替存儲時先U後V;而NV21時Android Q中有的模式,就是先存儲Y份量,UV份量交替存儲時先V後U。

總結

經過了解YUV、RGB編碼二者的關係,以及YUV編碼格式帶來的收益可讓咱們在開發中有必定的幫助,以及YUV存儲方式能夠開拓一下知識點。

參考:

1.YUV-維基百科

2.YUV採樣與格式

相關文章
相關標籤/搜索