常用圖像像素格式 RGB 和 YUV,像素格式描述了像素數(shù)據(jù)存儲所用的格式,定義了像素在內(nèi)存中的編碼方式。RGB 和 YUV 為兩種經(jīng)常使用的像素格式。
一般較為熟悉,RGB圖像具有三個通道 R、G、B,分別對應(yīng)紅、綠、藍(lán)三個分量,由三個分量的值決定顏色;這三種顏色稱為 三原色,將它們以不同的比例相加,可以產(chǎn)生多種多樣的顏色。
通常,會給RGB圖像加一個通道alpha,即透明度,于是共有四個分量共同控制顏色(RGBA)
在圖像顯示中,一張 1280 * 720 大小的圖片,就代表著它有 1280 * 720 個像素點(diǎn)。其中每一個像素點(diǎn)的顏色顯示都采用 RGB 編碼方法,將 RGB 分別取不同的值,就會展示不同的顏色。
RGB 圖像中,每個像素點(diǎn)都有紅、綠、藍(lán)三個原色,其中每種原色都占用 8 bit,也就是一個字節(jié),那么一個像素點(diǎn)也就占用 24 bit,也就是三個字節(jié)。
一張 1280 * 720 大小的圖片,就占用 1280 * 720 * 3 / 1024 / 1024 = 2.63 MB 存儲空間。
(YCrCb)是指將亮度參量Y和色度參量U/V分開表示的像素格式,主要用于優(yōu)化彩色視頻信號的傳輸。
Y 表示明亮度(Luminance,Luma或brightness),也就是灰階值
U 和 V 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色。
YUV像素格式來源于RGB像素格式,通過公式運(yùn)算,YUV 三分量可以還原出 RGB,YUV 轉(zhuǎn) RGB 的公式如下:
R = Y + 1.403V G = Y - 0.344U - 0.714V B = Y + 1.770U
一般,將 RGB 和 YUV 的范圍均限制在 [0, 255] 間,則有如下轉(zhuǎn)換公式:
R = Y + 1.403(V - 128) G = Y - 0.344(U - 128) - 0.714(V - 128) B = Y + 1.770(U - 128)
鑒于 RGB 格式已經(jīng)見得見多,本文主要總結(jié) YUV 常見的幾種像素格式。
YUV 相比于 RGB 格式最大的好處是可以做到在保持圖像質(zhì)量降低不明顯的前提下,減小文件大小。TUV 格式之所以能夠做到,是因為進(jìn)行了采樣操作。
YUV 碼流的存儲格式與其采樣方式密切相關(guān),主流的采樣方式有三種:YUV 4:4:4(YUV444),YUV 4:2:2(YUV422),YUV 4:2:0(YUV420)。
若以以黑點(diǎn)表示采樣該像素點(diǎn)的 Y 分量,以空心圓圈表示采用該像素點(diǎn)的 UV 分量,則這三種采樣方式如下:
即:
YUV 4:4:4 采樣,每一個 Y 對應(yīng)一組 UV 分量。
YUV 4:2:2 采樣,每兩個 Y 共用一組 UV 分量。
YUV 4:2:0 采樣,每四個 Y 共用一組 UV 分量。
YUV 4:4:4 采樣,意味著 Y、U、V 三個分量的采樣比例相同,因此在生成的圖像里,每個像素的三個分量信息完整,都是 8 bit,也就是一個字節(jié)。
其中,Y 分量用叉表示,UV 分量用圓圈表示。
舉個例子 :
假如圖像像素為:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采樣的碼流為:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
最后映射出的像素點(diǎn)依舊為 [Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
可以看到這種采樣方式的圖像和 RGB 顏色模型的圖像大小是一樣,并沒有達(dá)到節(jié)省帶寬的目的,當(dāng)將 RGB 圖像轉(zhuǎn)換為 YUV 圖像時,也是先轉(zhuǎn)換為 YUV 4:4:4 采樣的圖像。
YUV 4:2:2 采樣,意味著 UV 分量是 Y 分量采樣的一半,Y 分量和 UV 分量按照 2 : 1 的比例采樣。如果水平方向有 10 個像素點(diǎn),那么采樣了 10 個 Y 分量,而只采樣了 5 個 UV 分量。
如下圖所示:
其中,Y 分量用叉表示,UV 分量用圓圈表示。
舉個例子 :
假如圖像像素為:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采樣的碼流為:Y0 U0 Y1 V1 Y2 U2 Y3 V3
其中,每采樣過一個像素點(diǎn),都會采樣其 Y 分量,而 U、V 分量就會間隔一個采集一個。
最后映射出的像素點(diǎn)為 [Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]
采樣的碼流映射為像素點(diǎn),還是要滿足每個像素點(diǎn)有 Y、U、V 三個分量。但是可以看到,第一和第二像素點(diǎn)公用了 U0、V1 分量,第三和第四個像素點(diǎn)公用了 U2、V3 分量,這樣就節(jié)省了圖像空間。
一張 1280 * 720 大小的圖片,在 YUV 4:2:2 采樣時的大小為:
total = w * h + w * h * 2 / 2(1280 * 720 + 1280 * 720 * 0.5 * 2) / 1024 / 1024 = 1.76 MB 。
可以看到 YUV 4:2:2 采樣的圖像比 RGB 模型圖像節(jié)省了三分之一的存儲空間,在傳輸時占用的帶寬也會隨之減少。
YUV 4:2:0 采樣,并不是指只采樣 U 分量而不采樣 V 分量。而是指,在每一行掃描時,只掃描一種色度分量(U 或者 V),和 Y 分量按照 2 : 1 的方式采樣。比如,第一行掃描時,YU 按照 2 : 1 的方式采樣,那么第二行掃描時,YV 分量按照 2:1 的方式采樣。對于每個色度分量來說,它的水平方向和豎直方向的采樣和 Y 分量相比都是 2:1 。
如下圖所示:
假設(shè)第一行掃描了 U 分量,第二行掃描了 V 分量,那么需要掃描兩行才能夠組成完整的 UV 分量。
舉個例子 :
假設(shè)圖像像素為:
[Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3][Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]
那么采樣的碼流為:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8
其中,每采樣過一個像素點(diǎn),都會采樣其 Y 分量,而 U、V 分量就會間隔一行按照 2 : 1 進(jìn)行采樣。
最后映射出的像素點(diǎn)為:
[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7][Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]
從映射出的像素點(diǎn)中可以看到,四個 Y 分量是共用了一套 UV 分量,而且是按照 2*2 的小方格的形式分布的,相比 YUV 4:2:2 采樣中兩個 Y 分量共用一套 UV 分量,這樣更能夠節(jié)省空間。
一張 1280 * 720 大小的圖片,在 YUV 4:2:0 采樣時的大小為:
total = w * h + w * h * 2 /4 (1280 * 720 + 1280 * 720 * 0.25 * 2) / 1024 / 1024 = 1.32 MB 。
可以看到 YUV 4:2:0 采樣的圖像比 RGB 模型圖像節(jié)省了一半的存儲空間,因此它也是比較主流的采樣方式。
說完了采樣,接下來就是如何把采樣的數(shù)據(jù)存儲起來。
YUV 的存儲格式,有兩種:
planar 平面格式:指先連續(xù)存儲所有像素點(diǎn)的 Y 分量,然后存儲 U 分量,最后是 V 分量。
packed 打包模式:指每個像素點(diǎn)的 Y、U、V 分量是連續(xù)交替存儲的。
根據(jù)采樣方式和存儲格式的不同,就有了多種 YUV 格式。這些格式主要是用于 YUV 4:2:2 和 YUV 4:2:0 采樣。
YUV 4:2:2 采樣規(guī)定了 Y 和 UV 分量按照 2: 1 的比例采樣,兩個 Y 分量公用一組 UV 分量。
這四種格式每一種又可以分為 2 類(packed和planar),以 YUYV 為例,一個 6*4 的圖像的存儲方式如下:
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y U U U U U U Y U Y V Y U Y V Y U Y V U U U U U U Y U Y V Y U Y V Y U Y V V V V V V V Y U Y V Y U Y V Y U Y V V V V V V V Y U Y V Y U Y V Y U Y V - Planar - - Packed -
YUYV 格式
YUYV 格式是采用打包格式進(jìn)行存儲的,指每個像素點(diǎn)都采用 Y 分量,但是每隔一個像素采樣它的 UV 分量,排列順序如下:
Y0 UO Y1 V0 Y2 U2 Y3 V2
Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U2 V2 分量….
UYVY 格式
UYVY 格式也是采用打包格式進(jìn)行存儲,它的順序和 YUYV 相反,先采用 U 分量再采樣 Y 分量,排列順序如下:
U0 Y0 V0 Y1 U2 Y2 V2 Y3
Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U2 V2 分量….
根據(jù) UV 和 Y 的順序還有其他格式,比如,YVYU 格式,VYUY 格式等等,原理大致一樣了。
YUV 422P 格式
YUV 422P 格式,又叫做 I422,采用的是平面格式進(jìn)行存儲,先存儲所有的 Y 分量,再存儲所有的 U 分量,再存儲所有的 V 分量。
基于 YUV 4:2:0 采樣的格式主要有 YUV 420P 和 YUV 420SP 兩種類型,每個類型又對應(yīng)其他具體格式。
YUV 420P 類型
YU12 格式
YV12 格式
YUV 420SP 類型
NV12 格式
NV21 格式
YUV 420P 和 YUV 420SP 都是基于 Planar 平面模式 進(jìn)行存儲的,先存儲所有的 Y 分量后, YUV420P 類型就會先存儲所有的 U 分量或者 V 分量,而 YUV420SP 則是按照 UV 或者 VU 的交替順序進(jìn)行存儲了:
同樣,對于一個6*4的圖像,這四種像素格式的存儲方式如下:
Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y U U U U U U V V V V V V U V U V U V V U V U V U V V V V V V U U U U U U U V U V U V V U V U V U - I420 - - YV12 - - NV12 - - NV21 -
I420、YV12 三個分量均為平面格式,即分別存在三個 Byte 型數(shù)組中;
NV12、NV21 的存儲格式為 Y 平面,UV 打包,即 Y 信息存儲在一個數(shù)組中,UV 信息存儲在一個矩陣中。
聯(lián)系客服