色彩採樣
在數位圖像處理領域中,色彩採樣是指在表示圖像時使用較亮度資訊低的解析度來表示色彩(色度)資訊。當對類比分量影片或者YUV訊號進行數字抽樣時,一般會用到色彩採樣。
原理
編輯由於儲存及傳送的限制,我們通常需要減少(或壓縮)資訊以減低負荷。由於人眼對色度的敏感度不及對亮度的敏感度,圖像的色度分量不需要有和亮度分量相同的解析度,所以許多視訊系統在色差通道上進行較低(相對亮度通道)解析度(例如,抽樣頻率)的抽樣。這樣在不明顯降低畫面品質的同時降低了影像訊號的總頻寬。因抽樣而丟失的色度值用內插值,或者前一色度值來替代。在壓縮影像中,以4:2:2 Y'CbCr作例,它只需R'G'B'(4:4:4)三分之二的頻寬。頻寬的減少在肉眼上幾乎沒有影像上差別。
色彩採樣的用法
編輯由於人類的視覺系統對顏色的位置及移動不及對亮度敏感,頻寬上可以以儲存較多的亮度細節、較少的色度細節作優化。在一般影像觀看距離時,色度細節在較低的取樣率下仍不引起可察覺的損失。於影片系統中,可以以不同顏色分部的取樣而達成以上結果。影片訊號可分別為一個亮度分量(Y')及兩個不同顏色分量(色度)。
色彩採樣是顏色科學的分支,在顏色科學亮度及色度分量是以一個伽瑪校正(三重刺激)的R'G'B'分量的加權總和形成,代替線性(三重刺激)的R'G'B'分量。因此,明度及顏色細節並非完全互相獨立。在亮度及色度分量之間會存在著一些明度及顏色資訊的「溢位」("Bleeding")現象(如下圖所示)。此誤差尤其於高飽和的顏色情況下出現,其現象在彩條測試圖(經色彩採樣)中洋紅色及綠色之間會輕微顯著。在工程學的概算下(即是將「伽瑪校正」及「組成加權總和」兩個步驟逆向進行),使色彩採樣方式更容易實行。
抽樣系統及比例
編輯影片系統的抽樣系統中通常用一個三分比值表示:J:a:b(例如4:2:2),形容一個以J個像素寬及兩個像素高的概念上區域,有時候會以四分比值表示(例如4:2:2:4)。依序列出為:
- J:水平抽樣參照(概念上區域的寬度)。通常為4。
- a:在J個像素第一行中的色度抽樣數目(Cr, Cb)。
- b:在J個像素第二行中的額外色度抽樣數目(Cr, Cb)。
- Alpha:水平因數(與首數值有關連)。若沒有此部分者可忽略,或存在時與J相同。
以下連結中的一幅教學圖片解釋了不同抽樣系統的運作:http://lea.hamradio.si/~s51kq/subsample.gif (頁面存檔備份,存於網際網路檔案館) (資料來源:"Basics of Video" )以及 (頁面存檔備份,存於網際網路檔案館)由Douglas Kerr所著的"Chrominance Subsampling in Digital Images" (頁面存檔備份,存於網際網路檔案館)。
4:1:1 | 4:2:0 | 4:2:2 | 4:4:4 | 4:4:0 | |||||||||||||||||||||||||
Y'CrCb | |||||||||||||||||||||||||||||
= | = | = | = | = | |||||||||||||||||||||||||
Y' | |||||||||||||||||||||||||||||
+ | + | + | + | + | |||||||||||||||||||||||||
1 | 2 | 3 | 4 | J = 4 | 1 | 2 | 3 | 4 | J = 4 | 1 | 2 | 3 | 4 | J = 4 | 1 | 2 | 3 | 4 | J = 4 | 1 | 2 | 3 | 4 | J = 4 | |||||
(Cr, Cb) | 1 | a = 1 | 1 | 2 | a = 2 | 1 | 2 | a = 2 | 1 | 2 | 3 | 4 | a = 4 | 1 | 2 | 3 | 4 | a = 4 | |||||||||||
1 | b = 1 | b = 0 | 1 | 2 | b = 2 | 1 | 2 | 3 | 4 | b = 4 | b = 0 | ||||||||||||||||||
¼水平解析度, 全垂直解析度 |
½水平解析度, ½垂直解析度 |
½水平解析度, 全垂直解析度 |
全水平解析度, 全垂直解析度 |
全水平解析度, ½垂直解析度 |
以上例圖僅給出理論上的範例。以及注意圖中並沒有表明任何色度過濾(防止疊影的措施)。
在計算與4:4:4抽樣(或4:4:4:4)有關的頻寬係數時,把各係數加總再除以12(當有Alpha時除以16)。
在比較圖像品質時,這三個值之間的比值才是重要的,所以4:4:4可以簡化為1:1:1;但是習慣上亮度樣本的數量值總為4,其他兩個值依此類推。
有時抽樣率為四分比值,如4:2:2:4。這時第四個值是調製通道的抽樣頻率比值。事實上,因為在調製應用中非常需要高品質圖像,所以這個值在任何情況下都為4。
各種抽樣系統介紹
編輯4:4:4 Y'CbCr
編輯每三個Y'CbCr分量都有相同抽樣率。此系統有時候用作高階底片掃瞄器及電影後期製作中。通常會以兩條SDI通道連線來承載4:4:4頻寬訊號:通道A會盛載4:2:2的訊號,通道B則會承載0:2:2的訊號,合併成4:4:4訊號。
4:4:4 R'G'B'(沒有抽樣)
編輯需要注意的是,有時候"4:4:4"也表示在RGB色度空間中,全部沒有作任何色度抽樣。如HDCAM SR等格式可以以雙通道HD-SDI記錄4:4:4 R'G'B'訊號。
4:2:2
編輯每個色差通道的抽樣率是亮度通道的一半,即水平色差解析度分半。這樣從無壓縮影片中可減少了三分之一的頻寬,當中的視覺差別僅僅少量甚至不存在。
大多數高端數位影片格式採用這一比率,如:
- AVC-Intra 100
- Digital Betacam
- DVCPRO50及DVCPRO HD
- Digital-S
- CCIR 601 / 串列數位介面 / D1
- ProRes(HQ, 422, LT, and Proxy)
- XDCAM HD422
- Canon MXF HD422
4:2:1
編輯雖然此系統己在技術上定義存在,但只有非常少的軟、硬體編解碼器使用。Cb水平解析度為Cr的兩倍,以及亮度解析度的四分之一。這樣為證明了人的肉眼對於藍色和黃色的空間上敏感度,比紅色和綠色的弱。NTSC系統相似以上演算法,將藍色和黃色的解析度減弱,令其解析度比亮度為低。
4:1:1
編輯4:1:1色彩取樣中,水平色度解析度為四分之一,為全頻寬的一半。起初DV格式的4:1:1色彩取樣不被考慮用作廣播級用途,被低階及家用產品應用。[1][2]當代的DV格式(一些包括4:1:1色度抽樣)都被用作如電子新聞採訪等專業級用途。DV格式偶爾被用作數位電影攝影。
NTSC系統中,若亮度以13.5 MHz取樣,表示Cr及Cb的訊號都以3.375 MHz取樣,符合最高1.6875 MHz的奈奎斯特頻寬。而傳統「高端廣播級NTSC類比訊號編碼器」,在I/Q波段中只有分別1.5 MHz及0.5 MHz的奈奎斯特頻寬。不過在大部分器材中,尤其是廉價電視機及VHS/Betamax錄影機中,色度波段只有0.5 MHz的頻寬給Cr及Cb分量使用。所以儘管和全頻寬數位訊號比較,僅有四分之一的色度頻寬,其實DV系統提供了比高階NTSC色差類比規格更優質的色彩頻寬。
使用4:1:1色彩取樣的格式包括:
4:2:0
編輯4:2:0又稱I420。I420是YUV格式的一種,屬於planar format。4:2:0並不意味著只有Y,Cb而沒有Cr分量。它指的是對每行掃描線來說,只有一種色度分量以2:1的抽樣率儲存。相鄰的掃描行儲存不同的色度分量,也就是說,如果一行是4:2:0的話,下一行就是4:0:2,再下一行是4:2:0...以此類推。對每個色度分量來說,水平方向和豎直方向的抽樣率都是2:1,所以可以說色度的抽樣率是4:1。PAL格式和SECAM格式的色彩系統特別適合於用這種方式來儲存。絕大多數影片編解碼器都採用這種格式作為標準的輸入格式。對非壓縮的8位元量化的影片來說,每個由2x2個2行2列相鄰的像素組成的宏像素需要占用6位元組主記憶體。
對映:
碼流
Yo0 Uo0 Yo1 Yo2 Uo2 Yo3
Ye0 Ve0 Ye1 Ye2 Ve2 Ye3
將被對映為下面的兩行各四個像素:
[Yo0 Uo0 Ve0] [Yo1 Uo0 Ve0] [Yo2 Uo2 Ve2] [Yo3 Uo2 Ve2]
[Ye0 Uo0 Ve0] [Ye1 Uo0 Ve0] [Ye2 Uo2 Ve2] [Ye3 Uo2 Ve2]
使用這種方法的品質很接近於4:1:1,通常應用於下面的格式:
- 所有版本的MPEG,包括如DVD等MPEG-2成品(雖然有些MPEG-4 profile容許如4:4:4的更高品質採樣)
- PAL DV及DVCAM
- HDV
- AVCHD
- 最常見的JPEG/JFIF、H.261,及MJPEG成品
- VC-1
4:1:0
編輯這種格式雖然是存在的(也確實有些編解碼器支援這種格式),但是並沒有得到廣泛的應用,因為它在色度方面的解析度比傳統的VHS錄影帶還要差。這種方法對水平方向進行4:1的色彩採樣,對豎直方向進行2:1的色彩採樣。比起4:4:4,它的色度資料量僅僅是1/8大小。對非壓縮的8位元量化的影片來說,每個由4x2個2行4列相鄰的像素組成的宏像素需要占用10位元組主記憶體。
對映:
碼流
Yo0 Uo0 Yo1 Yo2 Yo3
Ye0 Ve0 Ye1 Ye2 Ye3
將被對映為下面的兩行各四個像素:
[Yo0 Uo0 Ve0] [Yo1 Uo0 Ve0] [Yo2 Uo0 Ve0] [Yo3 Uo0 Ve0]
[Ye0 Uo0 Ve0] [Ye1 Uo0 Ve0] [Ye2 Uo0 Ve0] [Ye3 Uo0 Ve0]
色彩抽樣實例
編輯4:2:0抽樣及還原實例
編輯- 注意4:2:0色彩抽樣為失真壓縮(lossy compression),無可避免地會損失一些資料,導致重建時有些許失真。
- 對RGB圖像做抽樣(壓縮)
- 基本思路(pseudo code)
- 輸入(input)一張RGB圖片。
- 將其轉成Y-Cb-Cr之格式。
- Y = 0.299*R + 0.587*G + 0.114*B
- Cb = -0.169*R + -0.331*G + 0.500*B
- Cr = 0.500*R + -0.419*G + -0.081*B
- 對Cb和Cr做抽樣動作,(2+0)/(4+4)=0.25,即只留下四分之一的資料量。可以考慮只留下偶數行列或奇數行列之資料。
- Y分量則保持不變,如此便完成抽樣。
- 基本思路(pseudo code)
- 將抽樣之資料還原
- 基本思路(pseudo code)
- 輸入經過4:2:0抽樣之YCbCr資料。
- 使用插值法(interpolation)來重建Cb和Cr的資料。
- 將YCbCr資料重新轉換回RGB。
- R = 1.000*Y + (-219/236311)*Cb+ (331234/236311)*Cr
- G = 1.000*Y + (-81219/236311)*Cb+ (-168766/236311)*Cr
- B = 1.000*Y + (418781/236311)*Cb+ (234/236311)*Cr
- 如此便完成4:2:0之重建,可輸出(output)圖像確認。
- 基本思路(pseudo code)
- 程式實例(matlab)
%此程式範例基於matlab語言編寫
%目的是將原圖像(pictureA)做4:2:0之色彩取樣
%再將取樣過後的資料做重建並輸出(pictureB)
clear all
picA=double(imread('pictureA.jpg')); %input pictureA, 轉成double格式
[ROW,COL,DIM] = size(picA); %提取SIZE
yA = picA(:,:,1) * 0.299 + picA(:,:,2) * 0.587 + picA(:,:,3) * 0.114; % pictureA RGB to YCbCr
cbA = picA(:,:,1) *-0.169 + picA(:,:,2) *-0.331 + picA(:,:,3) * 0.500;
crA = picA(:,:,1) * 0.500 + picA(:,:,2) *-0.419 + picA(:,:,3) *-0.081;
yC = yA;
cbC = cbA;
crC = crA;
for i=1:ceil(ROW/2) % 4:2:0 compress, cb cr只取偶數行列
cbC(i,:)=[];
crC(i,:)=[];
end
for i=1:ceil(COL/2)
cbC(:,i)=[];
crC(:,i)=[];
end
%完成4:2:0抽樣
%重建並輸出成pictureB
yB = zeros(ROW,COL);
cbB = zeros(ROW,COL);
crB = zeros(ROW,COL);
yB = yC;
for i=1:ROW
for j=1:COL
if rem(i,2)==0
if rem(j,2)==0
cbB(i,j)=cbC(i/2,j/2);
crB(i,j)=crC(i/2,j/2);
end
end
end
end
for i=1:ROW %還原row
if i==1
cbB(i,:)=cbB(i+1,:); %在首行則與第二行資料一致
crB(i,:)=crB(i+1,:);
elseif (rem(i,2)==1) & (i<ROW)
cbB(i,:)=(cbB(i+1,:)+cbB(i-1,:))/2; %缺少資料的奇數行利用隔壁之偶數行資料進行插值重建
crB(i,:)=(crB(i+1,:)+crB(i-1,:))/2;
elseif (rem(i,2)==1) & (i==ROW)
cbB(i,:)=cbB(i-1,:); %在末行則與隔壁行一致
crB(i,:)=crB(i-1,:);
end
end
for i=1:COL %還原col
if i==1
cbB(:,i)=cbB(:,i+1); %在首列則與第二列資料一致
crB(:,i)=crB(:,i+1);
elseif (rem(i,2)==1) & (i<COL)
cbB(:,i)=(cbB(:,i+1)+cbB(:,i-1))/2; %缺少資料的奇數列利用隔壁之偶數列資料進行插值重建
crB(:,i)=(crB(:,i+1)+crB(:,i-1))/2;
elseif (rem(i,2)==1) & (i==COL)
cbB(:,i)=cbB(:,i-1); %在末列則與隔壁列一致
crB(:,i)=crB(:,i-1);
end
end
YCCB(:,:,1)=yB; %重建YCbCr格式的pictureB
YCCB(:,:,2)=cbB;
YCCB(:,:,3)=crB;
RB = yB * 1 + cbB * -219/236311 + crB * 331234/236311; % pictureB YCbCr to RGB
GB = yB * 1 + cbB * -81219/236311 + crB * -168766/236311;
BB = yB * 1 + cbB * 418781/236311 + crB * 234/236311;
RGBB(:,:,1)=RB; %重建RGB格式的pictureB
RGBB(:,:,2)=GB;
RGBB(:,:,3)=BB;
image(RGBB/255) % SHOW
imwrite(RGBB/255,'pictureB.jpg') % output
參考資料
編輯- ^ Jennings, Roger; Bertel Schmitt. DV vs. Betacam SP. DV Central. 1997 [2008-08-29]. (原始內容存檔於2008-07-02). 外部連結存在於
|work=
(幫助) - ^ Wilt, Adam J. DV, DVCAM & DVCPRO Formats. adamwilt.com. 2006 [2008-08-29]. (原始內容存檔於2021-04-16). 外部連結存在於
|work=
(幫助)
Jian-Jiun Ding, Advanced Digital Signal Processing class note, the Department of Electrical Engineering, National Taiwan University (NTU), Taipei, Taiwan, 2020.