Duanxx的HEVC学习(三)HEVC编码框架(三)帧间预测

1.1 帧间预测简要说明

         帧间预测(inte-Prediction),是针对一个视频序列或其子序列在时序上的图像信息预测模式,它主要用于消除视频序列中的时间上的信息冗余。

         关于时间冗余,理解起来很简单,一般来说,我们的视频中的背景基本上是没有变化的,只是人或者其他的什么物体在移动,首先,背景在时间上就存在冗余,既然当前帧和前一帧的背景基本上是一样的,那么直接用前一帧的背景,做一定的处理后,替换当前的背景就得了,没必要在编码当前的背景;其次,当前画面中的移动的物体或者人在两帧图像之间基本上算是在平移的,既然基本上是平移,那么直接将前一帧图像中移动的人或者物体,加上一个向量,让它基于背景做一个平移,就可以得到当前的图像了,这样的话,当前帧移动的物体或者人就不用编码了,直接由前一帧图像中对应的移动的物体或人平移一下就可以了

 

下面举个简单的例子:

         我从一段视频中提取了其中连续的三帧图像。很容易看出,这三幅图像中的背景基本上是不变的,在传输是可以考虑只传输一个背景就够了。而图像中间的那个人在三幅图像中感觉也没什么太大的变化,就是在图像中的相对位置有了一些改变,那么我也只需要对这个人做一次编码,后面的图片中只需要将人想对于背景最一点点的平移就足够了。

.


图1

Duanxx的HEVC学习(三)HEVC编码框架(三)帧间预测_第1张图片

图2

Duanxx的HEVC学习(三)HEVC编码框架(三)帧间预测_第2张图片

图3


当然,上面这个例子是比较理想的,只是为了理解方便,在MPEG4中也考虑过对于这种基于背景和前景的帧间预测,不过貌似效果并没有想想的那么好。

        

1.2 关于视频序列

         在编码时,会将一个视频序列分成一个个视频子序列,这些子序列是基于相同或相似背景的,就像上面的例子中一样,对这些基于不同背景分割出来的视频子序列分别作帧内压缩,可以得到很要的压缩效果,当然这也是理想的,因为我们要自适应的根据背景分割视频子序列,还是比较麻烦的。

 

         一种简单的方法就是将视频序列按照等长划分,将视频划分成一个个等长的视频子序列,再这列子序列里分别作帧内(这个可以参看《Duanxx的HEVC学习(三)HEVC编码框架(二)帧内预测》)和帧间预测,HM代码中将这个子序列叫做Gop,也就是一个Group的视频,其结构如图4:

Duanxx的HEVC学习(三)HEVC编码框架(三)帧间预测_第3张图片

图4

在1.1的例子中,三幅图像是我们看到的视频的播放顺序,但是在编码的时候呢并不是按照视频顺序编码的,在图4中,POC是是图片的计数,是播放顺序,而Decode Order是解码顺序,同时也是编码顺序。

         其中,I帧做的是帧内预测,P帧做的是向前帧间预测,而B帧做的是双向帧间预测。关于这些会在后面的文章中说明,此处只是为了参悟一下编码时的视频序列问题。

 

二 、 帧间预测编码回路

         帧间预测的整个回路如图5所示:

Duanxx的HEVC学习(三)HEVC编码框架(三)帧间预测_第4张图片

图5


Step1:

         图像被分割成CTU后,首先沿着红色的线进入(1)运动估计中,可以看到,Motion Estimation也是有两个输入的,左边是原始的图片,右边是经过滤波的解码后的图片。运动估计的作用主要是在解码后的图片中找到和当前色块最相似的色块,而MV指的就是从当前色块,如何找到参考图像中对应的匹配色块。

         Theencoding process for interpicture prediction consists of choosing motion data comprising the selected reference picture and motion vector(MV) to be applied for predicting the samples of each block. The encoder anddecoder generate identical interpicture predictionsignals by applying motion compensation (MC) using the MV and mode decision data,which are transmitted as side information.

         由上面这段话可以知道,motion Compensation主要就是基于MV做运动补偿,在编码器和解码器得到相同的帧间预测。

         这里的Motion Data就是MV和一些相关的预测模式,而解码器,就是基于Motion Data,做Motion Compensation,进而得到当前图片的inter-Prediction。

 

         (3)(4)(5) 的作用和帧内预测是一样的,可参看《Duanxx的HEVC学习(三)HEVC编码框架(二)帧内预测》。

 

         关于(6)的滤波,这里需要说明一下,因为预测的值和真实值无论怎样都是有一定的差别的,并且随着压缩率的提高,这种差别就会越来越明显,并且,在做预测的时候,都是按照一个色块一个色块的来编码的,也就是说,在解码之后的图片也是以色块为单位出现差别的,更专业的说法叫做相关性弱。

         由于预测的失真,导致了相邻色块的相关性不强,甚至出现很大的差别,当这种差别比较大的时候,就出现了一种有意思的现象:马赛克

         (6)是滤波模块,说白了,就是尽量的消除相邻色块在边界上的差异,也就是去马赛克。

 

你可能感兴趣的:(HEVC,帧间预测,编码框架)