从SP/SI的应用可知,SP帧分为主SP帧(Primary SP-Frame)和辅SP帧(Secondary SP-Frame)。其中,前者的参考帧和当前编码帧同属于一个码流,而后者则不属于同一个码流。如下图所示,主SP帧作为切换插入点,不切换时,码流进行正常的编码传输;而切换时,辅SP帧取代主SP帧进行传输。其中,Δ表示编码器的输入;⚪表示解码器的输出。由图可知,解码出来的是B2,而非辅SP。
下面描述SP帧实现的功能原理。SI帧的功能实现与SP帧相类似,都能恢复出相同的解码图像帧,只是前者利用的是帧间预测,而后者利用的则是帧内预测。
主SP帧的编码过程
主SP帧的编码过程如下图所示。从结构上看,与传统P帧编码不同之处在于:变换处理提到了求差值,即前者的预测残差是变换系数的差值。改进的目的在于使得主SP和辅SP两种SP帧的编码器能相结合。主SP帧的编码的具体过程如下:预测残差块P(x,y)是利用原始图像和已重建帧进行运动补偿预测得到的。对预测块P(x,y)和原始图像中相对应的块分别进行正向变换,然后用量化参数SPQP对预测块P(x,y)的变换系数进行量化和反量化,得到系数。从原始图像中相对应的变换系数中减去
就得到预测残差
,然后
用量化参数PQP进行量化,其结果
和运动矢量一起传送到多路复用器。
在这个编码器中,用于对也就是对预测重构块系数进行量化的量化参数SPQP与对预测残差系数
进行量化的量化参数PQP没有必要相同。因此可对预测块系数采用不同于对预测残差系数采用的、引入失真更小的量化参数,以使产生的重建误差更小。
以主SP帧A2的编码过程为例,如下图所示。与P帧编码过程相比,主SP帧的编解码过程有所不同。视频序列中帧A2和A1分别经过变换处理,得到的变换系数计算出变换系数差值,再进行量化和熵编码,最终得到主SP帧的编码。
这里主SP帧编码过程相比于P帧的就是多加了几个量化,没有特别需要说明的,继续看解码过程,解码该怎么办是我比较好奇的地方。
主SP帧的解码过程
下图描述了主SP帧的解码原理图。
获得预测块P(x,y),后进行正变换,变换后得到的系数记为,将编码端输出的已经量化的预测残差系数
采用量化参数PQP进行反量化,得到的系数记为
。
与
的和记为
,重建系数
采用量化参数SPQP进行量化和反量化,并对反量化后获得的
进行反变换和滤波即得重建图像。
以主SP帧A2的解码过程为例,如下图所示。看起来主SP的解码也没什么特殊的,继续好奇辅SP的编解码。
辅SP帧的编码过程
设以作为预测帧时,主SP帧的重建图像为
,
由重建系数
做反量化和反变换得到。假设另一预测帧为
,若要得到与主SP帧具有相同重建图像
的辅SP帧,所要做的就是找到新的重建系数
,使得利用
而不是
也能准确地重建图像
。对
进行变换并量化,量化后的系数记为
,则辅SP帧的预测残差系数
,可按照公式计算得到:
。
把计算得到的预测残差系数进行无损的熵编码。解码端生成
后,对
进行变换和量化,得到
,其值与编码端相同。
与接收到的预测残差系数
相加,得到重建系数
,对其进行反量化和反变换,就可以得到重建图像
,其与以
作为预测帧得到的主SP帧所重建的图像完全相同。辅SP帧的编码过程如下图所示。
个人认为原书中对辅SP帧的编码过程描述存在问题,因此上面两段按着个人理解做了一些修改,如有错误之处请指正。个人认为这里能重建出来的关键是能够在解码端生成。
辅SP帧的解码过程
下图是辅SP帧的解码原理图。首先获得预测块P(x,y),对于SP帧,P(x,y)是利用编码段端输出的运动矢量和参考帧索引等信息经过运动补偿预测得到。(对于SI帧,P(x,y)是利用编码端输出的帧内预测模式信息通过空间预测得到)然后,对P(x,y)进行正向变换,并将获得的变换系数量化,记为。
和量化后的预测残差系数
相加得到已经量化的重建系数
,
量化得到
,
反变换并加以滤波即得到重建图像。
理完这个编解码过程,个人感觉主SP帧的编解码是没什么难理解的,就是比普通P帧多了个量化。但是辅SP帧的编解码有点意思,再重复一下这篇文章的第一幅图,如下所示:
在辅SP编码的时候,利用的是重建A1和原始B2,得到A1和B2的差,编入码流。在辅SP解码的时候,利用重建A1与AB2的和,得到B2。