在数位图像处理领域中,色度抽样是指在表示图像时使用较亮度信息为低的分辨率来表示色彩()信息。当对模拟分量视频或者YUV讯号进行数字抽样时,一般会用到色度抽样。
由于存储及发送的限制,信号处理中大多数会偏向被减少(或被压缩)以减低负荷。由于人眼对色度的敏感度不及对亮度的敏感度,图像的色度分量不需要有和亮度分量相同的清晰度,所以许多视频系统在色差通道上进行较低(相对亮度通道)清晰度(例如,抽样频率)的抽样。这样在不明显降低画面质量的同时降低了影像信号的总带宽。因抽样而丢失的色度值用内插值,或者前一色度值来替代。在压缩影像中,以4:2:2 Y'CbCr作例,它只需R'G'B'(4:4:4)三分之二的带宽。带宽的减少在肉眼上几乎没有影像上差别。
由于人类的视觉系统对颜色的位置及移动不及对亮度敏感,带宽上可以以存储较多的亮度细节、较少的色度细节作优化。在一般影像观看距离时,色度细节在较低的采样率下仍不引起可察觉的损失。于视频系统中,可以以不同颜色分部的取样而达成以上结果。视频信号可分别为一个亮度分量(Y')及两个不同颜色分量(色度)。
色度抽样是颜色科学的分支,在颜色科学亮度及色度分量是以一个伽玛校正(三重刺激)的R'G'B'分量的加权总和形成,代替线性(三重刺激)的R'G'B'分量。因此,明度及颜色细节并非完全互相独立。在亮度及色度分量之间会存在着一些明度及颜色信息的“溢出”("Bleeding")现象(如下图所示)。此误差尤其于高饱和的颜色情况下出现,其现象在彩条测试图(经色度抽样)中洋红色及绿色之间会轻微显著。在工程学的概算下(即是将“伽玛校正”及“组成加权总和”两个步骤逆向进行),使色度抽样方式更容易实行。
(例如4:2:2),形容一个以J个像素宽及两个像素高的概念上区域,有时候会以四分比值表示(例如4:2:2:4)。依序列出为:
以下链接中的一幅教学图片解释了不同抽样系统的运作:http://lea.hamradio.si/~s51kq/subsample.gif (页面存档备份,存于互联网档案馆) (数据源:"Basics of Video" )以及 (页面存档备份,存于互联网档案馆)由Douglas Kerr所著的"Chrominance Subsampling in Digital Images" (页面存档备份,存于互联网档案馆)。
以上例图仅给出理论上的示例。以及注意图中并没有表明任何色度过滤(防止叠影的措施)。
在计算与4:4:4抽样(或4:4:4:4)有关的带宽系数时,把各系数加总再除以12(当有Alpha时除以16)。
在比较图像质量时,这三个值之间的比值才是重要的,所以4:4:4可以简化为1:1:1;但是习惯上亮度样本的数量值总为4,其他两个值依此类推。
有时抽样率为四分比值,如4:2:2:4。这时第四个值是调制通道的抽样频率比值。事实上,因为在调制应用中非常需要高质量图像,所以这个值在任何情况下都为4。
每三个Y'CbCr分量都有相同抽样率。此系统有时候用作高阶底片扫描仪及电影后期制作中。通常会以两条SDI通道连线来承载4:4:4带宽信号:通道A会盛载4:2:2的信号,通道B则会承载0:2:2的信号,合并成4:4:4信号。
需要注意的是,有时候"4:4:4"也表示在RGB色度空间中,全部没有作任何色度抽样。如HDCAM SR等格式可以以双通道HD-SDI记录4:4:4 R'G'B'信号。
每个色差通道的抽样率是亮度通道的一半,即水平色差清晰度分半。这样从无压缩视频中可减少了三分之一的带宽,当中的视觉差别仅仅少量甚至不存在。
大多数高端数字视频格式采用这一比率,如:
虽然此系统己在技术上定义存在,但只有非常少的软、硬件编解码器使用。Cb水平清晰度为Cr的两倍,以及亮度清晰度的四分之一。这样为证明了人的肉眼对于蓝色和黄色的空间上敏感度,比红色和绿色的弱。NTSC系统相似以上算法,将蓝色和黄色的清晰度减弱,令其清晰度比亮度为低。
4:1:1色彩取样中,水平色度清晰度为四分之一,为全带宽的一半。起初DV格式的4:1:1色彩取样不被考虑用作广播级用途,被低端及家用产品应用。当代的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又称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
将被映射为下面的两行各四个像素:
使用这种方法的质量很接近于4:1:1,通常应用于下面的格式:
这种格式虽然是存在的(也确实有些编解码器支持这种格式),但是并没有得到广泛的应用,因为它在色度方面的清晰度比传统的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
将被映射为下面的两行各四个像素:
色彩抽样实例
4:2:0抽样及还原实例
- 注意4:2:0色彩抽样为有损压缩(lossy compression),无可避免地会损失一些资料,导致重建时有些许失真。
%此程式範例基於matlab語言編寫%目的是將原圖像(pictureA)做4:2:0之色彩取樣%再將取樣過後的資料做重建並輸出(pictureB)clear allpicA=double(imread('pictureA.jpg')); %input pictureA, 轉成double格式 = size(picA); %提取SIZEyA = picA(:,:,1) * 0.299 + picA(:,:,2) * 0.587 + picA(:,:,3) * 0.114; % pictureA RGB to YCbCrcbA = 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,:)=; endfor i=1:ceil(COL/2) cbC(:,i)=; crC(:,i)=; end%完成4:2:0抽樣%重建並輸出成pictureByB = 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 endendfor 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,:); endendfor 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); endendYCCB(:,:,1)=yB; %重建YCbCr格式的pictureBYCCB(:,:,2)=cbB;YCCB(:,:,3)=crB;RB = yB * 1 + cbB * -219/236311 + crB * 331234/236311; % pictureB YCbCr to RGBGB = yB * 1 + cbB * -81219/236311 + crB * -168766/236311;BB = yB * 1 + cbB * 418781/236311 + crB * 234/236311;RGBB(:,:,1)=RB; %重建RGB格式的pictureBRGBB(:,:,2)=GB;RGBB(:,:,3)=BB;image(RGBB/255) % SHOWimwrite(RGBB/255,'pictureB.jpg') % output