针对硬件实现的H.264视频编码算法改进
2.2 16×16帧内预测
图3给出了16×16帧内预测的数据相关性。当前宏块的预测是基于重建帧中位于当前宏块位置上方的17个像素和左侧的16个像素的。因为对当前宏块进行预测时左边宏块的重建可能并未完全完成,当用到当前宏块位置左侧的那些像素时就用原始像素代替。
2.3 编码模式选择
按照前面所给出的改进算法,如果只是简单地用原始像素代替重建像素的话会造成编码模式选择的误差。图4给出了帧内编码的率失真改进的曲线,仿真的序列是“Claire”、10fps。从图4中可以看出,由编码模式选择的误差引起的PSNR下降是很明显的。原始像素是属于同一帧的,而重建像素经过帧间或帧内编码去除了冗余度,所以与重建像素相比原始像素有更高的相关性。因而用改进后的帧内预测算法产生的误差要比用原算法大得多。为了减少编码模式选择的误差,还需要对误差代价函数(error cost function)进行修改。现在的做法是增加一个误差项。这个误差项体现原始像素和重建像素之间的差值。因为量化参数(QP)能够影响原始像素和重建像素之间的不匹配,所以误差项的确定与量化参数值有关。在H.264中,随着量化参数的线性增加,量化对编码的影响是呈指数增加的。为了符合这种影响的增长趋势,误差项的基本形式确定了a/b(51-Qp),其中a和b是待定系数。如何确定a和b是影响误差消除的关键。
在H.264中,每级Qp的增量是12%,所以理论上与之相匹配的参数b应该设置为1.12。但是误差代价函数的计算是在哈达码变换域中进行的,对每个系数的加权系数是不同的。而且变换后的系数的概率分布是不定的。所以参数b的设定不能用理论值,应该考虑用经验值来确定。
通过实验仿真结果可以得出:对于4×4帧内预测,a设为80、b设为1.07。在对不同的序列测试中,这组参数值的效果最好。从图4中看,改进后的帧内预测基本消除了模式选择误差,其PSNR的表现与原帧内预测算法接近。
3 运动估计
在H.264中采用了可变的块大小、1/4像纱和多参考帧的运动估计。在进行运动估计过程中,全局搜索的起始搜索点根据运动预测因子确定。对于整像素搜索,失真用SAD度量。如果需更好的效果,可以将SAD加上补偿项。虽然全局搜索运动估计有各种硬件结构支持,但是从硬件实现角度来看,在H.264中原始的搜索范围和运动预测因子的选择是不实用的。以下介绍相应的改进。
3.1 搜索范围
硬件实现运动估计过程中,一般会通过使用片内存储弥补片外存储带宽的不足。在图5中给出了一种典型的搜索区域数据重复使用方法,其中搜索范围是-16~+15。图5中左边的3×3块表示当前宏块运动估计进行区域,右边的3×3表示下一个宏块运动估计进行区域,它们的重叠区域的数据可以在两次宏块运动估计中重复使用,新增加的数据是最右侧的1×3区域。
为了配合H.264这种重复使用数据的模式,搜索区域的起始点应该设置在(0,0)。只有当真正的运动矢量超出搜索范围时,这种改变才会造成视频质量的下降。
3.2 运动预测因子
在H.264中, 运动预测因子被用来确定运动矢量数据的比特数和计算运动矢量数据编码误差的补偿因子。补偿因子在整个运动估计过程中都会被参考以进行率失真优化。图6表示运动预测因子的相关情况。其中P1到P4是在当前宏块之前的宏块。当前宏块的运动预测因子通过对P1到P4宏块的运动矢量计算得到。但是因为在硬件中,以上基于宏块的处理过程是使用宏块流水时,P1的运动矢量可能是无效的。解决这个问题需要消除运动预测因子计算过程中相关性。具体就是计算过程中只使用P2到P4宏块的运动矢量。而改变的只是针对运动估计补偿因子的计
《针对硬件实现的H.264视频编码算法改进(第2页)》