H.264编码器基本原理

1.编码器在这里插入图片描述

相关概念

编码器采用的是变换和预测的混合编码法:采用混合编码时候主要将图像分为固定大小的块,对块进行压缩编码处理。

1.混合编码:即将预测编码和变换编码结合起来。
  1.1 预测编码:
    1.1.1 帧内预测:主要基于人眼对不同频率的亮度敏感度不同。将实际像素和参考像素相减,得到差值,到接收端把预测值加上差值得到实际像素值。主要解决的是空间冗余问题。
    1.1.2 帧间预测:利用帧间的相关性,即利用已编码视频帧/场和基于块的运动补偿的预测模式进行编码。帧间相关性比帧内相关性强。主要解决的是时间冗余问题。
  1.2 变换编码:包括如K-L变换、离散余弦变换(DCT)等等。主要通过图像的高频和低频部分进行变换。
    1.2.1 K-L变换:用图像的每行阵列进行变换
    1.2.2 DCT变换:一般将图像分为多个块,以块为单位进行DCT变换。

1.视频的一场或一帧都是可产生一个编码图像
2.通过比较当前帧与前一阵得出运动矢量MV,将比较的MV输入运动补偿预测期,可得到预测图像。

运动补偿的概念

1.通过比较当前帧与前一帧得出运动矢量MV,将比较的MV输入运动补偿预测期,可得到预测图像。
2.前向参考帧预测当前帧称为前向运动补偿,利用后向参考帧预测当前帧称为后向运动补偿,利用前后向同时预测的就称为双向预测运动补偿
3.重叠块运动补偿OBMC,采用OBMC时候,一个像素的预测不仅基于他所属的MV估计,也基于相邻的MV估计。

运动估计的概念,运动矢量的概念

1.帧间预测中,因为邻近帧存在相关性, 可将活动图像分为若干块/宏块,并设法搜索出每个块或宏块在邻近帧图像的位置,得出两者的空间位置的偏移量,得到的偏移量即所指的运动矢量MV,这个过程为运动估计。

熵编码概念 CAVLC(基于上下文自适应的可变长编码)

1.利用信源的统计特性进行码率压缩的编码就称为熵编码,也叫统计编码熵编码,主要包括变长编码和算术编码。
2.熵编码是无损压缩编码方法,它生成的码流可以经解码无失真地恢复出原数据
3.熵编码的输入参数为帧内/帧间预测残差经过变换-量化后的系数矩阵。数据压缩的一个基本的途径是去除信源的符号之间的相关性,尽可能地使序列成为无记忆的,即前一符号的出现不影响以后任何一个符号出现的概率。

CAVLC基本原理

根据已编码句法元素的情况动态调整编码中使用的码表,有很高的压缩比。CAVLC用于亮度和色度残差数据的编码,CAVLC充分利用残差经过整数变换、量化后数据的特性进行压缩,进一步减少数据中的冗余信息。

CAVLC的上下文模型

CAVLC中上下文模型的选择主要体现在两个方面:非零系数编码所需表格的选择以及拖尾系数后缀长度的更新。

量化的概念

因为经过取样的脉冲信号在时间上是离散的,但在幅值上空间上仍是连续的,即其可能取的值有无限多个,所有要将其可能的取值进行四舍五入,由无限多个变为有限多个,即将这种信号幅值由连续量变为离散量的过为量化。
量化后进行PCM编码,将量化信号变为0,1表示。

H.264的功能分为两层

视频编码层(VCL)和网络提取层(NAL,Network Abstraction Layer)。VCL数据即编码处理的输出,它表示被压缩编码后的视频数据序列。在VCL数据传输或存储之前,这些编码的VCL数据,先被映射或封装进NAL单元中。

经过压缩后的帧分为:I帧,P帧和B帧

I帧:关键帧,采用帧内压缩技术。
P帧:向前参考帧,在压缩时,只参考前面已经处理的帧。采用帧间压缩技术。
B帧:双向参考帧,在压缩时,它即参考前面的帧,又参考它后面的帧。采用帧间压缩技术。

滤波概念

编解码器反变换量化后图像会出现方块效应。其产生的原因有两个:①基于块的帧内和帧间预测残差的DCT变换。变换系数的量化过程相对粗糙,因而反量化过程恢复的变换系数带有误差,会造成在图像块边界上的视觉不连续。
②第二个原因来自于运动补偿预测。运动补偿块可能是从不是同一帧的不同位置上的内插样点数据复制而来。因为运动补偿块的匹配不可能是绝对准确的,所以就会在复制块的边界上产生数据不连续。

编码流程

1.通过采集到视频帧,送到H264缓冲区中,编码器将视频帧中的每一幅图片划分为宏块,在某些复杂的部分,还可细分为更小的子块进行处理。
2.选择帧内压缩或者帧间压缩:
  2.1 帧内压缩:通过将当前像素值经过一维/二维的预测函数得到预测像素,将原始图像和预测图像的每个像素值进行相减的得到残差值,先将预测信息暂存起来。对残差数据进行变换编码(DCT变换/K-L变换,主要是去除掉块内的空间冗余,即像素间的相关性),变换后还需要经过量化将脉冲信号从无限变有限,即减少视觉恢复中不必要的信息,再对这个数据进行熵编码(CABAC压缩),即无损压缩编码方法,(这个过程主要是给高频的数据短码,低频的数据长码,以及根据上下文相关性压缩),经过压缩后的数据会暂存到NAL单元内。
  2.2帧间压缩:在编码器将帧分组后,编码器会按顺序从缓冲区取出头部两帧数据,进行宏块扫描,当发现其中一个物体时,在另一帧也发现该物体,则进行运动矢量的计算,得到运动矢量MV后(得到运动矢量的过为运动估计),将两帧图像相同部分减去,就得到补偿数据,暂存到NAL单元内,然后将运动矢量和补偿数据发送到解码端进行解码。

2.解码器

在这里插入图片描述
1.输入参数为NAL压缩后的存储数据,经熵解码得到量化后的一组变换系数X,再经反量化、反变换,得到残差Dn’。利用从该比特流中解码出的头信息,解码器就产生一个预测块PRED,该解码器产生的PRED与残差Dn’相加后,就产生uFu’,再经滤波后,最后就得到滤波后的Fn’,这个Fn’就是最后的解码输出图像。

猜你喜欢

转载自blog.csdn.net/weixin_43917045/article/details/126712054