YUV格式小結(jié)

導(dǎo)語

今天跟大家分享的這篇文章,也是之前自己總結(jié)的,大致就是想說明一下,視頻的裸數(shù)據(jù)yuv格式的各種分類。
剛開始接觸yuv的時(shí)候,筆者就被形形色色的各種各樣的yuv格式弄得一頭霧水。因此也決心好好梳理一下這部分知識(shí)。當(dāng)時(shí)感覺對(duì)各個(gè)格式已經(jīng)比較清楚了。正好現(xiàn)在又要有相關(guān)的開發(fā),因此決定復(fù)習(xí)復(fù)習(xí)。
希望這篇總結(jié)能對(duì)大家有所幫助

內(nèi)容

? 對(duì)格式采樣的理解

提出yuv格式的原因,是為了解決彩色電視和黑白電視兼容性問題,因此從rgb的顏色空間,轉(zhuǎn)換為yuv的顏色空間,其中y代表亮度,u和v代表色度。
yuv種類分為很多,可以理解是一個(gè)二維的,即空間間,和空間內(nèi),這樣的表述,借鑒了h264中的幀間和幀內(nèi)的思想

為什么這么說呢?
下面分別從這兩種情況闡述一下這個(gè)觀點(diǎn):

空間-間:不同空間,即描述一個(gè)像素的bit數(shù)不同,比如yuv444,yuv422,yuv411,yuv420

空間-內(nèi):相同空間,即描述一個(gè)像素的bit數(shù)相同,但是存儲(chǔ)方式不同,比如對(duì)于yuv420而言,又可細(xì)分為yuv420p,yuv420sp,nv21,nv12,yv12,yu12,I420

因此,我們?cè)诶斫鈟uv格式時(shí),時(shí)刻需要記住要從bit數(shù),和存儲(chǔ)結(jié)構(gòu)兩方面考察

? 對(duì)于4的理解

為什么yuv444,yuv420,yuv422,yuv411都是用的4呢?

我仔細(xì)的研究了一下,
首先yuv的命名方式和rgb的命名方式是不相同的,如果是rgb4444,這里的數(shù)字代表的是不同顏色分量所占的bit數(shù)
這里,rgb4444代表alpha 4bit,red 4bit,green 4bit,blue 4bit,從宏觀上看,是16bit,也就是2字節(jié),但是從微觀上看,是以bit區(qū)分的

yuv的命名方式則不是這種情況,yuv不會(huì)分細(xì)到bit級(jí)別,最低最低的單位,也是1字節(jié),即8bit,說到這里,就會(huì)拋出一個(gè)問題,
難道每個(gè)像素點(diǎn)都需要至少1字節(jié)的整數(shù)倍來描述嗎?
如果說描述的最小單位是1字節(jié),那么每個(gè)像素都是由y,u,v共同描述的,難道說明每個(gè)像素點(diǎn)至少都是

1字節(jié)y+1字節(jié)u+1字節(jié)v = 3字節(jié)

來描述嗎?顯然這是不合理的,因?yàn)槿搜蹖?duì)y是很敏感的,但是u和v是可以在一定程度上壓縮的,也就是說,同一個(gè)像素點(diǎn),u和v的描述可以小于1字節(jié),那么這是不是和最小單位為一字節(jié)矛盾呢?答案是不矛盾,因?yàn)橛玫搅斯蚕淼乃枷?,這是yuv和rgb的本質(zhì)區(qū)別

rgb是一個(gè)像素是一個(gè)家庭,家庭成員是r,g,b,但是yuv是若干像素是一個(gè)家庭,不同像素的y共享同一個(gè)u和v,這樣,引入了共享的思想,雖然最小單位是一個(gè)字節(jié),但實(shí)際上描述一個(gè)像素點(diǎn)的字節(jié),不一定是字節(jié)的整數(shù)倍

該進(jìn)入正題了,為什么是4?因?yàn)檫@個(gè)4,實(shí)際上表達(dá)了共享的最大單位!也就是最多4個(gè)像素進(jìn)行共享,因此4實(shí)際上是隱含的采樣全集

? 不同空間下yuv格式

這里從空間的角度考慮yuv格式

① yuv444

那么yuv444代表什么呢?就是最完整的最理想的最奢侈的狀態(tài),

[ y u v ] [ y u v ] [ y u v ] [ y u v ]
[ y u v ] [ y u v ] [ y u v ] [ y u v ]
[ y u v ] [ y u v ] [ y u v ] [ y u v ]
[ y u v ] [ y u v ] [ y u v ] [ y u v ]

這無疑是最理想的狀態(tài)了y,u,v都為4,說明大家都是滿的

② yuv422

那么,yuv422呢?說明這里,u由4變?yōu)?,v由4變?yōu)?,也就是在原來滿的情況下,每行需要去掉兩個(gè)u和兩個(gè)v
如何去掉呢?最簡(jiǎn)單的方法就是第一個(gè)點(diǎn)保留u,第二個(gè)點(diǎn)保留v,第三個(gè)點(diǎn)保留u,第四個(gè)點(diǎn)保留v ..

圖示如下:

[ y u ] [ y v ] [ y u ] [ y v ]
[ y v ] [ y u ] [ y v ] [ y u ]
[ y u ] [ y v ] [ y u ] [ y v ]
[ y v ] [ y u ] [ y v ] [ y u ]

在這張圖中,顯然一個(gè)家庭的成員為

[ y u ] [ y v ]

也就是兩個(gè)像素點(diǎn)共享uv

③ yuv411

yuv411又是什么情況呢?顯然在原來yuv422的基礎(chǔ)上,每行再去掉一個(gè)u和一個(gè)v

圖示如下:

[ y u ] [ y ] [ y v ] [ y ]
[ y u ] [ y ] [ y v ] [ y ]
[ y u ] [ y ] [ y v ] [ y ]
[ y u ] [ y ] [ y v ] [ y ]

這個(gè)家庭的成員為

[ y u ] [ y ] [ y v ] [ y ]

也就是四個(gè)像素點(diǎn)共享uv

④ yuv420

yuv420的意思似乎是在yuv422的基礎(chǔ)上,再拿掉兩個(gè)v,這樣不就沒有v了嗎?
其實(shí)yuv420的取名方式不是很高明,更確切的命名為yuv420yuv402
也就是第一行只有兩個(gè)u,而第二行只有兩個(gè)v

圖示如下:

[ y u ] [ y ] [ y u ] [ y ]
[ y v ] [ y ] [ y v ] [ y ]
[ y u ] [ y ] [ y u ] [ y ]

[ y v ] [ y ] [ y v ] [ y ]

仔細(xì)體會(huì)yuv420和yuv411的區(qū)別
對(duì)于yuv420而言,這個(gè)家庭的成員為

[ y u ] [ y ]
[ y v ] [ y ]

也是四個(gè)像素點(diǎn)共享uv,但是這個(gè)家庭顯然比yuv411的家庭關(guān)系更近一些

思考:從這個(gè)課題討論來看,我們是否可以進(jìn)一步提高yuv的壓縮效率?可以更多y共享uv嗎?可以自適應(yīng)嗎?

小結(jié):從這里可以看出,yuv211和yuv422顯然格式上是不一樣的,因此這里的數(shù)字不僅僅代表了比例,還代表了實(shí)際的值

? 三種格式packet,planar,semi-plane

在這一課題,我們探討一下相同bit數(shù)的不同存儲(chǔ)格式,主要討論yuv422和yuv420

packet是打包格式,即存儲(chǔ)yuv,然后再存儲(chǔ)下一個(gè)yuv ..
planar是平面格式,即先存儲(chǔ)y平面,再存儲(chǔ)u平面,最后存儲(chǔ)v平面
semi-planar是兩個(gè)平面,正常的planar是三個(gè)平面,即y平面,u平面,v平面,現(xiàn)在的semi-planar是兩個(gè)平面,也就是說uv為同一個(gè)平面,即一個(gè)y平面,一個(gè)uv平面

① yuv422

yuyv(yuy2)

[ y u ] [ y v ] [ y u ] [ y v ]
[ y u ] [ y v ] [ y u ] [ y v ]
[ y u ] [ y v ] [ y u ] [ y v ]
[ y u ] [ y v ] [ y u ] [ y v ]

uyvy

[ u y ] [ v y ] [ u y ] [ v y ]
[ u y ] [ v y ] [ u y ] [ v y ]
[ u y ] [ v y ] [ u y ] [ v y ]
[ u y ] [ v y ] [ u y ] [ v y ]

yuv422p(yu16)

[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ u u u u ]
[ u u u u ]
[ v v v v ]
[ v v v v ]

或(yv16)

[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]

[ v v v v ]
[ v v v v ]
[ u u u u ]
[ u u u u ]

yuv422sp(nv16)

[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ u v u v ]
[ u v u v ]
[ u v u v ]
[ u v u v ]

或(nv61)

[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ v u v u ]
[ v u v u ]
[ v u v u ]
[ v u v u ]

② yuv420

yuv420p(yu12 / I420)

[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ u u ]
[ u u ]
[ v v ]
[ v v ]

或(yv12)

[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ v v ]
[ v v ]
[ u u ]
[ u u ]

yuv420sp(nv12)

[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ u v u v ]
[ u v u v ]

或(nv21)

[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ v u v u ]
[ v u v u ]

? 對(duì)nv系列理解

常見的有nv12,nv21,nv16,nv61等,這里代表什么意思呢?
其實(shí)nv系列,都屬于semi-plane系列

這里nv12表示正常的順序,即uv plane,先是u,然后是v
而nv21表示相反的順序,即uv plane,先是v,然后是u

同樣,nv16和nv61的區(qū)別也是僅僅是uv的次序而已

這里的12和16又代表什么呢?實(shí)際上代表的是一個(gè)像素所占的位數(shù)!
以nv12為例,表示一個(gè)像素占用12bit,其中y是定死的占8bit,也就是u占2bit,v占2bit,實(shí)際上就是yuv420格式,具體而言是yuv420sp格式
nv16,則表示一個(gè)像素占用16bit,其中y是定死的8bit,也即是u占4bit,v占4bit,實(shí)際上就是yuv422格式,具體而言是yuv422sp格式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 由于H.264等壓縮算法都是在YUV的顏色空間上進(jìn)行的,所有在進(jìn)行壓縮前,首先要進(jìn)行顏色空間的轉(zhuǎn)換。如果攝像頭采集...
    眷卿三世閱讀 13,789評(píng)論 2 6
  • 1)YUV簡(jiǎn)介 YUV格式有兩大類:planar和packed。 對(duì)于planar的YUV格式,先連續(xù)存儲(chǔ)所有像素...
    片片碎閱讀 39,594評(píng)論 9 33
  • 轉(zhuǎn)自:http://www.cnblogs.com/azraelly/archive/2013/01/01/284...
    rickytang0閱讀 943評(píng)論 0 1
  • 對(duì)于我爸來說,他最驕傲的事不是培養(yǎng)了兩個(gè)大學(xué)生,而是他終于成功的把兩個(gè)女兒都送進(jìn)了城市里的寫字樓。 我可以保證,這...
    雕蟲妹妹閱讀 397評(píng)論 0 2
  • 自從13年接觸到魅族mx2就深深的愛上了你,14年購入mx3, 15年購入魅藍(lán)metal, 現(xiàn)在要搶魅藍(lán)note3...
    洪利閱讀 145評(píng)論 0 0

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