发明内容
本发明揭示一种视频编码方法,用于确定符合条件的帧宏块的编码模式,可以提高编码效率。
一种视频编码方法,包括:确定视频第一帧各宏块的编码模式;设置预测模型;分析预测模型内各宏块的编码模式,如符合第一条件,则确定当前宏块的编码模式;如不符合第一条件,则顺序搜索其他帧间编码模式,判断是否符合第二条件;如符合第二条件,则确定当前宏块的编码模式;如不符合第二条件,且预测模型内各宏块的编码模式不包含帧内模式,则搜索帧内模式,确定当前宏块的编码模式。
在较佳实施例中,通过对视频第一帧进行全搜索的方式来确定视频第一帧各宏块的编码模式。
在较佳实施例中,预测模型由当前宏块在参考帧的对应宏块、当前宏块的左宏块和当前宏块的上宏块组成;所述参考帧为当前帧的前一帧。
在较佳实施例中,按照skip、16*16、16*8、8*16、8*8的编码模式顺序搜索预测模型内各宏块的编码模式。
在较佳实施例中,当搜索到预测模型内宏块的编码模式为skip模式时,计算该skip模式的率失真代价,
若最小率失真代价小于等于Th1,且率失真代价小于等于最小率失真代价*α,则确定当前宏块编码模式为该skip模式;
若最小率失真代价大于Th1并小于等于Th2,且率失真代价大于等于最小率失真代价*β1而小于等于最小率失真代价*β2,则确定当前宏块编码模式为该skip模式;
若最小率失真代价大于Th2,且率失真代价大于等于最小率失真代价而小于等于最小率失真代价*γ1或者率失真代价小于等于最小率失真代价*δ,则确定当前宏块编码模式为该skip模式。
在较佳实施例中,Th1为3800,Th2为10000,α为1.05,β1为0.91,β2为1.07,γ1为1.10,δ为0.80。
在较佳实施例中,当搜索到预测模型宏块的编码模式为非skip模式时,计算所述宏块编码模式下的率失真代价,若率失真代价小于最小率失真代价,则确定当前宏块编码模式为所述宏块的编码模式。
在较佳实施例中,当搜索到其他帧间编码模式为skip模式时,计算该编码模式下的率失真代价,若率失真代价小于等于最小率失真代价*1.10,则确定当前宏块编码模式为该skip模式;当为其他帧间编码模式时,计算该帧间编码模式下的率失真代价,若率失真代价小于Th3,则确定当前宏块编码模式为该帧间编码模式。
在较佳实施例中,所述的最小率失真代价为前一帧相应宏块的最小率失真代价。
由于本发明揭示的编码方法利用当前宏块的相邻宏块和参考帧的对应宏块预测宏块的编码模式,可以使宏块可能的最佳编码模式首先得到搜索,有选择的减少了帧内模式的搜索次数,节省了编码时间。
具体实施方式
下面结合附图对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征能更易于被本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。
在本发明实施例中,主要以是先搜索到当前宏块的最佳编码模式,也可以是先搜索最有可能为最佳模式的编码模式,其满足设定的条件则不需要进行其他编码模式的搜索,否则搜索其他的编码模式。
视频序列在空间和时间上都存在很大的相关性,统计表明,当前宏块与其左、上相邻宏块和参考帧的对应宏块(这三者组成本发明实施例的预测模型)三个之一有相同编码模式的概率为60%~89%。而当预测模型中有skip模式时,当前宏块最佳模式为skip模式的概率为64%~99%。因此,用相邻宏块的编码模式来预测当前宏块的编码模式,可以减少宏块的搜索模式个数,节省编码时间。
Skip模式就是直接利用预测的运动矢量对应的宏块的像素值作为当前宏块的像素值,其编码时不需要对像素残差和运动矢量残差进行编码。因此该模式需要的编码比特数最少,且不需要进行复杂的运动估计,编码时间短。其他编码模式不具备这个特点,所以无法直接进行编码模式的替换。
仅仅使用前一个显示的基准帧来编码的帧被称为“P帧”,同时使用前一个显示帧和未来帧作为基准帧进行编码的帧称为“B帧”。
如图1和2所示,frame(i)为当前帧,frame(i-1)为参考帧。Xi为当前宏块,则XLi,XUi和Xi-1组成预测模型,相应XLi,XUi和Xi-1这三个宏块的编码模式作为当前宏块的预测编码模式。然后对这三个预测编码模式进行搜索,进行运动估计和率失真计算,率失真代价最小的模式就是当前宏块最佳的编码模式。考虑到skip模式的特点,为了减少编码时间,所以优先考虑先搜索skip编码模式。
本发明的视频编码方法,以当前宏块的左、上两个相邻宏块和前一帧上对应位置宏块为该宏块的预测模型,具体视频编码方法的流程图参见附图3所示。主要步骤包括S1确定视频第一帧各宏块的编码模式,此处采取全搜索的方式确定各个宏块的编码模式;S2设置预测模型,根据当前宏块在前一帧的对应宏块和当前宏块的上宏块、左宏块组成;S3设置预测编码模式,即预测模型内各宏块的编码模式;S4搜索预测编码模式并判断是否符合第一条件,其中的判断条件为根据率失真代价、最小率失真代价及相应阀值决定;如果满足第一条件,则确定S7当前宏块的编码模式;如果不满足第一条件,则S5搜索其他帧间编码模式,判断是否符合第二条件;如果符合第二条件,则确定S7当前宏块的编码模式;如果不符合第二条件,S6若预测编码模式不包含帧内模式,则搜索帧内编码模式,确定S7当前宏块的编码模式。
对视频序列的第一个P帧采用全搜索的方式,可以按照skip,16*16,16*8,8*16,8*8,intra(即帧内)的编码模式分别对P帧内各宏块的编码模式进行搜索和确定。因为要用第一个P帧内宏块的编码模式来预测后面帧的编码模式,这样可以提高预测的准确度和编码的效果。
对于第二个及以后的P帧,其左边和上边序列的宏块,采用全搜索或者其他方式确定各宏块的编码方式,而对符合能够构建预测模型的宏块,其编码方式的确定如下:
首先确定当前宏块的预测编码模式;
该预测编码模式即其左、上相邻宏块和参考帧的对应宏块的编码模式,并对这三个模式从小到大进行排序,目的是为了可以首先搜索到skip模式,因为对于运动缓慢的序列,skip编码模式占了半数以上的比例。在这里,用当前宏块的左边相邻块、上面相邻块和参考帧中相同位置的宏块的编码模式作为预测模型。
按顺序搜索预测模型的预测编码模式,对每种预测编码模式做运动估计并计算率失真代价。这里的运动估计就是用的AVS中的算法,计算率失真的目的是为了选择最佳的编码模式,代价最小的模式就是最佳的。
本实施例中主要根据相应块的最小率失真代价Thresh_rdcost来判断宏块运动剧烈程度。率失真代价对每个宏块在每种模式下都进行计算。率失真代价与具体阀值的选取条件如下:
RDCost=Distortion+λ*Rate
其中,Distortion是原始图像宏块与重建宏块的绝对差值和;λ是拉格朗日参数;Rate是编码当前块的残差、运动矢量等需要的比特数。
对于每个帧间宏块,共有skip,16*16,16*8,8*16,8*8,intra这六种模式,每种模式下都按上面的公式进行计算。宏块最后选择的编码模式就是这六种模式中率失真代价最小的模式,而这个最小的代价值也称为该宏块的最小率失真代价。而对于提案中用到的阈值Thresh_rdcost,是前一帧对应宏块的最小率失真代价。对于该宏块所有的模式,该阈值不变。当然对于实际情况中的帧间模式选择,宏块进行全部六种模式搜索的可能性不大,那么该宏块的最小率失真代价就是搜索的几种模式中率失真代价的最小值。
当搜索的预测编码模式为skip模式时,根据视频的运动剧烈程度选择相应的阈值,当skip模式下的率失真代价rdcost满足阈值条件时,则结束模式选择,确定当前宏块编码模式为该skip模式;否则进行下一步。
当Thresh_rdcost<=Th1时,判断该宏块为缓慢运动,若满足
rdcost<=Thresh_rdcost*α,则确定当前宏块的编码模式为该skip模式,结束模式选择;否则进行下一步。
当Th1<Thresh_rdcost<=Th2时,判断该宏块为中等运动,若满足
Thresh_rdcost*β1<=rdcost<=Thresh_rdcost*β2,则确定当前宏块的编码模式为该skip模式,结束模式选择;否则进行下一步。
当Thresh_rdcost>Th2时,判断该宏块为剧烈运动,若满足
Thresh_rdcost<=rdcost<=Thresh_rdcost*γ1或者rdcost<=Thresh_rdcost*δ,则确定当前宏块的编码模式为该skip模式,结束模式选择;否则进行下一步。
本实施例中所描述的参数都是多次试验得出的经验数值,实验中选取的数值为:Th1=3800,Th2=10000,α=1.05,β1=0.91,β2=1.07,γ1=1.10,δ=0.80,但是这些数值可以略有浮动。
当搜索的预测编码模式为非skip模式时,计算该预测编码模式下的率失真代价,判断该模式下的率失真代价rdcost是否满足以下条件:rdcost<Thresh_rdcost,若满足该条件,则确定当前宏块的编码模式为该预测编码模式,结束模式选择;否则进行下一步。
上述的模式选择主要是针对预测模型内的预测编码模式,并且按照分skip和非skip模式两种情况来考虑。这里得到的最佳模式只是这几种预测模式中是最好的,最佳模式就是其率失真代价最小。rdcost<Thresh_rdcost是预先定义的,就是把Thresh_rdcost作为一个阈值,满足这个条件说明当前模式已经够好了,不要搜索其他模式了。该阀值可以视实际需要进行微调。
如果上述预测模型内的预测编码模式都不满足条件,还没法确定当前宏块的编码模式,则需要对预测编码模式之外的其他编码模式进行搜索。
如果搜索到的其他编码模式为skip模式时,若满足
rdcost<=Thresh_rdcost*γ1,则确定当前宏块的编码模式为该skip编码模式,结束模式选择;当该其他编码模式为非s ki p模式时,若满足rdcost<=Th3,则确定当前宏块的编码模式为该其他编码模式,结束模式选择;否则进行下一步。
此处的Th3=1+
Bsize[mode]/(Thresh_rdcost*Thresh_rdcost)-AlphaThird[mode],
Bsize[mode]和AlphaThird[mode]的值与搜索模式有关,不同模式下数值不同。
如果上述预测模式和其他帧间模式都不满足提前结束模式选择的条件,没法确定当前宏块的编码模式,而且帧内模式不在预测编码模式之中,则最后进行帧内模式搜索,根据帧内模式,确定当前宏块的编码模式。实际应用中,帧内模式应用的概率非常小。
通过上述描述,本发明所揭示的视频编码方法,利用宏块的相邻宏块和参考帧的相应宏块编码模式来预测当前宏块的编码模式,可以使宏块可能的最佳编码模式首先得到搜索,打破了全搜索一成不变的从skip到8x8的搜索顺序。而且利用宏块最佳模式为skip模式时的特性,设置一些阈值,可以提前结束模式选择过程,有选择的减少了帧内模式的搜索次数,节省了编码时间。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本领域的技术人员在本发明所揭露的技术范围内,可不经过创造性劳动想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书所限定的保护范围为准。