图1 4×4块预测类型的像素点分布
图2 4×4块预测方向
图3 16×16块预测模式
该算法在选择编码窗口时以绝对误差和SAD(Sum of Absolute Difference)作为判断准则。绝对误差和是指当前待编码块与预测块之间的差值绝对值之和,即残差之和。假设当前块用S(i,j)表示,预测值为pred(i,j),i,j=0,1,...,N,则absMiddle" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
SAD值越小,说明图像的残差值越小,从而说明当前待编码块与预测块越接近,相应预测模式的预测的精度越高;反之,SAD值越大,说明图像的残差值越大,从而预测块不能很好的反应当前待编码块,相应预测模式的预测精度越低。
为了综合考虑各种预测模式的不同偏重方向性,当对宏块进行编码时会遍历所有的预测模式,并借助模式判决准则从中选出最优的模式作为最终的编码模式。
3.3 变换
由于离散余弦变换(DCT)非常近似于统计最佳的K-L变换,所以DCT通常被用于图像块的变换编码中。但是DCT有一个缺点:在DCT变换矩阵中的部分系数是无理数,在计算机上用迭代方法进行变换和反变换后,不能得到一致的初始值。本文采用H.264帧内编码的思想,用整数DCT[6]代替浮点数DCT。整数DCT对图像信号作用后可以获得与DCT类似的频率分解;同时,正交变换的目的是减少变换系数的相关性,使得变换系数的能量集中在较少的几个分量上,变换前后的能量并没有损失,在去除空间相关性上,整数DCT与DCT具有相同的效果。
本文中采用了两种变换:整数4×4 DCT和4×4的Hadamard变换。
整数4×4DCT变换减少了舍入误差,降低了计算复杂度,提高了运算精度;使用4×4块进行变换,使用于变换的块的尺寸缩小,能够减少块效应;同时,为了使小尺寸的变换方式对图像中较大面积的平滑区域不产生块之间的灰度差异,进一步降低DC系数间的相关性,对16个4×4块的DC系数进行第二次块变换,即Hadamard变换。