APP下载

H.264色度分量插值算法的速度优化

2010-08-09曾嘉亮

电视技术 2010年12期
关键词:色度插值乘法

曾嘉亮

(汕头职业技术学院 机电工程系,广东 汕头 515078)

责任编辑:哈宏疆

1 引言

随着H.264标准在视频压缩领域日益广泛的应用,在嵌入式系统中实现H.264的实时编解码器具有越来越重要的实用意义,这一趋势对编、解码程序的执行速度提出了更高的要求。

由于H.264运动补偿的插值算法已经标准化,其速度优化的必要性往往被忽视,主流的开源编解码器[1-3]一般直接在C语言层面上实现标准化的插值公式。

事实上,通过对插值算法的详细分析发现,至少在色度插值算法上可以进行效率可观的优化。

2 标准化的H.264色度插值算法

与传统的视频压缩标准相比较,H.264的运动补偿机制支持更高精度的亚像素插值,最高可达1/4亚像素精度。

色度分量的水平、垂直分辨力是亮度分量的1/2,因此,亮度分量的1/4亚像素插值对应到色度分量,就需要进行1/8亚像素插值。H.264标准规定对色度分量的插值统一采用双线性插值算法[4-7],利用4个整数坐标处的像素值插值得到。如图1所示。

H.264标准并且给出了由4个整数坐标处的像素值A,B,C,D插值生成任意1/8位置处的新像素值G的公式[4]

式中:dx和dy是色度块运动矢量的水平、垂直分量,其值域均为[0,7];round()函数表示对括号内的结果进行四舍五入操作。

由于色度插值是以块 (宏块或其子块)为单位进行的, 对于同一图像块而言,4个插值系数 Ca=(8-dx)(8-dy),Cb=dx(8-dy),Cc=(8-dx)dy 和 Cd=dxdy 是相同的,因此对整个块所有像素做插值前,只需计算一次系数。

为便于描述,把标准化的色度分量插值算法的主要步骤抽象为如图2所示代码。

图中式(2)是标准H.264编解码器对色度插值的实际动作,也是需要改进速度的核心步骤。

3 H.264色度插值算法的速度优化

3.1 基于统计特性的速度优化

由式(1)易知,若 dx=0,则有 Cb和 Cd为 0;若 dy=0,则 Cc 和 Cd 为 0;若 dx=dy=0,则 Cb,Cc,Cd 均为 0。

在这3种dx或dy为0的特殊情况下,式(2)中的乘法操作的数目均可大大减少,从而提高运算速度。事实上,如下文所述,经过精心设计后,在这3种特殊情况下可以不用任何乘法实现式(2)的等价运算。

下一个问题是——上述3种特殊情况的色度块数量所占的比例是多少。因为如果特殊情况的比例太小,那么对于整体图像的速度优化便没有太大的意义。

表1给出了对3个标准测试视频序列压缩后码流的统计结果,表中的3个H.264码流均是经过主流编码器[3]压缩产生的,每个码流均包含300帧图像,且量化参数QP均为26。

表1 dx或dy为0的色度块比例统计表

统计结果表明,dx或dy为0的色度块数目,在总色度块数占据相当大的比例。因此,对这3种特殊情况进行分别处理,对于提高运算速度具有重要的现实意义。

3.1.1 dx和dy均为0的优化

这种情况下,Cb=Cc=Cd=0,而Ca=64。将4个系数代入式(1),得

对比式(2)和(3),不难看出,对于同一色度块的所有插值像素而言,式(3)所需要的仅仅是直接将参考图像像素A的值赋予当前待插值像素G,比式(2)减少了4个乘法、4个加法和一个移位操作,极大地提高了运算效率。

3.1.2 仅dx为0的优化

此时,Cb=Cd=0,Ca=8(8-dy),Cc=8dy。 代入式(1)并化简,得

由于 C,A 的取值范围在[0,255]之间,因此(C-A)的值在[-255,255]之间,共511种可能情况;而dy的值在[1,7]间,有 7 种可能。

由上述分析,可以为式(4)中的 round([(C-A)dy]/8)这一项,构建一张数据查找表(Look Up Table,LUT),通过查表来加速插值操作,见

式中:CHROMA_MC_LUT_1是一张二维数据表,填入dy和(C-A)即可得到对应的 round([(C-A)dy]/8)的值。

对比式(2),式(5)用 2 个加(减)法、1 个查表代替了式(2)的4个乘法、4个加法和一个移位操作,较大地提高了运算效率。

3.1.3 仅dy为0的优化

将dy=0代入式(1)并化简,得

与 3.1.2 节同理,(B-A)的值在[-255,255]之间,dx 的值在[1,7]间,一样可以通过查表来加速此种情况的插值操作,见式(7)

式(7)同样是用2个加(减)法、1个查表代替了式(2)的4个乘法、4个加法和一个移位操作,实现了加速。

3.2 常规情况的优化

即使对于dx,dy均非0的情况,式(2)也仍然有优化的余地。图1所示G即为这种常规情况。

3.2.1 针对双线性插值算法原理[6]的优化

由图1易知,E相对于A和B,F相对于C和D,均满足3.1.3节所述的dy为0的情况,即

而G相对于E和F满足3.1.2节所述的dx为0的情况,即

可见,dx,dy均非0的情况下仍然可以通过查表操作来减少乘法运算。

理论上,式(8)(9)(10)联立的运算结果与式(1)的结果是等价的。但是实际上,由于E,F在求取过程中各自经过了一次舍入操作,所以式(10)中的G经过了2重舍入运算,导致在某些情况下与式(1)中的插值结果会有误差。

解决问题的办法是避免2重舍入。将等式(8)左、右两侧均乘以8,便可以消去舍入运算round()

同理,式(9)可以转换为

由此得到新的插值公式

式(11)(12)(13)联立的运算结果,与式(1)不管是在理论上还是实践上都是等价的。

对式(11)而言,由于A是非负整数,8A可以通过对A左移3位得到,从而减少了一次乘法。至于(B-A)dx这一项,则必须通过预先建立查找表的方法来避免乘法操作。

式(12)的优化方法与式(11)相同。

对式(13),8·8E可以通过对8E左移3位得到。而对(8F-8E)dy这一项,由于可能的结果太多,构建数据查找表是不现实的,因此只能在程序中直接进行乘法运算。

3.2.2 针对块操作特点的优化

前已述及,色度插值是以块为单位进行的,所以上述的所有优化操作都是在一个像素矩阵内循环进行的。

设图像中坐标为(x,y)处插值像素为G0,其2个插值源数据分别为 E0和 F0;G0正下方的(x,y+1)处插值像素为G1,其2个插值源数据分别为E1和F1。

观察图1不难发现:E1=F0。推广到块中的一行,就是:当前行的所有G对应的F,刚好是下一行所有G对应的E。

这一发现使得对每个插值像素的E,F计算量可以减少50%——只需在插值循环开始前预先计算下一行的所有像素的8E。具体操作见程序清单2。

综合3.2.1节和3.2.2节所述,即使对dx,dy均非0的情况,也可以进行速度优化。图3所示的代码直观说明了如何对一个色度块执行这一优化过程。

在程序清单2中,CHROMA_MC_LUT_2是为了减少乘法操作而构建的数据查找表,用于查找式(11)的(B-A)dx项以及式(12)的(D-C)dx项。

4 色度插值速度优化的整体操作流程

图4给出了前述的速度优化操作的整体流程图。

5 实验结果

表2列出了加速优化方法与标准方法的执行速度对比实验数据。

表2 速度对比实验数据表

该实验数据是以主流解码器[2]为基础,对与表1相同的3个H.264标准码流进行解码得到的。执行解码程序的计算机采用Intel Celeron M 1.5 GHz CPU,896 Mbyte内存。

实验数据表明:在解码结果完全一致的情况下,优化后的插值方法的执行效率比标准化插值方法提高了13%~25%。

6 结论

笔者通过对H.264色度插值标准公式以及双线性插值算法的详细分析,提出了根据运动矢量的值将插值情况进行详细分类,再针对每一类的具体情况进行特殊处理,以加速插值操作的方法;并在此基础上结合色度插值的块操作这一特性,进一步提高了算法的执行速度。

实验数据表明,在解码结果完全一致的情况下,该方法的执行速度比标准化方法有明显的提高。

[1]X264 software[EB/OL].[2010-02-03].ftp://ftp.videolan.org/pub/videolan/x264/snapshots.

[2]FFMPEG software[EB/OL].[2010-02-03].http://ffmpeg.org.

[3]T264 software[EB/OL].[2010-02-03].http://sourceforge.net/projects/t264/.

[4]RICHARDSON I E G.H.264 and MPEG-4 Video Compression[M].Hoboken,NJ:John Wiley&Sons Ltd.,2003:159-223.

[5]WIEGAND T,SULLIVAN G J,BJøNTEGAARD G, et al.Overview of the H.264/AVC video coding standard[J].IEEE Trans.Circuits And Systems for Video Technology,2003,13(7):560-576.

[6]胡力,王峰,郑世宝.H.264中1/4精度像素插值算法的一种硬件实现架构[J]. 电视技术,2005,29(10):14-17.

[7]章毓晋.图像工程(上册)图像处理[M].2版.北京:清华大学出版社,2006:73-76.

猜你喜欢

色度插值乘法
算乘法
我们一起来学习“乘法的初步认识”
《整式的乘法与因式分解》巩固练习
把加法变成乘法
基于Sinc插值与相关谱的纵横波速度比扫描方法
基于改进色度模型的非接触式心率检测与估计
景德镇早期青白瓷的器型与色度
一种改进FFT多谱线插值谐波分析方法
基于四项最低旁瓣Nuttall窗的插值FFT谐波分析
如何提高苹果的着色度