技术领域
[0001] 本
发明涉及一种视频
信号的处理方法,尤其是涉及一种在高效
视频编码HEVC(High Efficiency Video Coding)中基于运动和纹理特征的360度视频帧间快速编码方法。
背景技术
[0002] 360度视频通常是由多个相机组成的相机阵列采集周围
水平方向360度和垂直方向180度的场景信息,并应用拼接融合技术将所采集的多个视
角的视频进行合成得到。受限于现有的视频编码标准只能压缩二维平面视频,360度视频为兼容已有的HEVC和AVC(Advanced Video Coding)等视频编码标准,需要将360度视频投影到二维投影平面上才能进行编码压缩。目前,JVET已提出多种二维投影格式,如等矩形投影、立方体投影、八面体投影、分段球形投影等。
[0003] 360度视频数据量巨大,编码复杂度高,需要进行有效地快速编码,降低编码的计算复杂度,以满足其实际应用需求。由于360度视频特有的拍摄条件和需要从球面投影到二维平面这一变换过程,因此360度视频画面特点与传统的视频画面有着显著区别。而应用于传统的视频的快速编码并没有考虑360度视频的内容特性,其编码效率还可进一步提高。因此,有必要研究一种应用于360度视频的快速编码方法,以降低360度视频编码的计算复杂度,提高360度视频的编码速度。
发明内容
[0004] 本发明所要解决的技术问题是提供一种360度视频帧间快速编码方法,其在保证360度视频编码压缩后画面
质量不出现大幅度下降的前提下,有效地降低了360度视频编码的计算复杂度,提高了360度视频的编码速度。
[0005] 本发明解决上述技术问题所采用的技术方案为:一种360度视频帧间快速编码方法,其特征在于它基于HEVC视频编码标准,且仅用于对360度视频中的帧间编码帧进行快速编码,它包括以下步骤:
[0006] 步骤1:令class0、class1、class2分别表示三个预测编码模式集,预测编码模式集class0包含预测编码模式中的Skip模式、2N×2N merge模式;预测编码模式集class1包含预测编码模式中的2N×2N、2N×N、N×2N、N×N、2N×nU、2N×nD、nL×2N、nR×2N模式;预测编码模式集class2包含预测编码模式中的Intra 2N×2N、Intra PCM模式;在HEVC视频编码标准中,帧间编码帧中的最大编码单元的尺寸为64×64,最大编码单元的划分深度为0到3之间的整数;将360度视频中当前待编码的帧间编码帧定义为当前帧;
[0007] 步骤2:将当前帧分割为若干个尺寸为64×64的最大编码单元;
[0008] 步骤3:将当前帧中当前待处理的尺寸为64×64的最大编码单元定义为当前最大编码单元;
[0009] 步骤4:判断当前最大编码单元是否位于当前帧的最左侧或最上侧,如果是,则对当前最大编码单元进行递归划分得到的1个划分深度为0的尺寸为64×64的编码单元、4个划分深度为1的尺寸为32×32的编码单元、16个划分深度为2的尺寸为16×16的编码单元以及64个划分深度为3的尺寸为8×8的编码单元所构成的4层的四叉树从划分深度0开始到划分深度3为止自顶向下对各个编码单元进行遍历,对每个编码单元分别从class0∪class1∪class2中搜索出该编码单元的最优预测编码模式,然后执行步骤16;否则,执行步骤5;其中,符号“∪”为集合的并操作符号;
[0010] 步骤5:当当前最大编码单元位于当前帧的最右侧时,分别确定当前最大编码单元、当前最大编码单元的左侧最大编码单元、当前最大编码单元的上侧最大编码单元、当前最大编码单元的左上侧最大编码单元为运动
块还是为静止块;并获取当前帧的前一帧中与当前最大编码单元
位置相同的最大编码单元编码时的划分深度,记为DCol;获取当前最大编码单元的左侧最大编码单元中右侧两个尺寸为32×32的编码单元编码时的划分深度,记为DL;获取当前最大编码单元的上侧最大编码单元中下侧两个尺寸为32×32的编码单元编码时的划分深度,记为DT;获取当前最大编码单元的左上侧最大编码单元中右下侧一个尺寸为32×32的编码单元编码时的划分深度,记为DLT;
[0011] 当当前最大编码单元不是位于当前帧的最右侧时,在上述
基础上,再确定当前最大编码单元的右上侧最大编码单元为运动块还是为静止块;并获取当前最大编码单元的右上侧最大编码单元中左下侧一个尺寸为32×32的编码单元编码时的划分深度,记为DRT;
[0012] 上述,DCol、DL、DT、DLT、DRT的值为0到3之间的整数;
[0013] 步骤6:令dmin表示当前最大编码单元编码时的划分深度的搜索下限,并令dmax表示当前最大编码单元编码时的划分深度的搜索上限;
[0014] 若当前最大编码单元为运动块,则令dmin=0和dmax=3,然后执行步骤7;
[0015] 若当前最大编码单元为静止块,则当当前最大编码单元位于当前帧的最右侧时令dmin=min(DL,DT,DLT),并令然后执行步骤7;当当前最大编码单元不是位于当前帧的最右侧时令dmin=min(DL,DT,DLT,DRT),并令
然后执行步骤7;
[0016] 上述,ML表示当前最大编码单元的左侧最大编码单元,MT表示当前最大编码单元的上侧最大编码单元,MLT表示当前最大编码单元的左上侧最大编码单元,MRT表示当前最大编码单元的右上侧最大编码单元,min()为取最小值函数,max()为取最大值函数;
[0017] 步骤7:若dmin=0,则当前最大编码单元初始由1个尺寸为64×64的编码单元构成,然后执行步骤8;若dmin=1,则将当前最大编码单元初始划分为4个尺寸为32×32的编码单元,然后执行步骤8;若dmin=2,则将当前最大编码单元初始划分为16个尺寸为16×16的编码单元,然后执行步骤8;若dmin=3,则将当前最大编码单元初始划分为64个尺寸为8×8的编码单元,然后执行步骤8;
[0018] 步骤8:将当前最大编码单元中当前待处理的编码单元定义为当前编码单元;
[0019] 步骤9:当当前编码单元位于当前帧的最右侧时,分别确定当前编码单元、当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元为运动块还是为静止块;当当前编码单元不是位于当前帧的最右侧时,分别确定当前编码单元、当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元为运动块还是为静止块;并确定当前编码单元为边缘块还是为非边缘块;
[0020] 步骤10:若当前编码单元为运动块且当前编码单元位于当前帧的最右侧,则分两种情况,第一种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元均为静止块时,仅在class1∪class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11;第二种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元中至少一个为运动块时,如果当前编码单元为边缘块,那么仅在class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11;如果当前编码单元为非边缘块,那么仅在class1∪class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11;
[0021] 若当前编码单元为运动块且当前编码单元不是位于当前帧的最右侧,则分两种情况,第一种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元中至少三个为静止块时,仅在class1∪class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11;第二种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元中至少两个为运动块时,如果当前编码单元为边缘块,那么仅在class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11;如果当前编码单元为非边缘块,那么仅在class1∪class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11;
[0022] 若当前编码单元为静止块且当前编码单元位于当前帧的最右侧,则分两种情况,第一种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元均为静止块时,如果当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元的最优预测编码模式均为Skip模式或当前编码单元为非边缘块,那么仅在class0中搜索出当前编码单元的最优预测编码模式,再执行步骤11;其余情况,仅在class0∪class1中搜索出当前编码单元的最优预测编码模式,再执行步骤11;第二种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元中至少一个为运动块时,仅在class0∪class1中搜索出当前编码单元的最优预测编码模式,再执行步骤11;
[0023] 若当前编码单元为静止块且当前编码单元不是位于当前帧的最右侧,则分两种情况,第一种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元中至少三个为静止块时,如果当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元中至少三个的最优预测编码模式为Skip模式或当前编码单元为非边缘块,那么仅在class0中搜索出当前编码单元的最优预测编码模式,再执行步骤11;其余情况,仅在class0∪class1中搜索出当前编码单元的最优预测编码模式,再执行步骤11;第二种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元中至少两个为运动块时,仅在class0∪class1中搜索出当前编码单元的最优预测编码模式,再执行步骤11;
[0024] 步骤11:当当前编码单元的尺寸为64×64时,如果满足以下三个条件中的一个条件,则不继续对当前编码单元进行递归划分,执行步骤16;其余情况,将当前编码单元划分成4个尺寸为32×32的编码单元,然后执行步骤12;其中,条件1:dmax=0;条件2:当前编码单元为静止块且为非边缘块,并且当前编码单元目前的划分深度大于或等于当前帧的前一帧中与当前编码单元位置相同的编码单元编码时的划分深度;条件3:当前编码单元的最优预测编码模式为Skip模式;
[0025] 当当前编码单元的尺寸为32×32时,如果满足以下三个条件中的一个条件,则不继续对当前编码单元进行递归划分,执行步骤13;其余情况,将当前编码单元划分成4个尺寸为16×16的编码单元,然后执行步骤12;其中,条件1:dmax=1;条件2:当前编码单元为静止块且为非边缘块,并且当前编码单元目前的划分深度大于或等于当前帧的前一帧中与当前编码单元位置相同的编码单元编码时的划分深度;条件3:当前编码单元的最优预测编码模式为Skip模式;
[0026] 当当前编码单元的尺寸为16×16时,如果满足以下三个条件中的一个条件,则不继续对当前编码单元进行递归划分,执行步骤13;其余情况,将当前编码单元划分成4个尺寸为8×8的编码单元,然后执行步骤12;其中,条件1:dmax=2;条件2:当前编码单元为静止块且为非边缘块,并且当前编码单元目前的划分深度大于或等于当前帧的前一帧中与当前编码单元位置相同的编码单元编码时的划分深度;条件3:当前编码单元的最优预测编码模式为Skip模式;
[0027] 当当前编码单元的尺寸为8×8时,执行步骤13;
[0028] 步骤12:将当前编码单元划分分裂出的下一层中当前待处理的尺寸减半的编码单元作为当前编码单元,然后返回步骤9继续执行;
[0029] 步骤13:将当前编码单元的同一层中与当前编码单元具有相同父
节点的下一个待处理的编码单元作为当前编码单元,然后返回步骤9继续执行,直至同一层中与当前编码单元具有相同
父节点的4个编码单元均处理完毕后执行步骤14;
[0030] 步骤14:将当前编码单元的上一层中与当前编码单元的父节点为兄弟节点的下一个待处理的编码单元作为当前编码单元,然后返回步骤9继续执行,直至上一层中与当前编码单元的父节点为兄弟节点中的4个编码单元均处理完毕,然后执行步骤15;
[0031] 步骤15:判断是否已处理完划分深度在dmin到dmax之间的所有编码单元,如果是,则执行步骤16;否则,执行步骤14;
[0032] 步骤16:对当前最大编码单元进行编码,然后将当前帧中下一个待处理的尺寸为64×64的最大编码单元作为当前最大编码单元,再返
回执行步骤4,直至编码完当前帧中的所有最大编码单元,之后执行步骤17;
[0033] 步骤17:将360度视频中下一帧待编码的帧间编码帧作为当前帧,然后返回执行步骤2,直至处理完360度视频中的所有帧间编码帧。
[0035] 本发明考虑了360度视频的内容与传统HEVC视频的内容特性的不同,根据360度视频的内容特性,指导运动块和静止块、边缘块和非边缘块等不同区域使用不同的划分深度和预测编码模式搜索策略,从而可以根据编码单元的运动属性、纹理特性以及与当前编码单元相邻的已处理的编码单元的最优预测编码模式等信息判断是否跳过某些深度下的编码单元的搜索,且对于每个编码单元的最优预测编码模式的搜索,其所需遍历的预测编码模式的数量也有所减少,达到了有效降低360度视频的编码计算复杂度、节省编码时间的目的。
附图说明
[0036] 图1为利用本发明方法对一帧帧间编码帧编码的
流程图;
[0037] 图2为尺寸为64×64的最大编码单元的递归划分示意图及相应的划分结果;
[0038] 图3为当前最大编码单元与左侧最大编码单元、上侧最大编码单元、左上侧最大编码单元、右上侧最大编码单元的位置关系示意图;
[0039] 图4为本发明方法中当前编码单元的最优预测编码模式搜索的流程图。
具体实施方式
[0040] 以下结合附图
实施例对本发明作进一步详细描述。
[0041] 本发明提出的一种360度视频帧间快速编码方法,它基于HEVC视频编码标准,且仅用于对360度视频中的帧间编码帧进行快速编码,它包括以下步骤:
[0042] 步骤1:令class0、class1、class2分别表示三个预测编码模式集,预测编码模式集class0包含预测编码模式中的Skip模式、2N×2N merge模式;预测编码模式集class1包含预测编码模式中的2N×2N、2N×N、N×2N、N×N、2N×nU、2N×nD、nL×2N、nR×2N模式;预测编码模式集class2包含预测编码模式中的Intra 2N×2N、Intra PCM模式;在HEVC视频编码标准中,帧间编码帧中的最大编码单元的尺寸为64×64,最大编码单元的划分深度为0到3之间的整数;将360度视频中当前待编码的帧间编码帧定义为当前帧。
[0043] 步骤2:将当前帧分割为若干个尺寸为64×64的最大编码单元;图1所示为一帧帧间编码帧的编码流程图。
[0044] 步骤3:将当前帧中当前待处理的尺寸为64×64的最大编码单元定义为当前最大编码单元。
[0045] 步骤4:判断当前最大编码单元是否位于当前帧的最左侧或最上侧,如果是,则对当前最大编码单元进行递归划分得到的1个划分深度为0的尺寸为64×64的编码单元、4个划分深度为1的尺寸为32×32的编码单元、16个划分深度为2的尺寸为16×16的编码单元以及64个划分深度为3的尺寸为8×8的编码单元所构成的如图2所示的4层的四叉树从划分深度0开始到划分深度3为止自顶向下对各个编码单元进行遍历,对每个编码单元分别从class0∪class1∪class2中搜索出该编码单元的最优预测编码模式,然后执行步骤16;否则,执行步骤5;其中,符号“∪”为集合的并操作符号。
[0046] 步骤5:当当前最大编码单元位于当前帧的最右侧时,分别确定当前最大编码单元、当前最大编码单元的左侧最大编码单元、当前最大编码单元的上侧最大编码单元、当前最大编码单元的左上侧最大编码单元为运动块还是为静止块;并获取当前帧的前一帧中与当前最大编码单元位置相同的最大编码单元编码时的划分深度,记为DCol;获取当前最大编码单元的左侧最大编码单元中右侧两个尺寸为32×32的编码单元(如图3中标记为1和2的两个灰色块所示)编码时的划分深度,记为DL;获取当前最大编码单元的上侧最大编码单元中下侧两个尺寸为32×32的编码单元(如图3中标记为4和5的两个灰色块所示)编码时的划分深度,记为DT;获取当前最大编码单元的左上侧最大编码单元中右下侧一个尺寸为32×32的编码单元(如图3中标记为3的一个灰色块所示)编码时的划分深度,记为DLT。
[0047] 当当前最大编码单元不是位于当前帧的最右侧时,在上述基础上,再确定当前最大编码单元的右上侧最大编码单元为运动块还是为静止块;并获取当前最大编码单元的右上侧最大编码单元中左下侧一个尺寸为32×32的编码单元(如图3中标记为6的一个灰色块所示)编码时的划分深度,记为DRT。
[0048] 上述,DCol、DL、DT、DLT、DRT的值为0到3之间的整数。
[0049] 在此,确定各个最大编码单元为运动块还是为静止块采用现有技术,如利用当前帧与当前帧的前一帧之间的运动信息来判定最大编码单元的运动属性,比如确定当前最大编码单元为运动块还是为静止块的过程为:计算当前最大编码单元中的每个
像素点的像素值与当前帧的前一帧中与当前最大编码单元位置相同的最大编码单元中对应像素点的像素值的绝对差值,然后判断当前最大编码单元对应的所有绝对差值的平均值是否大于设定的一个
阈值,如果是,则判定当前最大编码单元为运动块,否则,判定当前最大编码单元为静止块。在实际应用本发明方法时也可以采用其它的运动块和静止块判别方法,例如光流法等。
[0050] 在此,当前最大编码单元的左侧最大编码单元为位于当前最大编码单元的左侧的一个最大编码单元,当前最大编码单元的上侧最大编码单元为位于当前最大编码单元的上侧的一个最大编码单元,当前最大编码单元的左上侧最大编码单元为位于当前最大编码单元的左上侧的一个最大编码单元,当前最大编码单元的右上侧最大编码单元为位于当前最大编码单元的右上侧的一个最大编码单元。
[0051] 步骤6:令dmin表示当前最大编码单元编码时的划分深度的搜索下限,并令dmax表示当前最大编码单元编码时的划分深度的搜索上限。
[0052] 若当前最大编码单元为运动块,则令dmin=0和dmax=3,然后执行步骤7。
[0053] 若当前最大编码单元为静止块,则当当前最大编码单元位于当前帧的最右侧时令dmin=min(DL,DT,DLT),并令然后执行步骤7;当当前最大编码单元不是位于当前帧的最右侧时令dmin=min(DL,DT,DLT,DRT),并令
然后执行步骤7。
[0054] 上述,ML表示当前最大编码单元的左侧最大编码单元,MT表示当前最大编码单元的上侧最大编码单元,MLT表示当前最大编码单元的左上侧最大编码单元,MRT表示当前最大编码单元的右上侧最大编码单元,min()为取最小值函数,max()为取最大值函数。
[0055] 对于一个尺寸为64×64的最大编码单元而言,其递归划分为更小尺寸的编码单元的过程就是对一个如图2所示的4层的四叉树的自顶向下搜索的处理过程,其划分深度可以是0到3之间的整数。图2为1个尺寸为64×64的最大编码单元的递归划分示意图,图2中虚线标识了不需要处理的编码单元,图2中也给出了相应的划分结果。dmin确定了其初始的需要搜索的划分深度,即确定了从如图2所示的搜索树的第几层开始往下搜索,例如,如果dmin=1,则跳过尺寸为64×64的编码单元,而直接从32×32的编码单元开始处理。类似的,dmax确定了其最深的需要搜索的划分深度,例如,如果dmax=2,则对于该最大编码单元而言,需要搜索的最小的编码单元的尺寸为16×16,而无需搜索64个尺寸为8×8的编码单元。由于减少了需要搜索的编码单元的数量,从而降低了编码的计算复杂度。
[0056] 步骤7:若dmin=0,则当前最大编码单元初始由1个尺寸为64×64的编码单元构成,然后执行步骤8;若dmin=1,则将当前最大编码单元初始划分为4个尺寸为32×32的编码单元,然后执行步骤8;若dmin=2,则将当前最大编码单元初始划分为16个尺寸为16×16的编码单元,然后执行步骤8;若dmin=3,则将当前最大编码单元初始划分为64个尺寸为8×8的编码单元,然后执行步骤8。
[0057] 步骤8:将当前最大编码单元中当前待处理的编码单元定义为当前编码单元;当前编码单元的最优预测编码模式的搜索流程图如图4所示。
[0058] 步骤9:当当前编码单元位于当前帧的最右侧时,分别确定当前编码单元、当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元为运动块还是为静止块;当当前编码单元不是位于当前帧的最右侧时,分别确定当前编码单元、当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元为运动块还是为静止块;并确定当前编码单元为边缘块还是为非边缘块。
[0059] 在此,确定各个编码单元为运动块还是为静止块采用现有技术,与步骤5中判定当前最大编码单元为运动块还是为静止块的判定方法相同;对于确定当前编码单元为边缘块还是为非边缘块,可以利用
边缘检测算法,计算当前编码单元的纹理特性,比如利用Sobel算子计算当前编码单元的边缘强度,若当前编码单元中的所有像素点的边缘强度的平均值大于设定的一个阈值时,则判定当前编码单元为边缘块,否则为非边缘块,这里也可以采用其它的边缘块判别方法,例如采用Prewitt算子、Canny算子等。
[0060] 在此,同尺寸左侧编码单元即为位于当前编码单元的左侧且尺寸与当前编码单元相同的编码单元;同尺寸上侧编码单元即为位于当前编码单元的上侧且尺寸与当前编码单元相同的编码单元;同尺寸左上侧编码单元即为位于当前编码单元的左上侧且尺寸与当前编码单元相同的编码单元;同尺寸右上侧编码单元即为位于当前编码单元的右上侧且尺寸与当前编码单元相同的编码单元。
[0061] 步骤10:若当前编码单元为运动块且当前编码单元位于当前帧的最右侧,则分两种情况,第一种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元均为静止块时,仅在class1∪class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11;第二种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元中至少一个为运动块时,如果当前编码单元为边缘块,那么仅在class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11;如果当前编码单元为非边缘块,那么仅在class1∪class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11。
[0062] 若当前编码单元为运动块且当前编码单元不是位于当前帧的最右侧,则分两种情况,第一种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元中至少三个为静止块时,仅在class1∪class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11;第二种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元中至少两个为运动块时,如果当前编码单元为边缘块,那么仅在class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11;如果当前编码单元为非边缘块,那么仅在class1∪class2中搜索出当前编码单元的最优预测编码模式,再执行步骤11。
[0063] 若当前编码单元为静止块且当前编码单元位于当前帧的最右侧,则分两种情况,第一种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元均为静止块时,如果当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元的最优预测编码模式均为Skip模式或当前编码单元为非边缘块,那么仅在class0中搜索出当前编码单元的最优预测编码模式,再执行步骤11;其余情况,仅在class0∪class1中搜索出当前编码单元的最优预测编码模式,再执行步骤11;第二种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元中至少一个为运动块时,仅在class0∪class1中搜索出当前编码单元的最优预测编码模式,再执行步骤11。
[0064] 若当前编码单元为静止块且当前编码单元不是位于当前帧的最右侧,则分两种情况,第一种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元中至少三个为静止块时,如果当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元中至少三个的最优预测编码模式为Skip模式或当前编码单元为非边缘块,那么仅在class0中搜索出当前编码单元的最优预测编码模式,再执行步骤11;其余情况,仅在class0∪class1中搜索出当前编码单元的最优预测编码模式,再执行步骤11;第二种情况:当前编码单元的同尺寸左侧编码单元、当前编码单元的同尺寸上侧编码单元、当前编码单元的同尺寸左上侧编码单元、当前编码单元的同尺寸右上侧编码单元中至少两个为运动块时,仅在class0∪class1中搜索出当前编码单元的最优预测编码模式,再执行步骤11。
[0065] 步骤11:当当前编码单元的尺寸为64×64时,如果满足以下三个条件中的一个条件,则不继续对当前编码单元进行递归划分,执行步骤16;其余情况,将当前编码单元划分成4个尺寸为32×32的编码单元,然后执行步骤12;其中,条件1:dmax=0;条件2:当前编码单元为静止块且为非边缘块,并且当前编码单元目前的划分深度大于或等于当前帧的前一帧中与当前编码单元位置相同的编码单元编码时的划分深度;条件3:当前编码单元的最优预测编码模式为Skip模式。
[0066] 当当前编码单元的尺寸为32×32时,如果满足以下三个条件中的一个条件,则不继续对当前编码单元进行递归划分,执行步骤13;其余情况,将当前编码单元划分成4个尺寸为16×16的编码单元,然后执行步骤12;其中,条件1:dmax=1;条件2:当前编码单元为静止块且为非边缘块,并且当前编码单元目前的划分深度大于或等于当前帧的前一帧中与当前编码单元位置相同的编码单元编码时的划分深度;条件3:当前编码单元的最优预测编码模式为Skip模式。
[0067] 当当前编码单元的尺寸为16×16时,如果满足以下三个条件中的一个条件,则不继续对当前编码单元进行递归划分,执行步骤13;其余情况,将当前编码单元划分成4个尺寸为8×8的编码单元,然后执行步骤12;其中,条件1:dmax=2;条件2:当前编码单元为静止块且为非边缘块,并且当前编码单元目前的划分深度大于或等于当前帧的前一帧中与当前编码单元位置相同的编码单元编码时的划分深度;条件3:当前编码单元的最优预测编码模式为Skip模式。
[0068] 当当前编码单元的尺寸为8×8时,执行步骤13。
[0069] 步骤12:将当前编码单元划分分裂出的下一层中当前待处理的尺寸减半的编码单元作为当前编码单元,然后返回步骤9继续执行。
[0070] 步骤13:将当前编码单元的同一层中与当前编码单元具有相同父节点的下一个待处理的编码单元作为当前编码单元,然后返回步骤9继续执行,直至同一层中与当前编码单元具有相同父节点的4个编码单元均处理完毕后执行步骤14。
[0071] 步骤14:将当前编码单元的上一层中与当前编码单元的父节点为兄弟节点的下一个待处理的编码单元作为当前编码单元,然后返回步骤9继续执行,直至上一层中与当前编码单元的父节点为兄弟节点中的4个编码单元均处理完毕,然后执行步骤15。
[0072] 步骤15:判断是否已处理完划分深度在dmin到dmax之间的所有编码单元,如果是,则执行步骤16;否则,执行步骤14。
[0073] 步骤16:根据率失真函数选择率失真代价最小的编码单元的组合方式及相应的最优预测编码模式,对当前最大编码单元进行编码,然后将当前帧中下一个待处理的尺寸为64×64的最大编码单元作为当前最大编码单元,再返回执行步骤4,直至编码完当前帧中的所有最大编码单元,之后执行步骤17。
[0074] 步骤17:将360度视频中下一帧待编码的帧间编码帧作为当前帧,然后返回执行步骤2,直至处理完360度视频中的所有帧间编码帧。
[0075] 为了验证本发明方法的有效性,将本发明方法在HM参考
软件HM16.15上进行实现以测试其率失真性能和编码时间。
[0076] 实验平台的
硬件配置为Intel i7-7400,内存为8G,Windows7 64位
操作系统。实验的主要编码参数为低延迟编码模式,量化参数(Quantization Parameter,QP)分别为22、27、32和37。
[0077] 表1给出了各个测试序列采用本发明方法进行编码的编码时间节省以及率失真性能情况。表1中的BD-W表示以WS-PSNR作为图像质量评价指标时在相同图像质量条件下码率变化的百分比,BD-S表示以S-PSNR作为图像质量评价指标时在相同图像质量条件下码率变化的百分比,ΔTS表示相同图像质量条件下编码时间节省的百分比。
[0078] 表1各个测试序列采用本发明方法进行编码的编码时间节省以及率失真性能情况[0079]
[0080] 从表1所列的实验结果可以看出,本发明方法对不同测试序列均可以有效降低编码复杂度,提高编码速度。这是因为:用HM原始平台进行编码时,对于每个最大编码单元,都需要搜索0、1、2、3划分深度下的所有编码单元,且每个编码单元都需要搜索class0、class1、class2三个预测编码模式集中的所有预测编码模式;而使用本发明方法可以根据编码单元的运动属性、纹理特性以及与当前编码单元相邻的已处理的编码单元的最优预测编码模式等信息判断是否跳过某些深度下的编码单元的搜索,且对于每个编码单元的最优预测编码模式的搜索,其所需遍历的预测编码模式的数量也有所降低,从而降低了编码的计算复杂度,节省了编码时间。