针对硬件实现的H.264视频编码算法改进
硬件实现运动估计过程中,一般会通过使用片内存储弥补片外存储带宽的不足。在图5中给出了一种典型的搜索区域数据重复使用方法,其中搜索范围是-16~+15。图5中左边的3×3块表示当前宏块运动估计进行区域,右边的3×3表示下一个宏块运动估计进行区域,javascript:window.open(this.src);" style="cursor:pointer;"/>它们的重叠区域的数据可以在两次宏块运动估计中重复使用,新增加的数据是最右侧的1×3区域。
为了配合H.264这种重复使用数据的模式,搜索区域的起始点应该设置在(0,0)。只有当真正的运动矢量超出搜索范围时,这种改变才会造成视频质量的下降。
3.2 运动预测因子
在H.264中, 运动预测因子被用来确定运动矢量数据的比特数和计算运动矢量数据编码误差的补偿因子。补偿因子在整个运动估计过程中都会被参考以进行率失真优化。图6表示运动预测因子的相关情况。其中P1到P4是在当前宏块之前的宏块。当前宏块的运动预测因子通过对P1到P4宏块的运动矢量计算得到。但是因为在硬件中,以上基于宏块的处理过程是使用宏块流水时,P1的运动矢量可能是无效的。解决这个问题需要消除运动预测因子计算过程中相关性。具体就是计算过程中只使用P2到P4宏块的运动矢量。而改变的只是针对运动估计补偿因子的计算,因此改进算法仍然符合H.264标准。
3.3 1/4像素精度的运动估计
在H.264中,半像素运动估计是通过二维6抽头内插滤波实现的。二维滤波需要使用线路缓存实现转置运算,而线路缓存的硬件实现相当复杂。不过对编码环路中的另一个部分运动补偿时,该宏块的运动矢量已经确定。
javascript:window.open(this.src);" style="cursor:pointer;"/>
3.4 哈达码变换
哈达码变换是用简单的变换估算变换后产生的比特数。在H.264的运动估计中用哈达码变换替代SAD,如果要求设计低代价硬件可以将这部分省略。
4 仿真结果
软件仿真是在“Foreman”、“grandma”、“salesman”和“carphone”序列上进行的,帧率是每秒10帧。出于硬件的考虑,不采用率失真优化模式,因为在JM4.0上没有采用码率控制,所以率失真曲线是对应Qp的变化产生的。率失真曲线如图7、图8。
javascript:window.open(this.src);" style="cursor:pointer;"/>
在基于宏块处理的系统中,采用上述的改进算法,就能实现并行处理。通过软件仿真的结果表明,改进帧内预测和整像素运动估计上的算法后,其PSNR值的下降几乎可以忽略。对低人代价系统来说,QME和哈达马变换的改进也量种可以考虑的方法。