H.264 已是目前应用最广的视频编码技术,其具备高效的压缩性能,但是它的复杂度也是比一般编码器高很多的,因此如何提高H.264 编码速度,实现实时编码和传输,已经成为视频编码领域很有挑战性的课题。
1. 引言
传统的视频编码标准的帧内编码算法是直接对原始视频数据进行变换处理,通过对视频块进行DCT 变换消除码间冗余。它的好处是对每个宏块单独编码,可以防止误码的扩散,但缺点是只利用了宏块像素值之间的相关性,没有充分利用到视频序列间的空间相关性,也 就是相邻宏块间的相关性。H.264 提出了帧内预测的方法,即利用已解码重构的邻近块来实现当前块的预测,对预测块与实际块间的残差做相应的后续处理。帧内预测技术的提出,使得帧内编码技术的码率大大减小了,编码效率也有很大提高,特别是对于图像序列变化平缓的视频效果非常明显。虽然帧内预测技术相对过去的帧内编码算法体现了很强的优势,但这都是以庞大的运算量为代价的,如何对其进行算法优化,提高帧内预测编码算法效率是当今H.264 领域的热门课题。本文内容安排如下:第二节介绍H.264 帧内预测算法以及改进算法;第三节提出快速帧内预测模式判别算法;第四章给出试验结果,证明新算法的有效性。
2. H.264 帧内预测算法研究
2.1 H.264 帧内模式选择概述
帧内4X4 预测方法的基本思路是从不同的方向计算各个像素之间的亮度差值,其中具有最小预测误差的方向为最佳的预测方向。图2.1 表示了已编码像素与待预测像素间的空间关系,图2.2 是该模式提供的9 种预测方向。
图2.1 已编码像素A-Q 与待预测像素a-p 的位置关系
图2.2 帧内4X4 预测的8 个方向
图中9 种预测模式描述如下:
模式0:垂直预测模式,根据A、B、C、D 像素垂直推出相应像素值;
模式1:水平预测模式,根据I、J、K、L 像素水平推出相应像素值;
模式2:DC 预测模式,由A、B、C、D、I、J、K、L 的平均值推出所有像素值;
模式3:下左对角线预测模式,由45°方向从右上方到左下方内插得出相应像素值;
模式4:下右对角线模式预测,由45°方向从左上方到右下方内插得出相应像素值;
模式5:右垂直预测模式,由26.6°方向内插得出相应像素值;
模式6:下水平预测模式,由26.6°方向内插得出相应像素值;
模式7:左垂直预测模式,由26.6°方向内插得出相应像素值;
模式8:上水平预测模式,由26.6°方向内插得出相应像素值;
16X16 亮度预测模式原理跟4X4 亮度预测模式是相同的,而16X16 模式是针对图像较平坦的情况,因此没必要像4X4 预测一样规定过于细致的预测方向,它只提供了4 种预测方向,分别为垂直预测(模式0)、水平预测(模式1)、DC 预测(模式2 )、平面预测(模式3)。
8X8 色度预测模式类似与16X16 亮度预测模式,只是模式编码略有不同,其中DC 为模式0、水平为模式1、垂直为模式2、平面为模式3.
2.2 基于空间相关性的快速帧内预测模块选择方法
视频图像中相邻块之间不是相互孤立的,而是具有很强的相关性。当前块图像的变化趋势很有可能跟其相邻块是相同的,因此分析块间的空间相关性对帧内编码模式选择是很有必要的。由统计特性得知出当前块的预测模式与其左临和上临的块相关性最大,如图:
图3.1:相邻块示意图
C 为当前块,A 为左临块,B 为上临块。在A、B 块的帧内预测模式已知的条件下, 如果A 和B 的预测模式方向性接近,那么C 也很有可能具有类似的方向性。以往基于该方法帧内预测模式选择中都是以A 和B的预测模式加上DC 模式作为备选模式。这样做的优点在于将当前块的搜索模式从9 种缩减到了3 种,将计算速度提高67%。但该方法缺点是适应性不强,在一些图像变化剧烈的区域,当前块的图像变化趋势有可能跟邻近块没有太大相关性,在这种情况下仍采用相邻块的预测模式作为当前块的模式,则会大大降低图像质量。为了保证视频图像的清晰度,本文采用全匹配的方法,既只在A 和B 的预测模式相同的条件下,将当前块C 的备选预测模式定为与A、B 相同的模式和DC。这样一方面进一步提高了模式筛选效率,另一方面利用了图像间的强相关性,使得图像质量基本不受影响。但该方法的不如在于它仅适用于空间相关性强的区域,对于普通图像区域可用性不强。
2.3 基于Sobel 算图像边缘检测的帧内模式选择快速算法
通常采用了一种利用图像边缘检测方法 ,通过计算当前块中像素的梯度,得出与该梯度方向相关性最强的那个方向模式。为了利用相邻像素获得预测块的边缘信息,首先对帧内图像使用Sobel 边缘算子[4] 生成其对应的边缘图。边缘图中的每个像素关联一个边缘矢量,该矢量是由幅度和方向两部分组成的。有了单个像素的边缘矢量,就能找到与其方向匹配最佳的预测模式,然后计算各个预测方向上像素的幅度之和,最后得到幅度和最大的方向。
求出块内每个像素的矢量后,根据快中每一个像素边缘矢量的方向Ang (Di, j ) 所处帧内模式选择区间,分别在各个区间中对属于该区间的边缘矢量强度Amp(Di. j ) 求和,具有最大矢量强度和的区间K 即为这个4X4 块的边缘方向信息。由于帧内预测模式是基于方向的预测,预测方向K 和帧内预测模式通常是对应或相近的,所以将预测方向K 及其左右相邻的两个方向也一并作为候选的帧内预测模式。比如K=4 时,与其相邻的模式5 和模式6 也同它一起作为备选模式。一种新的帧内模式选择算法和流程。
3. 新的帧内模式选择算法及流程
3.1 基于改进的Kirsch 算子的边缘检测模式选择
基于sobel 的模式选择是当今最常用的边缘检测方法,其算法较简单且预测模式准确度也不错。但是该算法在计算出方向向量值之后需要多重判断去决定该向量匹配哪一种预测模式,而在DSP 实现过程中判断语句是非常耗费资源和时间的。针对sobel 算法的不足,本文提出了一种基于改进的Kirsch 算子的边缘检测模式选择,避开了资源开销大的判断语句并且充分利用了DSP 的并行处理机制,使得编码效率有明显提高。
Kirsch 算子使用8 个模板来确定梯度的幅值和防线,又被成为方向算子,通过一组模板分别计算不同方向上的差分值,取其中最大的值作为边缘强度,而将与之对应的方向作为边缘方向。假设院图像的3X3 子图像如图3.2 所示:
Kirsch 算子采用8 个模板对图像上的每一个像素点进行卷积求倒数,8 个模板代表8 个方向,分别对图像上的8 个特定边缘方向作出最大响应,运算中取所有8 个方向中最大值作为图像的边缘输出,最大响应模板的序号构成了对应边缘方向的编码。Kirsch 算子的8 个方向如图所示:
图3.3:Kirsch 算子的8 个方向
与H.264 帧内预测模式的8 个方向对比,Kirsch 算子中的5、6、7、8 方向没有对应的预测模式,因此可以将Kirsch 算子的8 个方向缩减到4 个方向,即图中的1、2、3、4 方向,4个模板分别为:
视频块中的每一个像素与该四个模板进行卷积运算并求倒数,运算结果最大的模板对应的方向即为该像素的边缘方向,并遵循以下规则选择其备选模式:
如果Kirsch 边缘方向为方向1,则选择预测模式1、6、8 为备选模式;
如果Kirsch 边缘方向为方向2,则选择预测模式4、5、6 为备选模式;
如果Kirsch 边缘方向为方向3,则选择预测模式0、5、7 为备选模式;
如果Kirsch 边缘方向为方向4,则选择预测模式3、7 为备选模式。
3.2 改进的帧内模式选择算法
在充分利用图像平滑度、图像空间相关性以及块内自身信息的基础上,本文提出了新的帧内模式选择算法:
1)设置平滑度阈值Threshold,计算当前宏块的THR,如果THR>Threshold,则直接采用16X16 模式,16X16 模式中的四种预测模式为备选模式,跳至第四步,否则采用4X4 模式;
2 )获取当前4X4 块左临和上临块的预测模式,如果两模式相同,则当前块也选用该模式作为备选模式,跳至第四步;
3)采用Kirsch 算子计算当前块各像素的边缘方向,计算各个预测方向上像素的幅度之和,最后得到幅度和最大的方向做为最佳预测方向,根据对应规则选择相应备选模式;
4 )将DC 模式作为备选模式;
5)计算各个备选模式的RD_cost,最小的作为最终模式;
6)算法结束。
4. 实验结果分析
将快速算法在Chipwrights提供的H.264/AVC 编码器下实现,在全I 帧模式下,对 VGA 格式的视频序列Flower 做了结果分析,在不同的QP 下比较了原帧内编码算法与本文提出的基于Kirsch 算子的改进算法的各种数据。如表3-1、3-2,其中BR 代表比特率,单位Kbit/s;PSNR 代表峰值信噪比,单位dB;Time 代表编码总时间,单位s,以100 帧作为实验序列,采用RDO 代价函数模型和CABAC 编码方式。
5. 结束语
H.264 因为其良好的压缩性能、清晰的视频画质和更强的网络亲和性,使得其成为当今视频存储和通信研究领域中的热点问题,被广泛应用于移动视频、视频会议、电视电话等实时应用场合。H.264 与其它编码标准有着突出的优势,但这是以大大增加算法复杂度为代价的。如何将其广泛应用于生产实践,已成为国内外学者共同关注的课题。AnyChat音视频互动开发平台现就采用最先进的H.264视频编码标准,AAC音频编码标准与P2P技术,整合了佰锐科技在音视频编码、多媒体通讯领域领先的开发技术和丰富的产品经验而设计的高质量、宽适应性、分布式、模块化的网络音视频互动平台。
AnyChat 下载地址: http://www2.bairuitech.com/downloads/bairuisoft/AnyChatCoreSDK_V3.0.rar