H.264/AVC编码器分数像素的插值算法优化

Video.com.cn(视频网) 2007-08-06 10:23 来源: C114

   摘要:文中基于H.264/AVC视频编码器的系统芯片设计,对分数像素运动估计(FME)的亮度像素插值算法进行了简化调整;使用JM7.3参考代码模拟了不同分数像素插值算法对编码器性能的影响,通过分析这些插值算法的编码效率和芯片上的实现代价,提出了可以有效节约硬件实现代价的分数像素插值算法。试验结果表明优化后的插值算法可以使分数像素插值结构的硬件实现代价降低30%以上,而平均编码峰值信噪比(PSNR)和压缩率只有很小的损失。

    在设计H.264/AVC视频编码器系统芯片的分数像素运动估计(FME)模块中,为了实现像素的可变块运动估计,像素块的匹配代价SATD(SumofAbsolutehadamardTransformedDifferences)计算是以4×4的最小像素块为基本处理单位的[1]。如果在芯片设计中直接采用H.264/AVC视频编解码标准推荐的6阶滤波器(6-tapFiniteImpulseResponseFilter)来实现参考亮度像素块的1/2像素插值;每完成一个1/2像素的插值就得读入同一行/列上6个相邻像素来进行插值运算[2,3]。那么,分数像素运动估计模块要完成一个4×4当前图像块的1/2像素匹配运算,1/2像素插值单元就得读入一个10×10的参考亮度像素块进行插值运算,这样做的结果势必会增加参考像素存储器的访问带宽、增加插值单元中数据寄存器的数目、降低插值单元的运算效率;加之,6阶插值滤波器自身的硬件结构就比较复杂、实现代价高,这样也会进一步增大分数像素运动估计模块的芯片面积,所以在H.264/AVC编码器的系统芯片设计过程中,就完全有必要根据硬件实现编码运算的特点,在编码器编码性能和硬件实现代价之间求取合理的折中;对亮度像素的插值算法和实现结构做出必要的调整和优化[4]。为此,文中发挥编解码软件实现算法的灵活性;使用H.264/AVC编解码标准的JM7.3参考代码,对4种分数像素插值算法分别进行了编码性能模拟,并且进一步分析了各自的硬件实现代价。据此,对H.264/AVC编码芯片中分数像素插值单元的优化设计问题进行了探讨。

    1、分数像素的插值算法调整

    1.1插值算法的调整

    在H.264/AVC视频编解码标准中,为了得到良好的编解码性能;在分数像素运动估计(FME)过程中,使用了6阶滤波器来完成亮度像素的1/2插值、简单的线性内插值来完成亮度像素的1/4插值[1,2,5,6]。使用这样的插值方法,虽然可以获得较高的编码峰值信噪比(PSNR)和编码压缩率,可是在H.264/AVC编码器芯片的设计中,还是希望在不显著降低编码器性能的前提条件下,能够对分数像素插值算法做出能节约硬件实现代价和便于硬件实现的调整。为此,我们根据参考文献[7]提出了表1所示的3种亮度像素的简化分数插值方法;并通过参考软件的编码模拟来分别考察这些插值方法对编码器性能的影响。

    表1中的方法4就是H.264/AVC视频编解码标准[1]中推荐的分数像素插值方法。方法1~3都是在此基础上针对硬件实现分数像素插值的调整算法。其中的方法1和方法3,对于1/2像素和1/4像素插值都采用了相同的插值算法,这样调整插值结构的初衷在于:可以为芯片中1/2像素和1/4像素插值运算提供结构复用的可能,使插值的硬件结构更为简单。当然,这些对于分数像素运动估计(FME)模块的插值算法调整还得必须同时兼顾编码器的编码性能[8],只有既有利于硬件实现而又不显著降低编码性能的算法调整才是有价值的。

    1.2分数像素插值方法的编码性能模拟

    对表1中的4种插值算法,用H.264/AVC编解码标准的参考代码JM7.3进行软件的编码性能模拟,用于编码性能模拟的8个测试序列参数为:(176×144,QCIF):共39帧(P帧:20帧);测试序列文件大小:1482624字节(YUV格式);编码参数设置:(搜索范围:16;参考帧数:5帧;编码格式:IPBPBP…;量化参数:QP=28),对8个常用的图像测试序列进行模拟编码后得到的结果如表2所示,由表中数据就可以看出4种分数像素插值方法的编码性能对比。

    对表2中的模拟编码结果进行整理,就能得到编码器在分别采用这4种分数像素插值方法时,编码8个测试序列的平均编码性能直观对比图。图1中的左图表示了亮度信号(Y)的平均编码峰值信噪比(PSNR);右图表示8个测试序列的平均编码压缩率。

    1.3插值方法的编码性能分析

    对上述3种简化的分数像素插值方法(方法1~3),由上文的模拟结果可以看出:只有方法2的编码性能最接近H.264/AVC编解码标准的推荐插值算法(方法4)的编码性能:8个测试序列亮度信号Y的平均PSNR只有很小的下降,利用测试数据计算得到PSNR下降0.011dB、相对下降幅度为:0.0299%;同时,方法2的编码压缩率也只有较小的下降,计算得到的平均压缩率下降了2.729倍、相对下降幅度为:1.6392%。对于采用插值方法2和插值方法4得到的编码压缩文件直接使用JM7.3解码器进行解码性能测试,结果发现解码后的测试序列在主观上没有任何差别;方法2的平均解码信噪比(PSNR)和H.264/AVC编解码标准推荐插值算法(方法4)的解码信噪比相比较,也只下降了0.064dB,相对下降率为:0.18%。由此也可以看出4阶滤波器1/2像素插值+1/4像素线性内插的调整算法并没有使编码器的编码性能显著下降,调整后的分数像素插值算法(方法2)是比较切实可行的。

    2、分数像素插值算法的优化选择

    2.1分数像素插值结构的实现代价比较

    如果仅从上文模拟的编码性能上看,插值方法2(4阶滤波器1/2像素插值[7]+1/4像素线性内插)应该是接近H.264/AVC编解码标准推荐插值算法的优化调整插值方法了;如果再进一步从硬件实现代价上考察,就更能说明这一调整的优越性。在硬件上要实现6阶滤波的1/2像素插值,根据文献[1],可以得到图2(a)所示的基本硬件实现结构;而对于插值方法2中的4阶滤波器,它所对应的基本硬件实现结构如图2(b)所示。

    从图2可以明显看出:6阶的插值结构比4阶的插值结构多了3次数据运算(2次加法运算和1次移位运算);对图2所示的两种插值结构进行硬件结构描述[9],并进一步使用synplify的综合结果显示:6阶滤波器插值结构需要202个逻辑单元;4阶滤波器插值结构需要131个逻辑单元;就仅此1/2像素插值运算结构而言,4阶的插值方法会比6阶的插值方法节约34%的硬件代价;当这两种插值结构综合到芯片上时,考虑到互连线面积(6阶滤波器在运算中需要更多的数据位数);两者占用芯片面积的差别还会进一步加大。而在整个H.264/AVC视频编码器的系统芯片设计中,由于使用了数据的并行运算结构,会用到大量的1/2分数像素插值滤波器,如果采用4阶滤波器的插值算法就可以节省更多的芯片面积[10]。

    2.2分数像素插值结构的性价比

    在视频编码过程中,使用分数像素运动估计(FME)就是为了进一步提高视频编码的信噪比(PSNR)和编码数据压缩率。对于H.264/AVC视频编码软件,我们可以使用复杂的算法来获得较好的编码性能[4];而在H.264/AVC视频编码器芯片设计中,在追求编码性能的同时还得兼顾硬件的实现代价,只有具有较高性价比的VLSI设计才是理想的。

    对于H.264/AVC视频编码器系统芯片的分数像素运动估计(FME)模块,把分数像素插值方法调整为4阶滤波的1/2像素插值和线性1/4像素内插值之后,虽然损失了较小的编码性能(亮度PSNR下降0.0299%,编码压缩率下降1.6392%),但可以使1/2像素插值单元节省30%以上的芯片面积。所以从编码器的性价比上考察,简化的插值方法2应该是对H.264/AVC视频编码器系统芯片中实现分数像素插值的优化调整。

    3、结论

    通过以上的编码性能模拟和数据分析,就不难得出了在H.264/AVC视频编码器芯片设计中,使用4阶滤波器结构实现1/2像素插值、线性内插结构实现1/4像素插值应该是一种全面均衡的优化选择,能够较好地体现编码性能和硬件代价的折中,能够在不显著降低编码器性能的前提下有效节约硬件实现代价。

评论】 【社区】 【 】 【关闭此页

发表评论

发表者:
内容: