數(shù)字媒體壓縮
為縮小數(shù)字媒體文件的大小,我們需要對其使用壓縮技術,一般來說我們所欣賞的媒體內(nèi)容都進行過一定程度的壓縮,無論在電視上的視頻還是網(wǎng)頁上的視頻流,其實都是和這些內(nèi)容的原始文件的壓縮格式打交道,對數(shù)字媒體進行壓縮可以大幅度縮小文件的尺寸,但是通常會在資源的質(zhì)量上有小幅可見的衰減。
色彩的二次采樣
視頻數(shù)據(jù)是使用稱之為YCbCr顏色模式,它也是常稱為YUV,雖然YUV術語并不準確,但是讀起來比較方便,大部分的軟件開發(fā)者都更熟悉RGB顏色模式,即每個像素點都由紅,綠,藍三個顏色組合而成,YCbCr或者是YUV則使用色彩(顏色)通道UV替換了像素的亮度通道.
-
RGB的顏色編碼
RGB三個字母分別代表了紅(red)、綠(green)、藍(blue),這三種顏色稱為三原色,將它們以不同的比例相加,可以產(chǎn)生多種多樣的顏色。
一個像素點的RGB在圖像顯示中,一張1280 * 720 大小的圖片,就代表著它有1280 * 720 個像素點。其中每?個像素點的顏?顯示都采?RGB 編碼?法,將RGB 分別取不同的值,就會展示不同的顏?。
RGB 圖像中,每個像素點都有紅、綠、藍三個原?,其中每種原?都占?8 bit,也就是?個字節(jié),那么?個像素點也就占?24 bit,也就是三個字節(jié)。?張1280 * 720 ??的圖?,就占?1280 * 720 * 3 / 1024 / 1024 = 2.63 MB 存儲空間
YUV的顏色編碼
YUV顏色編碼采用的是明亮度和色度來指定像素的顏色。其中,Y代表明亮度(Luminance、Luma),而U和V表示色度(Chrominance、Chroma)。而色度又定義了顏色的兩個方面:色調(diào)和飽和度

和RGB表示圖像類似,每個像素點包含了Y、U、V分量。但是它的Y和UV分量是可以分離的,如果沒有UV分量一樣可以顯示完整的圖像,只不過是黑白的。對應YUV圖像來說,并不是每個像素點都需要包含Y、U、V三個分量,根據(jù)不同的采樣格式,可以每個分量Y都對應自己的UV分量,也可以結果Y分量公用UV分量
YUV4:4:4
在4:4:4的模式下,色彩的全部信息被保存下來,如圖:

可以簡單理解為:原始像素原樣輸出,沒有任何壓縮,如下圖所示

相鄰的四個像素點ABCD,每個像素點有自己的YUV,在色彩的二次采樣的過程中,分別保留自己的YUV,每個分量占用8bit,一個像素點占用1個字節(jié)。與RGB顏色編碼相比,并沒有節(jié)省帶寬,占用的存儲空間也沒有減少,稱為4:4:4??梢约雍唵卫斫鉃椋?code>原始像素原樣輸出,沒有任何壓縮。
YUV4:2:2
YUV4:2:2采樣,意味著UV分量是Y分量采樣的一半,Y分量和UV分量按照2:1的比例采樣。舉例說明:如果水平方向有10個像素點,通過這種采樣格式,最終采樣了10個Y分量,5個UV分量
可以通俗的理解為:每采樣一個像素點都會采樣Y分量,而U、V分量則會間隔一個采集一個
如圖所示:

假設原始圖像的像素為(一對[]表示一個像素點):
[Y0, U0, V0]; [Y1, U1, V1]; [Y2, U2, V2]; [Y3, U3, V3];
將原始圖像像素按照YUV4:2:2采樣的碼流為:
Y0, U0, Y1, V1, Y2, U2, Y3, V3
其中,每采樣過?個像素點,都會采樣其 Y 分量,? U、V 分量就會間隔?個采集?個。
最后映射還原的像素點為:
[Y0, U0, V1]; [Y1, U0, V1]; [Y2, U2, V3]; [Y3, U2, V3];
結論:1、YUV4:2:2采樣格式中是兩個Y分量共用一套UV分量
2、相比RGB顏色編碼格式節(jié)省了1/3的存儲空間。在傳送時占用的寬帶也會隨之減少
一張1280 * 720大小的圖片在YUV4:2:2采樣時的大小為:
Y的字節(jié)數(shù)=1280 * 720 * 8
UV的字節(jié)數(shù) = 1280 * 720 * (2/4) 8 * 2
(Y的字節(jié)數(shù) + UV的字節(jié)數(shù))/ 8 /1024 /1024 = 1.76MB 存儲空間*
YUV4:2:0
YUV4:2:0采樣,并不是只采樣U分量而不采樣V分量.而是指,在每一行掃描時,只掃描一種色度分量(U或者V),和Y分量按照2:1的方式采樣。比如,第一行掃描時,YU按照2:1的方式采樣,那么第??掃描時,YV 分量按照2:1 的?式采樣。對于每個?度分量來說,它的?平?向和豎直?向的采樣和Y 分量相?都是2:1 。假設第??掃描了U 分量,第??掃描了V 分量,那么需要掃描兩?才能夠組成完整的UV 分量,可以簡單的理解為:在田字格的4個像素點中,4個Y分量共用了一套UV分量,如圖所示:

假設原始圖像的像素為(一對[]表示一個像素點):
[Y0, U0, V0]; [Y1, U1, V1]; [Y2, U2, V2]; [Y3, U3, V3];
[Y5, U5, V5]; [Y6, U6, V6]; [Y7, U7, V7]; [Y8, U8, V8];
其中,每采樣過?個像素點,都會采樣其 Y 分量,? U、V 分量就會間隔??按照 2 : 1 進?采樣。
將原始圖像像素按照YUV4:2:0采樣的碼流為:
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]; [Y7, U2, V7]; [Y8, U2, V7];
從映射出的像素點中可以看到,四個Y 分量是共?了?套UV 分量,?且是按照2*2 的??格的形式分布的,相?YUV 4:2:2 采樣中兩個Y 分量共??套UV 分量,這樣更能夠節(jié)省空間。?張1280 * 720 ??的圖?,在YUV 4:2:0 采樣時的??為:
(1280 * 720 * 8 + 1280 * 720 * 0.25 * 8 * 2)/ 8 / 1024 / 1024 = 1.32 MB 相對于2.63M節(jié)省了一半的空間
RGB 與 YUV 顏色編碼轉(zhuǎn)換
對于圖像顯示器(即屏幕)來說,是通過RGB模型來展示圖像的
而傳輸時的圖像數(shù)據(jù)使用的是YUV模型,主要是因為YUV可以節(jié)省帶寬
所以在圖像采集時需要將RGB模型轉(zhuǎn)換到YUV模型,顯示時將YUV模型轉(zhuǎn)換到RGB模型
RGB 到 YUV的轉(zhuǎn)換,其實就是將圖像所有像素點的R、G、B分量 轉(zhuǎn)換到 Y、U、V分量,其對應的轉(zhuǎn)換公式如下(這個并不需要死記硬背):
//YUV和RGB的轉(zhuǎn)換:
Y = 0.299 R + 0.587 G + 0.114 B
U = -0.1687 R - 0.3313 G + 0.5 B + 128
V = 0.5 R - 0.4187 G - 0.0813 B + 128
R = Y + 1.402 (V-128)
G= Y - 0.34414 (U-128) - 0.71414 (V-128)
B= Y + 1.772 (U-128)
