意義:每像素12bit
或表示為IYUV,數(shù)碼攝像機(jī)專用表示法.
一般來(lái)說(shuō),直接采集到的視頻數(shù)據(jù)是RGB24的格式,RGB24一幀的大小size=width×heigth×3 Byte,RGB32的size=width×heigth×4 Byte,如果是I420(即YUV標(biāo)準(zhǔn)格式4:2:0)的數(shù)據(jù)量是 size=width×heigth×1.5 Byte。 在采集到RGB24數(shù)據(jù)后,需要對(duì)這個(gè)格式的數(shù)據(jù)進(jìn)行第一次壓縮。即將圖像的顏色空間由RGB24轉(zhuǎn)化為IYUV。因?yàn)椋琗264在進(jìn)行編碼的時(shí)候需要標(biāo)準(zhǔn)的YUV(4:2:0)。但是這里需要注意的是,雖然YV12也是(4:2:0),但是YV12和I420的卻是不同的,在存儲(chǔ)空間上面有些區(qū)別。如下:
YV12 : 亮度(行×列) + V(行×列/4) + U(行×列/4)
I420 : 亮度(行×列) + U(行×列/4) + V(行×列/4)
YUV是指亮度參量和色度參量分開(kāi)表示的像素格式,而這樣分開(kāi)的好處就是不但可以避免相互干擾,還可以降低色度的采樣率而不會(huì)對(duì)圖像質(zhì)量影響太大。YUV是一個(gè)比較籠統(tǒng)地說(shuō)法,針對(duì)它的具體排列方式,可以分為很多種具體的格式。
YUV格式解析1(播放器——project2)
根據(jù)板卡api設(shè)計(jì)實(shí)現(xiàn)yuv420格式的視頻播放器
打開(kāi)*.mp4;*.264類型的文件,實(shí)現(xiàn)其播放。
使用的視頻格式是YUV420格式
YUV格式通常有兩大類:打包(packed)格式和平面(planar)格式。前者將YUV分量存放在同一個(gè)數(shù)組中,通常是幾個(gè)相鄰的像素組成一個(gè)宏像素(macro-pixel);而后者使用三個(gè)數(shù)組分開(kāi)存放YUV三個(gè)分量,就像是一個(gè)三維平面一樣。表2.3中的YUY2到Y(jié)211都是打包格式,而IF09到Y(jié)VU9都是平面格式。(注意:在介紹各種具體格式時(shí),YUV各分量都會(huì)帶有下標(biāo),如Y0、U0、V0表示第一個(gè)像素的YUV分量,Y1、U1、V1表示第二個(gè)像素的YUV分量,以此類推。)
MEDIASUBTYPE_YUY2 YUY2格式,以4:2:2方式打包
MEDIASUBTYPE_YUYV YUYV格式(實(shí)際格式與YUY2相同)
MEDIASUBTYPE_YVYU YVYU格式,以4:2:2方式打包
MEDIASUBTYPE_UYVY UYVY格式,以4:2:2方式打包
MEDIASUBTYPE_AYUV 帶Alpha通道的4:4:4 YUV格式
MEDIASUBTYPE_Y41P Y41P格式,以4:1:1方式打包
MEDIASUBTYPE_Y411 Y411格式(實(shí)際格式與Y41P相同)
MEDIASUBTYPE_Y211 Y211格式
MEDIASUBTYPE_IF09 IF09格式
MEDIASUBTYPE_IYUV IYUV格式
MEDIASUBTYPE_YV12 YV12格式
MEDIASUBTYPE_YVU9 YVU9格式
表2.3
YUV 采樣
YUV 的優(yōu)點(diǎn)之一是,色度頻道的采樣率可比 Y 頻道低,同時(shí)不會(huì)明顯降低視覺(jué)質(zhì)量。有一種表示法可用來(lái)描述 U 和 V 與 Y 的采樣頻率比例,這個(gè)表示法稱為 A:B:C 表示法:
• |
4:4:4 表示色度頻道沒(méi)有下采樣。
|
• |
4:2:2 表示 2:1 的水平下采樣,沒(méi)有垂直下采樣。對(duì)于每?jī)蓚€(gè) U 樣例或 V 樣例,每個(gè)掃描行都包含四個(gè) Y 樣例。
|
• |
4:2:0 表示 2:1 的水平下采樣,2:1 的垂直下采樣。
|
• |
4:1:1 表示 4:1 的水平下采樣,沒(méi)有垂直下采樣。對(duì)于每個(gè) U 樣例或 V 樣例,每個(gè)掃描行都包含四個(gè) Y 樣例。與其他格式相比,4:1:1 采樣不太常用,本文不對(duì)其進(jìn)行詳細(xì)討論。
|
圖 1 顯示了 4:4:4 圖片中使用的采樣網(wǎng)格。燈光樣例用叉來(lái)表示,色度樣例則用圈表示。
圖 1. YUV 4:4:4 樣例位置
4:2:2 采樣的這種主要形式在 ITU-R Recommendation BT.601 中進(jìn)行了定義。圖 2 顯示了此標(biāo)準(zhǔn)定義的采樣網(wǎng)格。
圖 2. YUV 4:2:2 樣例位置
4:2:0 采樣有兩種常見(jiàn)的變化形式。其中一種形式用于 MPEG-2 視頻,另一種形式用于 MPEG-1 以及 ITU-T recommendations H.261 和 H.263。圖 3 顯示了 MPEG-1 方案中使用的采樣網(wǎng)格,圖 4 顯示了 MPEG-2 方案中使用的采樣網(wǎng)格。
圖 3. YUV 4:2:0 樣例位置(MPEG-1 方案)
圖 4. YUV 4:2:0 樣例位置(MPEG-2 方案)
與 MPEG-1 方案相比,在 MPEG-2 方案與為 4:2:2 和 4:4:4 格式定義的采樣網(wǎng)格之間進(jìn)行轉(zhuǎn)換更簡(jiǎn)單一些。因此,在 Windows 中首選 MPEG-2 方案,應(yīng)該考慮將其作為 4:2:0 格式的默認(rèn)轉(zhuǎn)換方案。
表面定義
本節(jié)講述推薦用于視頻呈現(xiàn)的 8 位 YUV 格式。這些格式可以分為幾個(gè)類別:
• |
4:4:4 格式,每像素 32 位
|
• |
4:2:2 格式,每像素 16 位
|
• |
4:2:0 格式,每像素 16 位
|
• |
4:2:0 格式,每像素 12 位
|
首先,您應(yīng)該理解下列概念,這樣才能理解接下來(lái)的內(nèi)容:
• |
表面原點(diǎn)。對(duì)于本文講述的 YUV 格式,原點(diǎn) (0,0) 總是位于表面的左上角。
|
• |
跨距。表面的跨距,有時(shí)也稱為間距,指的是表面的寬度,以字節(jié)數(shù)表示。對(duì)于一個(gè)表面原點(diǎn)位于左上角的表面來(lái)說(shuō),跨距總是正數(shù)。
|
• |
對(duì)齊。表面的對(duì)齊是根據(jù)圖形顯示驅(qū)動(dòng)程序的不同而定的。表面始終應(yīng)該 DWORD 對(duì)齊,就是說(shuō),表面中的各個(gè)行肯定都是從 32 位 (DWORD) 邊界開(kāi)始的。對(duì)齊可以大于 32 位,但具體取決于硬件的需求。
|
• |
打包格式與平面格式。YUV 格式可以分為打包 格式和平面 格式。在打包格式中,Y、U 和 V 組件存儲(chǔ)在一個(gè)數(shù)組中。像素被組織到了一些巨像素組中,巨像素組的布局取決于格式。在平面格式中,Y、U 和 V 組件作為三個(gè)單獨(dú)的平面進(jìn)行存儲(chǔ)。
|
4:4:4 格式,每像素 32 位
推薦一個(gè) 4:4:4 格式,F(xiàn)OURCC 碼為 AYUV。這是一個(gè)打包格式,其中每個(gè)像素都被編碼為四個(gè)連續(xù)字節(jié),其組織順序如下所示。
圖 5. AYUV 內(nèi)存布局
標(biāo)記了 A 的字節(jié)包含 alpha 的值。
4:2:2 格式,每像素 16 位
支持兩個(gè) 4:2:2 格式,F(xiàn)OURCC 碼如下:
兩個(gè)都是打包格式,其中每個(gè)巨像素都是編碼為四個(gè)連續(xù)字節(jié)的兩個(gè)像素。這樣會(huì)使得色度水平下采樣乘以系數(shù) 2。
YUY2
在 YUY2 格式中,數(shù)據(jù)可被視為一個(gè)不帶正負(fù)號(hào)的 char 值組成的數(shù)組,其中第一個(gè)字節(jié)包含第一個(gè) Y 樣例,第二個(gè)字節(jié)包含第一個(gè) U (Cb) 樣例,第三個(gè)字節(jié)包含第二個(gè) Y 樣例,第四個(gè)字節(jié)包含第一個(gè) V (Cr) 樣例,如圖 6 所示。
圖 6. YUY2 內(nèi)存布局
如果該圖像被看作由兩個(gè) little-endian WORD 值組成的數(shù)組,則第一個(gè) WORD 在最低有效位 (LSB) 中包含 Y0,在最高有效位 (MSB) 中包含 U。第二個(gè) WORD 在 LSB 中包含 Y1,在 MSB 中包含 V。
YUY2 是用于 Microsoft DirectX® Video Acceleration (DirectX VA) 的首選 4:2:2 像素格式。預(yù)期它會(huì)成為支持 4:2:2 視頻的 DirectX VA 加速器的中期要求。
UYVY
此格式與 YUY2 相同,只是字節(jié)順序是與之相反的 — 就是說(shuō),色度字節(jié)和燈光字節(jié)是翻轉(zhuǎn)的(圖 7)。如果該圖像被看作由兩個(gè) little-endian WORD 值組成的數(shù)組,則第一個(gè) WORD 在 LSB 中包含 U,在 MSB 中包含 Y0,第二個(gè) WORD 在 LSB 中包含 V,在 MSB 中包含 Y1。
圖 7. UYVY 內(nèi)存布局
4:2:0 格式,每像素 16 位
推薦兩個(gè) 4:2:0 每像素 16 位格式,F(xiàn)OURCC 碼如下:
兩個(gè) FOURCC 碼都是平面格式。色度頻道在水平方向和垂直方向上都要以系數(shù) 2 來(lái)進(jìn)行再次采樣。
IMC1
所有 Y 樣例都會(huì)作為不帶正負(fù)號(hào)的 char 值組成的數(shù)組首先顯示在內(nèi)存中。后面跟著所有 V (Cr) 樣例,然后是所有 U (Cb) 樣例。V 和 U 平面與 Y 平面具有相同的跨距,從而生成如圖 8 所示的內(nèi)存的未使用區(qū)域。
圖 8. IMC1 內(nèi)存布局
IMC3
此格式與 IMC1 相同,只是 U 和 V 平面進(jìn)行了交換:
圖 9. IMC3 內(nèi)存布局
4:2:0 格式,每像素 12 位
推薦四個(gè) 4:2:0 每像素 12 位格式,F(xiàn)OURCC 碼如下:
• |
IMC2
|
• |
IMC4
|
• |
YV12
|
• |
NV12
|
在所有這些格式中,色度頻道在水平方向和垂直方向上都要以系數(shù) 2 來(lái)進(jìn)行再次采樣。
IMC2
此格式與 IMC1 相同,只是 V (Cr) 和 U (Cb) 行在半跨距邊界處進(jìn)行了交錯(cuò)。換句話說(shuō),就是色度區(qū)域中的每個(gè)完整跨距行都以一行 V 樣例開(kāi)始,然后是一行在下一個(gè)半跨距邊界處開(kāi)始的 U 樣例(圖 10)。此布局與 IMC1 相比,能夠更加高效地利用地址空間。它的色度地址空間縮小了一半,因此整體地址空間縮小了 25%。在各個(gè) 4:2:0 格式中,IMC2 是第二首選格式,排在 NV12 之后。
圖 10. IMC2 內(nèi)存布局
IMC4
此格式與 IMC2 相同,只是 U (Cb) 和 V (Cr) 行進(jìn)行了交換:
圖 11. IMC4 內(nèi)存布局
YV12
所有 Y 樣例都會(huì)作為不帶正負(fù)號(hào)的 char 值組成的數(shù)組首先顯示在內(nèi)存中。此數(shù)組后面緊接著所有 V (Cr) 樣例。V 平面的跨距為 Y 平面跨距的一半,V 平面包含的行為 Y 平面包含行的一半。V 平面后面緊接著所有 U (Cb) 樣例,它的跨距和行數(shù)與 V 平面相同(圖 12)。
圖 12. YV12 內(nèi)存布局
NV12
所有 Y 樣例都會(huì)作為由不帶正負(fù)號(hào)的 char 值組成的數(shù)組首先顯示在內(nèi)存中,并且行數(shù)為偶數(shù)。Y 平面后面緊接著一個(gè)由不帶正負(fù)號(hào)的 char 值組成的數(shù)組,其中包含了打包的 U (Cb) 和 V (Cr) 樣例,如圖 13 所示。當(dāng)組合的 U-V 數(shù)組被視為一個(gè)由 little-endian WORD 值組成的數(shù)組時(shí),LSB 包含 U 值,MSB 包含 V 值。NV12 是用于 DirectX VA 的首選 4:2:0 像素格式。預(yù)期它會(huì)成為支持 4:2:0 視頻的 DirectX VA 加速器的中期要求。
YUV格式解析2
又確認(rèn)了一下H264的視頻格式——H264支持4:2:0的連續(xù)或隔行視頻的編碼和解碼
YUV(亦稱YCrCb)是被歐洲電視系統(tǒng)所采用的一種顏色編碼方法(屬于PAL)。YUV主要用于優(yōu)化彩色視頻信號(hào)的傳輸,使其向后兼容老式黑白電視。與RGB視頻信號(hào)傳輸相比,它最大的優(yōu)點(diǎn)在于只需占用極少的帶寬(RGB要求三個(gè)獨(dú)立的視頻信號(hào)同時(shí)傳輸)。其中“Y”表示明亮度(Luminance或Luma),也就是灰階值;而“U”和“V”表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色。“亮度”是通過(guò)RGB輸入信號(hào)來(lái)創(chuàng)建的,方法是將RGB信號(hào)的特定部分疊加到一起。“色度”則定義了顏色的兩個(gè)方面—色調(diào)與飽和度,分別用Cr和CB來(lái)表示。其中,Cr反映了GB輸入信號(hào)紅色部分與RGB信號(hào)亮度值之間的差異。而CB反映的是RGB輸入信號(hào)藍(lán)色部分與RGB信號(hào)亮度值之同的差異。
補(bǔ)充一下場(chǎng)的概念——
場(chǎng)的概念不是從DV才開(kāi)始有的,電視系統(tǒng)已經(jīng)有了(當(dāng)然,DV和電視的關(guān)系大家都知道)歸根結(jié)底還是掃描的問(wèn)題,具體到PAL制式是:
每秒25幀,每幀兩場(chǎng),掃描線(包括電視機(jī)的電子束)自上而下先掃描一場(chǎng),然后再自上而下掃描第二場(chǎng)
之所以引入場(chǎng)的概念,我的理解是主要為了在有限的帶寬和成本內(nèi)使畫面運(yùn)動(dòng)更加平滑和消除閃爍感。
這兩個(gè)場(chǎng)的掃描線是一條一條互相間隔開(kāi)的,比如說(shuō)對(duì)于一個(gè)幀來(lái)講,最上面一條線編號(hào)為0,緊挨著的是1,再下來(lái)是2,3,4,5,6。。。。那么第一場(chǎng)也許是0,2,4,6;也許是1,3,5,7——這就是隔行掃描
在逐行掃描模式下,就是掃描線按照0,1,2,3,4,5的順序依次掃描,很明顯,這時(shí)候就不存在場(chǎng)的概念了。
下面區(qū)分一下YUV和YCbCr
YUV色彩模型來(lái)源于RGB模型,
該模型的特點(diǎn)是將亮度和色度分離開(kāi),從而適合于圖像處理領(lǐng)域。
應(yīng)用:模擬領(lǐng)域
Y'= 0.299*R' + 0.587*G' + 0.114*B'
U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y')
V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y')
R' = Y' + 1.140*V'
G' = Y' - 0.394*U' - 0.581*V'
B' = Y' + 2.032*U'
YCbCr模型來(lái)源于YUV模型。YCbCr是 YUV 顏色空間的偏移版本.
應(yīng)用:數(shù)字視頻,ITU-R BT.601建議
Y’ = 0.257*R' + 0.504*G' + 0.098*B' + 16
Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128
Cr' = 0.439*R' - 0.368*G' - 0.071*B' + 128
R' = 1.164*(Y’-16) + 1.596*(Cr'-128)
G' = 1.164*(Y’-16) - 0.813*(Cr'-128) - 0.392*(Cb'-128)
B' = 1.164*(Y’-16) + 2.017*(Cb'-128)
PS: 上面各個(gè)符號(hào)都帶了一撇,表示該符號(hào)在原值基礎(chǔ)上進(jìn)行了伽馬校正,伽馬校正有助于彌補(bǔ)在抗鋸齒的過(guò)程中,線性分配伽馬值所帶來(lái)的細(xì)節(jié)損失,使圖像細(xì)節(jié)更加豐富。在沒(méi)有采用伽馬校正的情況下,暗部細(xì)節(jié)不容易顯現(xiàn)出來(lái),而采用了這一圖像增強(qiáng)技術(shù)以后,圖像的層次更加明晰了。
所以說(shuō)H264里面的YUV應(yīng)屬于YCbCr.
下面再仔細(xì)談?wù)刌UV格式, YUV格式通常有兩大類:打包(packed)格式和平面(planar)格式。前者將YUV分量存放在同一個(gè)數(shù)組中,通常是幾個(gè)相鄰的像素組成一個(gè)宏像素(macro-pixel);而后者使用三個(gè)數(shù)組分開(kāi)存放YUV三個(gè)分量,就像是一個(gè)三維平面一樣。
我們常說(shuō)得YUV420屬于planar格式的YUV, 顏色比例如下:
Y0U0V0 Y1 Y2U2V2 Y3
Y4 Y5 Y6 Y7
Y8U8V8 Y9 Y10U10V10 Y11
Y12 Y13 Y14 Y15
其他格式Y(jié)UV可以點(diǎn)這里查看詳細(xì)內(nèi)容, 而在YUV文件中YUV420又是怎么存儲(chǔ)的呢? 在常見(jiàn)H264測(cè)試的YUV序列中,例如CIF圖像大小的YUV序列(352*288),在文件開(kāi)始并沒(méi)有文件頭,直接就是YUV數(shù)據(jù),先存第一幀的Y信息,長(zhǎng)度為352*288個(gè)byte, 然后是第一幀U信息長(zhǎng)度是352*288/4個(gè)byte, 最后是第一幀的V信息,長(zhǎng)度是352*288/4個(gè)byte, 因此可以算出第一幀數(shù)據(jù)總長(zhǎng)度是352*288*1.5,即152064個(gè)byte, 如果這個(gè)序列是300幀的話, 那么序列總長(zhǎng)度即為152064*300=44550KB,這也就是為什么常見(jiàn)的300幀CIF序列總是44M的原因.
4:4:4采樣就是說(shuō)三種元素Y,Cb,Cr有同樣的分辨率,這樣的話,在每一個(gè)像素點(diǎn)上都對(duì)這三種元素進(jìn)行采樣.數(shù)字4是指在水平方向上對(duì)于各種元素的采樣率,比如說(shuō),每四個(gè)亮度采樣點(diǎn)就有四個(gè)Cb的Cr采樣值.4:4:4采樣完整地保留了所有的信息值.4:2:2采樣中(有時(shí)記為YUY2),色度元素在縱向與亮度值有同樣的分辨率,而在橫向則是亮度分辨率的一半(4:2:2表示每四個(gè)亮度值就有兩個(gè)Cb和Cr采樣.)4:2:2視頻用來(lái)構(gòu)造高品質(zhì)的視頻彩色信號(hào).
在流行的4:2:0采樣格式中(常記為YV12)Cb和Cr在水平和垂直方向上有Y分辨率的一半.4:2:0有些不同,因?yàn)樗⒉皇侵冈趯?shí)際采樣中使用4:2:0,而是在編碼史中定義這種編碼方法是用來(lái)區(qū)別于4:4:4和4:2:2方法的).4:2:0采樣被廣泛地應(yīng)用于消費(fèi)應(yīng)用中,比如視頻會(huì)議,數(shù)字電視和DVD存儲(chǔ)中。因?yàn)槊總€(gè)顏色差別元素中包含了四分之一的Y采樣元素量,那么4:2:0YCbCr視頻需要?jiǎng)偤?: 4:4或RGB視頻中采樣量的一半。
4:2:0采樣有時(shí)被描述是一個(gè)"每像素12位"的方法。這么說(shuō)的原因可以從對(duì)四個(gè)像素的采樣中看出. 使用4:4:4采樣,一共要進(jìn)行12次采樣,對(duì)每一個(gè)Y,Cb和Cr,就需要12*8=96位,平均下來(lái)要96/4=24位。使用4:2:0就需要6*8 =48位,平均每個(gè)像素48/4=12位。
在一個(gè)4:2:0隔行掃描的視頻序列中,對(duì)應(yīng)于一個(gè)完整的視頻幀的Y,Cb,Cr采樣分配到兩個(gè)場(chǎng)中。可以得到,隔行掃描的總采樣數(shù)跟漸進(jìn)式掃描中使用的采樣數(shù)目是相同的。
對(duì)比一下:
Y41P(和Y411)(packed格式)格式為每個(gè)像素保留Y分量,而UV分量在水平方向上每4個(gè)像素采樣一次。一個(gè)宏像素為12個(gè)字節(jié),實(shí)際表示8個(gè)像素。圖像數(shù)據(jù)中YUV分量排列順序如下: U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y8 …
IYUV格式(planar)為每個(gè)像素都提取Y分量,而在UV分量的提取時(shí),首先將圖像分成若干個(gè)2 x 2的宏塊,然后每個(gè)宏塊提取一個(gè)U分量和一個(gè)V分量。YV12格式與IYUV類似,但仍然是平面模式。
YUV411、YUV420格式多見(jiàn)于DV數(shù)據(jù)中,前者用于NTSC制,后者用于PAL制。YUV411為每個(gè)像素都提取Y分量,而UV分量在水平方向上每4個(gè)像素采樣一次。YUV420并非V分量采樣為0,而是跟YUV411相比,在水平方向上提高一倍色差采樣頻率,在垂直方向上以U/V間隔的方式減小一半色差采樣,如下圖所示。
(好像顯示不出來(lái)突下圖像)
各種格式的具體使用位數(shù)的需求(使用4:2:0采樣,對(duì)于每個(gè)元素用8個(gè)位大小表示):
格式: Sub-QCIF 亮度分辨率: 128*96 每幀使用的位: 147456
格式: QCIF 亮度分辨率: 176*144 每幀使用的位: 304128
格式: CIF 亮度分辨率: 352*288 每幀使用的位: 1216512
格式: 4CIF 亮度分辨率: 704*576 每幀使用的位: 4866048