背景技术
高效的视频编解码技术是实现高质量、低成本多媒体数据存储与传输关键。现在比较流行的图像编码国际标准都是采用基于块匹配的运动补偿、离散余弦变换和量化相结合的编码方法。典型的有国际标准化组织/国际电工技术委员会第一联合技术组(ISO/IEC JTC1)推出的MPEG-1,MPEG一2和MPEG-4等国际标准,以及国际电信联盟(ITU-T)提出的H.26x系列推荐。这些视频编码标准在工业界得到了广泛应用。
这些视频编码标准都采用了混合视频编码(Hybrid Video Coding)策略,通常包括:预测、变换、量化和信息熵编码等四个主要模块。预测模块的主要功能是利用已经编码并重建的图像对当前要编码的图像进行预测(帧问预测),或者利用图像中已经编码并重建的图像块(或宏块)对当前要编码的图像块(或宏块)进行预测(帧内预测);变换模块的主要功能是将输入的图像块变换到另外一个空间,使输入信号的能量尽可能地集中在低频变换系数上,进而降低图像块内元素之间的相关性,有利于压缩;量化模块的主要功能是将变换的系数映射到一个有利于编码的有限元素集上;信息熵编码模块的主要功能是根据统计规律,将量化后的变换系数用变长码表示。视频解码系统包含相似的模块,主要是将输入的码流通过熵解码、反量化、反变换等过程重建解码图像。
基于运动补偿的预测的主要功能是消除视频序列在时间上的冗余。视频编码的大部分编码效率来自于预测模块。视频编码过程就是对视频序列的每一帧图像进行编码的过程。常用的视频编码系统对每一帧图像的编码是以宏块为基本单元进行的。在编码每一帧图像时,又可以分为帧内(I帧)编码、预测(P帧)编码和双向预测(B帧)编码等情况。一般来说,编码时,I帧、P帧和B帧编码是穿插进行的,比如按照IBBPBBP的顺序。
B帧的编码可以使得编码压缩效率达到200∶1以上的码率。对B帧中的宏块进行编码需要包括:直接(Direct)、前向预测(Forward Prediction)、后向预测(Backward Prediction)和双向预测(Bi-directional Prediction)四种模式。由于B帧技术需要同时进行前向与后向的运动估计,因此需要较高的运算复杂度,同时为了区分前后向运动矢量要引入额外的标识信息。
在传统的视频编码标准(如MPEG-x系列与H.26x系列)中,B帧的参考帧均只有一个前向参考帧与一个后向参考帧,而P帧则只有一个前向参考帧。为了更加充分的利用图片之间的时域相关性,已经允许P帧和B帧有多个前向参考帧。但是这同时也将极大的增加空间与时间的开销,所以一种折衷的方式是采用固定的参考帧数来限制更大的时间与空间开销,事实上由于时域上图片之间的相关性随着距离越远,相关性就越弱,所以这种限定是合理的。
Direct编码模式是一种对前向和后向都进行预测的编码模式,B帧的前后向运动矢量由后向参考图片的运动矢量推导得到,可以不对运动矢量信息进行编码,因此可以减少编码运动矢量信息所占的比特数,有效地提高编码效率,因此应用非常广泛。
对于P,B帧,当采用固定参考帧数进行编码时,考虑P帧的前向参考要多于B帧的前向考帧数(B帧必须包括一个后向参考帧,而P帧没有),因此会造成运动矢量不匹配的问题,即:对于B帧,当进行运动矢量推导时,需要用到后向参考帧中每个块的运动矢量,由于后向参考帧是P帧,这样可能会造成运动矢量指向的参考帧超出B帧最大所能指向的前向参考帧;比如,如图1所示,当固定参考帧数为2帧时,B帧所能指向的参考帧为其相邻的2个P帧,而作为B帧后向参考帧的P帧的参考帧为该P帧之前的2个P帧,即P_REF_1和P_REF_0,当该P帧的运动矢量指向最前方的P帧P_REF_1时,该P帧超出了B帧最大所能指向的前向参考帧,计算得出运动矢量指向B帧无法达到的P_REF_1,因此,B帧无法获得进行编码的真正参考块,会使编码出现偏差,导致图像严重失真。
发明内容
本发明所要解决的技术问题在于:提供一种固定的参考帧数时,在Direct编码模式下,获得真正的图像参考块的方法。
本发明的技术方案包括如下步骤:
步骤一、针对当前B帧的每一块进行运动估计,获取后向参考帧相应块的运动矢量MV;
步骤二、判断该运动矢量是否超出了B帧最大所能指向的前向参考帧,如果没有超出,则执行步骤三;否则,执行步骤四;
步骤三、可以通过如下的公式计算当前块的前后向运动向量:
设MVF与MVB为当前块的前、后向运动向量,
tb是当前图像与前向参考图像在时域上的距离,td是前向参考图像与后向参考图像在时域上的距离;
步骤四、可以通过如下的公式计算当前块的前后向运动向量:
设MVF与MVB为当前块的前、后向运动向量,
tb是当前图像与前向参考图像在时域上的距离,td是前向参考图像与后向参考图像在时域上的距离;tb′为当前B帧与其所能指向的前向参考帧之间的时域距离;
步骤五、MVB与MVF所指向的两个图像块就为当前块所对应的图像参考块。
本发明通过采用同方向的指向B帧能获得的前向参考帧的运动矢量代替后向参考帧相应块的运动矢量,计算B帧的前向和后向运动矢量,解决了固定参考帧数时,可能出现的运动矢量不匹配的问题,并且可以最大限度的保证编码的效率。
具体实施方式
本发明的设计思想是首先要根据B帧后向参考帧的运动矢量进行判断,判断该运动矢量指向的前向参考帧是否超出了B帧最大所能指向的前向参考帧,如果没有超出,则采用通常的方式计算B帧的前向运动矢量,得到前向图像参考块;如果超出了范围,则采用通过缩小运动矢量的方法,使计算得到前向运动矢量不超出B帧最大所能指向的前向参考帧范围,可以获得真正的前向图像参考块。
本发明所述的定参考帧数直接编码模式下获取图像参考块的方法,在编码端进行图像编码,包括如下步骤:
步骤一、针对当前B帧的每一块进行运动估计,获取后向参考帧相应块的运动矢量MV;
步骤二、判断该运动矢量是否超出了B帧最大所能指向的前向参考帧,如果没有超出,则执行步骤三;否则,执行步骤四;
步骤三、可以通过如下的公式计算当前块的前后向运动向量:
设MVF与MVB为当前块的前、后向运动向量,
tb是当前图像与前向参考图像在时域上的距离,td是前向参考图像与后向参考图像在时域上的距离;
步骤四、可以通过如下的公式计算当前块的前后向运动向量:
设MVF与MVB为当前块的前、后向运动向量,
tb是当前图像与前向参考图像在时域上的距离,td是前向参考图像与后向参考图像在时域上的距离;tb′为当前B帧与其所能指向的前向参考帧之间的时域距离;
步骤五、MVB与MVF所指向的两个图像块就为当前块所对应的图像参考块。
获得图像参考块后,对两个参考块的像素取平均,求得最终的双向预测参考块,再将待编码的B帧宏块与双向预测参考块作差,获得块残差;对块残差进行编码,就完成了对该B帧的编码。
本发明采用B帧所能指向的前向参考帧代替超出B帧指向范围的前向参考帧,从而解决了超出范围,B帧无法获得图像参考块的问题。虽然这里得到的图像参考块并不是后向的P帧真正指向的图像参考块,但是由于真正的图像参考块无法获得,而本发明方法得到的图像参考块是与P帧真正指向的图像参考块相同方向的参考块,二者由于时域相关性而非常的接近,所以采用本方法可以保证编码效率不会变坏很多。如果采用固定的图像块(比如采用单色的图像块),则无法保证编码的效果;如果采用其他的方法来得到图像块,无法利用图像的时域相关性,编码的效果也同样无法预测。
为了保证最大限度了利用图像之间的时域相关性,对于步骤四中tb′为B帧所能指向的最接近P帧所指向的参考帧的前向参考帧,即当B帧不能达到P帧所指向的参考帧时,用B帧所能指向的与之最接近的前向参考帧来代替。
根据公式可以看出,本发明是选择同方向的运动矢量,只是长度缩小到B帧所能指向的范围,这种办法最好的利用了时域相关性,当用B帧所能指向的与之最接近的前向参考帧来代替P帧所指向的参考帧时,时域相关性得到了最大的利用。
本发明所述的步骤一中,获取后向参考帧相应块的运动矢量MV的方法有很多,由于后向参考帧是P帧,所以P帧每一个宏块都有一个运动矢量MV,步骤一的关键是宏块之间的对应,即B帧的一个宏块与P帧中的哪一个宏块对应,找到了对应的宏块,P帧该宏块的运动矢量MV即为B帧计算前向和后向运动矢量的基准。
一般采用位置相同的对应方法来确定B帧与后向参考帧是P帧的对应宏块,即后向参考P帧中与B帧位置相同的宏块作为对应宏块,不同的算法在对应方式上可能有所不同,但是任何一种对应方式都可能出现运动矢量超出B帧所能指向的范围。
本发明所述的方法可以适用于B帧的任何一种预测模式的编码。当前B帧的每一个宏块有前向、后向等多种预测模式,下面就最为常用的Direct编码模式为例,以固定参考帧数为2,详细说明本发明的技术方案。
首先,对于待编码的B帧得到后向参考帧每一块相对于前向参考帧的运动矢量,这个运动矢量由于来自于P帧,因此,可能指向参考帧P_REF_0(见图2)或P_REF_1(见图3)。
通过已经得到的后向参考帧每个块的运动矢量,得出用于B帧当前块direct mode运动矢量推导的向量MV(x,y),这个运动矢量可以是来自于后向参考图像与当前块空间位置一致的块,如图1所示当前块的direct modepartition与co-located partition,当然也可以是以其他方法推导出来的,图中1表示当前编码块,2表示P帧位置相同的对应块,其他图中的标记的含义相同。
当指向的参考帧为P_REF_0时,如图2所示,该参考帧没有超出B帧所能指向的前向参考帧的范围,当前块的前后向运动矢量根据后向相应块的运动矢量推导得到:
MVF与MVB则是当前块相应的前向运动矢量与后向运动矢量。这里tb是当前图像与前向参考图像在时域上的距离,td是前向参考图像与后向参考图像在时域上的距离,MV表示后向参考图像相应部分相对于前向参考帧的运动矢量。
当指向的参考帧为P_REF_1时,如图3所示,该参考帧超出了B帧所能指向的前向参考帧的范围,该参考帧的图像宏块,B帧无法得到,所以需要用P_REF_0中的图像块来代替P_REF_1中的图像块,因此,当前块的前后向运动矢量为后向相应块的运动矢量推导按如下方式得到:
tb′为当前B帧与前向参考帧P_REF_0之间的时域距离,MVF与MVB则是当前块相应的前向运动矢量与后向运动矢量。这里tb是当前图像与前向参考图像在时域上的距离,td是前向参考图像与后向参考图像在时域上的距离,MV表示后向参考图像相应部分相对于前向参考帧的运动矢量。
由于MVB与MVF所指向的两个图像块就为该宏块所对应的图像参考块,获得图像参考块后,对两个参考块的像素取平均,就可以求得最终的双向预测参考块,再将待编码的B帧宏块与双向预测参考块作差,获得块残差;对块残差进行编码,就完成了对该B帧的编码。
解码的过程是编码的逆过程:步骤如下:
首先要判断当前块的预测模式,如果为direct mode时,进行以下的步骤;如果为其他的编码模式,按相应的步骤进行;
从码流中获得后向参考帧中用于推导的运动矢量MV;如果运动矢量MV相应的的参考帧不超出B帧最大所能指向的前向参考帧时,可以通过如下的公式获得前后向运动向量:
MVF与MVB则是当前块相应的前向运动矢量与后向运动矢量。这里tb是当前图像与前向参考图像在时域上的距离,td是前向参考图像与后向参考图像在时域上的距离,MV表示后向参考图像相应部分相对于前向参考帧的运动矢量。
如果运动矢量MV相应的的参考帧超出B帧最大所能指向的前向参考帧时,则通过如下的公式前后向运动向量:
tb′为当前B帧与前向参考帧P_REF_0之间的时域距离,通过对MVB与MVF所指的两个预测对应的像素取平均,就可以求得最终的双向预测参考块,将双向预测参考块与相应的块残差相加形成当前块图像块,完成整个的解码过程。
最后所应说明的是:以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。