H. 264 算法特点

来源:互联网 发布:js防水材料生产工艺 编辑:程序博客网 时间:2024/05/20 01:44
 H. 264 是联合视频组JVT 开发的一个新的数字视频编码标准,它既是ITU- T 的H. 264 算法,又是ISO/ IEC 的MPEG- 4 的第10 部分。1998 年1 月份开始征集H. 264 算法草案,1999 年9 月完成第一个草案,2001 年5 月制定了其测试模式TML- 8,2002 年6 月JVT 第5 次会议通过了H. 264 的FCD 版,2003 年5 月,ITU 正式核准颁布。
H. 264 算法还是基于块的混合编码技术,编码过程基本与以前的编码标准相同,只是每个功能模块都进行了技术更新,帧内预测、帧间预测、整数DCT 变换、环路滤波、熵编码等模块都做了技术提升。
(1)NAL 与VCL 网络适配层NAL(Network Abstraction Layer)是H. 264 为适应网络传输应用而制定的一层数据打包操作。传统的视频编码算法编完的视频码流在任何应用领域下(无论用于存储、传输等)都是统一的码流模式,视频码流仅有视频编码层VCL(Video Coding Layer)。而H. 264 可根据不同应用增加不同的NAL 片头,以适应不同的网络应用环境,减少码流的传输差错。
(2)帧内预测H. 264 为能进一步利用图像的空间相关性,H. 264 引入了多模式的帧内预测以提高压缩效率。简单地说,帧内预测编码就是用周围邻近的像素值来预测当前的像素值,然后对预测误差进行编码。预测是基于块的,亮度分量(Luma)块的大小可以在16 × 16 和4 × 4 之间选择,16 × 16 块有4 种预测模式,4 × 4 块有9 种预测模式;色度分量(Chroma)预测是对整个8 × 8 块进行的,预测模式同亮度16 × 16 的4 种预测模式。
(3)帧间预测帧间预测即传统的运动估计ME 加运动补偿MC,H. 264 的运动估计更精准、快速,效果更好。
1)多变的宏块大小传统的运动估计块大小是16 × 16,由于运动物体复杂多变,仅使用一种模式效果不好。H. 264 采用了7 种方式对一个宏块进行分割,分别为16 × 16、16 × 8、8 × 16、8 × 8、8 × 4、4 × 8、4 × 4,每种方式下块的大小和形状都不相同,这就使编码器可以根据图像的内容选择最好的预测模式。实验表明,与仅使用16 × 16 块进行预测相比,使用不同大小和形状的块可以使码率节省15% 以上。
2)更精细的像素精度在H. 264 算法中,Luma 分量的运动矢量MV 使用1/ 4 像素精度。Chroma 分量的MV 由Luma MV 导出,由于Chroma 分辨率是Luma 的一半(YUV4: 2: 0),所以其MV 精度将为1/ 8。如此精细的预测精度较之整数精度可以使码率节省超过20%。
3)更多参考帧H. 264 支持多参考帧预测(Multiple Reference Frames),即可以有多于1 个(最多5 个)的在当前帧之前解码重建的帧,作为参考帧产生对当前帧的预测(Motion- compensated Prediction)。这特别适用于视频序列中含有周期性运动的情况。
4)环路滤波环路滤波(Loop Filter)的作用是,消除经反量化和反变换后重建图像中由于预测误差产生的块效应,从而一方面改善图像的主观质量,另一方面减少预测误差。与以往的Deblocking Filter 不同的是,经过滤波后的图像将根据需要放在缓存中用于帧间预测,而不是仅仅在输出重建图像时用来改善主观质量,也就是说该滤波器位于解码环中,而非解码环的输出外,因而得名Loop Filter。
(4)整数DCT 变换
传统的DCT 是由浮点算法定点实现,所以IDCT 不是可逆的,容易造成解码图像的周围“拖尾”现象。H. 264 对帧内或帧间预测的残差(Residual)进行整数DCT 变换编码。新标准对DCT 的定义做了修改,使得变换仅用整数加减法和移位操作即可实现,这样在不考虑量化影响的情况下,解码端的输出可以准确地恢复编码端的输入。此外,该变换是针对4 × 4 块进行的,这也有助于减少块效应。为了进一步利用图像的空间相关性,在对色度(Chroma)的预测残差和16 × 16 帧内预测的预测残差进行上述整数DCT 变换之后,标准还将每个4 × 4 变换系数块中的DC 系数组成2 × 2 或4 × 4 大小的块,进一步做哈达玛(Hadamard)变换。
(5)熵编码
对于预测残差,H. 264 有两种熵编码的方式:基于上下文的自适应变长码CAVLC(Context- based Adaptive Variable Length Coding)和基于上下文的自适应二进制算术编码CABAC(Context- based Adaptive Binary Arithmetic Coding);如果待编码的数据不是预测残差这一类型,则H. 264 采用Exp- Golomb 码或CABAC 来编码,具体选用哪种编码类型视编码器的设置而定。
1)CAVLC
 可变字长编码VLC 的基本思想就是,对出现频率大的符号使用较短的码字,而出现频率小的符号采用较长的码字,这样可以使平均码长最小。在CAVLC 中,H. 264 采用若干VLC 码表,不同的码表有不同的概率模型。编码器能够根据上下文,如周围块的非零系数或系数的绝对值大小,在这些码表中自动地选择,最大可能地与当前数据的概率模型匹配,从而实现了上下文自适应的功能。
2)CABAC
算术编码是一种高效的熵编码方案,其每个符号所对应的码长被认为是分数。由于每一个符号的编码都与以前编码的结果有关,所以它考虑的是信源符号序列整体的概率特性,而不是单个符号的概率特性,因而它能够更大程度地逼近信源的极限熵,极大的降低码率。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 白细胞高红细胞高血尿怎么办? 早期肾癌术后复发该怎么办 肾结石因运动引起尿血怎么办 宝宝大便镜检阳性潜血怎么办 尿不尽刺痛带血怎么办 狗狗拉肚子拉血怎么办 肾血肿怎么办才吸收快 体检尿蛋白高3怎么办 肾炎会引起脸肿怎么办 12小孩尿蛋白3是怎么办 肝癌介入手术后肝功能不好怎么办 屁多且臭便秘怎么办 肝癌术1年后复发怎么办 怀孕便秘怎么办或大便太干拉不出 肠鸣便秘怎么办多尿 奥司他韦过量怎么办 憋的时间长尿痛怎么办 手过敏了怎么办最简单 肾结石不痛但是有血尿怎么办 儿童医院血液科挂不到号怎么办 搬完重物手抖怎么办 弯腰搬重物腰疼怎么办 搬了重物后腰疼怎么办 例假不走公务员体检血尿怎么办 憋尿久了尿不出来怎么办 憋尿引起的总有尿意怎么办 如果孕妇憋尿了怎么办 孕妇憋尿半个月怎么办 尿憋久了排空后膀胱疼怎么办 胸疼肚子疼不规则流血怎么办 上小便下面会痛怎么办 两岁宝贝憋尿怎么办 打激素脸胖了怎么办 医生写的病历看不懂怎么办 怀孕尿蛋白3个加怎么办 两周岁宝宝牙齿坏掉怎么办 前列缐炎引起尿血怎么办 牙齿牙根长在神经里怎么办 牙齿杀完神经牙根发炎怎么办 牙齿有大洞好疼怎么办 大门牙有蛀牙了怎么办