一种快速的HEVC帧内预测编码方法转让专利

申请号 : CN201710946293.6

文献号 : CN107613300B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李日万俊青朱建国

申请人 : 杭州当虹科技股份有限公司

摘要 :

本发明公开了一种快速的HEVC帧内预测编码方法。在HEVC参考软件HM和开源编码器x265中,首先计算当前CU的帧内预测编码代价,然后分别计算四个子CU的帧内预测编码代价,最后子CU代价之和与当前CU进行PK选择CU的分割模式,子CU编码代价计算和当前CU的计算过程没有关系的,即子CU也需要重头计算35个预测模式的SatdCost和N个模式的编码代价,但事实上子CU与当前CU是被包含关系,当前CU在最优帧内预测模式选择过程的中间计算结果可以给子CU使用。本发明的有益效果是:利用大块的编码结果加速子块的帧内预测方向的选择过程,在显著降低复杂度的同时,压缩效率基本没有损失,可以应用到实际的HEVC编码器的优化中。

权利要求 :

1.一种快速的HEVC帧内预测编码方法,其特征是,具体包括如下步骤:

(1)对32x32CU进行帧内预测模式选择,计算35个预测模式SatdCost时需要计算所有33个预测方向的Satd值;而32x32CU划分为四个16x16子CU,分别为置于左上角的16SubCU0、置于右上角的16SubCU1、置于左下角的16SubCU2和置于右下角的16SubCU3;所述的Satd值是通过分别计算四个16x16子块Satd值然后求和得到的,同时记录16SubCU0、16SubCU1、

16SubCU2和16SubCU3的33种方向预测对应的Satd值;其中33预测方向分别为预测方向2~

34;

(2)对四个16x16子CU进行帧内预测模式选择,计算所有预测模式SatdCost的过程中,对16SubCU0而言,预测方向9、10、11、25、26、27计算SatdCost,其它预测方向的Satd复用步骤(1)中的Satd结果;对16SubCU1而言,预测方向28-34的Satd复用步骤(1)中的Satd结果,其它预测方向计算Satd值;对16SubCU2而言,预测方向2-8的Satd复用步骤(1)中的Satd结果,其它预测方向计算Satd值;对16SubCU3而言,所有预测方向都需要计算Satd值;而

16x16CU划分为四个8x8子CU,分别为置于左上角的8SubCU0、置于右上角的8SubCU1、置于左下角的8SubCU2和置于右下角的8SubCU3;

(3)对16x16编码单元中的四个8x8子CU进行帧内预测模式选择,计算所有预测模式SatdCost的过程中,对8SubCU0而言,预测方向9、10、11、25、26、27复用步骤(2)中的Satd结果,其它预测方向计算Satd;对8SubCU1而言,预测方向28-34的Satd复用步骤(2)中的Satd结果,其它预测方向计算Satd值;对8SubCU2而言,预测方向2-8的Satd复用步骤(2)中的Satd结果,其它预测方向计算Satd值;对8SubCU3而言,所有预测方向都计算Satd值。

2.根据权利要求1所述的一种快速的HEVC帧内预测编码方法,其特征是,在步骤(2)中,在计算Satd值时,Satd值是通过分别计算四个8x8子块Satd值然后求和得到的。

说明书 :

一种快速的HEVC帧内预测编码方法

技术领域

[0001] 本发明涉及视频编码相关技术领域,尤其是指一种快速的HEVC帧内预测编码方法。

背景技术

[0002] HEVC是目前最新一代的视频编码标准,在H264基础上压缩效率提升一倍。不同于H264采用宏块为单位的编码架构,HEVC提出了编码单元(Coding Unit,CU)和预测单元(Prediction Unit,PU)的新的编码框架。编码单元最大为64x64,最小为8x8,CU可以采用四叉树递归划分成四个子CU,CU内又可以分割成不同形状的预测单元(PU),因此HEVC的编码块相比H264来说要灵活的多,块的种类更多,编码器可以根据实际场景选择压缩效率最高的编码单元与预测单元。
[0003] HEVC采用率失真优化(RDO)方法来选择最好的编码单元及预测单元。在HEVC的参考软件HM中,编码器首先计算当前CU的编码代价J_UnSplit,然后将CU递归划成四个子CU,分别计算四个子CU的最小编码代价,将所有子CU的最小编码代价相加可以得到当前CU采用划分方式的编码代价J_Split。如果J_UnSplit小于等于J_Split,则当前CU最后采用非划分方式编码,反之,当前CU采用划分方式编码。
[0004] HEVC的帧内预测包含了33个方向预测加上Planar和DC总共35个预测模式。33个预测方向相比H264的8个方向预测可以使帧内预测更加准确,特别是对于大块来说。此外HEVC采用了上方行、右上方行,左边列,左下方列和左上角像素来进行帧内预测。
[0005] 在编码器中,SatdCost是对编码代价J的一种近似估计,采用一种简化方法来节省编码代价计算过程中的计算量。SatdCost计算公式为SatdCost=Satd+lambda*bits,bits是编码的比特数,lambda是拉格朗日系数,与QP相关,Satd是将预测像素值和原始像素值之间的差值先进行哈达玛变换然后再进行绝对值求和。可以看到Satd是对编码失真(重建图像与原始图像之间的SSD)的估计,但是由于Satd并不需要进行真正的编码重建(包括变换,量化,反量化,反变换),所以计算量相比计算编码失真要小的多。同时由于Satd对失真估计效果较好,因此Satd被广泛应用于编码器的各种快速算法当中。
[0006] 在HEVC的参考软件HM和目前最好的开源HEVC编码器x265中,帧内预测需要从35种预测模式挑选一种最好的模式。HM和x265并没有计算每个预测模式的编码代价,因为这样计算量实在太大。它们采用了初选和精选两个步骤选择最优模式。在初选过程中,HEVC计算35个预测模式的SatdCost,从中选出N个SatdCost最小的预测模式作为精选的候选模式。在精选过程中,计算这N个预测模式的真实编码代价J,选出J最小的模式作为最优模式。这种方法有效的减少了计算量,同时编码质量损失很小,同时可以看到,Sad的计算在帧内预测模式的计算中占据了较大的计算量。

发明内容

[0007] 本发明是为了克服现有技术中存在上述的不足,提供了一种降低复杂度且降低压缩效率损失的快速的HEVC帧内预测编码方法。
[0008] 为了实现上述目的,本发明采用以下技术方案:
[0009] 一种快速的HEVC帧内预测编码方法,具体包括如下步骤:
[0010] (1)对32x32CU进行帧内预测模式选择,计算35个预测模式SatdCost时需要计算所有33个预测方向的Satd值;而32x32CU划分为四个16x16子CU,分别为置于左上角的16SubCU0、置于右上角的16SubCU1、置于左下角的16SubCU2和置于右下角的16SubCU3;
[0011] (2)对四个16x16子CU进行帧内预测模式选择,计算所有预测模式SatdCost的过程中,对16SubCU0而言,部分预测方向计算SatdCost,其它预测方向的Satd复用步骤(1)中的Satd结果;对16SubCU1而言,部分预测方向的Satd复用步骤(1)中的Satd结果,其它预测方向计算Satd值;对16SubCU2而言,部分预测方向的Satd复用步骤(1)中的Satd结果,其它预测方向计算Satd值;对16SubCU3而言,所有预测方向都需要计算Satd值;而16x16CU划分为四个8x8子CU,分别为置于左上角的8SubCU0、置于右上角的8SubCU1、置于左下角的8SubCU2和置于右下角的8SubCU3;
[0012] (3)对16x16编码单元中的四个8x8子CU进行帧内预测模式选择,计算所有预测模式SatdCost的过程中,对8SubCU0而言,部分预测方向复用步骤(2)中的Satd结果,其它预测方向计算Satd;对8SubCU1而言,部分预测方向的Satd复用步骤(2)中的Satd结果,其它预测方向计算Satd值;对8SubCU2而言,部分预测方向的Satd复用步骤(2)中的Satd结果,其它预测方向计算Satd值;对8SubCU3而言,所有预测方向都计算Satd值。
[0013] 在HEVC参考软件HM和开源编码器x265中,首先计算当前CU的帧内预测编码代价,然后分别计算四个子CU的帧内预测编码代价,最后子CU代价之和与当前CU进行PK选择CU的分割模式。子CU编码代价计算和当前CU的计算过程没有关系的,即子CU也需要重头计算35个预测模式的SatdCost和N个模式的编码代价,但事实上子CU与当前CU是被包含关系,当前CU在最优帧内预测模式选择过程的中间计算结果可以给子CU使用。本方法利用大块的编码结果加速子块的帧内预测方向的选择过程,在显著降低复杂度的同时,压缩效率基本没有损失,可以应用到实际的HEVC编码器的优化中。将本方法应用到ArcVideo 265编码器中,有效节省了帧内预测编码的编码时间,同时对编码质量的损失也非常小。
[0014] 作为优选,在步骤(1)中,所述的Satd值是通过分别计算四个16x16子块Satd值然后求和得到的,同时记录16SubCU0、16SubCU1、16SubCU2和16SubCU3的33种方向预测对应的Satd值;其中33预测方向分别为预测方向2~34。
[0015] 作为优选,在步骤(2)中,对16SubCU0而言,预测方向9、10、11、25、26、27计算SatdCost,其它预测方向的Satd复用步骤(1)中的Satd结果;对16SubCU1而言,预测方向28-34的Satd复用步骤(1)中的Satd结果,其它预测方向计算Satd值;对16SubCU2而言,预测方向2-8的Satd复用步骤(1)中的Satd结果,其它预测方向计算Satd值。
[0016] 作为优选,在步骤(2)中,在允许一定质量损失的前提下,对16SubCU1而言,预测方向25-34的Satd复用步骤(1)中的Satd结果,其它预测方向计算Satd值;对16SubCU2而言,预测方向2-11的Satd复用步骤(1)中的Satd结果,其它预测方向计算Satd值。
[0017] 作为优选,在步骤(2)中,在计算Satd值时,Satd值是通过分别计算四个8x8子块Satd值然后求和得到的。
[0018] 作为优选,在步骤(3)中,对8SubCU0而言,预测方向9、10、11、25、26、27复用步骤(2)中的Satd结果,其它预测方向计算Satd;对8SubCU1而言,预测方向28-34的Satd复用步骤(2)中的Satd结果,其它预测方向计算Satd值;对8SubCU2而言,预测方向2-8的Satd复用步骤(2)中的Satd结果,其它预测方向计算Satd值。
[0019] 作为优选,在步骤(3)中,在允许一定质量损失的前提下,对8SubCU1而言,预测方向25-34的Satd复用步骤(2)中的Satd结果,其它预测方向计算Satd值;对8SubCU2而言,预测方向2-11的Satd复用步骤(2)中的Satd结果,其它预测方向计算Satd值。
[0020] 本发明的有益效果是:利用大块的编码结果加速子块的帧内预测方向的选择过程,在显著降低复杂度的同时,压缩效率基本没有损失,可以应用到实际的HEVC编码器的优化中;将本方法应用到ArcVideo 265编码器中,有效节省了帧内预测编码的编码时间,同时对编码质量的损失也非常小。

附图说明

[0021] 图1是本发明HEVC帧内33个预测方向的示意图;
[0022] 图2是16x16CU的帧内预测示意图;
[0023] 图3是四个8x8子CU的帧内预测示意图。

具体实施方式

[0024] 下面结合附图和具体实施方式对本发明做进一步的描述。
[0025] 一种快速的HEVC帧内预测编码方法,具体包括如下步骤:
[0026] (1)对32x32CU进行帧内预测模式选择,计算35个预测模式SatdCost时需要计算所有33个预测方向的Satd值;而32x32CU划分为四个16x16子CU,分别为置于左上角的16SubCU0、置于右上角的16SubCU1、置于左下角的16SubCU2和置于右下角的16SubCU3;Satd值是通过分别计算四个16x16子块Satd值然后求和得到的,同时记录16SubCU0、16SubCU1、
16SubCU2和16SubCU3的33种方向预测对应的Satd值;其中33预测方向分别为预测方向2~
34,如图1所示;
[0027] (2)对四个16x16子CU进行帧内预测模式选择,计算所有预测模式SatdCost的过程中,对16SubCU0而言,预测方向9、10、11、25、26、27计算SatdCost,其它预测方向的Satd复用步骤(1)中的Satd结果;对16SubCU1而言,预测方向28-34的Satd复用步骤(1)中的Satd结果(在允许一定质量损失的前提下,复用预测方向25-34的Satd值),其它预测方向计算Satd值;对16SubCU2而言,预测方向2-8的Satd复用步骤(1)中的Satd结果(在允许一定质量损失的前提下,复用预测方向2-11的Satd值),其它预测方向计算Satd值;对16SubCU3而言,所有预测方向都需要计算Satd值;而16x16CU划分为四个8x8子CU,分别为置于左上角的8SubCU0、置于右上角的8SubCU1、置于左下角的8SubCU2和置于右下角的8SubCU3;在计算Satd值时,Satd值是通过分别计算四个8x8子块Satd值然后求和得到的;
[0028] (3)对16x16编码单元中的四个8x8子CU进行帧内预测模式选择,计算所有预测模式SatdCost的过程中,对8SubCU0而言,预测方向9、10、11、25、26、27复用步骤(2)中的Satd结果,其它预测方向计算Satd;对8SubCU1而言,预测方向28-34的Satd复用步骤(2)中的Satd结果(在允许一定质量损失的前提下,复用预测方向25-34的Satd值),其它预测方向计算Satd值;对8SubCU2而言,预测方向2-8的Satd复用步骤(2)中的Satd结果(在允许一定质量损失的前提下,复用预测方向2-11的Satd值),其它预测方向计算Satd值;对8SubCU3而言,所有预测方向都计算Satd值。
[0029] 为了便于解释本方法的原理,下面以16x16CU为例进行说明。如图2所示,实线框代表了16x16的CU,在内部用虚线框分割成四个8x8子CU,分别为SubCU0、SubCU1、SubCU2和SubCU3。边框像素表示当前16x16CU帧内预测所用到的参考像素。对于16x16的CU,将用到上方行的32个像素,左上角像素和左边列的32个像素。图3表示了四个8x8子CU帧内预测所有用到的参考像素,图中无底色边框的参考像素表示与16x16CU的参考像素是一样的,而有底色边框的参考像素则是新的参考像素,在16x16CU中没有用到过。从图3中可以看到,SubCU0的上方行参考像素0-15,左上角参考像素和左边列参考像素0-15都包含在16x16CU的参考像素中;SubCU1的上方行参考像素0-15正是16x16CU上方行参考像素8-23,左上角参考像素为16x16上方行参考像素7,左边列的参考像素0-15则是全新像素;SubCU2的左边列参考像素0-15正是16x16CU左边列参考像素8-23,左上角参考像素为16x16CU左边列参考像素7,上方行参考像素0-15则是全新像素;SubCU3的所有参考像素都是全新像素。
[0030] 为了简化讨论和便于理解本方法的原理,先不考虑HEVC对参考像素进行平滑滤波(Reference Sample Smoothing,RSS)及边界滤波(Boundary Smoothing,BS)的影响,同时不考虑两种非方向预测PLANAR和DC。
[0031] a)SubCU0:假设16x16的帧内预测方向是a,预测图像为prd_16x16。可以推测,由于SubCU0预测像素与16x16完全一样,所以SubCU0使用预测方向a生成的预测图像与prd_16x16左上角8x8的图像是一致的,所以对同一个预测方向,16x16CU左上角1/4区域的sad值与SubCU0的satd是一样的,satd值可以复用。
[0032] b)SubCU1:假设16x16的帧内预测方向是a,预测图像为prd_16x16。可以推测,如果SubCU1的预测方向a只使用了上方行参考像素8-23,那么prd_16x16右上角8x8的图像与SubCU1预测图像是一致的,satd值可以复用。对于SubCU1,预测方向26到34只使用参考像素8-23。
[0033] c)SubCU2:假设16x16的帧内预测方向是a,预测图像为prd_16x16。可以推测,如果SubCU2的预测方向a只使用了左边列参考像素8-23,那么prd_16x16左下角8x8的图像与SubCU2预测图像是一致的,satd值可以复用。对于SubCU2,预测方向2到10只使用了左边列参考像素8-23。
[0034] d)SubCU3:对于SubCU3,由于参考像素相对16x16而言都是全新的,所以就不存在Satd复用的可能性了。
[0035] 一般来说,由于RSS会改变大部分参考像素,所以对预测结果造成的影响较大,而边界滤波只是对预测结果的一行或者一列进行滤波,所以对预测结果影响相对较小。HEVC在不同尺寸和不同预测方向上,采用的参考像素平滑滤波和边界滤波的策略不一致:对于32x32的CU,预测方向10、26不进行RSS;对于16x16的CU,预测方向9、10、11、25、26、27不进行RSS;对于8x8,只有预测方向2、18、34需要进行RSS,其它预测方向都不进行RSS;HEVC对于
8x8、16x16的CU的预测方向10和26(水平预测和垂直预测),会采取边界滤波,8x8、16x16的其它预测方向及32x32的所有预测方向都不采用边界滤波。因此对于32x32的CU和SubCU0而言,除了预测方向9、10、11、25、26、27的Satd不能复用,其它方向Satd基本可以复用;SubCU1可以复用预测方向28-34的Satd值(如果允许一定质量损失,可以复用25-34的Satd值);
SubCU2可以复用预测方向2-8的Satd值(如果允许一定质量损失,可以复用2-11的Satd值)。
对于16x16的CU和四个8x8的子CU而言预测方向9、10、11、25、26、27的Satd值基本可以复用。
此外对于8x8的SubCU1而言,预测方向28-34由于RSS的影响,虽然参考像素会与16x16的有些不一样,但是统计发现这些预测方向的Satd值与16x16右上角1/4区域的Satd值吻合程度很高,可以进行Satd值复用。同理对于SubCU2而言,预测方向2-8,Satd值也可以复用。本方法主要是对32x32与16x16块Satd值的复用,以及16x16和8x8块Satd值的复用,来减少帧内预测模式选择过程中Satd的计算量,从而加速编码过程,提高编码速度。
[0036] 上述大块小块之间的Satd之所以能够复用,是由于所有大块的Satd值都是由其所包含的所有8x8子块的Satd值的求和。因此32x32的Satd等于4个16x16的Satd之和,也等于16个8x8的Satd之和。