在學習Metal繪製渲染的過程當中,看到了顏色編碼轉換有關的YUV,以前知道YUV和RGB都是顏色變色編碼種類,可是一直不知道具體是啥以及有啥聯繫。因此花了點時間翻看資料並思考理解和整理了一下知識點。學習
咱們知道顏色都是有三原色(紅、綠、藍)組成的,也就是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視頻
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
主流採樣方式三種:YUV4:4:四、YUV4:2:二、YUV4:2:0。YUV編碼方式能夠減小圖片的大小,減小帶寬和資源。
圖中展現的有6個像素,每一個像素有YUV份量組成。從圖片咱們知道YUV4:4:4採樣方式每一個份量都採樣,因此同等寬高的圖片的大小和RGB的大小是一致的。經過這個採樣方式圖片大小並無減小,可是在編碼轉換的時候,圖像從RGB轉YUV,首先轉成該採樣方式的圖像,而後再經過其餘採樣方式進行轉換。
從這張圖片咱們知道該採樣的特色就是UV份量分別隔一個像素進行採樣,即兩個像素共用一個UV份量,Y和UV份量按2:1的比例取樣。採用這種編碼方式,圖片大小是原圖大小的66.7%,這就是爲啥會普遍採用YUV編碼方式來進行傳輸,能夠減小帶寬、節約資源。
從上面咱們知道YUV4:2:2方式圖片大小就減小了1/3,可是經常使用的是YUV 4:2:0採樣方式。
從上圖可知,咱們知道圖片比在RGB空間的大小減小了50%,是否是很誇張!但這就是他的神奇之處。圖中有兩行像素,每行像素有6個像素。該採樣方式的特色就是4個像素共用一套UV份量,每一個像素均取Y份量,一行像素取U份量,鄰行像素取V份量,而且UV份量像素取一次。例如圖中的第0、一、七、8像素共用了U0和V8。正是因爲該採樣方式能夠直接減小一半的圖片大小,該方式很經常使用。
YUV採樣存儲數據有兩種方式:
正式因爲採樣的方式不一樣和存儲格式的不一樣因此有多種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) |
上表中的打包樣式YUYV、UYVY都是根據每一個像素均取Y份量,隔像素取U、V份量。因此他的存儲排序以下:
YUYV:
Y0U0 Y1V0 Y2U2 Y3V2 Y4U4 Y5V4 Y6U6
UYVY:
U0Y0 V0Y1 U2Y2 V2Y3 U4Y4 V4Y5 U6Y6
YUV422P格式和上面差很少,都是相似的組合方式。
基於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採樣與格式