目前已经制定的静止图像压缩标准主要有JPEG和JPEG2000。JPEG标准在中高速率上压缩效果较好, 对于细节分量多的灰度图像, 当编码压缩率低于每像素0.25比特时,视觉失真大,重构图像存在严重的方块效应,不能很好地适应网络传输图像的需要。JPEG2000为了降低运算中的存储器需求,使用分块技术,对每个小块进行处理,但采用较小的块在低码率时存在与JPEG一样的方块效应。因而JPEG2000 在低比特率应用时, 建议不分块或者分成较大的块,以保证良好的率失真性能, 但运算复杂性和存储器需求都极高。
视频编码新标准H.264代表着继MPEG1/2和MPEG4后的第三代视频编码标准。H.264比以前的标准提供了更高的编码增益。H.264的INTRA帧编码算法充分利用图像中的空间相关和变换域的相关性,提供了极高的编码增益,可以用来对静止图像进行编码。在文献[1]中H.264采用JM73代码,JPEG2000 采用Jasper 1.700.5,对标准静止测试图像和视频序列进行测试。测试结果表明:与JPEG2000相比,H.264 INTRA帧具有更高的客观质量和主观质量,但译码器的运算复杂性却比JPEG2000低50%左右。在嵌入式设备上,多媒体应用的实时性不仅取决于算法的运算次数,还取决于可得到的存储器带宽。CPU的工作频率越来越高,存储器的频率却增加缓慢,很多算法的瓶颈在于数据输入输出。有效减小算法的存储器需求,减少中间结果的存储需求,可缩减片外存储器访问次数,提高应用的实时性能。下面主要讨论降低H.264 INTRA帧编码的运算复杂性和存储器需求的方法。
图1 H.264编码器的结构流程图
H.264 INTRA 16x16 prediction modes (all predicted from pixels H and V)
图2 INTRA 4×4和INTRA 16×16预测
1 减少运算复杂性
H.264 INTRA帧具有比JPEG2000更高的客观质量,这主要是由于INTRA帧采用的多种帧内预测模式较好地去掉了空间冗余。对于平滑的背景区域采用16×16大小的粗糙预测,共有4种可能的预测方向。对于快速变化的图像区域,采用4×4的块,共有9种预测模式。在预测后,对残差信号进行整型变换消除频谱相关性。高效的去方块效应滤波器改善了图像的信噪比和主观质量。图1是H.264编码器的结构流程图。
从图1可以看出,在整帧图像的熵编码后,对逆整型变换后的重建数据进行去方块效应,去方块效应后的重建图像数据用作下一帧预测图像的编码,或者用于编码同时显示重建图像。编码器的作用主要是压缩原始数据产生输出码
流,若不需要在本地编码器中显示重建图像(例如卫星照片的拍摄),则编码器中的整帧图像的去方块效应可以省去,节省大约30%的运算。宏块的帧内预测包含9种4×4模式和4种16×16模式如图2。INTRA 16×16 预测仅仅采用左边16个像素和上边16个像素作参考;INTRA 4×4 预测仅仅采用左边4个像素和上边9个像素作参考,因而在逆整型变换和重建(逆变换结果与预测值相加)时,仅仅需要计算16×16宏块的第16行与第16列像素、4×4块的第4行与第4列像素,没有必要计算所有的像素。对于16×16的块,减少224个重建像素的计算。对于4×4的块,减少8个重建像素的计算。整型变换、量化、逆量化、扫描以及逆变换消耗比较多的编码时间,可利用在模式选择时计算的绝对差值和(SAD),提前判断整型变换后量化系数全0块,从而省去全0块的整型变换、量化、逆量化、扫描以及逆变换这一系列操作。若SAD小于某个门限T,各个变换系数绝对值小于量化步长(Qstep),该块为0块。
实验中取T等于3Qstep,获得了较高的检测率和较低的检测差错率。H.264 采用整型变换,为简化门限的推导,其中的整型变换与4×4的离散余弦变换(DCT)相差较小,DCT变换为:
在INTRA帧量化中,时,F(u,v)量化为0,即时,所有变换系数量化为0。由于该式是量化系数全为零的充分条件,而不是必要条件。实验结果显示,使用该门限检测出零块的正确性为100%,大量的量化系数为全零块却检测不出来。为了大幅提高零块检出率,增大该门限T为3Qstep,测量miss.qcf 20帧编码的平均情况,测试结果见表1。从表1可以看出,零块检测率随着量化索引增大而增大,可能将部分非零块检测成零块,但这对信噪比影响不大。
2 缩减存储器需求
减少运算中的存储器需求对于嵌入式设备十分重要。宏块编码的过程包含预测、模式选择、变换量化扫描、逆量化等。从图2可以看出,在INTRA16×16的4种预测模式中,只使用上边和左边的各16个像素作为预测参考,在INTRA 4×4 的9种预测模式中,仅使用左边4个像素和上边9个像素作为预测参考,因而重建图像并不需要整帧存储,只需存储这几个参考点就可以了。假设宏块编码按照从左到右、从上到下顺序进行,则水平方向的像素需要存储一整行。
在INTRA 4×4模式编码时,由于相邻的4×4块模式高度相关,采用相邻块的预测模式预测当前块的最可能模式,同样只需要存储上边一行4×4和左边一个4×4块的编码模式(如图3)。在对量化后变字长编码(VLC)系数的个数进行编码时,需要利用相邻两块的非零系数个数对该块进行预测,也只需要存储上边一行4×4和左边一个4×4块的编码模式的非零系数个数,如图3。
在对整帧图像的数据比特串(SODB)添加原始字节序列载荷(RBSP)结尾比特(RBSP trailing bits,添加一比特的“1”和若干比特“0”,以便字节对齐)后,再检查RBSP 中是否存在连续的三字节“00000000 00000000 000000xx”;若存在这种连续的三字节码,在第三字节前插入一字节的“0×03”,以免与起始码竞争,形成EBSP码流,这需要将近两倍的整帧图像码流大小。为了减小存储器需求,在每个宏块编码结束后即检查该宏块SODB中的起始码竞争问题,并保留SODB最后两字节的零字节个数,以便与下一宏块的SODB的开始字节形成连续的起始码竞争检测;对一帧图像的最后一个宏块,先添加结尾停止比特,再检测起始码竞争。
采用这种方法产生H.264 附录B中的字节流时,存储器需求从两帧码流大小缩小到两个宏块码流大小。通过对码流输出过程的改进,使INTRA帧编码需要的存储器大小不随图像大小的增加而增加,这时编码过程中的存储器不超过9K个整数。对于基于片上存储器的多媒体处理器,存储器需求的减少可以大量缩减中间结果的片外片上转移,减小数据转移的负担,提高程序的运行速度。
采用H.264 INTRA帧对静止图像进行编码时,在编码器端不需要显示本地重建图像,可省掉去方块效应滤波器;利用模式选择时计算的绝对差值和,可提前判断量化后全零系数块,节省大量的计算。分阶段地对各个宏块的码流插入竞争阻止字节(emulation prevention byte),以保证原始字节序列载荷中不含起始码,有效减少存储器的需求。运算复杂性和存储器需求极低的H.264 INTRA编码模式,可代替JPEG2000,用于嵌入式设备的静止图像编码。
图3 相邻 4×4 INTRA编码块