[RV1108][Linux3.1]视频项目-H264关键编码技术

平台 内核版本
rv1108 Linux3.1

1、H264的关键编码技术

H.264 的特征是加大了预测部分的比重,通过改善预测误差而提高编码效率。
它采用了一系列先进的编码技术:

内容 好处
分层结构设计 增强网络亲和性
空域帧内预测技术 有效降低了 I 帧编码的比特率
多参考帧进行帧间预测 这样比单独参考帧方法可以节省 5 -10%的传输码率,并且有利于码流的错误恢复
采用可变块运动估计/运动补偿技术 可以比单独 16x16 宏块的预测方法提高超过巧%的编码增益
运动矢量的精度为 1/41/8像素 与整数精度的空间预测相比,编码率最高可提高 20%
采用 4x4 像素块的整数变换 运算速度快,反变换过程中没有失配问题
采用 UVLC 编码和基于上下文的 CABAC 编码算法 可提高约10%的编码率
采用基于 4x4 块的边界去块滤波器 有效提高图像的主观质量
引入了 SP/SI 帧类型,有效提高了码流切换能力 对增强抗误码性能也带来一定的优势
包含差错控制的工具,有利于标准视频流在误码、丢包多发的移动环境中传输 增强了视频流的鲁棒性

下面结合本文的研究课题,重点就 H.264/AVC 与本课题有关的技术特点进行详细介绍。

1.1、帧内预测编码

在将图像分割成为相互独立的块后,图像中的物体通常位于相邻区域的数个或数十个子块中。正是由于物体对象的这种全局性,使得当前块与其邻块的纹理方向往往是高度一致的,且各像素值间相差不大,即不但子块内部的像素具有空间冗余性,子块与子块间也存在空间冗余。另一方面,自然场景图像中的前景和背景通常具有一定的纹理特性,按其方向性可以划分为水平纹理、垂直纹理和倾斜纹理等。这两个特性就为空域的帧内预测创造了条件。
在这里插入图片描述


H.264 的帧内预测算法正是利用图像在空间域上的方向特性及子块像素间的相关性进行预测,去除子块间的空间冗余。编码时,首先使用已经编码的块(尤其是当前块上方和左方的块)的像素值来预测当前块亮度分量和色度分量值,随后对实际值和预测值的残差图像进行整数变换、量化及嫡编码。

H.264 对亮度分量和色度分量设定了不同的预测方案,独立实施预测。亮度分量的帧内预测包含两种预测模式:基于 4x4 像素块的帧内预测模式和基于 16x16 像素块的帧内预测模式;对色度分量只有一种预测模式。为了保证对不同纹理方向图像的预测精度,各预测模式中又详细定义了多种预测选项以尽可能高精度的预测不同纹理特性的图像子块。在预测时每个块都要依次使用所有预测选项进行预测,得出相应的 SAD 值,再根据 SAD值确定最优预测选项。由于详细设定了多种方向的预测选项,对于不同类型的图像此种帧内预测方式都能有效的逼近其真实值,预测精度较频域帧内预测算法有明显提高,图像的主观质量也能够令人满意。


H.264的帧内预测算法正是利用图像在空间域上的方向特性及子块像素间的相关性进行预测,去除子块间的空间冗余。编码时,首先使用已经编码的块(尤其是当前块上方和左方的块)的像素值来预测当前块亮度分量和色度分量值,随后对实际值和预测值的残差图像进行整数变换、量化及嫡编码。


H.264对亮度分量和色度分量设定了不同的预测方案,独立实施预测。亮度分量的帧内预测包含两种预测模式:基于 4x4 像素块的帧内预测模式和基于 16x16 像素块的帧内预测模式;对色度分量只有一种预测模式。为了保证对不同纹理方向图像的预测精度,各预测模式中又详细定义了多种预测选项以尽可能高精度的预测不同纹理特性的图像子块。在预测时每个块都要依次使用所有预测选项进行预测,得出相应的 SAD 值,再根据 SAD值确定最优预测选项。由于详细设定了多种方向的预测选项,对于不同类型的图像此种帧内预测方式都能有效的逼近其真实值,预测精度较频域帧内预测算法有明显提高,图像的主观质量也能够令人满意。


1.2、帧间预测编码

帧间预测主要是利用连续图像序列帧间的相关性,通过运动估计的预测编码方法来消除视频图像的时间冗余。H.264在继承以前标准运动补偿技术的基础上进行了改造和创新,如树状运动补偿、高精度运动估计以及多参考帧帧间预测等。


1.2.1、树状运动补偿

H.264 标准中在帧间预测时,使用树状运动补偿技术,比以前的编码标准提供了更大的灵活性。每个宏块可根据语法可分为 16x168x1616x88x8 的块;当采用 8x8 块时,还可以进一步分为更小的 8x44x84x4 子块进行运动估计。

在 对 图 像 进 行 帧 间 编 码 时 , 编 码 器 需 要 对 整 个 预 测 模 式 集 合{SKIP,16´16,8´16,16´8,8´8,8´4, 4´8, 4´4`} 在每种分割模式下单独进行运动估计,得到各自的运动矢量。宏块中的子块划分得越细,对运动细节就逼近的越精确,因而对残差值进行编码所需的比特数就越小;但由此也带来更多的运动矢量需要编码。通常而言,对于背景相对简单、运动不剧烈的视频序列,用大块模式进行运动估计后的残差值比较小,且需要编码的运动矢量数较少,因此运动估计的结果中多选择块尺寸大的模式。对于背景相对复杂、具有复杂纹理或运动剧烈的视频序列,选择小块模式能更精确地模拟宏块的运动,因此多选择块尺寸小的模式。

在采用多模式运动估计以后,需要综合考虑对残差值进行编码所需的比特数和对运动矢量进行编码所需的比特数。为此 H.264 采用率失真优化 (Rate Distortion Optimization,RDO)的方法选择最优模式。率失真优化采用拉格朗日方程来计算,其公式如下:
在这里插入图片描述
这里 s 为原始图像宏块,c 为估计后重构的图像宏块,SSD 函数计算原信号和重构信号二者之间的均方误差和,l为拉格朗日算子,R为图像信号编码后的比特数。最优模式对应于拉格朗日方程的极小值。


采用可变块进行帧间预测,使得运动估计模型能够更接近物体的实际运动,如图所示,因此运动补偿精度更高;另一方面细化的补偿使所得到的图像块效应不明显,具有优良的视觉效果。
在这里插入图片描述

1.2.2、高精度运动估计

在帧间预测过程中,需要帧间编码宏块的每个分割都要从参考图像中某个同样大小的区域进行预测。这两个面积的平面距离(即运动矢量)具有四分之一像素精度(对应色度分量为八分之一像素精度)。亮度和色度在子像素位置的采样值在参考图像中并不存在,因此必须利用该子像素相邻的像素值进行内插得到。当前帧的一个 4x4 分割块(黑色点)在从时间上相邻的参考图像中进行预测时,如果运动矢量的水平和垂直分量都是整数,那么参考块的相应像素(灰色点)就实际存在,直接可以获得并参与预测。而只要运动矢量的两个分量之一是小数值,则需要参与预测的参考采样值(灰色点)在参考图像中并不存在,必须通过该参考位置邻近的采样值(白色点)内插产生,然后再参与当前分割块的预测操作。
在这里插入图片描述

在亮度分量的预测过程中,首先以 1/2 像素位置周围的整像素为参考值,通过一个 6抽头 FIR 滤波器得到该 1/2 像素位置的子像素采样值。当所有的 1/2 像素采样得到后,每个四分之一采样值再以其相邻的 1/2 像素和整像素为参考,采用双线性的办法得到。 子像素运动补偿能提供比整像素运动补偿更显著的压缩性能,但同时复杂度也增加了。H.264 标准缺省的运动补偿精度是四分之一,八分之一精度为可选。采用八分之一度时,插值滤波器的阶数比较高,因此会造成编解码器计算复杂度的大幅增加,另外,运动矢量编码所需的比特数也很多,运动矢量编码所需的开销也要翻倍。

发布了254 篇原创文章 · 获赞 93 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/104095982