Chinaunix首页 | 论坛 | 博客
  • 博客访问: 392542
  • 博文数量: 200
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-07 12:12
文章分类

全部博文(200)

文章存档

2015年(2)

2013年(198)

分类: LINUX

2013-04-12 10:23:04

原文地址:视频之三:颜色空间 作者:leon_yu

颜色的表达有多种不同的方式,每一种颜色系统所适合的用途都各不相同。最基本的一种表达方式为 RGB 颜色空间。 

RGB 代表“红-绿-蓝,”它是相机传感器和计算机图形显示方面常用的一种颜色系统。由于这三种原色相加起来可以形成白光,故可以通过将各原色按不同比例进行调和的办法来形成可见光谱区的大多数颜色。RGB 是所有其他颜色空间的基础,在计算机图形学中,它是颜色空间的首选。 

Gamma 校正 

    在处理与颜色空间有关的问题时,“Gamma(γ)”是一种需要弄懂的关键现象。该术语描述了人们对亮度的感受和显示本身存在的非线性。请注意,这种现象表现在两方面:人眼对亮度的感受是非线性的,而物理输出设备(例如 CRT LCD)对亮度的显示也是非线性的。人们发现,可谓巧合的是,人的视觉对亮度的灵敏度特性几乎恰好与 CRT 的输出特性相反。 

    换句话说,显示器的亮度大约与输入的模拟信号电压的γ次方成正比。在 CRT或者 LCD 显示器上,该值一般为 2.2~2.5。因此,相机的预补偿功能,是让 RGB的量值按照 1/γ次方的关系来变化。 

该效应所带来的影响是,视频摄像机和计算机图形学程序,通过一种被称为“Gamma 校正”的流程,可以预先对其 RGB 输出流进行预校正,以便补偿所针对的显示器的非线性,并就眼睛实际感受场景的方式形成一种有现实意义的模型。图 1 示出了这样一种流程。 


经过 Gamma 校正后的 RGB 坐标被称为 RG空间,其中亮度值 Y 可以从这些座标中提取出来。严格来讲,“Luma”一词应该仅指这类经过“Gamma 校正”的亮度值而真正的“亮度(luminance)”Y 是一个颜色科学方面的术语,它是从 RG B 的加权和(未经过 Gamma 校正)所获得的。 

 

在本系列文章中,当我们谈论 YCbCr RGB 颜色空间时,我们是指经过 Gamma校正的分量,换句话说,YCbCr 或者 RGB’。

虽然 RGB 通道格式是呈现现实世界颜色的一种自然而然的方案,但 3 个通道中的每一个都与另外两个高度相关。你独立观看一幅特定图像的 RG B 通道,就可以发现这一点——你在每个通道中都能感受到整幅图像。另外,RGB 并非图像处理的最佳选择,因为如果要变动一个通道,则也必须在另外两个通道进行更改,而且每个通道的带宽相同。 

为了减少所需要的传输带宽并提高视频压缩比,人们提出了其他的颜色空间方案,这些变量是高度非相关的,从而能提供优于 RGB 的压缩特性。其中最流行的一些方案——YPbPrYCbCr YUV——全都是将亮度信号分量与两个色度分量分离开。这种分离运算是借助等比例缩放的色差因子(B’‐Y’)与(R’‐Y)来实施的。Pb/Cb/U 等项对应着(B’‐Y’)因子,Pr/Cr/V 等项对应于(R’‐Y’)参数。YPbPr 用于分量化的模拟视频中,YUV 则适用于复合的 NTSC PAL 系统,YCbCr 则与分量化数字视频有关。 

亮度和色度信息的分离,可以节省图像处理带宽。另外,正如我们马上就会看到的那样,我们可以通过子采样的方法,在视觉效果不会出现较大损失的前提下,大大减小色度信号带宽。这对于需大量处理视频数据的系统来说,是一个受欢迎的特色。 

作为在两个颜色空间之间进行转换的一个实例,如下的方程示出了如何在YCbCr RGB’颜色空间的 8bit 表示法之间进行转换的方法,式中,Y’,R’,G   B’通常的变化范围是 16235,而 Cr  Cb 的变化范围是 16240 

色度子采样

由于人眼的杆状细胞要多于锥状细胞,故对于亮度的敏感能力要优于对色差的敏感能力。幸运的是(或者事实上通过设计可实现的是),YCbCr  颜色系统允许我们将更多的注意力投向 Y,而对 Cb Cr 的关注程度不那么高。于是,通过对这些色度值进行子采样的方法,视频标准和压缩算法可以大幅度缩减视频带宽 

在对该问题进行进一步讨论之前,让我们先解析一些术语。假设在进行子采样前,我们拥有一路全带宽的 YCbCr 流,即视频源产生了一路像素分量构成的数据流,其形式如图 2a 所示。这被称为 “4:4:4 YCbCr”。这一表示方法看起来甚为离奇,但是可以简单的解释如下:第一个数始终是‘4’,在历史上对应着亮度采样频率与 NTSC 彩色子载波频率之比。第二个数字对应着在某条给定的水平线上的亮度和色度之比:如果并未针对亮度信号来对色度进行子采样,则该数为‘4’。第三个数,如果与第二个数相同的话,则意味着没有垂直方向上的色度子采样。另一方面,如果它等于 0,则两条线之间存在一次 2:1 的色度子采样。于是,4:4:4 意味着在每条线上的像素都有自己独有的 YCr Cb 信号分量。 现在,如果我们通过在水平方向上对色度信号进行因数为 2 的子采样,对一个4:4:4 YCbCr 信号进行滤波,于是将得到 4:2:2 YCbCr。‘4:2:2意味着在给定的视频行上对应 2 个色度值有 4 个亮度值。每个(Y,Cb)  或者  (Y,Cr)对都代表着一个像素值。另一种表述方法是:一个色度信号对(chroma pair)在空间上与每隔一个亮度所选取的亮度值相重合,如图 2b 所示。无论您相信与否,  若将 4:2:2  YCbCr与对应  4:4:4 YCbCr  原始信号进行比较,则会发现在图像质量方面出现的损失很小,虽然它相对于 4:4:4  YCbCr 而言在带宽方面缩小了 33%。正如我们马上要讨论的那样,4:2:2 YCbCr  ITUR BT.601 视频推荐方案的一个基础,它是数字视频信号在不同的子系统组件之间进行传输时最常用的一种格式。
 


应注意的是,4:2:2 并非是唯一的色度子采样方案。图 3 示出了得到广泛应用的其他一些方案。例如,我们可以如图 3c 所示的那样,以比例因数“4”来对一个 4:4:4 YCbCr流的水平行上的色度进行子采样,从而得到 4:1:1 YCbCr 流。这里,色度对在空间上与每个以为间隔的亮度值相一致。这一色度过滤方案可以节省 50%的带宽。4:1:1 YCbCr 是一种在视频压缩算法的输入和视频解压缩算法的输出方面广受欢迎的格式。 

另外一种在视频压缩/解压缩方面得到广泛应用的算法是 4:2:0  YCbCr,由于几个原因,它要比我们已经阐述过的其他方案更为复杂。其中一个原因是,Cb  Cr 分量均在水平和垂直方向上受到了因数为 2 的子采样。这意味着我们不得不存储多条视频线,才能产生出该子采样流。而且,对应 4:2:0  YCbCr 信号还存在两种广受欢迎的格式。MPEG2 压缩使用了一种水平方向上共位的方案(图 3d,顶图),而 MPEG1 JPEG 算法所采用的格式则是一种色度信号位于 Y 采样之间的中点上的方案(图 3d,底图)。 


数字视频

在上世纪 90 年代中期以前,几乎所有的视频都采用了模拟格式。正是在那之后,诸如 MPEG2 压缩的出现、互联网上流媒体的繁荣以及 FCC 采用“数字电视(DTV)”标准等推动力形成了一场“完美风暴”,将数字视频表现方式的优点呈现给整个视频世界。这些超越模拟信号的优点包括:更好的信噪比性能,更好的带宽利用(可以将若干路数字视频通道融入每个现有的视频频道中),而且通过数字压缩技术来减少存储空间。 

从根本上来说,视频的数字化同时包括了对模拟视频信号的采样和量化。在视频帧的 2D 框架之中,采样最终体现为将栅格状的图像空间划分为小块的区域,并根据每个区域中颜色空间分量的强度来为其分配相对幅值。请注意,模拟视频信号已经被从垂直方向上(离散的多行扫描)和时间上(每秒分立的多帧图像) 做了采样。 

量化是指在采样过程中设法确定这些离散幅值的过程。8bit 视频是消费类应用中常用的格式,在每个颜色通道(RGB 或者  YCbCr)中,0 代表最暗(全黑),255 代表最亮(白)。不过,应该指出的是,每单色通道 10bit  12bit 的量化水平,也正在迅速融入主流的视频产品中,从而带来更高的精度,这对于避免其截断误差从而降低接收到的图像噪声来说,是非常有效的。 

数字视频的出现,在很大程度上为 NTSC PAL 系统接口的标准化提供了极佳的机会。当 ITU(国际电信联盟)开会以确定关于数字视频标准方面的推荐方案时,它把重点放在如何在 NTSC PAL 格式之间实现高度的共享性,这样使得两种标准都可以采用同一种编码格式。   

他们确定了 2 种独立的推荐方案-ITUR    BT.601 ITUR  BT656。这两种方案合起来,就定义了一种结构,该结构能让不同的数字视频系统部件实现互操作。鉴于 BT.601 定义了数字视频传输所用的参数,BT.656 定义了接口本身。 

ITU-R BT.601(前  CCIR-601

BT.601 规定了对视频信号进行数字化编码的方法,它利用了 YCbCr 颜色空间,以更好地利用通道带宽。它建议将 4:2:2 YCbCr 作为广播视频的首选格式。同时也提供了同步信号(HSYNCVSYNCFIELD)和时钟信号,以便划定有效视频区的边界。图 4 示出了同步信号、时钟和数字信号之间典型的时序关系。


每个 BT.601 像素分量(YCr   Cb)被量化为 8 或者 10bit 信息,NTSC PAL

的有效视频画面中每行有 720 个像素  。不过,它们在垂直分辨率方面存在差异。30 /s NTSC 525 行(线)(包括垂直消隐或者回扫区),而通过在 PAL 帧上添加 100 条线,或者说,使之总共达到 625 条线,使 PAL 25 /s 的速率适应同样的标准。 

BT.601规定Y值的额定值范围从16(全黑)一直到235(全白)。颜色分量CbCr则从16240,但128的量值对应着无颜色。有时,由于噪声或者截断误差的存在,一个量值可能会超出额定值边界之外,但永远不会取值到0或者255

ITU-R BT.656 (前  CCIR-656

BT.601规划了对视频进行数字编码的方法,而BT.656则实际定义了实施BT.601所必需的物理接口和数据流。它同时定义了位并行和位串行模式。位并行模式只需要27MHz的时钟(在NTSC 30  /s条件下)以及810条连线(具体取决于像素的分辨率)。所有的同步化信号都嵌入到数据流中,因此无需额外添加硬件连线。

位串行模式只需要在单个通道上传输一路复用化的10bit/像素串行数据流,不过它需要运用复杂的同步化、频谱整形和时钟恢复调理等技术手段。此外,其位时钟速率接近300MHz,因此要在很多系统中实施基于采用串行位形式的BT.656是极富挑战性的任务。从我们的目标出发,我们将把注意力仅放在位并行模式上。

5和图6示出了ITU-R    BT. 656中分别针对525/60 NTSC)和625/50 PAL)系统的帧划分方法和数据流的特性


BT.656标准中,水平(H)、垂直(V)和场(F)信号作为嵌入到视频数据流中的一串字节来发送,这一串字节构成了一个控制字。有效视频起点(SAV)和有效视频终点(EAV)信号指示了每行读入的数据单元的开始和结束。SAV出现在H发生1-0切换时,EAV出现在H发生0-1切换时。整个视频场由有效的视频+水平消隐(EAVSAV代码之间的空间)以及垂直消隐(V1的空间)组成。

视频的场从F位的切换开始。“奇数场”由F0表示,而F1则表示偶数场。逐行扫描的视频并不区分场1和场2,而隔行扫描的视频则要求专门对每个场进行独立的处理,因为每个场交替的扫描行组合起来最终形成实际的视频图像。

7更为详细地示出了SAVEAV代码。请注意,视频数据有一个由三个字节构成的前导码8bit视频是0xFF,  0x000x00,而10bit视频则是0x3FF,  0x000, 0x000),后面跟随着XY状态字,这个字除了包含F (场), V (垂直消隐)    H (水平消隐)位之外,还包含了4个保护位,以实现单位错误的检测和纠正。请注意,FV只能作为EAV序列的一部分来变化(即,从H = 0切换到H = 1)。此外,请注意,对于10bit视频来说,增加的两位实际上是最低位,而不是最高位。



图中:8bit Data——8位数据,10bit Data——10位数据

各个数位的定义如下:

? F = 0 for Field 1                            

? F = 0  ,场  1

? F = 1 for Field 2                            

? F = 1      2

? V = 1 during Vertical Blanking          

? V = 1  垂直消隐期间

? V = 0 when not in Vertical Blanking        

? V = 0    未在垂直消隐期内

? H = 0 at SAV                                                                       

? H = 0    @ SAV

? H = 1 at EAV                                                                      

? H = 1 @ EAV

? P3 = V XOR H      

? P2 = F XOR H

? P1 = F XOR V

? P0 = F XOR V XOR H

垂直消隐间隔(V1的时间)可以被用来发送非视频的信息,如音频、文字电视广播(teletext)、字幕(closedcaptioning)或者甚至交互电视应用所需的数据。BT.656借助辅助性的数据包实现这些功能。这些辅助性数据包并未采用通常在控制代码前的那些“0xFF, 0x00, 0x00前导码,而是以“0x00, 0xFF, 0xFF”前导码为开头。 

假定并不发送辅助数据,则在水平和垂直消隐间隔期间,(Cb, Y, Cr, Y, Cb, Y, …)流是(0x80, 0x10, 0x80, 0x10, 0x80, 0x10…)。另外,请注意,由于0x00    0xFF等量值专门用于控制前导码,故不能用作有效视频流的一部分。在10bit系统中,(0x000    0x003)以及(0x3FC  0x3FF)等量值也都被专门留出,以免给8bit的视频引用造成问题。 

上述就是我们关于数字视频的概念介绍。在下一小节中,我们将把注意力放在如何从系统角度来考察视频技术上,讨论视频流是如何进入和输出嵌入式系统的。 

阅读(1675) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~