YUV學(xué)習(xí)筆記

一:介紹

YUV是被歐洲電視系統(tǒng)所采用的一種顏色編碼方法(屬于PAL)宣虾,是PAL和SECAM模擬彩色電視制式采用的顏色空間。在現(xiàn)代彩色電視系統(tǒng)中,通常采用三管彩色攝影機或彩色CCD攝影機進行取像,然后把取得的彩色圖像信號經(jīng)分色、分別放大校正后得到RGB矗晃,再經(jīng)過矩陣變換電路得到亮度信號Y和兩個色差信號B-Y(即U)、R-Y(即V)宴倍,最后發(fā)送端將亮度和色差三個信號分別進行編碼张症,用同一信道發(fā)送出去。這種色彩的表示方法就是所謂的YUV色彩空間表示鸵贬。采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U俗他、V是分離的。

二:含義

Y:亮度信號

UV:兩個色差信號B-Y(即U阔逼,藍色差信號)兆衅、R-Y(即V,紅色差信號)

色差信號:用基色信號減去亮度信號就得到色差信號。例如藍色差信號(B-Y)羡亩、紅色差(R-Y)兩個色差信號和一個亮度信號(Y)摩疑。 嚴格上講,色差信號共有三個畏铆,即R-Y雷袋,B-Y,G-Y辞居。但只有兩個是獨立的楷怒,第三個可用另外兩個求出。

三:優(yōu)點作用

YUV主要用于優(yōu)化彩色視頻信號的傳輸瓦灶,使其向后相容老式黑白電視鸠删。與RGB視頻信號傳輸相比,它最大的優(yōu)點在于只需占用極少的頻寬(RGB要求三個獨立的視頻信號同時傳輸)倚搬。其中“Y”表示明亮度(Luminance或Luma)冶共,也就是灰階值;而“U”和“V” 表示的則是色度(Chrominance或Chroma)每界,作用是描述影像色彩及飽和度,用于指定像素的顏色家卖≌2悖“亮度”是透過RGB輸入信號來建立的,方法是將RGB信號的特定部分疊加到一起上荡∨坑#“色度”則定義了顏色的兩個方面─色調(diào)與飽和度,分別用Cr和Cb來表示酪捡。其中叁征,Cr反映了RGB輸入信號紅色部分與RGB信號亮度值之間的差異。而Cb反映的是RGB輸入信號藍色部分與RGB信號亮度值之間的差異逛薇。

采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U捺疼、V是分離的。如果只有Y信號分量而沒有U永罚、V分量啤呼,那么這樣表示的圖像就是黑白灰度圖像彩色電視采用YUV空間正是為了用亮度信號Y解決彩色電視機與黑白電視機的兼容問題呢袱,使黑白電視機也能接收彩色電視信號官扣。

對于數(shù)字視頻,定義了從 RGB 到兩個主要 YUV 的轉(zhuǎn)換羞福。這兩個轉(zhuǎn)換都基于稱為 ITU-R Recommendation BT.709 的規(guī)范惕蹄。第一個轉(zhuǎn)換是 BT.709 中定義用于 50-Hz 的較早的 YUV 格式。它與在 ITU-R Recommendation BT.601 中指定的關(guān)系相同, ITU-R Recommendation BT.601 也被稱為它的舊名稱 CCIR 601卖陵。這種格式應(yīng)該被視為用于標準定義 TV分辨率(720 x 576) 和更低分辨率視頻的首選 YUV 格式恋昼。它的特征由下面兩個常量 Kr 和 Kb 的值來定義:

Kr = 0.299

Kb = 0.114

第二個轉(zhuǎn)換為 BT.709 中定義用于 60-Hz 的較新 YUV 格式,應(yīng)該被視為用于高于 SDTV 的視頻分辨率的首選格式赶促。它的特征由下面兩個不同的常量值來定義:

Kr = 0.2126

Kb = 0.0722

從 RGB 到 YUV 轉(zhuǎn)換的定義以下列內(nèi)容開始:L = Kr * R + Kb * B + (1 – Kr – Kb) * G然后液肌,按照下列方式獲得 YUV 值:

Y = floor(2^(M-8) * (219*(L–Z)/S + 16) + 0.5)

U = clip3(0, 2^M-1, floor(2^(M-8) * (112*(B-L) / ((1-Kb)*S) + 128) + 0.5))

V = clip3(0, 2^M-1, floor(2^(M-8) * (112*(R-L) / ((1-Kr)*S) + 128) + 0.5))

其中M 為每個 YUV 樣例的位數(shù) (M >= 8)。

Z 為黑電平變量鸥滨。對于計算機RGB嗦哆,Z 等于 0。對于 studio視頻RGB婿滓,Z 等于 16*2老速,其中 N 為每個 RGB

合并圖冊(1張)

樣例的位數(shù) (N >= 8)。S 為縮放變量凸主。對于計算機RGB橘券,S 等于 255。對于 studio視頻RGB卿吐,S 等于 219*2旁舰。

函數(shù)floor(x) 返回大于或等于 x 的最大整數(shù)。函數(shù)clip3(x, y, z) 的定義如下所示:

clip3(x, y, z) = ((z < x) ? x : ((z > y) ? y : z))Y 樣例表示亮度嗡官,U 和 V 樣例分別表示偏向藍色和紅色的顏色偏差箭窜。Y 的標稱范圍為 16*2 到 235*2 。黑色表示為 16*2 衍腥,白色表示為 235*2 磺樱。U 和 V 的標稱范圍為 16*2 到 240*2 ,值 128*2 表示中性色度婆咸。但是竹捉,實際的值可能不在這些范圍之內(nèi)。

對于 studio 視頻 RGB 形式的輸入數(shù)據(jù)尚骄,要使得 U 和 V 值保持在 0 到 2M-1 范圍之內(nèi)块差,必需進行剪輯操作。如果輸入為計算機RGB乖仇,則不需要剪輯操作憾儒,這是因為轉(zhuǎn)換公式不會生成超出此范圍的值。

這些都是精確的公式乃沙,沒有近似值起趾。

在DirectShow中,常見的RGB格式有RGB1警儒、RGB4训裆、RGB8眶根、RGB565、RGB555边琉、RGB24属百、RGB32、ARGB32等变姨;常見的YUV格式有YUY2族扰、YUYV、YVYU定欧、UYVY渔呵、AYUV、Y41P砍鸠、Y411扩氢、Y211、IF09爷辱、IYUV录豺、YV12、YVU9饭弓、YUV411双饥、YUV420等。

四:采樣格式

主要的采樣格式有YCbCr 4:2:0示启、YCbCr 4:2:2兢哭、YCbCr 4:1:1和 YCbCr 4:4:4。其中YCbCr 4:1:1 比較常用夫嗓,其含義為:每個點保存一個 8bit 的亮度值(也就是Y值),每 2x2 個點保存一個 Cr 和Cb 值,圖像在肉眼中的感覺不會起太大的變化冲秽。所以舍咖, 原來用 RGB(R,G锉桑,B 都是 8bit unsigned) 模型排霉, 1個點需要 8x3=24 bits(如下圖第一個圖),(全采樣后民轴,YUV仍各占8bit)攻柠。按4:1:1采樣后,而現(xiàn)在平均僅需要 8+(8/4)+(8/4)=12bits(4個點后裸,8*4(Y)+8(U)+8(V)=48bits), 平均每個點占12bits(如下圖第二個圖)瑰钮。這樣就把圖像的數(shù)據(jù)壓縮了一半。

上邊僅給出了理論上的示例微驶,在實際數(shù)據(jù)存儲中是有可能是不同的浪谴,下面給出幾種具體的存儲形式:

(1) YUV 4:4:4

YUV三個信道的抽樣率相同开睡,因此在生成的圖像里,每個象素的三個分量信息完整(每個分量通常8比特)苟耻,經(jīng)過8比特量化之后篇恒,未經(jīng)壓縮的每個像素占用3個字節(jié)。

下面的四個像素為: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的碼流為: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

(2) YUV 4:2:2

每個色差信道的抽樣率是亮度信道的一半凶杖,所以水平方向的色度抽樣率只是4:4:4的一半胁艰。對非壓縮的8比特量化的圖像來說,每個由兩個水平方向相鄰的像素組成的宏像素需要占用4字節(jié)內(nèi)存智蝠。

下面的四個像素為:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的碼流為:Y0 U0 Y1 V1 Y2 U2 Y3 V3

映射出像素點為:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]

(3) YUV 4:1:1

4:1:1的色度抽樣腾么,是在水平方向上對色度進行4:1抽樣。對于低端用戶和消費類產(chǎn)品這仍然是可以接受的寻咒。對非壓縮的8比特量化的視頻來說哮翘,每個由4個水平方向相鄰的像素組成的宏像素需要占用6字節(jié)內(nèi)存。

下面的四個像素為: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的碼流為: Y0 U0 Y1 Y2 V2 Y3

映射出像素點為:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]

(4)YUV4:2:0

4:2:0并不意味著只有Y毛秘,Cb而沒有Cr分量饭寺。它指得是對每行掃描線來說,只有一種色度分量以2:1的抽樣率存儲叫挟。相鄰的掃描行存儲不同的色度分量艰匙,也就是說,如果一行是4:2:0的話抹恳,下一行就是4:0:2员凝,再下一行是4:2:0...以此類推。對每個色度分量來說奋献,水平方向和豎直方向的抽樣率都是2:1健霹,所以可以說色度的抽樣率是4:1。對非壓縮的8比特量化的視頻來說瓶蚂,每個由2x2個2行2列相鄰的像素組成的宏像素需要占用6字節(jié)內(nèi)存糖埋。

下面八個像素為:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

[Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]

存放的碼流為: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] [Y7U2 V7] [Y8 U2 V7]

五:YV12和I420的區(qū)別

? ? ? ?一般來說,直接采集到的視頻數(shù)據(jù)是RGB24的格式窃这,RGB24一幀的大小size=width×heigth×3 Bit瞳别,RGB32的size=width×heigth×4,如果是I420(即YUV標準格式4:2:0)的數(shù)據(jù)量是 size=width×heigth×1.5 Bit杭攻。

? ? ? 在采集到RGB24數(shù)據(jù)后祟敛,需要對這個格式的數(shù)據(jù)進行第一次壓縮。即將圖像的顏色空間由RGB2YUV兆解。因為馆铁,X264在進行編碼的時候需要標準的YUV(4:2:0)。但是這里需要注意的是痪宰,雖然YV12也是(4:2:0)叼架,但是YV12和I420的卻是不同的畔裕,在存儲空間上面有些區(qū)別。如下:

YV12 : 亮度(行×列) + U(行×列/4) + V(行×列/4)

I420 : 亮度(行×列) + V(行×列/4) + U(行×列/4)

可以看出乖订,YV12和I420基本上是一樣的扮饶,就是UV的順序不同。

繼續(xù)我們的話題乍构,經(jīng)過第一次數(shù)據(jù)壓縮后RGB24->YUV(I420)甜无。這樣,數(shù)據(jù)量將減少一半哥遮,為什么呢岂丘?呵呵,這個就太基礎(chǔ)了眠饮,我就不多寫了奥帘。同樣,如果是RGB24->YUV(YV12)仪召,也是減少一半寨蹋。但是,雖然都是一半扔茅,如果是YV12的話效果就有很大損失已旧。然后,經(jīng)過X264編碼后召娜,數(shù)據(jù)量將大大減少运褪。將編碼后的數(shù)據(jù)打包,通過RTP實時傳送玖瘸。到達目的地后秸讹,將數(shù)據(jù)取出,進行解碼雅倒。完成解碼后嗦枢,數(shù)據(jù)仍然是YUV格式的,所以屯断,還需要一次轉(zhuǎn)換,這樣windows的驅(qū)動才可以處理侣诺,就是YUV2RGB2

六:yuv420p與yuv420sp差別

什么是yuv格式:顧名思義就是有大量的y殖演,u,v三個分量組成的視頻格式

y分量表示視頻的亮度年鸳,uv分量表示色度

yuv420 一幀數(shù)據(jù)表示y:u:v = 4:1:1

比如一段4x4分辨率的頭像

其yuv420sp及nv21的數(shù)據(jù)原型是:

y1? y2? ? y3? ? y4

y5? y6? ? y7? ? y8

y9? y10? y11? y12

y13 y14? y15? y16

v1? u1? ? v2? ? u2

v3? u3? ? v4? ? u4

及y有4x4 = 16個字節(jié)長度

v在y數(shù)據(jù)完后緊跟著y數(shù)據(jù)趴久,與u數(shù)據(jù)交替出現(xiàn)。

v搔确、u長度都為 16/4 = 4彼棍。

將此數(shù)據(jù)轉(zhuǎn)換成yuv420p即可保存為.yuv文件灭忠,并播放出來

yuv420p與yuv420sp格式差別:

yuv420p原始編碼數(shù)據(jù)格式:

y1? y2? ? y3? ? y4

y5? y6? ? y7? ? y8

y9? y10? y11? y12

y13 y14? y15? y16

u1? u2

u3? u4

v1? v2

v3? ? v4

與yuv420sp相比,其y分量是相同的座硕,uv位置不一樣弛作,如果將yuv420sp轉(zhuǎn)換成yuv420p

其轉(zhuǎn)換方法:

publicstaticvoidNv21ToI420(byte[] data,byte[] dstData, intw, inth){intsize = w * h;// YSystem.arraycopy(data,0,dstData,0,size);for(inti =0;i < size /4;i++) {dstData[size + i] = data[size + i *2+1];//UdstData[size + size /4+ i] = data[size + i *2];//V}}

7:基于yuv420p與yuv420sp

YUV420P:

YU12:YYYYYYYY? UUVV

Yv12:YYYYYYYY? VVUU

YUV420SP:

NV12:YYYYYYYY? UVUV

NV21:YYYYYYYY? VUVU

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市华匾,隨后出現(xiàn)的幾起案子映琳,更是在濱河造成了極大的恐慌,老刑警劉巖蜘拉,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萨西,死亡現(xiàn)場離奇詭異,居然都是意外死亡旭旭,警方通過查閱死者的電腦和手機谎脯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來持寄,“玉大人源梭,你說我怎么就攤上這事〖士矗” “怎么了咸产?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長仲闽。 經(jīng)常有香客問我脑溢,道長,這世上最難降的妖魔是什么赖欣? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任屑彻,我火速辦了婚禮,結(jié)果婚禮上顶吮,老公的妹妹穿的比我還像新娘社牲。我一直安慰自己,他們只是感情好悴了,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布搏恤。 她就那樣靜靜地躺著,像睡著了一般湃交。 火紅的嫁衣襯著肌膚如雪熟空。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天搞莺,我揣著相機與錄音息罗,去河邊找鬼。 笑死才沧,一個胖子當(dāng)著我的面吹牛迈喉,可吹牛的內(nèi)容都是我干的绍刮。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼挨摸,長吁一口氣:“原來是場噩夢啊……” “哼孩革!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起油坝,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤嫉戚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后澈圈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彬檀,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年瞬女,在試婚紗的時候發(fā)現(xiàn)自己被綠了窍帝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡诽偷,死狀恐怖坤学,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情报慕,我是刑警寧澤深浮,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站眠冈,受9級特大地震影響飞苇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜗顽,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一布卡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雇盖,春花似錦忿等、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至狸相,卻和暖如春匾浪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卷哩。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留属拾,地道東北人将谊。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓冷溶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尊浓。 傳聞我的和親對象是個殘疾皇子逞频,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351