
快速查表法优化视频解码中YCbCr到RGB的转换
摘要
介绍视频处理过程中涉及到的两个颜色空间:RGB和YCbCr,以及
他们之间的转换。用查表法优化媒体播放软件中YCbCr到RGB的转换,
以达到提高转换速度,减少计算量,提高视频解码整体性能的Ifl的。
文中介绍的查表法兼顾了时间复杂度和空间复杂度。实验结果表明,
该方法在嵌入式媒体播放软件中的优化效果非常明显。
关键词:YCbCr;RGB;查表法;颜色空间

1.引言
计算机显示彩色基于RGB相加混色的原理,不管多媒体系统中采
用什么样的彩色空间表示,最后输出显示时一定要转换到RGB彩色空
间。在视频处理中,为了降低带宽和存储量,并与黑白电视视频机兼
容,包括MPEG4在内的多数视频压缩格式都基于YCbCr色彩模型。所以,
在经过视频解码后得到的YCbCr数据,必需要转换成RGB数据,以适合
显示屏显示。由于对每个象素点都要进行YCbCr到RGB的转换,计算量
非常大。特别是手持媒体播放设备,相对PC机,处理能力较弱,这就
需要一种较快速的转换方法。当用软件的方案来解决这一问题时,常
用查表法。因此,如何设计查询法,成为优化转换过程的关键。本文
就介绍了一种兼顾时间复杂度和空间复杂度的快速查表法。
2.颜色空间的介绍
颜色空间是颜色集合的数学表示。三种最流行的颜色模型是RGB(用
于计算机图形);YIQ,YUV,或YCbCr(用于视频系统)和CMYK(用于彩
色打印)。下面介绍其中的两个颜色空间:RGB颜色空间和YCbCr颜色
空间,以及他们之间的转换。
2.1 RGB颜色空间
RGB(红,绿,蓝)颜色空间广泛用于计算机图形。红,绿,蓝是三个
基本的相加色(通过他们的相加能形成所要的颜色),并且可以用一个
三维的笛卡尔坐标(如图】)表示。紫红绿

图1 RGB色彩立方体
RGB色彩立方体中,在从黑到自的对角线上,三个基本成分的值相等,
他表示变化的灰色级。在计算机图形中,RGB颜色空间是最流行的选
择,这是因为在彩色显示时用红,绿,蓝能组合得到任何期望的颜色。
选择RGB颜色空间可以简化系统的架构和设计。然而,在处理“真实
世界”的图像时,RGB并不是非常有效。要得到RGB色彩立方体中的任
何颜色时,RGB的三个分量需要相同的带宽。这样,帧缓冲对每个RGB
分l翟雹冒嗣圜疆固垡生董;丛蕉重垂鎏垡丝塑麴壁碹虫Σg垒g!型墨
Q里塑基送量就要有相同的象素深度和显示分辨率。并且,在RGB颜色
空间处理一幅图像通常不是最有效的方法。例如,修改给定象素点的
亮度或颜色,先将RGB的三个分量值从帧缓冲中读出来,计算出亮度
或颜色值,执行所要的修改,再将新的RGB值计算出来并写入帧缓冲。
如果系统将图像直接以亮度和颜色的格式存储,某些处理步骤会变得
更快。所以,许多视频标准使用亮度和两个色差信号。最常用的是
YUV,YIQ和YCbCr颜色空间。
2.2 YCbCr颜色空间
在开发世界范围的数字分量视频标准过程中,YCbCr颜色空间作为
ITU—R BT.601(或CCIR 601)的一部分而开发出来。与RGB颜色空间相
比,YCbCr用亮度和两个色差信号来表示颜色,YCbCr颜色空间是YUV
颜色空间的缩放和偏移。在YUV颜色空间中,Y表示亮度,U表示色彩,
V表示饱和度。而在YCbCr颜色空间中,Y表示亮度,Cb和Cr表示色度。
选择这样的表示方法是为了减少存储量和带宽。因为人眼对亮度的变

化比对色度的变化更敏感,所以减少带宽引起的颜色损失很小,人眼
几乎感觉不出来。人们发现60%~70%的亮度在绿色中。蓝色和红色
中亮度信息可以忽略,从而得到色度Cb和Cr。Cb反映的是RGB输入信
号蓝色部分与RGB信号亮度值之同的差异(B—Y),而Cr反映了RGB输入
信号红色部分与RGB信号亮度值之间的差异(R—Y)。因此,Cb和Cr提
供了色彩中的色调和饱和度,Y提供了色彩中的亮度信息。8一bit Y
值的定义范围是16~235;8 bit Cb和Cr值的定义范围是16~240,128
时等于0。因为人眼对Cb和Cr不太敏感,Cb和Cr的传输速率就没必要
和Y一样,这样就可以减少存储量和带宽,从而降低设计成本。
2.3 YCbCr到RGB的转换
在ITU—R BT.601中给出了8一bit YCbQ与8一bitRGB之间的关系式。
Y一0.299R7+0.587G7+0.11487
o一一0。172R7—0.339G7+0.51187+128
Cr一0.511R7—0.428G7—0.08387+128
R7一y+1.371(Cr一128)
G7一Y一0.698(Cr一128)~0.336(Cb—t28)
B7一y+1.732(Cb一128)
式中R7,G7,B7表示Gamma校正后的RGB值。由于YCbQ的定义范围,在
用上面的式子进行YCb—Cr与R’G’B7之间的转换时,得到的R7G’B’
的范围是16~235,当由于视频处理和噪声的影响,YCbCr的值超出他
们的定义范围时,R『G787的值会超出16~235。通常,在计算机上用
8一bit来表示一个无符号整数1 68时,他的范围是0~255。上面的

YCbCr与R’G 7B’之间的转换公式直接用于计算机中的YCbCr与R7G’
B 7之间的转换是不合适的。对上面的公式进行简单的变换就可以得
到适合于计算机系统的转换公式(也是文中使用的公式)。
Y一0.257R7+0.504G’+0.098B7+16
o=一0.148R7—0.291G7+0.43987+128
Cr一0.439R7—0.368G7—0.07187+128
R7—1.164(y一16)+1.596(Cr一128)
G7—1.164(y一16)一0.813(Cr一128)一
0.391(o一128)
B7—1.164(Y一16)+2.018(Cb一128)
用上面的公式进行转换时,YCbCr和R7G’B’的范围都是0~255。计
算得到的YCbCr与R 7G787的值也要限制在0~255之间,避免溢出。当
YCbCr和R’G’B 7的值小于0时,取为0;大于255时,取为255。
3.快速查表法的实现
在基于嵌入式Linux操作系统和Intel⋯PXA255处理器的媒体播放软件
中实现快速查表算法。考虑到嵌入式系统本身的特点,算法要兼顾时
间复杂度和空间复杂度,故快速查表法的实现如下。
3.1查表法的设计
用公式直接计算YCbCr到R7G7B’的转换,需要7次乘法,11次加法。
当然,可以将1.164*(y一16),Cr一128,C6—128只计算一次,这样
也要5次乘法,7次加法。在实际的转换中,对每个象素点都要进行这
样的运算,计算量是很大的,需要一种快速有效的方法,下面介绍的