YUV/RGB數(shù)據(jù)格式

目錄

  1. YUV的原理
  2. YUV的取值范圍
  3. YUV的存儲(chǔ)格式
  4. YUV的采樣格式
  5. 存儲(chǔ)方式
  6. 10bit YUV數(shù)據(jù)的存儲(chǔ)
  7. RGB的格式

參考

1. YUV的原理

YUV 的原理是把亮度(Luma)與色度(Chroma)分離。
“Y”表示亮度,也就是灰度值。
“U”表示藍(lán)色通道與亮度的差值。
“V”表示紅色通道與亮度的差值。

其中 Y 信號(hào)分量除了表示亮度信號(hào)外,還含有較多的綠色通道量,單純的 Y 分量可以顯示出完整的黑白圖像。
U、V 分量分別表示藍(lán) (blue)、紅 (red) 分量信號(hào),只含有色度信息,所以 YUV 也稱(chēng)為 YCbCr,其中,Cb、Cr的含義等同于U、V,C 可以理解為 component 或者 color。

RGB 轉(zhuǎn) YUV 的公式能更好地反應(yīng) YUV 與 RGB 的關(guān)系,以及為什么稱(chēng)為 YCbCr:


yuv1.png

RGB與YUV的變換公式如下:


yuv_rgb.jpg

有時(shí)候遇到播放問(wèn)題會(huì)看到純綠色的圖像,可能是由某些錯(cuò)誤導(dǎo)致YUV值為(0,0,0)引起的,YUV(0,0,0)對(duì)應(yīng)RGB為(0,135,0),正好為綠色。

RGB和YUV互轉(zhuǎn)的網(wǎng)頁(yè)小工具:
https://www.mikekohn.net/file_formats/yuv_rgb_converter.php

在RGB色彩空間中,三個(gè)顏色的重要程度相同,所以需要使用相同的比特進(jìn)行存儲(chǔ)。研究發(fā)現(xiàn)人眼對(duì)亮度的敏感超過(guò)色度。將圖像的亮度信息和顏色信息分離,并使用不同的分辨率進(jìn)行存儲(chǔ),這樣在對(duì)主觀感覺(jué)影響很小的前提下,可以更加有效地存儲(chǔ)圖像數(shù)據(jù)。

2. YUV的取值范圍

與RGB每個(gè)像素點(diǎn)的每個(gè)分量取值范圍為0-255不同(每個(gè)分量占8bit),YUV取值范圍有兩種:

  1. 以Rec.601為代表(還包括BT.709 / BT.2020)的廣播電視標(biāo)準(zhǔn)中,Y的取值范圍是16-235,U、V的取值范圍是16-240。FFmpeg中稱(chēng)之為“mpeg”范圍。
  2. 以JPEG為代表的標(biāo)準(zhǔn)中,Y、U、V的取值范圍都是0-255。FFmpeg中稱(chēng)之為“jpeg” 范圍。

實(shí)際中最常見(jiàn)的是第1種取值范圍的YUV(可以自己觀察一下YUV的數(shù)據(jù),會(huì)發(fā)現(xiàn)其中亮度分量沒(méi)有取值為0、255這樣的數(shù)值)。很多人在這個(gè)地方會(huì)有疑惑,為什么會(huì)去掉“兩邊”的取值呢?

原因:

  • 在廣播電視系統(tǒng)中不傳輸很低和很高的數(shù)值,實(shí)際上是為了防止信號(hào)變動(dòng)造成過(guò)載,因而把這“兩邊”的數(shù)值作為“保護(hù)帶”[4]。

下面這張圖是數(shù)字電視中亮度信號(hào)量化后的電平分配圖。從圖中可以看出。

  • 對(duì)于8bit量化來(lái)說(shuō),信號(hào)的白電平為235,對(duì)應(yīng)模擬電平為700mV。
  • 黑電平為16,對(duì)應(yīng)模擬電平為0mV。
  • 信號(hào)上方的“保護(hù)帶”取值范圍是236至254,而信號(hào)下方的“保護(hù)帶”取值范圍是1-15。
  • 最邊緣的0和255兩個(gè)電平是保護(hù)電平,是不允許出現(xiàn)在數(shù)據(jù)流中的。

與之類(lèi)似,10bit量化的時(shí)候,白電平是235*4=940,黑電平是16*4=64。


quantization_yuv.jpg

下面兩張圖是數(shù)字電視中色度信號(hào)量化后的電平分配圖。可以看出:

  • 色度最大正電平為240,對(duì)應(yīng)模擬電平為+350mV。
  • 色度最大負(fù)電平為16,對(duì)應(yīng)模擬電平為-350mV。
  • 需要注意的是,色度信號(hào)數(shù)字電平128對(duì)應(yīng)的模擬電平是0mV。
quantization_2.jpg

quantization_3.jpg

3. YUV的存儲(chǔ)格式

YUV格式有兩大類(lèi):planar和packed。

對(duì)于 planar 的 YUV 格式,先連續(xù)存儲(chǔ)所有像素點(diǎn)的 Y,緊接著存儲(chǔ)所有像素點(diǎn)的 U,隨后是所有像素點(diǎn)的 V。相當(dāng)于將 YUV 拆分成三個(gè)平面 (plane) 存儲(chǔ)。

對(duì)于 packed 的 YUV 格式,每個(gè)像素點(diǎn)的 Y,U,V 是連續(xù)交替存儲(chǔ)的。

4. YUV的采樣格式

主要的采樣格式有YUV4:4:4、YUV4:2:2、YUV4:2:0 ,其中YUV4:2:0是最常用的采樣格式。

采樣就是根據(jù)一定的間隔取值。其中的比例是指 Y、U、V 表示的像素,三者分別占的比值。

下圖是YUV4:4:4,YUV4:2:2,YUV4:2:0的采樣示意圖。
image
  • YUV 4:4:4采樣,每一個(gè)Y對(duì)應(yīng)一組UV分量。
  • YUV 4:2:2采樣,每?jī)蓚€(gè)Y共用一組UV分量。
  • YUV 4:2:0采樣,每四個(gè)Y共用一組UV分量。

5. 存儲(chǔ)方式

下面用圖的形式給出常見(jiàn)的YUV數(shù)據(jù)的存儲(chǔ)方式,并在后面附有取樣每個(gè)像素點(diǎn)的YUV數(shù)據(jù)的方法。

(1) YUYV 格式 (屬于YUV422)


YUYV.png

相鄰的兩個(gè)Y共用其相鄰的兩個(gè)Cb、Cr,對(duì)于像素點(diǎn)Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00,其他的像素點(diǎn)的YUV取值依次類(lèi)推。

(2) UYVY 格式 (屬于YUV422)


YUYV.png

與YUYV不同的是UV的排列順序不一樣,還原其每個(gè)像素點(diǎn)的YUV值的方法與上面一樣。

(3) YUV422P(屬于YUV422)


YUV422P.png

YUV422P是一種平面模式,其每一個(gè)像素點(diǎn)的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即兩個(gè)Y共用一個(gè)UV。比如,對(duì)于像素點(diǎn)Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00。

(4) YUV420P格式(屬于YUV420)


YV12.png

YUV420P,Y,U,V三個(gè)分量都是平面格式,分為I420和YV12。I420格式和YV12格式的不同處在U平面和V平面的位置不同。注意,上圖中,Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00,其他依次類(lèi)推。在I420格式中,U平面緊跟在Y平面之后,然后才是V平面(即:YUV);但YV12則是相反(即:YVU)。

YUV420p.png

I420: YYYYYYYY UU VV
YV12: YYYYYYYY VV UU

(5) NV12、NV21(YUV420sp,屬于YUV420)


NV12.png

這兩種格式的不同在于UV交錯(cuò)排列的順序不同,是一種two-plane模式,即Y和UV分為兩個(gè)Plane,但是UV(CbCr)為交錯(cuò)存儲(chǔ),而不是分為三個(gè)plane。其提取方式與上一種類(lèi)似,即Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00,其他依次類(lèi)推。

假設(shè)一個(gè)分辨率為8X4的YUV圖像,它們的格式如下圖:
YUV420sp格式如下圖

YUV420sp.png

NV12: YYYYYYYY UVUV
NV21: YYYYYYYY VUVU

以w*h大小圖像的YUV420數(shù)據(jù)為例,
其存儲(chǔ)格式是: 共大小為(w * h * 3/2)字節(jié),
Y分量:(w * h)個(gè)字節(jié)
U(Cb)分量:(w * h/4)個(gè)字節(jié)
V(Cr)分量:(w * h/4)個(gè)字節(jié)

6. 10bit YUV數(shù)據(jù)的存儲(chǔ)

常見(jiàn)的yuv數(shù)據(jù),每個(gè)像素的一個(gè)通道一般是占用一個(gè)字節(jié)即8bit。而HDR常用的標(biāo)準(zhǔn)HDR10,數(shù)據(jù)是10bit的。

10bit數(shù)據(jù)是怎么存儲(chǔ)的呢?我們一般會(huì)有兩種想法:

  1. 每個(gè)像素的一個(gè)通道占用兩個(gè)字節(jié),其中6個(gè)bit是填充位。
  2. 每個(gè)像素的一個(gè)通道占用10bit,10bit數(shù)據(jù)和10bit數(shù)據(jù)是挨著排列的。

優(yōu)缺點(diǎn)

  1. 方式1:便于運(yùn)算處理,有存儲(chǔ)冗余;
  2. 方式2:存儲(chǔ)沒(méi)有冗余,計(jì)算麻煩。

事實(shí)上,10bit是采用方式1存儲(chǔ)的,并且高有效字節(jié)的前6個(gè)bit是填充的0。

HDR10視頻解碼得到Y(jié)UV數(shù)據(jù)的命令:

//yuv420p10le格式
ffmpeg -i hdr10.mp4 -f rawvideo -pix_fmt yuv420p10be hdr10_yuv420p10le.yuv

//yuv420p10be格式
ffmpeg -i hdr10.mp4 -f rawvideo -pix_fmt yuv420p10be hdr10_yuv420p10le.yuv

(1)yuv420p10le的數(shù)據(jù)格式的16進(jìn)制的顯示:

image.png

比如地址019f7040h開(kāi)始的兩個(gè)字節(jié):

-------------低地址---->高地址--------------
00011111 000000 01  

(2)yuv420p10be的數(shù)據(jù)格式的16進(jìn)制的顯示:

image.png

比如地址019f7040h開(kāi)始的兩個(gè)字節(jié):

-------------低地址---->高地址--------------
000000 01 00011111   

工具推薦:一個(gè)可以播放10bit yuv流的播放器YUV Player

7. RGB格式

  1. BGR24圖像格式
    BGR24圖像格式是一種采用24bpp(bit per pixel)的格式。每個(gè)顏色通道B、G、R各占8bpp。
    排列方式如:
B G R ? B G R ? B G R ? B G R ? B G R ? B G R ? B G R ? B G R
B G R ? B G R ? B G R ? B G R ? B G R ? B G R ? B G R ? B G R
B G R ? B G R ? B G R ? B G R ? B G R ? B G R ? B G R ? B G R
B G R ? B G R ? B G R ? B G R ? B G R ? B G R ? B G R ? B G R
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 前一陣子在梳理以前文章的時(shí)候,發(fā)現(xiàn)自己雖然總結(jié)了各種視音頻應(yīng)用程序,卻還缺少一個(gè)適合無(wú)視音頻背景人員學(xué)習(xí)的“最基礎(chǔ)...
    視頻音頻小白閱讀 2,130評(píng)論 1 3
  • 由于H.264等壓縮算法都是在YUV的顏色空間上進(jìn)行的,所有在進(jìn)行壓縮前,首先要進(jìn)行顏色空間的轉(zhuǎn)換。如果攝像頭采集...
    眷卿三世閱讀 13,789評(píng)論 2 6
  • 導(dǎo)語(yǔ) 今天跟大家分享的這篇文章,也是之前自己總結(jié)的,大致就是想說(shuō)明一下,視頻的裸數(shù)據(jù)yuv格式的各種分類(lèi)。剛開(kāi)始接...
    bigonelby閱讀 9,576評(píng)論 0 13
  • 她是海寵溺的小孩, 一到四月, 她就喜歡到這里, 來(lái)賞盛開(kāi)的櫻花。 她可真是被寵壞了, 賞了櫻花不回家 早晨在路上...
    晨光微曉閱讀 346評(píng)論 2 1
  • 今天的工作量很多 到現(xiàn)在也沒(méi)做完 明天去又是一坨事情呢 不過(guò)幫泥鰍賣(mài)了些八寶茶 算是一件正事!
    圓柱體閱讀 276評(píng)論 0 0

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