[转载]帧编码和场编码(续)

帧编码和场编码
原始视频帧(最原始的视频数据)根据编码的需要,以不同的方式进行扫描产生两种视频帧:连续或隔行视频帧,隔行视频帧包括顶场和底场,连续(遂行)扫描的视频帧与隔行扫描视频帧有着不同的特性和编码特征,产生了所谓的帧编码和场编码。一般情况下,遂行帧进行帧编码,隔行帧可在帧编码和场编码间选取。
在帧编码中,参考为帧图像,采用帧运动补偿,两个场是联合编码,;在场编码中,参考为场图像,两个场是分别编码,采用场运动补偿。
二、视频序列帧、场编码方式
1.固定帧编码(全帧)----视频序列的全部帧始终采用帧编码方式。
2.固定场编码(全场)
视频序列中帧被分成两个场独立编码。编码规则:
(1)I帧可编码成两个I场或一个I场和一个P场,即II、IP.
(2)P帧可编码成两个P场或一个P场和一个B场,即PP、PB.
(3)B帧可编码成两个B场,即BB.
3.图像级帧、场自适应编码 (PAFF)
4.宏块级帧、场自适应(MBAFF)
H.264采用的MBAFF方案:
在图像中运动比较大的地方采用场编码,运动比较小的地方采用帧编码,编码顺序例子如下:
H.264中的Slice和Slice Group
图像映射成Slice Group,就是把宏块或者宏块对进行映射成不同的Slice Group(Slice Group,0、Slice Group,1等等),在不同的Slice Group中再进行分成Slice ,相对于Slice Group来说,Slice 包含Slice Group内部按照光栅扫描顺序排列的整数个宏块或宏块对,但是若是相对于图像来说并不一定是按光栅扫描的顺序连续排列的,因为中间经过了图像到Slice Group的映射。Slice Group的提出是为了采用FMO实现错误隐藏。若是采用映射,那么在同一Slice Group中的相邻宏块在实际图像中不一定是相邻的,那么当某一个Slice Group内的Slice 的宏块发生丢包等错误的时候,就可以利用其他Slice Group内的Slice的宏块对其进行预测恢复,因为其他Slice Group中的宏块或宏块对与该丢失宏块或宏块对在位置上是相邻的,相关性最强,预测误差最小。当不采用Slice Group的时候,若是Slice的宏块发生错误,那么就导致一部分空间位置相邻的宏块或宏块对无法解出,那么就得利用周边宏块或宏块对对其进行预测,这样的预测效果随着越靠近出错区域中心越差。显然,采用Slice Group方法的预测效果要好。如图所示
若红色边框区域发生错误,也即某Slice0发生错误,那么上图中该区域宏块对应的原始图像的位置如左边所示,由Slice Group1恢复Slice Group0 ,由其空间相关性可知恢复效果应该会不错。
但是下图的情况就不一样了,两个片的空间相关性没那么强,恢复效果比上一种方法差。