WO2024145852A1 - 编解码方法、码流、编码器、解码器以及存储介质 - Google Patents
编解码方法、码流、编码器、解码器以及存储介质Info
- Publication number
- WO2024145852A1 WO2024145852A1 PCT/CN2023/070562 CN2023070562W WO2024145852A1 WO 2024145852 A1 WO2024145852 A1 WO 2024145852A1 CN 2023070562 W CN2023070562 W CN 2023070562W WO 2024145852 A1 WO2024145852 A1 WO 2024145852A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- block
- template
- current block
- search
- determining
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 283
- 239000013598 vector Substances 0.000 claims abstract description 420
- 239000011159 matrix material Substances 0.000 claims description 42
- 230000015654 memory Effects 0.000 claims description 36
- 238000012937 correction Methods 0.000 claims description 28
- 238000012545 processing Methods 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 22
- 238000007499 fusion processing Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 description 105
- 229940105577 ivermax Drugs 0.000 description 87
- SPBDXSGPUHCETR-VHJJIYNUSA-N mectizan Chemical compound O1[C@@H](C)[C@H](O)[C@@H](OC)CC1O[C@@H]1[C@@H](OC)C[C@H](O[C@@H]2C(=C/C[C@@H]3CC(C[C@@]4(O[C@@H]([C@@H](C)CC4)C(C)C)O3)OC(=O)[C@@H]3C=C(C)[C@@H](O)[C@H]4OC\C([C@@]34O)=C/C=C/[C@@H]2C)/C)O[C@H]1C.C1C[C@H](C)[C@@H](C(C)CC)O[C@@]21O[C@H](C\C=C(C)\[C@@H](O[C@@H]1O[C@@H](C)[C@H](OC3O[C@@H](C)[C@H](O)[C@@H](OC)C3)[C@@H](OC)C1)[C@@H](C)\C=C\C=C/1[C@]3([C@H](C(=O)O4)C=C(C)[C@@H](O)[C@H]3OC\1)O)CC4C2 SPBDXSGPUHCETR-VHJJIYNUSA-N 0.000 description 87
- 238000010586 diagram Methods 0.000 description 41
- 230000004927 fusion Effects 0.000 description 38
- 238000004364 calculation method Methods 0.000 description 34
- 238000005516 engineering process Methods 0.000 description 32
- 230000006870 function Effects 0.000 description 31
- 238000001914 filtration Methods 0.000 description 24
- 239000000523 sample Substances 0.000 description 14
- 230000000694 effects Effects 0.000 description 10
- 239000013074 reference sample Substances 0.000 description 10
- 238000004891 communication Methods 0.000 description 8
- 238000007500 overflow downdraw method Methods 0.000 description 8
- 238000013139 quantization Methods 0.000 description 7
- 230000003044 adaptive effect Effects 0.000 description 6
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 5
- 238000009795 derivation Methods 0.000 description 4
- 238000010606 normalization Methods 0.000 description 4
- 238000012216 screening Methods 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 101100233916 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) KAR5 gene Proteins 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000002146 bilateral effect Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- KLDZYURQCUYZBL-UHFFFAOYSA-N 2-[3-[(2-hydroxyphenyl)methylideneamino]propyliminomethyl]phenol Chemical compound OC1=CC=CC=C1C=NCCCN=CC1=CC=CC=C1O KLDZYURQCUYZBL-UHFFFAOYSA-N 0.000 description 1
- 101000827703 Homo sapiens Polyphosphoinositide phosphatase Proteins 0.000 description 1
- 102100023591 Polyphosphoinositide phosphatase Human genes 0.000 description 1
- 101100012902 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) FIG2 gene Proteins 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 201000001098 delayed sleep phase syndrome Diseases 0.000 description 1
- 208000033921 delayed sleep phase type circadian rhythm sleep disease Diseases 0.000 description 1
- 238000005286 illumination Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Abstract
本申请实施例公开了一种编解码方法、码流、编码器、解码器以及存储介质,该方法包括:编码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值;根据当前块的预测值,确定当前块的重建值。解码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值。
Description
本申请实施例涉及视频编解码技术领域,尤其涉及一种编解码方法、码流、编码器、解码器以及存储介质。
帧内模板匹配预测(Intra Template Matching Prediction,Intra TMP)技术是通过编码块的模板在当前图像中预定义的搜索范围内按照预设代价函数搜索与其代价最小的匹配模板,将匹配模板相应的最佳匹配重建块作为当前编码块的预测块。
然而,在实际编码过程中,相关技术通常是直接将最佳匹配重建块的重建像素作为当前编码块的预测像素,但是由于考虑不全面,在某些场景下会存在较大偏差,导致预测的准确性低。
发明内容
本申请实施例提供一种编解码方法、码流、编码器、解码器以及存储介质,能够提升预测的准确性,从而获得最优的预测效果。
本申请实施例的技术方案可以如下实现:
第一方面,本申请实施例提供了一种解码方法,应用于解码器,所述方法包括:
确定当前块对应的第一模板;
根据所述第一模板确定所述当前块对应的一个或多个块矢量;
根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值;
根据所述当前块的预测值,确定所述当前块的重建值。
第二方面,本申请实施例提供了一种编码方法,应用于编码器,所述方法包括:
确定当前块对应的第一模板;
根据所述第一模板确定所述当前块对应的一个或多个块矢量;
根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值。
第三方面,本申请实施例提供了一种码流,其中,所述码流是根据待编码信息进行比特编码生成的;其中,待编码信息包括下述至少一项:
当前块的预测差值,预设数量N、一个或多个块矢量。
第四方面,本申请实施例提供了一种编码器,包括第一确定单元;其中,
所述第一确定单元,配置为确定当前块对应的第一模板;根据所述第一模板确定所述当前块对应的一个或多个块矢量;根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值。
第五方面,本申请实施例提供了一种编码器,包括第一存储器和第一处理器;其中,
所述第一存储器,用于存储能够在所述第一处理器上运行的计算机程序;
所述第一处理器,用于在运行所述计算机程序时,执行如第二方面所述的方法。
第六方面,本申请实施例提供了一种解码器,包括第二确定单元;其中,
所述第二确定单元,配置为确定当前块对应的第一模板;根据所述第一模板确定所述当前块对应的一个或多个块矢量;根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值;根据所述当前块的预测值,确定所述当前块的重建值。
第七方面,本申请实施例提供了一种解码器,包括第二存储器和第二处理器;其中,
所述第二存储器,用于存储能够在所述第二处理器上运行的计算机程序;
所述第二处理器,用于在运行所述计算机程序时,执行如第一方面所述的方法。
第八方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被执行时实现如第一方面所述的方法、或者实现如第二方面所述的方法。
本申请实施例提供了一种编解码方法、编码器、解码器以及存储介质,编码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值;根据当前块的预测值,确定当前块的重建值。解码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值。由此可见,在本申请的实施例中,提出一种Intra TMP Fusion的预测方式,其中,可以选择确定当前块的至少一个块矢量,进而可以利用与至少一个块矢量对应的至少一个参考块来获取当前块的预测值。也就是说,本申请实施例提出的编解码方法,充分考虑到了搜索过程中不同匹配模板对应的重建块信息对预测当前块的重要性不同,能够提升预测的准确性,从而获得最优的预测效果。
图1为Intra TMP的预测示意图;
图2为基于IntraTMP技术的预测流程示意图;
图3为Intra TMP技术的模板类型示意图;
图4为基于IntraTMP技术的搜索流程示意图;
图5为当前块及其模板的参数定义示意图;
图6为模板搜索区域示意图;
图7为搜索区域的不同子区域划分示意图;
图8为搜索区域的确定过程示意图一;
图9为搜索过程的示意图;
图10A为编码器的组成框图示意图;
图10B为编码器的组成框图示意图;
图11为编解码系统的网络架构示意图;
图12为本申请实施例提出的解码方法的流程示意图;
图13为搜索区域的确定过程示意图二;
图14为搜索区域的确定过程示意图三;
图15为本申请实施例提出的编码方法的流程示意图;
图16为编码器的组成结构示意图;
图17为编码器硬件结构示意图;
图18为解码器的组成结构示意图;
图19为解码器硬件结构示意图;
图20为编解码系统的组成结构示意图。
为了能够更加详尽地了解本申请实施例的特点与技术内容,下面结合附图对本申请实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本申请实施例。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。还需要指出,本申请实施例所涉及的术语“第一\第二\第三”仅是用于区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
对本申请实施例进行进一步详细说明之前,先对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释:
编码块(Coding Block,CB);
块匹配(Block Maching,BM);
编码单元(Coding Unit,CU);
块矢量(Block Vector,BV);
绝对误差和(Sum of Absolute Difference,SAD);
绝对变换差和(Sum of Absolute Transformed Difference,SATD);
均方误差(Mean Square Error,MSE);
误差平方和(Sum of Squared Differences,SSD);
平均绝对差(Mean Absolute Deviation,MAD);
平均误差平方和(Mean Square Differences,MSD);
归一化相关系数(Normalized Correlation Coefficient,NCC);
H.266/多功能视频编码(Versatile Video Coding,VVC);
VVC的参考软件测试平台(VVC Test Model,VTM);
帧内模板匹配预测(Intra Template Matching Prediction,Intra TMP);
Beyond VVC的参考软件测试平台(Enhanced Compression Model,ECM)。
可以理解,在视频图像中,一般采用第一颜色分量、第二颜色分量和第三颜色分量来表征编码块。其中,这三个颜色分量分别为一个亮度分量、一个蓝色色度分量和一个红色色度分量,具体地,亮度分量通常使用符号Y表示,蓝色色度分量通常使用符号Cb或者U表示,红色色度分量通常使用符号Cr或者V表示;这样,视频图像可以用YCbCr格式表示,也可以用YUV格式表示。
还可以理解,Intra TMP是一种特殊的帧内预测模式,编码器和解码器皆通过编码块的模板(T)在当前图像中预定义的搜索范围内按照预设的代价函数搜索与其代价最小的匹配模板(T_BEST),其中最佳匹配模板相对于当前编码块模板的偏移为最佳块矢量(BEST Block Vector,BV_BEST),然后将匹配模板相应的重建块(Ref Block)作为当前编码块(Cur Block)的预测块。其中编码块的模板通常选用当前编码块的相邻重建区域。
示例性地,以当前块的相邻重建区域为例,图1为Intra TMP的预测示意图,如图1所示,用深色填充的区域表示 重建区域,用网格填充的块为当前块,且当前块的相邻区域为第一模板(T);用斜线填充的块为参考块,且参考块的相邻区域为第二模板(即最佳匹配模板,T_BEST);其中,第二模板相对于第一模板的偏移为最佳块矢量(BV_BEST),这时候可以将参考块进行块复制,作为当前块的预测块。
在本申请实施例中,预设的代价函数可以是绝对误差和SAD、绝对变换差和SATD、均方误差MSE、误差平方和SSD、平均绝对差MAD、平均误差平方和MSD、归一化相关系数NCC等,这里不作具体限定。
示例性地,以绝对误差和SAD为例,这时候的代价函数如下所示:
其中,T
i为搜索过程中的模板,M表示模板中的像素数。
下面针对相关技术中的Intra TMP技术的预测过程进行详细介绍。
IntraTMP的输入:当前块的位置(xTbCmp,yTbCmp),当前块的宽nTbW、当前块的高nTbH。
IntraTMP的输出:当前块的预测值predSamples[x][y],其中,x=0..nTbW-1,y=0..nTbH–1。
具体来说,IntraTMP技术的预测过程可以分为四步骤:确定当前模板类型、获取当前模板重建像素、在预定义的搜索范围内确定块矢量和生成预测值。如此,经过以上过程可以得到当前块的预测值。需要注意的是,Intra TMP技术可以用于预测亮度分量,也可以用于预测色度分量,这里对此也不作具体限定。
参见图2,其示出了一种基于IntraTMP技术的预测流程示意图。如图2所示,该流程可以包括:
S201:确定当前模板类型。
需要说明的是,Intra TMP技术利用当前块的相邻已重建像素作为模板在预定义搜索区域内搜索匹配模板,其中相邻已重建像素可以是当前块的上侧参考像素、左上侧参考像素、右上侧参考像素、左侧参考像素和左下侧参考像素等等,因此,根据相邻已重建像素的可用与否能够对模板类型进行分类并确定对应的模板类型。
还需要说明的是,可以用refTemplateType表示模板类型,图3示出了一种Intra TMP技术的模板类型示意图。如图3所示,用网格填充的块为当前块,且当前块的相邻区域为模板T,这里示出了六种模板类型。
示例性地,这六种模板类型如下所示:
当左上侧参考像素、上侧参考像素和左侧参考像素均可用时,refTemplateType的值为1,模板形状如图3中的(a)所示;
当只有左侧参考像素可用时,refTemplateType的值为2,模板形状如图3中的(b)所示;
当只有上侧参考像素可用时,refTemplateType的值为3,模板形状如图3中的(c)所示;
当只有左侧参考像素和左上侧参考像素可用时,refTemplateType的值为4,模板形状如图3中的(d)所示;
当只有左侧参考像素和左下侧参考像素可用时,refTemplateType的值为5,模板形状如图3中的(e)所示;
当只有上侧参考像素和右上侧参考像素可用时,refTemplateType的值为6,模板形状如图3中的(f)所示。
S202:获取当前模板像素。
需要说明的是,Intra TMP技术的模板可以由当前块的上侧、右上侧、左侧、左下侧、左上侧中的一个或多个区域的重建像素构成。另外,模板尺寸可以是预先设置的,例如获取左侧模板时,可以将模板宽度templateW_size设置为4,获取上侧模板时,可以将模板高度templateH_size设置为4。
还需要说明的是,可以根据refTemplateType的值决定获取哪部分的重建像素。示例性地,当refTemplateType的值为1的时候,获取当前块的左侧、左上侧及上侧的重建像素;或者,当refTemplateType的值为2的时候,仅获取当前块的左侧四列的重建像素;或者,当refTemplateType的值为3的时候,仅获取当前块的上侧4行的重建像素。
S203:在预定义搜索范围内确定块矢量。
需要说明的是,Intra TMP技术的搜索过程主要分为初始化过程、确定模板在当前帧内的搜索区域、在搜索区域中搜索并确定最佳块矢量。
还需要说明的是,在搜索区域中搜索最佳匹配模板时可以采用先粗搜索后细搜索的搜索策略,也可以只进行细搜索,或者只进行粗搜索,这里不作具体限定。
在本申请实施例中,这里的粗搜索具体可以是:以第一预设步长(例如2)在搜索区域中确定最佳粗匹配模板,或者使用下采样(例如下采样因子为2)的模板在搜索区域中确定最佳粗匹配模板。
在本申请实施例中,这里的细搜索具体可以是:以第二预设步长(例如1)在搜索区域中确定最佳细匹配模板,或者在进行完粗搜索后在最佳粗匹配模板附近确定最佳细匹配模板。
参见图4,其示出了本申请实施例提供的一种基于IntraTMP技术的搜索流程示意图。如图4所示,该流程可以包括:
S401:初始化参数。
需要说明的是,初始化uiPatchWidth为nTbW+templateW_size,uiPatchHeight为nTbH+templateH_size。其中,templateW_size和templateH_size可以是固定常数,也可以根据当前块的尺寸动态调整;另外,templateW_size和templateH_size可以相等,也可以不相等。例如,templateW_size=4,templateH_size=4;或者,在当前块的宽度大于8的时候,设置templateW_size=4;在当前块的宽度小于或等于8的时候,设置templateW_size=2;在当前块的高度大于8的时候,设置templateH_size=4;在当前块的高度小于或等于8的时候,设置templateH_size=2。
示例性地,图5示出了当前块及其模板的参数定义示意图。如图5所示,关于参数的具体含义为:nTbW和nTbH表示当前块的尺寸,templateW_size和templateH_size表示模板尺寸,uiPatchWidth和uiPatchHeight表示包含当前块及其模板的块尺寸。
进一步地,初始化模板之间的代价阈值用diffThreshold表示,例如,当代价函数为SAD时,阈值可以是:diffThreshold=((1<<bitDepth)>>2)×(uiPatchHeight×uiPatchWidth-nTbH×nTbW)。其中,当图像比特深度bitDepth为10时,diffThreshold表示模板区域中每个像素点的最大失真为256。
进一步地,初始化当前块CB所在编码树块CTB的位置:ctbRsX,ctbRsY。
进一步地,初始化当前块CB在当前CTB内的位置偏移:offsetLCBY=yTbCmp–ctbRsY,offsetLCBX=xTbCmp–ctbRsX。
进一步地,初始化iTemplateSizeH=templateH_size,iTemplateSizeW=templateW_size。
进一步地,初始化iBvShift,iBvShift为块矢量BV的精度。例如,BV的精度可以是整像素精度,此时iBvShift为0;BV的精度也可以是亚像素精度,比如iBvShift为1时表示1/2像素精度,iBvShift为2时表示1/4像素精度,这里不作具体限定。
进一步地,初始化模板的预设搜索范围,模板的预设搜索范围可以设置为固定大小,也可以根据编码块尺寸动态调整搜索范围。例如,searchRangeWidth=TMP_SEARCH_RANGE_MULT_FACTOR×nTbW,searchRangeHeight=TMP_SEARCH_RANGE_MULT_FACTOR×nTbH;其中,TMP_SEARCH_RANGE_MULT_FACTOR的值可以为预设值,例如设置为5。
S402:确定模板在当前帧内的搜索区域。
需要说明的是,Intra TMP技术的搜索区域为当前图像中的已重建部分,并受搜索范围大小的限制。图6为模板搜索区域示意图,如图6所示,用深色填充的背景区域为已重建区域,用黑色填充的背景块为当前块,虚线框为搜索范围窗口。因此,IntraTMP技术的搜索区域不大于深色背景表示的重建区域与虚线框所标识区域的重叠部分。
由此可见,当前块模板的搜索区域可以是当前块所在CTB的已重建部分,也可以是其它已重建CTB区域。这里的搜索区域实际为所有搜索点的集合。由于该区域的形状往往不是单个矩形区域可以表示的,具体实现中,也可以在多个矩形区域中进行搜索,再综合不同区域的搜索结果得到最终的最佳匹配块以及最佳块矢量。
示例性地,参见图7,其示出了一种搜索区域的不同子区域划分示意图。如图7所示,这里示出了8种不同子区域的划分方式。其中,用黑色填充的背景块为当前块;(a)、(b)、(c)、(d)、(f)这五种划分方式均为将搜索区域划分为四个子搜索区域,(e)、(g)、(h)这三种划分方式均为将搜索区域划分为三个子搜索区域,这里不同的填充图案表示一个子搜索区域。
在图7中,(a)、(b)、(c)、(d)是考虑了所有可用搜索范围,(e)、(f)、(g)、(h)是不搜索正上方区域和正左方区域。
示例性地,假设以regionId区别表示不同的子搜索区域,考虑到当前块的模板像素需要在图像重建区域取到且模板对应的重建块像素也需要在重建区域取到,因此需要根据当前块的位置(xTbCmp,yTbCmp)、当前块的大小(nTbW,nTbH)、当前图像的大小(picWidth,picHeight)、当前块所在CTB的大小(CtbSizeW,CtbSizeH)、模板的预设搜索范围(search RangeWidth,searchRangeHeight)以及当前块在当前CTB内的位置偏移(offsetLCBY,offsetLCBX)进一步确定在不同regionId表示的子搜索区域内能搜索到的位置,从而确定出块矢量BV。具体地,以iVerMin和iVerMax分别表示在垂直方向上至少和至多可搜索到的绝对坐标位置,iHorMin和iHorMax表示在水平方向上至少和至多可搜索到的绝对坐标位置。iVerMin、iVerMax、iHorMin、iHorMax的值在不同regionId表示的搜索区域中不同。
以图7中的(f)为例,将搜索区域划分为四个子搜索区域,其实现方式如下:
当regionId等于0时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
0=min((xTbCmp+searchRangeWidth)<<iBvShift,((picWidth-nTbW)<<iBvShift));
iHorMin
0=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMax
0=(yTbCmp-nTbH-offsetLCBY)<<iBvShift;
iVerMin
0=max(((iTemplateSizeH)<<iBvShift),((yTbCmp-searchRangeHeight)<<iBvShift))。
当regionId等于1时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin
1=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iHorMax
1=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iVerMin
1=(yTbCmp+1)<<iBvShift;
iVerMax
1=min(picHeight-nTbH,(yTbCmp-offsetLCBY+CtbSizeH-nTbH)<<iBvShift)。
当regionId等于2时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
2=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iHorMin
2=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMin
2=max((iTemplateSizeH)<<iBvShift,(yTbCmp-nTbH-offsetLCBY)<<iBvShift);
iVerMax
2=(yTbCmp)<<iBvShift。
当regionId等于3时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin
3=max((iTemplateSizeW)<<iBvShift,(xTbCmp-offsetLCBX-nTbW+1)<<iBvShift);
iHorMax
3=(xTbCmp-nTbW)<<iBvShift;
iVerMin
3=max(((iTemplateSizeH)<<iBvShift),(yTbCmp-offsetLCBY-nTbH+1)<<iBvShift);
iVerMax
3=(yTbCmp-nTbH)<<iBvShift。
在实际应用中,这里的iHorMin
regionId、iHorMax
regionId、iVerMin
regionId、iVerMax
regionId分别表示不同子搜索区域的左边缘、右边缘、上边缘和下边缘。
为了直观描述不同regionId对应的不同子搜索区域,参见图8,这里示出了一种具体搜索区域的确定过程示意图。如图8所示,R1、R2、R3、R4表示四个不同的子搜索区域。需要注意的是,图8是以块的左上角像素可以对齐的像素范围表示。
S403:在搜索区域中搜索并确定最佳块矢量BV。
需要说明的是,以bvXMins、bvXMaxs分别表示块矢量在水平方向的最小偏移、最大偏移;以bvYMins、bvYMaxs分别表示块矢量在垂直方向的最小偏移、最大偏移。
bvXMins
regionId、bvXMaxs
regionId、bvYMins
regionId、bvYMaxs
regionId可以通过步骤S402所确定的iVerMin
regionId、iVerMax
regionId、iHorMin
regionId、iHorMax
regionId计算得到:
bvXMins
regionId=iHorMin
regionId–xTbCmp;
bvXMaxs
regionId=iHorMax
regionId–xTbCmp;
bvYMins
regionId=iVerMin
regionId–yTbCmp;
bvYMaxs
regionId=iVerMax
regionId–yTbCmp;
其中,bvXMins
regionId、bvXMaxs
regionId、bvYMins
regionId和bvYMaxs
regionId确定了搜索点相对于当前块的水平和垂直偏移量范围,即块矢量BV的范围。
还需要说明的是,通过每个搜索区域内的搜索点(iPosHor,iPoxVer),也即每个块矢量BV(由水平分量和垂直分量组成:(pX,pY),其中pX=iPosHor-xTbCmp,pY=iPosVer-yTbCmp,则pX处于bvXMins与bvXMaxs之间,pY处于bvYMins与bvYMaxs之间;如此,可以在重建区域找到一个当前块的匹配重建块,匹配重建块的相邻重建像素即为匹配模板(也即前述的第二模板)。由此可计算当前块的相邻模板和匹配重建块的相邻模板的匹配代价值,记为pDiff。
进一步地,遍历所有搜索范围(regionId=0、1、2、3)中全部搜索点,比较得到匹配代价值pDiff最小的搜索点,其对应的匹配代价值记为pDiff_BEST,其对应的块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST),其对应的匹配模板为最佳匹配模板T_BEST。
在一种可能的实现方式中,若搜索策略为:只进行粗搜索,具体实施如下:
在每个区域内在pX处于bvXMins
regionId与bvXMaxs
regionId之间,pY处于bvYMins
regionId与bvYMaxs
regionId之间的搜索范围内,以大于1的步长进行粗搜索,例如以步长为2进行粗搜索记录模板匹配得到的最优匹配代价值为pDiff_BEST,其对应的块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST)。
在另一种可能的实现方式中,若搜索策略为:只进行细搜索,具体实施如下:
在每个区域内在pX处于bvXMins
regionId与bvXMaxs
regionId之间,pY处于bvYMins
regionId与bvYMaxs
regionId之间的搜索范围内,例如以步长为1进行细搜索记录模板匹配得到的最优匹配代价值为pDiff_BEST,其对应的块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST)。
在又一种可能的实现方式中,若搜索策略为:先进行粗搜索,后进行细搜索;图9为搜索过程的示意图,如图9所示。具体流程如下:
S901:以步长为2在搜索区域中确定最佳粗匹配模板。
S902:以步长为1在最佳粗匹配模板附近确定最佳细匹配模板。
需要说明的是,对于步骤S901而言,在粗搜索阶段:
在每个区域内在pX处于bvXMins
regionId与bvXMaxs
regionId之间,pY处于bvYMins
regionId与bvYMaxs
regionId之间的搜索范围内,以大于1的步长进行粗搜索。例如以步长为2进行粗搜索记录模板匹配得到的最优匹配代价为pDiff1_BEST,其对应的块矢量BV记为最佳块矢量BV1_BEST(pX1_BEST,pY1_BEST),最佳匹配搜索点所在搜索区域为bestRegionId。
还需要说明的是,对于步骤S902而言,在细搜索阶段:
进一步在粗搜索得到的最佳块矢量BV1_BEST附近进行搜索。具体地,首先确定细化搜索范围TmpRefineRange,细化搜索范围可以是固定大小,也可以和当前块尺寸有关,例如可以设为min(nTbW,nTbH)/2;然后计算粗搜索得到的最优匹配重建块的位置作为细搜索区域的基准位置:BestPosX=xTbCmp+pX1_BEST,BestPosY=yTbCmp+pY1_BEST。
根据bestRegionId的值首先获已计算的iVerMin
bestRegionId、iVerMax
bestRegionId、iHorMin
bestRegionId、iHorMax
bestRegionId的值,再根据粗搜索得到的最优匹配块位置获取新的搜索范围iVerMin
refine、iVerMax
refine、iHorMin
refine、iHorMax
refine,获取方法如下:
iHorMin
refine=max(iHorMin
bestRegionId,BestPosX-TmpRefineRange);
iHorMax
refine=min(iHorMax
bestRegionId,BestPosX+TmpRefineRange);
iVerMin
refine=max(iVerMin
bestRegionId,BestPosY-TmpRefineRange);
iVerMax
refine=min(iVerMax
bestRegionId,BestPosY+TmpRefineRange);
然后,调整后的块矢量BVbvXMins、bvXMaxs、bvYMins、bvYMaxs可以通过iVerMin
refine、iVerMax
refine、iHorMin
refine、iHorMax
refine计算得到:
bvXMins=iHorMin
refine–xTbCmp;
bvXMaxs=iHorMax
refine–xTbCmp;
bvYMins=iVerMin
refine–yTbCmp;
bvYMaxs=iVerMax
refine–yTbCmp;
如此,细搜索在pX处于bvXMins
refine与bvXMaxs
refine之间,pY处于bvYMins
refine与bvYMaxs
refine之间的块矢量范围内进行。例如以步长为1进行搜索,记录模板匹配得到的最优匹配代价为pDiff_BEST,其对应的块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST)。
在完成上述操作后,即可得到最佳块矢量BV_BEST(pX_BEST,pY_BEST),其中pX_BEST和pY_BEST分别为最佳匹配模板相对于当前块模板的水平方向偏移量和垂直方向偏移量,也是最佳匹配重建块相对于当前块的水平方向偏移量和垂直方向偏移量。
S204:生成预测值。
在这里,可以利用简单的平移复制实现。具体操作为:
对于x=0…nTbW-1,y=0…nTbH-1;
predSamples[x][y]=recSamples[x+pX_BEST][y+pY_BEST] (2)
其中,recSamples表示当前帧的重建像素。
简单来说,在相关技术中,Intra TMP技术是通过当前块的模板在当前图像中的预定义搜索范围内按照预设的代价函数搜索与其代价最小的匹配模板,将匹配模板相应的最佳匹配重建块(Ref Block)作为当前块(Cur Block)的预测块。其中当前块的模板通常可以选用当前块的相邻重建区域。
然而,在实际编码过程中,相关技术直接将最佳匹配重建块的重建像素作为当前块的预测像素在某些情况下并不是最优方案,如果帧内不同区域光照强度不同或者像素噪声分布不同,则复制过来的重建块内容和当前区域编码块内容之间的差异性很大,这会导致预测准确性下降。如果模板匹配代价函数不能实际反映当前编码块模板和搜索过程中的匹配 模板之间的差异,则将得到的具有最小代价的匹配模板作为最佳匹配模板会导致最终得到的最佳候选块并不是最优候选块,从而使得有效参考信息有限,最终导致预测准确性下降。
综上所述,常见的编解码方法,可能会存在预测值有较大偏差的问题,导致预测的准确性低,无法达到最优的预测效果。
为了解决上述问题,本申请实施例提供了一种编解码方法、编码器、解码器以及存储介质,编码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值;根据当前块的预测值,确定当前块的重建值。解码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值。由此可见,在本申请的实施例中,提出一种Intra TMP Fusion的预测方式,其中,可以选择确定当前块的至少一个块矢量,进而可以利用与至少一个块矢量对应的至少一个参考块来获取当前块的预测值。也就是说,本申请实施例提出的编解码方法,充分考虑到了搜索过程中不同匹配模板对应的重建块信息对预测当前块的重要性不同,能够提升预测的准确性,从而获得最优的预测效果。
下面将结合附图对本申请各实施例进行详细说明。
参见图10A,其示出了本申请实施例提供的一种编码器的组成框图示意图。如图10A所示,编码器(具体为“视频编码器”)100可以包括变换与量化单元101、帧内估计单元102、帧内预测单元103、运动补偿单元104、运动估计单元105、反变换与反量化单元106、滤波器控制分析单元107、滤波单元108、编码单元109和解码图像缓存单元110等,其中,滤波单元108可以实现去方块滤波及样本自适应缩进(Sample Adaptive 0ffset,SAO)滤波,编码单元109可以实现头信息编码及基于上下文的自适应二进制算术编码(Context-based Adaptive Binary Arithmetic Coding,CABAC)。针对输入的原始视频信号,通过编码树单元(Coding Tree Unit,CTU)的划分可以得到一个视频编码块,然后对经过帧内或帧间预测后得到的残差像素信息通过变换与量化单元101对该视频编码块进行变换,包括将残差信息从像素域变换到变换域,并对所得的变换系数进行量化,用以进一步减少比特率;帧内估计单元102和帧内预测单元103是用于对该视频编码块进行帧内预测;明确地说,帧内估计单元102和帧内预测单元103用于确定待用以编码该视频编码块的帧内预测模式;运动补偿单元104和运动估计单元105用于执行所接收的视频编码块相对于一或多个参考帧中的一或多个块的帧间预测编码以提供时间预测信息;由运动估计单元105执行的运动估计为产生运动向量的过程,所述运动向量可以估计该视频编码块的运动,然后由运动补偿单元104基于由运动估计单元105所确定的运动向量执行运动补偿;在确定帧内预测模式之后,帧内预测单元103还用于将所选择的帧内预测数据提供到编码单元109,而且运动估计单元105将所计算确定的运动向量数据也发送到编码单元109;此外,反变换与反量化单元106是用于该视频编码块的重构建,在像素域中重构建残差块,该重构建残差块通过滤波器控制分析单元107和滤波单元108去除方块效应伪影,然后将该重构残差块添加到解码图像缓存单元110的帧中的一个预测性块,用以产生经重构建的视频编码块;编码单元109是用于编码各种编码参数及量化后的变换系数,在基于CABAC的编码算法中,上下文内容可基于相邻编码块,可用于编码指示所确定的帧内预测模式的信息,输出该视频信号的码流;而解码图像缓存单元110是用于存放重构建的视频编码块,用于预测参考。随着视频图像编码的进行,会不断生成新的重构建的视频编码块,这些重构建的视频编码块都会被存放在解码图像缓存单元110中。
参见图10B,其示出了本申请实施例提供的一种解码器的组成框图示意图。如图10B所示,解码器(具体为“视频解码器”)200包括解码单元201、反变换与反量化单元202、帧内预测单元203、运动补偿单元204、滤波单元205和解码图像缓存单元206等,其中,解码单元201可以实现头信息解码以及CABAC解码,滤波单元205可以实现去方块滤波以及SAO滤波。输入的视频信号经过图10A的编码处理之后,输出该视频信号的码流;该码流输入解码器200中,首先经过解码单元201,用于得到解码后的变换系数;针对该变换系数通过反变换与反量化单元202进行处理,以便在像素域中产生残差块;帧内预测单元203可用于基于所确定的帧内预测模式和来自当前帧或图片的先前经解码块的数据而产生当前视频解码块的预测数据;运动补偿单元204是通过剖析运动向量和其他关联语法元素来确定用于视频解码块的预测信息,并使用该预测信息以产生正被解码的视频解码块的预测性块;通过对来自反变换与反量化单元202的残差块与由帧内预测单元203或运动补偿单元204产生的对应预测性块进行求和,而形成解码的视频块;该解码的视频信号通过滤波单元205以便去除方块效应伪影,可以改善视频质量;然后将经解码的视频块存储于解码图像缓存单元206中,解码图像缓存单元206存储用于后续帧内预测或运动补偿的参考图像,同时也用于视频信号的输出,即得到了所恢复的原始视频信号。
进一步地,本申请实施例还提供了一种包含编码器和解码器的编解码系统的网络架构,其中,图11示出了本申请实施例提供的一种编解码系统的网络架构示意图。如图11所示,该网络架构包括一个或多个电子设备13至1N和通信网络01,其中,电子设备13至1N可以通过通信网络01进行视频交互。电子设备在实施的过程中可以为各种类型的具有视频编解码功能的设备,例如,所述电子设备可以包括智能手机、平板电脑、个人计算机、个人数字助理、导航仪、数字电话、视频电话、电视机、传感设备、服务器等,本申请实施例不作具体限定。在这里,本申请实施例所述的解码器或编码器就可以为上述电子设备。
需要说明的是,本申请实施例的方法主要应用在如图10A所示的帧内预测单元103部分和如图10B所示的帧内预测单元203部分。也就是说,本申请实施例既可以应用于编码器,也可以应用于解码器,甚至还可以同时应用于编码器和解码器,但是本申请实施例不作具体限定。
还需要说明的是,当应用于帧内预测单元103部分时,“当前块”具体是指当前待进行帧内预测的编码块;当应用于帧内预测单元203部分时,“当前块”具体是指当前待进行帧内预测的解码块。
本申请的一实施例提出了一种解码方法,该解码方法应用于解码器,图12为本申请实施例提出的解码方法的流程示意图,如图12所示,解码器进行解码处理的方法可以包括以下步骤:
步骤101、确定当前块对应的第一模板。
在本申请的实施例中,可以先确定当前块对应的第一模板。其中,在进行第一模板的获取时,可以先确定当前块对应的模板类型,然后可以根据模板类型进一步确定当前块对应的第一模板。
需要说明的是,本申请实施例的解码方法应用于解码器。另外,该解码方法可以包括一种帧内预测方法,更具体地,是一种颜色分量预测方法。其中,视频图像可以划分为多个解码块,每个解码块可以包括第一颜色分量、第二颜色分量和第三颜色分量,而本申请实施例中的当前块是指视频图像中当前待进行帧内预测的解码块。
在这里,当需要对第一颜色分量进行预测时,待预测分量为第一颜色分量;当需要对第二颜色分量进行预测时,待预测分量为第二颜色分量;当需要对第三颜色分量进行预测时,待预测分量为第三颜色分量。另外,假定当前块进行第一颜色分量的预测,而且第一颜色分量为亮度分量,即待预测分量为亮度分量,那么当前块也可以称为亮度块;或者,假定当前块进行第二颜色分量的预测,而且第二颜色分量为色度分量,即待预测分量为色度分量,那么当前块也可以称为色度块。
还需要说明的是,在本申请实施例中,当前块的参考像素(Reference Sample)可以是指与当前块相邻的参考像素点;其中,这里的相邻可以是空间相邻,但是并不局限于此。例如,相邻也可以是时域相邻、空间与时域相邻,甚至当前块的参考像素还可以是对空间相邻、时域相邻、空间和时域相邻的参考像素点进行某种处理后得到的参考像素等等,本申请实施例不作任何限定。
进一步地,在本申请的实施例中,可以选择根据当前块的参考像素,确定当前块的模板类型。其中,当前块的参考像素包括下述至少一项:当前块的左侧相邻参考像素、当前块的上侧相邻参考像素、当前块的左上侧相邻参考像素、当前块的左下侧相邻参考像素、当前块的右上侧相邻参考像素。
可以理解的是,在本申请的实施例中,当前块的参考像素可以包括当前块的相邻已重建像素,即可以选择利用当前块的相邻已重建像素作为模板在预定义搜索区域内搜索匹配模板。
需要说明的是,在本申请的实施例中,当前块的参考像素,即当前块的相邻已重建像素可以包括当前块的上侧参考像素、左上侧参考像素、右上侧参考像素、左侧参考像素和左下侧参考像素。
可以理解的是,在本申请的实施例中,在利用当前块的参考像素,确定当前块的模板类型时,根据相邻参考像素的可用与否可以对模板类型进行分类并确定模板类型。
进一步地,在本申请的实施例中,在根据当前块的参考像素,确定当前块的模板类型时,若当前块的左侧相邻参考像素、当前块的上侧相邻参考像素和当前块的左上侧相邻参考像素均可用,则确定当前块的模板类型为第一值;若当前块的左侧相邻参考像素可用,则确定当前块的模板类型为第二值;若当前块的上侧相邻参考像素可用,则确定当前块的模板类型为第三值;若当前块的左侧相邻参考像素和当前块的左上侧相邻参考像素均可用,则确定当前块的模板类型为第四值;若当前块的左侧相邻参考像素和当前块的左下侧相邻参考像素均可用,则确定当前块的模板类型为第五值;若当前块的上侧相邻参考像素和当前块的右上侧相邻参考像素均可用,则确定当前块的模板类型为第六值。
需要说明的是,在本申请的实施例中,第一值、第二值、第三值、第四值、第五值以及第六值可以为任意数值,本申请不进行具体限定。例如,第一值、第二值、第三值、第四值、第五值以及第六值的取值可以依次为1、2、3、4、5、6。
示例性的,在本申请的实施例中,可以用refTemplateType表示模板类型,相应的,如上述图3所示,用网格填充的块为当前块,且当前块的相邻区域为模板T,这里示出了六种模板类型。
示例性地,这六种模板类型如下所示:当左上侧参考像素、上侧参考像素和左侧参考像素均可用时,refTemplateType的值为1,模板形状如图3中的(a)所示;当只有左侧参考像素可用时,refTemplateType的值为2,模板形状如图3中的(b)所示;当只有上侧参考像素可用时,refTemplateType的值为3,模板形状如图3中的(c)所示;当只有左侧参考像素和左上侧参考像素可用时,refTemplateType的值为4,模板形状如图3中的(d)所示;当只有左侧参考像素和左下侧参考像素可用时,refTemplateType的值为5,模板形状如图3中的(e)所示;当只有上侧参考像素和右上侧参考像素可用时,refTemplateType的值为6,模板形状如图3中的(f)所示。
进一步地,在本申请的实施例中,在根据模板类型确定当前块对应的第一模板时,可以先根据模板类型,以及模板类型对应的模板尺寸,确定当前块的模板参考像素,然后可以根据模板参考像素,确定当前块的第一模板。
需要说明的是,在本申请的实施例中,当前块的第一模板可以包括当前块的模板参考像素。其中,当前块的模板参考像素可以由当前块的模板类型和与该模板类型对应的模板尺寸来确定。
需要说明的是,在本申请的实施例中,当前块的第一模板可以由当前块的上、右上、左、左下、左上中的一个或多个区域的重建像素构成,即可以由述当前块的参考像素构成。
需要说明的是,在本申请的实施例中,模板类型对应的模板尺寸是可以预先设置好的,例如,获取左模板时,可以将模板宽度templateW_size设为4,获取上模板时,可以将模板高度templateH_size设为4。
相应的,在本申请的实施例中,结合当前块的模板类型refTemplateType的值,以及该refTemplateType对应的模板尺寸,便可以决定获取哪部分重建像素作为当前块的模板参考像素,进而可以确定出对应的第一模板。
示例性的,在本申请的实施例中,当refTemplateType的值为1的时候,可以选择获取当前块的左、左上及上重建像素;当refTemplateType的值为2的时候,则仅获取当前块的左4列重建像素;当refTemplateType的值为3的时候,仅获取当前编码块的上4行重建像素。
当然,预先设置的模板尺寸的取值可以为任意大于0的整数,不局限于4,对此本申请不进行具体限定。
可以理解的是,在本申请的实施例中,结合当前块的模板类型以及对应的模板尺寸,从当前块的参考像素中所确定的当前块的模板参考像素,既可以为当前块对应的第一模板,
步骤102、根据第一模板确定当前块对应的一个或多个块矢量。
在本申请的实施例中,在确定当前块对应的第一模板之后,可以进一步根据第一模板确定当前块对应的一个或多个块矢量。
需要说明的是,在本申请的实施例中,块矢量的搜索过程可以包括初始化过程,确定第一模板在当前帧内的搜索区域,在搜索区域中搜索并确定一个或对个最佳块矢量这几部分,因此,在执行搜索处理时,需要先完成初始化操作。
示例性的,如上述图5所示,nTbW和nTbH表示当前块的尺寸,templateW_size和templateH_size表示模板尺寸,uiPatchWidth和uiPatchHeight表示包含当前块及其模板的块尺寸。
相应的,在初始话处理时,可以初始化uiPatchWidth为nTbW+templateW_size,uiPatchHeight为nTbH+templateH_size,其中templateW_size和templateH_size可以是固定常数,也可以根据编码块尺寸动态调整,templateW_size和templateH_size可以相等,也可以不相等。比如templateW_size=4,templateH_size=4;或者当编码块的宽度大于8的时候,设置templateW_size=4,当编码块的宽度小于等于8的时候,设置templateW_size=2,当编码块的高度大于8的时候,设置templateH_size=4,当编码块的高度小于等于8的时候,设置templateH_size=2。
进一步地,初始化模板之间的代价阈值用diffThreshold表示,例如,当代价函数为SAD时,阈值可以是:diffThreshold=((1<<bitDepth)>>2)×(uiPatchHeight×uiPatchWidth-nTbH×nTbW)。其中,当图像比特深度bitDepth为10时,diffThreshold表示模板区域中每个像素点的最大失真为256。
进一步地,初始化当前块CB所在编码树块CTB的位置:ctbRsX,ctbRsY。
进一步地,初始化当前块CB在当前CTB内的位置偏移:offsetLCBY=yTbCmp–ctbRsY,offsetLCBX=xTbCmp–ctbRsX。
进一步地,初始化iTemplateSizeH=templateH_size,iTemplateSizeW=templateW_size。
进一步地,初始化iBvShift,iBvShift为块矢量BV的精度。例如,BV的精度可以是整像素精度,此时iBvShift为0;BV的精度也可以是亚像素精度,比如iBvShift为1时表示1/2像素精度,iBvShift为2时表示1/4像素精度,这里不作具体限定。
进一步地,初始化模板的预设搜索范围,模板的预设搜索范围可以设置为固定大小,也可以根据编码块尺寸动态调整搜索范围。例如,searchRangeWidth=TMP_SEARCH_RANGE_MULT_FACTOR×nTbW,searchRangeHeight=TMP_SEARCH_RANGE_MULT_FACTOR×nTbH;其中,TMP_SEARCH_RANGE_MULT_FACTOR的值可以为预设值,例如设置为5。
进一步地,在本申请的实施例中,在根据第一模板确定当前块对应的一个或多个块矢量时,可以先根据第一模板确定预设搜索区域;然后可以在预设搜索区域内进行搜索,确定一个或多个块矢量。
需要说明的是,在本申请的实施例中,搜索区域为当前图像中的已重建部分,并受搜索范围大小的限制。如上述图6所示,用深色填充的背景区域为已重建区域,用黑色填充的背景块为当前块,虚线框为搜索范围窗口。因此,IntraTMP技术的搜索区域不大于深色背景表示的重建区域与虚线框所标识区域的重叠部分。
由此可见,当前块模板的搜索区域可以是当前块所在CTB的已重建部分,也可以是其它已重建CTB区域。这里的搜索区域实际为所有搜索点的集合。由于该区域的形状往往不是单个矩形区域可以表示的,具体实现中,也可以在多个矩形区域中进行搜索,再综合不同区域的搜索结果得到最终的最佳匹配块以及最佳块矢量。
示例性的,参见上述图7,这里示出了8种不同子区域的划分方式。其中,用黑色填充的背景块为当前块;(a)、(b)、(c)、(d)、(f)这五种划分方式均为将搜索区域划分为四个子搜索区域,(e)、(g)、(h)这三种划分方式均为将搜索区域划分为三个子搜索区域,这里不同的填充图案表示一个子搜索区域。
在图7中,(a)、(b)、(c)、(d)是考虑了所有可用搜索范围,(e)、(f)、(g)、(h)是不搜索正上方区域和正左方区域。
示例性地,假设以regionId区别表示不同的搜索区域,考虑到当前编码块模板像素需要在图像重建区域取到且模板对应的重建块像素也需要在重建区域取到,因此需要根据当前编码块的位置(xTbCmp,yTbCmp)、当前编码块的大小(nTbW,nTbH)、当前图像的大小(picWidth,picHeight)、当前编码块所在CTB的大小(CtbSizeW,CtbSizeH)、模板的预设搜索范围(searchRangeWidth,searchRangeHeight)以及当前编码块在当前CTB内的位置偏移(offsetLCBY,offsetLCBX)进一步确定在不同regionId表示的搜索区域内能搜索到的位置,从而确定块矢量BV。具体地,以iVerMin和iVerMax分别表示在垂直方向上至少和至多可搜索到的绝对坐标位置,iHorMin和iHorMax表示在水平方向上至少和至多可搜索到的绝对坐标位置。iVerMin、iVerMax、iHorMin、iHorMax的值在不同regionId表示的搜索区域中不同。
在一些实施例中,以图7中的(f)为例,将搜索区域划分为四个子搜索区域,其实现方式如下:
当regionId等于0时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
0=min((xTbCmp+searchRangeWidth)<<iBvShift,((picWidth-nTbW)<<iBvShift));
iHorMin
0=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMax
0=(yTbCmp-nTbH-offsetLCBY)<<iBvShift;
iVerMin
0=max(((iTemplateSizeH)<<iBvShift),((yTbCmp-searchRangeHeight)<<iBvShift))。
当regionId等于1时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin
1=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iHorMax
1=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iVerMin
1=(yTbCmp+1)<<iBvShift;
iVerMax
1=min(picHeight-nTbH,(yTbCmp-offsetLCBY+CtbSizeH-nTbH)<<iBvShift)。
当regionId等于2时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
2=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iHorMin
2=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMin
2=max((iTemplateSizeH)<<iBvShift,(yTbCmp-nTbH-offsetLCBY)<<iBvShift);
iVerMax
2=(yTbCmp)<<iBvShift。
当regionId等于3时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin
3=max((iTemplateSizeW)<<iBvShift,(xTbCmp-offsetLCBX-nTbW+1)<<iBvShift);
iHorMax
3=(xTbCmp-nTbW)<<iBvShift;
iVerMin
3=max(((iTemplateSizeH)<<iBvShift),(yTbCmp-offsetLCBY-nTbH+1)<<iBvShift);
iVerMax
3=(yTbCmp-nTbH)<<iBvShift。
在实际应用中,这里的iHorMin
regionId、iHorMax
regionId、iVerMin
regionId、iVerMax
regionId分别表示不同子搜索区域的左边 缘、右边缘、上边缘和下边缘。
为了直观描述不同regionId对应的不同子搜索区域,如上述图8所示,R1、R2、R3、R4表示四个不同的子搜索区域。需要注意的是,图8是以块的左上角像素可以对齐的像素范围表示。
在一些实施例中,以图7中的(a)为例,将搜索区域划分为四个子搜索区域,其实现方式如下:
当regionId等于0时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
0=min((xTbCmp+searchRangeWidth)<<iBvShift,((picWidth-nTbW)<<iBvShift))
iHorMin
0=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iVerMax
0=(yTbCmp-nTbH-offsetLCBY)<<iBvShift
iVerMin
0=max(((iTemplateSizeH)<<iBvShift),((yTbCmp-searchRangeHeight)<<iBvShift))。
当regionId等于1时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin
1=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iHorMax
1=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iVerMin
1=(yTbCmp+1)<<iBvShift;
iVerMax
1=min(picHeight-nTbH,(yTbCmp-offsetLCBY+CtbSizeH-nTbH)<<iBvShift)。
当regionId等于2时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
2=(xTbCmp-nTbW)<<iBvShift;
iHorMin
2=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMin
2=max((iTemplateSizeH)<<iBvShift,(yTbCmp-nTbH)<<iBvShift);
iVerMax
2=(yTbCmp)<<iBvShift。
当regionId等于3时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下
iHorMin
3=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iHorMax
3=(xTbCmp)<<iBvShift;
iVerMin
3=max(((iTemplateSizeH)<<iBvShift),(yTbCmp-offsetLCBY-nTbH+1)<<iBvShift);
iVerMax
3=(yTbCmp-nTbH)<<iBvShift。
在实际应用中,这里的iHorMin
regionId、iHorMax
regionId、iVerMin
regionId、iVerMax
regionId分别表示不同子搜索区域的左边缘、右边缘、上边缘和下边缘。
为了直观描述不同regionId对应的不同子搜索区域,如图8所示,R1、R2、R3、R4表示四个不同的子搜索区域。需要注意的是,图8是以块的左上角像素可以对齐的像素范围表示。
在一些实施例中,以图7中的(b)为例,将搜索区域划分为四个子搜索区域,其实现方式如下:
当regionId等于0时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax0=min((xTbCmp+searchRangeWidth)<<iBvShift,((picWidth-nTbW)<<iBvShift))
iHorMin0=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iVerMax0=(yTbCmp-nTbH-offsetLCBY)<<iBvShift
iVerMin0=max(((iTemplateSizeH)<<iBvShift),((yTbCmp-searchRangeHeight)<<iBvShift))。
当regionId等于1时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin1=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iHorMax1=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iVerMin1=(yTbCmp+1)<<iBvShift;
iVerMax1=min(picHeight-nTbH,(yTbCmp-offsetLCBY+CtbSizeH-nTbH)<<iBvShift)。
当regionId等于2时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax2=(xTbCmp-nTbW)<<iBvShift;
iHorMin2=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMin2=max((iTemplateSizeH)<<iBvShift,(yTbCmp-nTbH-offsetLCBY)<<iBvShift);
iVerMax2=(yTbCmp)<<iBvShift。
当regionId等于3时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin3=max((iTemplateSizeW)<<iBvShift,(xTbCmp-nTbW+1)<<iBvShift);
iHorMax3=(xTbCmp)<<iBvShift;
iVerMin3=max(((iTemplateSizeH)<<iBvShift),(yTbCmp-offsetLCBY-nTbH+1)<<iBvShift);
iVerMax3=(yTbCmp-nTbH)<<iBvShift。
在实际应用中,这里的iHorMin
regionId、iHorMax
regionId、iVerMin
regionId、iVerMax
regionId分别表示不同子搜索区域的左边缘、右边缘、上边缘和下边缘。
为了直观描述不同regionId对应的不同子搜索区域,参见图13,这里示出了一种具体搜索区域的确定过程示意图。如图13所示,R1、R2、R3、R4表示四个不同的子搜索区域。需要注意的是,图13是以块的左上角像素可以对齐的像素范围表示。
进一步地,在本申请的实施例中,在预设搜索区域内进行搜索,确定一个或多个块矢量时,可以选择遍历预设搜索区域中的搜索点,根据预设的匹配准则确定预设搜索区域中的搜索点对应的匹配模板与第一模板之间的匹配代价值;然后可以选择根据匹配代价值,确定一个或多个块矢量,以及一个或多个块矢量对应的一个或多个候选模板。
需要说明的是,在本申请的实施例中,通过搜索处理所确定的块矢量的数量可以为一个或者多个,例如,可以确定当前块的N个块矢量,其中,N为大于0的整数。
相应的,在本申请的实施例中,在预设搜索区域内进行搜索,确定一个或多个块矢量时,可以先确定候选模板对应的预设数量N;然后遍历预设搜索区域中的搜索点,根据预设的匹配准则确定预设搜索区域中的搜索点对应的匹配模板 与第一模板之间的匹配代价值;最后,可以根据匹配代价值,确定N个块矢量,以及N个块矢量对应的N个候选模板。
也就是说,在本申请的实施例中,在预设搜索区域中搜索并确定N个匹配模板对应的N个块矢量时,即在搜索区域(预设搜索区域)中搜索并确定N个匹配模板对应的块矢量BV的过程可以包括确定候选模板的数量N的值、确定匹配模板比较准则并记录N个匹配模板(所选中的N个候选模板)对应的N个块矢量BV。
可以理解的是,在本申请的实施例中,在确定候选模板对应的预设数量N时,可以选择通过解码码流,确定N;也可以按照第一预设数值确定N;还可以按照预设数值范围确定N。
也就是说,在本申请的实施例中,首先需要确定N的值,这里的N可以人为预设为某个常数,比如N为4;N也可以在一定数值范围内,比如N值可以是[2,8]中的任何一个整数,N值的范围通过为预先设置的,可以在编码端以代价1粗选、代价2粗选,或代价3粗选、代价4细选等方式决策出最佳N值并以码流形式将最佳N值传至解码端。其中代价1、2、3、4各项可以是SAD、SATD、MSE、MAD、RDO等用于衡量模式的代价函数中的一种。对于N的确定方式本申请不进行具体限定。
需要说明的是,在本申请的实施例中,预设的匹配准则包括绝对误差和SAD、变换绝对误差和SATD、差值平方和SSE、平均绝对差值MAD、平均绝对误差MAE、平均平方误差MSE、归一化相关系数NCC等用于衡量模式的代价函数中的任意一种。
进一步地,在本申请的实施例中,在根据匹配代价值,确定N个块矢量,以及N个块矢量对应的N个候选模板时,即确定一个或多个块矢量,以及一个或多个块矢量对应的一个或多个候选模板时,可以先在预设搜索区域中的搜索点对应的匹配模板与第一模板之间的匹配代价值中,确定N个最小匹配代价值;然后确定N个最小匹配代价值对应的N个块矢量和N个候选模板。
需要说明的是,在本申请的实施例中,对于N个块矢量中的任意一个块矢量,可以选择以bvXMins、bvXMaxs分别表示块矢量在水平方向的最小偏移、最大偏移;以bvYMins、bvYMaxs分别表示块矢量在垂直方向的最小偏移、最大偏移。
bvXMinsregionId、bvXMaxsregionId、bvYMinsregionId、bvYMaxsregionId可以通过已经确定的iVerMinregionId、iVerMaxregionId、iHorMinregionId、iHorMaxregionId计算得到:
bvXMinsregionId=iHorMinregionId-xTbCmp;
bvXMaxsregionId=iHorMaxregionId-xTbCmp;
bvYMinsregionId=iVerMinregionId-yTbCmp;
bvYMaxsregionId=iVerMaxregionId-yTbCmp;
bvXMinsregionId、bvXMaxsregionId、bvYMinsregionId和bvYMaxsregionId确定了搜索点相对于当前块的水平和垂直偏移量范围,即块矢量BV的范围。
还需要说明的是,通过每个搜索区域内的搜索点(iPosHor,iPoxVer),也即每个块矢量BV(由水平分量和垂直分量组成:(pX,pY),其中pX=iPosHor-xTbCmp,pY=iPosVer-yTbCmp,则pX处于bvXMins与bvXMaxs之间,pY处于bvYMins与bvYMaxs之间),可以在重建区域找到一个或多个当前块的匹配重建块,该一个或多个匹配重建块的相邻重建像素即为匹配模板。由此可以分别计算当前块相邻模板和一个或多个重建块相邻模板的匹配代价,记为pDiff。
进一步地,遍历所有搜索范围(regionId=0、1、2、3)中全部搜索点,比较得到匹配代价pDiff最小的一个或多个搜索点,其对应的匹配代价记为pDiff_BEST,其对应的一个或多个块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST),其对应的一个或多个匹配模板为最佳匹配模板T_BEST,即获得一个或多个候选模板。
可以理解的是,在本申请的实施例中,在确定候选模板的数量N的值之后,需要以某种比较准则选出较匹配的N个候选模板对应的N个块矢量BV。即与常见的搜索匹配模板并记录块矢量BV的相关技术相比,本申请的不同之处在于可以选择筛选记录多个块矢量BV
n,根据块矢量BV
n,也就是根据模板偏移量pX
n和pY
n得到匹配模板后计算模板匹配代价并记录N个代价较小的匹配模板对应的N个BV,这里将该N个匹配模板称为N个候选模板。其中,模板匹配代价(预设的匹配准则)可以是SAD、SATD、MSE、MAD、RDO、相关系数等用于衡量模式的代价函数中的一种。
示例性的,在本申请的实施例中,匹配代价比较准则(预设的匹配准则)为平均绝对差(Mean Absolute Difference,MAD)时,计算公式如下:
其中,refT为搜索过程中的匹配模板,curT为当前编码块模板(当前块的第一模板),M为当前编码块模板的像素数,MAD(refT)为当前编码块模板curT和搜索到的匹配模板的平均绝对差。
相应的,在本申请的实施例中,基于MAD的筛选准则为:比较并记录N个MAD代价最小的匹配模板对应的N个块矢量BV。
示例性的,对于N个候选模板,第n个候选模板和当前编码块模板之间的MAD如下:
其中,refT
n为第n个候选模板,MAD(refT
n)为当前编码块模板curT和第n个候选模板的平均绝对差,n=0,…,N-1。
示例性的,在本申请的实施例中,匹配代价比较准则(预设的匹配准则)为SAD时,计算公式如下:
其中,SAD(refT)为当前编码块模板(当前块的第一模板)curT和搜索到的匹配模板的绝对误差和。
相应的,在本申请的实施例中,基于SAD的筛选准则为:比较并记录N个SAD代价较小的匹配模板对应的N个块矢量BV。
示例性的,对于N个候选模板,第n个候选模板和当前编码块模板之间的SAD如下:
其中,SAD(refT
n)为当前编码块模板和第n个候选模板的绝对误差和。
示例性的,在本申请的实施例中,可以将NCC归一化相关系数作为模板匹配准则进行比较,计算公式如下:
其中,refT为搜索过程中的匹配模板,curT为当前编码块模板(当前块的第一模板),M为当前编码块模板的像素数,refT
Avg为搜索到的匹配模板的像素平均值,curT
Avg为当前编码块模板的像素平均值,R(refT)为当前编码块模板和搜索到的匹配模板的相关系数。
相应的,在本申请的实施例中,基于NCC比较准则为:排序并记录N个相关系数R更大的匹配模板对应的N个块矢量BV。
其中,对于N个候选模板,第n个候选模板和当前编码块模板之间的相关系数如下:
其中,
为第n个候选模板的像素平均值,R(refT
n)为当前编码块模板和第n个候选模板的相关系数。值得一提的是,NCC归一化相关系数R的范围为[-1,1],R越大,表示相关性越强。
需要说明的是,在本申请的实施例中,在执行搜索处理时,可以采用的搜索策略可以包括但不限于基于不同搜索步长的搜索方式,例如,基于第一搜索步长的粗搜索和/或基于第二搜索步长的细搜索,其中,第一搜索步长大于第二搜索步长。
进一步地,在本申请的实施例中,可以选择按照第一搜索步长遍历预设搜索区域中的搜索点,确定块矢量和候选模板。或者,可以选择按照第二搜索步长遍历预设搜索区域中的搜索点,确定块矢量和候选模板。
进一步地,在本申请的实施例中,可以先按照第一搜索步长遍历预设搜索区域中的搜索点,确定初始块矢量,以及初始块矢量对应的初始匹配模板;然后根据初始匹配模板确定第一搜索区域;其中,第一搜索区域小于预设搜索区域;最后可以按照第二搜索步长遍历第一搜索区域中的搜索点,确定块矢量和候选模板;其中,第一搜索步长大于第二搜索步长。
也就是说,在本申请的实施例中,在搜索区域中搜索最佳匹配模板时可以采用先粗搜索后细搜索的搜索策略,也可以只进行细搜索,或者只进行粗搜索。
示例性的,在本申请的实施例中,粗搜索具体可以包括:以第一预设步长(即第一搜索步长,例如2)在搜索区域中确定最佳粗匹配模板,即获得最终的候选模板,或者,使用下采样(例如下采样因子为2)的模板在搜索区域中确定最佳粗匹配模板,即获得最终的候选模板。
示例性的,在本申请的实施例中,细搜索具体可以包括:以第二预设步长(即第二搜索步长,例如1)在搜索区域中确定最佳细匹配模板,即获得最终的候选模板,或者,在进行完粗搜索后在最佳粗匹配模板附近确定最佳细匹配模板,即获得最终的候选模板。
示例性的,在本申请的实施例中,如果搜索策略为只进行粗搜索,那么可以选择在每个区域内在pX处于bvXMinsregionId与bvXMaxsregionId之间,pY处于bvYMinsregionId与bvYMaxsregionId之间的搜索范围内,以大于1的步长进行粗搜索,例如以步长为2(即第一搜索步长为2)进行粗搜索记录模板匹配得到的最优的一个或多个匹配代价为pDiff_BEST,其对应的一个或多个块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST),即通过在预设搜索区域执行搜索处理获得当前块对应的一个或多个块矢量,且最优的一个或多个匹配代价对应的一个或多个匹配模板可以最为最终的一个或多个候选模板。
示例性的,在本申请的实施例中,如果搜索策略为只进行细搜索,那么可以选择在每个区域内在pX处于bvXMinsregionId与bvXMaxsregionId之间,pY处于bvYMinsregionId与bvYMaxsregionId之间的搜索范围内,例如以步长为1(即第二搜索步长为1)进行细搜索记录模板匹配得到的最优的一个或多个匹配代价为pDiff_BEST,其对应的一个或多个块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST),即通过在预设搜索区域执行搜索处理获得当前块对应的一个或多个块矢量,且最优的一个或多个匹配代价对应的一个或多个匹配模板可以最为最终的一个或多个候选模板。
示例性的,在本申请的实施例中,如果搜索策略为先进行粗搜索,后进行细搜索,如图10所示。可以先以步长为2(即第一搜索步长为2)进行粗搜索记录模板匹配得到最佳粗匹配模板(初始匹配模板),然后可以以步长为1(即第二搜索步长为1)在最佳粗匹配模板附近确定最佳细匹配模板,即获得最终的候选模板。
其中,在粗搜索阶段,可以选择在每个区域内在pX处于bvXMinsregionId与bvXMaxsregionId之间,pY处于bvYMinsregionId与bvYMaxsregionId之间的搜索范围内,以大于1的步长进行粗搜索。例如以步长为2进行粗搜索记录模板匹配得到的最优匹配代价为pDiff1_BEST,其对应的块矢量BV记为最佳块矢量BV1_BEST(pX1_BEST,pY1_BEST),即初始块矢量,其对应的匹配模板即为初始匹配模板,此时,最佳匹配搜索点所在搜索区域为bestRegionId。
接着,在细搜索阶段,可以选择在粗搜索得到的最佳块矢量BV1_BEST(初始块矢量)附近进行搜索,即在第一搜索区域进行搜索。因此,首先需要确定细化搜索范围TmpRefineRange,即需要确定出第一搜索区域TmpRefineRange。其中,细化搜索范围(第一搜索区域TmpRefineRange)可以是固定大小,也可以和当前块尺寸有关,例如可以设为min(nTbW,nTbH)/2,然后计算粗搜索得到的最优匹配重建块的位置作为细搜索区域的基准位置:BestPosX=xTbCmp+pX1_BEST,BestPosY=yTbCmp+pY1_BEST。
在一种实施例中,可以根据bestRegionId的值首先获取已计算的iVerMinbestRegionId、iVerMaxbestRegionId、iHorMinbestRegionId、iHorMaxbestRegionId的值,再根据粗搜索得到的最优匹配块位置获取新的搜索范围iVerMinrefine、iVerMaxrefine、iHorMinrefine、iHorMaxrefine,获取方法如下:
iHorMinrefine=max(iHorMinbestRegionId,BestPosX-TmpRefineRange)
iHorMaxrefine=min(iHorMaxbestRegionId,BestPosX+TmpRefineRange)
iVerMinrefine=max(iVerMinbestRegionId,BestPosY-TmpRefineRange)
iVerMaxrefine=min(iVerMaxbestRegionId,BestPosY+TmpRefineRange)
然后,调整后的块矢量BVbvXMins、bvXMaxs、bvYMins、bvYMaxs可以通过iVerMinrefine、iVerMaxrefine、iHorMinrefine、iHorMaxrefine计算得到:
bvXMins=iHorMinrefine-xTbCmp;
bvXMaxs=iHorMaxrefine-xTbCmp;
bvYMins=iVerMinrefine-yTbCmp;
bvYMaxs=iVerMaxrefine-yTbCmp;
细搜索在pX处于bvXMinsrefine与bvXMaxsrefine之间,pY处于bvYMinsrefine与bvYMaxsrefine之间的块矢量范围内进行。例如,以步长为1进行搜索,记录模板匹配得到的最优匹配代价为pDiff_BEST,其对应的块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST),即最终确定的当前块的块矢量,其对应的匹配模板即为当前块的候选模板。
在完成上述操作后,即可得到最优的块矢量BV_BEST(pX_BEST,pY_BEST),其中pX_BEST和pY_BEST分别为最佳匹配模板相对于当前编码块模板的水平方向偏移量和垂直方向偏移量,也是最佳匹配重建块相对于当前编码块的水平方向偏移量和垂直方向偏移量。
由此可见,在本申请的实施例中,对应于在搜索区域中搜索并确定一个或多个块矢量的过程中可以包括三种搜索策略:只进行粗搜索、只进行细搜索、先粗搜索再细搜索。相应的,如果搜索策略为只进行粗搜索,那么只在粗搜索过程中确定N个匹配模板对应的N个块矢量BV,并将对应的该N个匹配模板作为N个候选模板。如果搜索策略为只进行细搜索,那么只在细搜索过程中确定N个匹配模板对应的N个块矢量BV,并将对应的该N个匹配模板作为N个候选模板。如果搜索策略为先粗搜索,后细搜索,那么可以在粗搜索过程中先确定K个初步匹配模板(初始匹配模板)对应的K个块矢量BV,其中,K为大于或者等于N的整数,基于该K个初步匹配模板在细搜索过程执行后确定最终N个匹配模板对应的N个块矢量BV,并将对应的该N个匹配模板作为N个候选模板。
进一步地,在本申请的实施例中,在执行搜索处理时,还可以按照第一搜索步长遍历预设搜索区域的子搜索区域中的搜索点,确定子搜索区域对应的初始矢量,以及初始块矢量对应的第二搜索区域;根据初始块矢量和第二搜索区域,在子搜索区域中确定多个目标子搜索区域;按照第二搜索步长遍历多个目标子搜索区域中的搜索点,确定块矢量和候选模板;其中,第一搜索步长大于第二搜索步长。
可以理解的是,在本申请的实施例中,在根据初始块矢量和第二搜索区域,在子搜索区域中确定多个目标子搜索区域时,可以根据每一个子搜索区域各自的最佳块矢量,即初始块矢量,以及对应的第二搜索区域进行区域判断,从而可以确定后续搜索处理过程中所使用的多个目标子搜索区域。
也就是说,在本申请的实施例中,对于先粗搜索、后搜索的搜索策略,还可以选择在不同的搜索区域之间跨界进行细搜索。其中,在完成粗搜索过程之后,在细搜索过程中可以进行各区域边界的方法。
示例性的,在本申请的实施例中,以图7中的(a)为例,将搜索区域划分为四个子搜索区域,其实现方式如下:
当regionId等于0时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
0=min((xTbCmp+searchRangeWidth)<<iBvShift,((picWidth-nTbW)<<iBvShift))
iHorMin
0=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iVerMax
0=(yTbCmp-nTbH-offsetLCBY)<<iBvShift
iVerMin
0=max(((iTemplateSizeH)<<iBvShift),((yTbCmp-searchRangeHeight)<<iBvShift))。
当regionId等于1时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin
1=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iHorMax
1=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iVerMin
1=(yTbCmp+1)<<iBvShift;
iVerMax
1=min(picHeight-nTbH,(yTbCmp-offsetLCBY+CtbSizeH-nTbH)<<iBvShift)。
当regionId等于2时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
2=(xTbCmp-nTbW)<<iBvShift;
iHorMin
2=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMin
2=max((iTemplateSizeH)<<iBvShift,(yTbCmp-nTbH)<<iBvShift);
iVerMax
2=(yTbCmp)<<iBvShift。
当regionId等于3时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下
iHorMin
3=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iHorMax
3=(xTbCmp)<<iBvShift;
iVerMin
3=max(((iTemplateSizeH)<<iBvShift),(yTbCmp-offsetLCBY-nTbH+1)<<iBvShift);
iVerMax
3=(yTbCmp-nTbH)<<iBvShift。
在实际应用中,这里的iHorMin
regionId、iHorMax
regionId、iVerMin
regionId、iVerMax
regionId分别表示不同子搜索区域的左边缘、右边缘、上边缘和下边缘。
为了直观描述不同regionId对应的不同子搜索区域,参见图14,这里示出了一种具体搜索区域的确定过程示意图。如图14所示,R1、R2、R3、R4表示四个不同的子搜索区域。需要注意的是,图14是以块的左上角像素可以对齐的像素范围表示。
在细搜索阶段,可以针对每个粗搜索得到的块矢量附近进行搜索:进一步地,可以在粗搜索得到的最佳块矢量BV1_BESTk附近进行搜索。具体地,首先确定细化搜索范围TmpRefineRange,细化搜索范围可以是固定大小,也可以和当前块的尺寸有关,例如可以设为min(nTbW,nTbH)/2,然后计算粗搜索得到的最优匹配重建块的位置作为细搜索区域的基准位置:BestPosXk=xTbCmp+pX1_BESTk,BestPosYk=yTbCmp+pY1_BESTk。
在一些实施例中,依据每个BestPosXk实施的细搜索可以跨越多个区域进行,即可以选择在不同的搜索区域之间跨界进行细搜索。其中,可以先确定参与运算的bestRegionId的值:对regionId=0,1,2,3,进行判断:若BestPosYk- TmpRefineRange>=iVerMinregionId,且BestPosYk-TmpRefineRange<=iVerMaxregionId,
或BestPosYk+TmpRefineRange>=iVerMinregionId,且BestPosYk+TmpRefineRange<=iVerMaxregionId,
或BestPosYk-TmpRefineRange<=iVerMinregionId,且BestPosYk+TmpRefineRange>=iVerMaxregionId,
则该regionId设置相应的bestSearchFlagregionId为1。
对每个bestSearchFlagregionId值为1的搜索区域,依次设bestRegionId为该区域的regionId,并执行以下细搜索:根据bestRegionId的值首先获取已计算的iVerMinbestRegionId、iVerMaxbestRegionId、iHorMinbestRegionId、iHorMaxbestRegionId的值,再根据粗搜索得到的最优匹配块位置获取新的搜索范围iVerMinrefine、iVerMaxrefine、iHorMinrefine、iHorMaxrefine,获取方法如下:
iHorMinrefine=max(iHorMinbestRegionId,BestPosX-TmpRefineRange)
iHorMaxrefine=min(iHorMaxbestRegionId,BestPosX+TmpRefineRange)
iVerMinrefine=max(iVerMinbestRegionId,BestPosY-TmpRefineRange)
iVerMaxrefine=min(iVerMaxbestRegionId,BestPosY+TmpRefineRange)
然后,调整后的块矢量BVbvXMins、bvXMaxs、bvYMins、bvYMaxs可以通过iVerMinrefine、iVerMaxrefine、iHorMinrefine、iHorMaxrefine计算得到:
bvXMins=iHorMinrefine-xTbCmp;
bvXMaxs=iHorMaxrefine-xTbCmp;
bvYMins=iVerMinrefine-yTbCmp;
bvYMaxs=iVerMaxrefine-yTbCmp;
如此,细搜索在pX处于bvXMinsrefine与bvXMaxsrefine之间,pY处于bvYMinsrefine与bvYMaxsrefine之间的块矢量范围内进行。例如以步长为1进行搜索,记录模板匹配得到的最优匹配代价为pDiff_BEST,其对应的块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST)。
获取多个参与搜索的区域的总最佳块矢量。
在完成上述搜索操作后,即可得到最优的块矢量BV_BEST(pX_BEST,pY_BEST),其中pX_BEST和pY_BEST分别为最佳匹配模板相对于当前编码块模板的水平方向偏移量和垂直方向偏移量,也是最佳匹配重建块相对于当前编码块的水平方向偏移量和垂直方向偏移量。
步骤103、根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值。
在本申请的实施例中,在根据第一模板确定当前块对应的一个或多个块矢量之后,可以进一步根据一个或多个块矢量确定当前块的一个或多个参考块,然后可以根据一个或多个参考块确定当前块的预测值。
需要说明的是,在本申请的实施例中,当前块的一个或多个参考块包括第一参考块和/或第二参考块;其中,第一参考块与当前块均属于当前图像,第二参考块属于当前块对应的当前图像的参考图像。
也就是说,在本申请的实施例中,当前块的一个或多个参考块,可以为通过帧内预测获得的、当前图像中的第一参考块,也可以为通过帧间预测获得的、当前图像的参考图像中的第二参考块;还可以既包括通过帧内预测获得的、当前图像中的第一参考块,也包括通过帧间预测获得的、当前图像的参考图像中的第二参考块。
相应的,在本申请的实施例中,在进行第二参考块的获取时,可以通过解码码流,确定一个或多个块矢量;然后可以在当前图像的参考图像中进行搜索,确定一个或多个块矢量对应的第二参考块。
也就是说,在本申请的实施例中,既可以通过帧内模板匹配的方式在当前图像内进行模板匹配搜索来确定当前块对应的一个或多个参考块,即第一参考块;还可以通过帧间模板匹配的方式在当前图像的一个或多个帧间参考图像上进行模板匹配搜索来确定当前块对应的一个或多个参考块,即第二参考块;还可以结合帧内模板匹配的方式与帧间模板匹配的方式,分别在当前图像内与一个或多个帧间参考图像上进行模板匹配搜索,确定当前块对应的一个或多个参考块,包括第一参考块和第二参考块。
进一步地,在本申请的实施例中,在根据一个或多个块矢量确定当前块对应的一个或多个参考块时,可以先根据一个或多个块矢量确定当前块对应的一个或多个初始重建块;然后可以对一个或多个初始重建块进行修正处理,确定一个或多个参考块。
也就是说,在本申请的实施例中,在计获取N个候选重建块(参考块)时也可以采用其他方式,例如,先对获得的候选模板对应的初始重建块进行修正,进而确定对应的参考块。
相应的,在利用N个BV对应匹配重建块(初始重建块)复制获取N个候选重建块(参考块)后,既可以直接将这N个候选重建块进行加权,获得当前块的预测值;也可以在对N个BV对应匹配重建块(初始重建块)进行修正后得到的候选重建块(参考块),然后再进行加权,获得当前块的预测值。
进一步地,在本申请的实施例中,在对一个或多个初始重建块进行修正处理,确定一个或多个参考块时,可以对一个或多个初始重建块进行滤波处理,确定一个或多个参考块。
进一步地,在本申请的实施例中,在对一个或多个初始重建块进行修正处理,确定一个或多个参考块时,可以先根据一个或多个块矢量对应的一个或多个候选模板确定一个或多个修正参数向量;然后根据一个或多个修正参数向量对一个或多个初始重建块进行修正处理,确定一个或多个参考块。
进一步地,在本申请的实施例中,在根据一个或多个块矢量对应的一个或多个候选模板确定一个或多个修正参数向量时,可以先根据候选模板中的像素值,确定候选模板对应的自相关矩阵;然后根据第一模板中的像素值和候选模板中的像素值,确定互相关向量;进而可以根据自相关矩阵和互相关向量,确定修正参数向量。
可以理解的是,在本申请的实施例中,对初始重建块进行修正的方案,可以包括对初始重建块直接进行滤波处理,其中,在执行处理时所采用的滤波方案,可以是传统滤波方法,比如双边滤波、均值滤波等,也可以是基于神经网络的滤波增强。
可以理解的是,在本申请的实施例中,对初始重建块进行修正的方案,还可以包括利用匹配模板信息(候选模板)对匹配重建块(初始重建块)进行修正。
示例性的,在本申请的实施例中,在利用匹配模板信息对匹配重建块进行修正处理时,对于每个候选模板refT
n以及其对应的候选重建块(初始重建块)RefBlock
n,利用候选模板refT
n和当前编码块模板(当前块的第一模板)curT计算修正参数向量C
n,将该修正参数向量C
n用于与候选重建块RefBlock
n进行加权融合得到最终修正后的重建块RefBlock’
n,即最终获得当前块的参考块为RefBlock’
n。
在一些实施例中,修正参数向量C
n可以通过候选模板refT
n的重建值与所要预测的模板像素值最小化MSE进行推导。
可以理解的是,在本申请的实施例中,修正参数向量C
n可以看成是一个L抽头的滤波器。
在一些实施例中,在计算修正参数向量C
n时,对于每个候选模板refT
n,其中n=0,1…,N-1,MSE最小化的过程会将候选模板样本refT的自相关矩阵、候选模板样本refT和当前编码块相邻模板样本curT的互相关向量作为输入,输出当前候选模板对应候选重建块的权重。
示例性的,在本申请的实施例中,MSE计算如下:
为了方便表示MSE的计算公式,这里用E表示均方误差MSE,即:
其中,K为模板中的像素数。
在一些实施例中,通过最小化MSE推导得到候选模板refT对应候选重建块的权重c
l的过程可以包括以下步骤:
(1)首先对c
l求偏导并使其为0:
整理得:
(2)在确定候选模板区域refT
n后将步骤(1)得到的等式展开成矩阵形式为:
(3)步骤(2)中的自相关矩阵和互相关向量均为已知量,对(2)中的线性方程组进行求解即可得到滤波器的权重系数c0,…c
L-1,即修正参数向量C
n中某一候选重建块的滤波系数。
相应的,对于x=0…nTbW-1,y=0…nTbH-1,修正后的候选重建块RefBlock’
n为:
需要说明的是,在本申请的实施例中,在确定当前块的N个候选模板对应的N个块矢量BV后,可以选择通过N个BV获取N个候选重建块(即N个参考块),然后对N个候选重建块进行加权融合,便可以得到当前块的预测块(即当前块的预测值)。其中,在生成最终预测值时,可以先获取N个候选重建块(N个参考块),然后确定对应的加权融合权重(权重值),然后再通过加权融处理合生成当前块的预测值。
可以理解的是,在本申请的实施例中,在根据一个或多个块矢量确定当前块的一个或多个参考块时,对于得到的N个候选模板对应的N个块矢量BV
n,可以选择直接根据BV
n在当前图像和/或参考图像中获取的N个候选重建块(即参考块)RefBlock
n,其中,BV
n的水平偏移量为pX
n,垂直偏移量为pY
n,其中n=0,1…,N-1。
示例性的,在本申请的实施例中,在进行当前块的一个或多个参考块的确定时,可以利用简单的平移复制来实现。具体操作为:对于x=0…nTbW-1,y=0…nTbH-1,通过一下公式确定当前帧的重建像素(即当前块的参考块):
RefBlock
n[x][y]=recSamples[x+pX
n][y+pY
n] (15)
进一步地,在本申请的实施例中,在根据一个或多个参考块,确定当前块的预测值时,可以先确定一个或多个参考块对应的一个或多个权重值;然后再根据一个或多个权重值对一个或多个参考块进行加权融合处理,最终便可以确定当前块的预测值。
需要说明的是,在本申请的实施例中,在得到N个候选重建块RefBlock(即当前块的参考块)后,需要计算N个候选重建块加权融合的权重W。其中,可以采用多种方式进行参考块对应的权重值的确定。例如,权重可以为预定义确定值(如第二预设数值),也可以为利用代价值、像素值等自适应计算得到的值。
在一种实施例中,可以选择按照第二预设数值确定一个或多个权重值。其中,第二预设数值可以包括N个大于0的任意数值,且对于N个参考块中的不同参考块,对应的权重值可以相同,也可以不同,本申请不进行具体限定。
在一种实施例中,可以选择根据一个或多个块矢量对应的一个或多个候选模板确定一个或多个权重值。其中,在根据一个或多个块矢量对应的一个或多个候选模板确定一个或多个权重值时,可以先根据候选模板中的像素值,确定候选模板对应的自相关矩阵;然后可以根据第一模板中的像素值和候选模板中的像素值,确定互相关向量;进而可以根据自相关矩阵和互相关向量,确定权重值。
在一些实施例中,可以利用候选模板refT
n的重建值与所要预测的模板(第一模板)refpredT
n的像素值最小化MSE来推导加权融合权重(权重值)。
需要说明的是,为了使权重推导过程更加灵活,可以在推导加权融合权重的过程中加入非线性项和偏移项。
示例性的,在本申请的实施例中,在推导加权融合权重时,非线性项NonLinearTerm_T是基于候选模板构造的。其中,可以从N个候选模板中选择其中序号为0的一个候选模板用于构造。相应的,对于m=0,1…,M-1,有如下公式:
NonLinearTerm_T
n,m=(refT
n,m*refT
n,m+MidVal)>>bitDepth (16)
其中,n为0,1,…或N-1,表示N个候选模板中的任意某个模板;MidVal为1<<(bitDepth-1),bitDepth为图像比特深度。
示例性的,在本申请的实施例中,对于N个候选模板对应的每个候选重建块(参考块),在应用加权融合权重时,非线性项NonLinearTerm_Block是基于候选重建块构造的。其中,可以选择序号为0的候选模板对应的候选重建块。相应的,对于x=0,1…nTbW-1,y=0…nTbH-1,有如下公式:
NonLinearTerm_Block
n,x,y=(refBlock
n,x,y*refBlock
n,x,y+MidVal)>>bitDepth (17)
其中,n为0,1,…或N-1,表示N个候选模板中的任意某个模板对应的候选重建块(参考块)。
在推导权重过程和应用权重过程中的偏移值Bias可以是图像像素范围[0,(1<<bitDepth)-1]中的任意一个常数,例如,可以将Bias设为1<<(bitDepth-1)。
由于BiasTerm是一个常数,在实际计算过程中需要将其扩展为矩阵表示为BiasTerm,具体地:
对于N个候选模板中的每个模板:
对于m=0,1…,M-1:
BiasTerm
m=Bias (18)
对于N个候选模板对应的每个候选重建块:
对于x=0,1…nTbW-1,y=0…nTbH-1:
BiasTerm
x,y=Bias (19)
可以理解的是,在本申请的实施例中,在加入非线性项和偏移项后,需要推导N+2个加权权重(权重值),为了方便描述,这里采用变量P记录加权权重个数,其中P=N+2,并且统一将匹配模板样本/非线性项样本和偏移项样本称为匹配参考样本refT
N和refT
N+1,由此所有参与运算的参考量可统一表示为refT
p;同理,统一将匹配模板对应的重建块、非线性项中涉及的匹配模板对应的重建块以及偏移项称为候选重建样本refBlock
p,其中p=0,1…,P-1。
示例性的,在本申请的实施例中,MSE最小化的过程会将前P个匹配参考样本refT的自相关矩阵、前P个匹配参考样本refT和当前编码块相邻模板样本curT的互相关向量作为输入,输出每个匹配参考项对应重建块的权重。
其中,MSE计算公式如下:
对于每个匹配参考模板的同一位置像素,即对于m=0,1…,M-1:
为了方便表示MSE的计算公式,这里用E表示均方误差MSE,即:
最小化MSE推导得到每个匹配参考样本对应重建块的权重w
p的具体步骤如下:
(1)首先对w
p求偏导并使其为0:
整理得:
(2)在确定匹配参考样本区域refT
0,refT
1,…refT
P-1后将步骤(1)得到的等式展开成矩阵形式为:
(3)步骤(2)中的自相关矩阵和互相关向量均为已知量,对(2)中的线性方程组进行求解即可计算得到每个匹配参考项对应重建样本(参考块)的权重w0,…w
P-1。
在一种实施例中,在根据一个或多个块矢量对应的一个或多个候选模板确定一个或多个权重值时,还可以先确定第一模板与候选模板之间的匹配代价值;然后根据匹配代价值确定权重值。
进一步地,在本申请的实施例中,也可以采用其他方式计算加权权重。例如,可以根据N个匹配的候选模板的代价采用非线性权重模型对每个候选重建块(参考块)RefBlock
n分配相应的权重w
n。
需要说明的是,在本申请的实施例中,权重模型可以包括但不限于非线性归一化函数、非线性指数归一化函数等等。
示例性的,在本申请的实施例中,可以选择使用以下非线性函数计算每个候选重建块(参考块)的权重,其中,权重模型的输入为当前编码块模板curT和候选模板refT
n之间的匹配代价,匹配代价包括但不限于当前编码块模板curT和候选模板refT
n之间的SAD(refT
n)、MAD(refT
n)、相关系数R(refT
n)等,
在一些实施例中,权重模型对应的计算公式如下:
其中,offset为预设值,例如offset为1。
在一些实施例中,当匹配代价为归一化相关系数R(refT
n),权重模型对应的计算公式如下:
在一些实施例中,也可以使用Softmax函数作为权重模型,计算公式如下:
其中,S为模型控制参数,在一定条件下,可调整参数S从而调整权重模型。比如参数S可以和当前块大小有关,也可以跟模板类型有关。
在一些实施例中,除上述非线性权重模型外,也可直接将各个候选重建块的加权权重设为平均值,比如:
在一些实施例中,在利用候选模板refT
n的重建值与所要预测的模板(第一模板)refpredT
n的像素值最小化MSE来推导加权融合权重(权重值)的过程中,也可以选择不加入非线性项和偏移项。
示例性的,在申请的实施例中,如果选择不加入非线性项和偏移项,那么只需要推导N个加权权重(权重值)。其中,MSE最小化的过程会将前N个候选模板样本refT的自相关矩阵、前P个候选模板样本refT和当前编码块相邻模板样本curT的互相关向量作为输入,输出每个候选模板对应候选重建块的权重。
在一些实施例中,对于每个候选模板的同一位置像素,即对于m=0,1…,M-1,MSE计算公式如下:
为了方便表示MSE的计算公式,这里用E表示均方误差MSE,即:
最小化MSE推导得到每个候选模板对应候选重建块的权重w
n的具体步骤如下:
(1)首先对w
n求偏导并使其为0:
整理得:
(2)在确定候选模板区域refT
0,refT
1,…refT
N-1后将(1)得到的等式展开成矩阵形式为:
(3)步骤(2)中的自相关矩阵和互相关向量均为已知量,对(2)中的线性方程组进行求解即可计算得到每个候选模板对应重建样本的权重w0,…w
N-1。
在一些实施例中,在利用候选模板refT
n的重建值与所要预测的模板(第一模板)refpredT
n的像素值最小化MSE来推导加权融合权重(权重值)的过程中,也可以选择仅加入偏移项,不加入非线性项。
示例性的,在申请的实施例中,如果选择仅加入偏移项,不加入非线性项,那么需要推导N+1个加权权重(权重值),为了方便描述,这里采用变量P记录加权权重个数,其中P=N+1,并且统一将候选模板样本/偏移项样本称为匹配参考样本refT
N和refT
N+1,由此所有参与运算的参考量可统一表示为refT
p;同理,统一将候选模板对应的候选重建块以及偏移项称为候选重建样本refBlock
p,其中p=0,1…,P-1。
在一些实施例中,MSE最小化的过程会将前P个匹配参考样本refT的自相关矩阵、前P个匹配参考样本refT和当前编码块相邻模板样本curT的互相关向量作为输入,输出每个匹配参考项对应重建块的权重。
在一些实施例中,对于每个候选模板的同一位置像素,即对于m=0,1…,M-1,MSE计算公式如下:
为了方便表示MSE的计算公式,这里用E表示均方误差MSE,即:
最小化MSE推导得到每个匹配参考样本对应重建块的权重w
p的具体步骤如下:
(1)首先对w
p求偏导并使其为0:
整理得:
(2)在确定匹配参考样本区域refT
0,refT
1,…refT
P-1后将步骤(1)中得到的等式展开成矩阵形式为:
(3)步骤(2)中的自相关矩阵和互相关向量均为已知量,对(2)中的线性方程组进行求解即可计算得到每个匹配参考项对应重建样本的权重w0,…w
P-1。
步骤104、根据当前块的预测值,确定当前块的重建值。
在本申请的实施例中,在根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值之后,可以进一步根据当前块的预测值,确定当前块的重建值。
需要说明的是,在本申请的实施例中,可以先解码码流,确定当前块对应的预测差值(residual);然后可以进一步根据预测差值和预测值,确定当前块的重建值。
综上所述,通过上述步骤101至步骤104所提出的解码方法,基于常见的Intra TMP技术进行改进和优化,采用了加权融合的手段,提出一种Intra TMP Fusion的预测方式。其中,在搜索区域中搜索并确定块矢量BV的过程中,可以选择确定当前块的至少一个块矢量,即可以确定多个块矢量;同时,在生成预测值的构成中,利用与至少一个块矢量对应的至少一个参考块进行加权融合处理,获得当前块的预测值,进而确定当前块的重建值。
也就是说,本申请的实施例提出Intra TMP Fusion技术,当前编码块模板(当前块的第一模板)在预定义范围内搜索到匹配代价最小的N个候选匹配模板对应的N个块矢量BV后,通过N个BV找到这N个候选匹配模板(N个候选模板)对应的N个候选重建块(N个参考块),然后按一定权重进行加权融合,并作为当前块的预测块(预测值)。
可以理解的是,本申请的实施例提出的Intra TMP Fusion方法,可以提高预测值准确性。其中,当前编码块模板(当 前块的第一模板)在预定义范围内搜索到匹配代价最小的N个候选匹配模板对应的N个块矢量BV后,通过N个BV找到这N个候选匹配模板(N个候选模板)对应的N个候选重建块(N个参考块),然后按一定权重进行加权融合作为当前块的预测块。一方面充分考虑到了搜索过程中不同匹配模板对应的重建块信息,而不是单纯只考虑匹配代价最小的模板对应的重建块;另一方面通过匹配模板信息自适应地为候选重建块分配权重,这充分考虑了不同重建块信息对预测当前块的重要性不同。
可以理解的是,本申请的实施例提出的Intra TMP Fusion方法,在搜索匹配模板过程中可以充分利用不同匹配模板对应的候选重建块信息。一方面,充分利用了搜索过程中不同匹配模板对应的重建块信息,而不是单纯只考虑匹配代价最小的模板对应的重建块信息;另一方面,充分利用匹配模板信息自适应地为候选重建块分配权重,充分考虑了不同重建块信息对预测当前块的重要性不同。
由此可见,本申请的实施例提出的Intra TMP Fusion方法,能够在一定程度上避免由于模板匹配依据不准确或者直接复制重建块作为预测块所导致的预测准确性下降。
与常见的编解码技术相比,本申请的实施例提出的Intra TMP Fusion方法,以24帧间隔在All Intra条件下进行测试,可以在Y,Cb,Cr上分别获得-0.29%,-0.30%,-0.39%的BD-rate变化(即同等psnr下平均码率变化)。
本申请实施例提供了一种解码方法,解码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值;根据当前块的预测值,确定当前块的重建值。由此可见,在本申请的实施例中,提出一种Intra TMP Fusion的预测方式,其中,可以选择确定当前块的至少一个块矢量,进而可以利用与至少一个块矢量对应的至少一个参考块来获取当前块的预测值。也就是说,本申请实施例提出的编解码方法,充分考虑到了搜索过程中不同匹配模板对应的重建块信息对预测当前块的重要性不同,能够提升预测的准确性,从而获得最优的预测效果。
本申请的一实施例提出了一种编码方法,该编码方法应用于编码器,图15为本申请实施例提出的编码方法的流程示意图,如图15所示,编码器进行编码处理的方法可以包括以下步骤:
步骤201、确定当前块对应的第一模板。
在本申请的实施例中,可以先确定当前块对应的第一模板。其中,在进行第一模板的获取时,可以先确定当前块对应的模板类型,然后可以根据模板类型进一步确定当前块对应的第一模板。
需要说明的是,本申请实施例的编码方法应用于编码器。另外,该编码方法可以包括一种帧内预测方法,更具体地,是一种颜色分量预测方法。其中,视频图像可以划分为多个编码块,每个编码块可以包括第一颜色分量、第二颜色分量和第三颜色分量,而本申请实施例中的当前块是指视频图像中当前待进行帧内预测的编码块。
在这里,当需要对第一颜色分量进行预测时,待预测分量为第一颜色分量;当需要对第二颜色分量进行预测时,待预测分量为第二颜色分量;当需要对第三颜色分量进行预测时,待预测分量为第三颜色分量。另外,假定当前块进行第一颜色分量的预测,而且第一颜色分量为亮度分量,即待预测分量为亮度分量,那么当前块也可以称为亮度块;或者,假定当前块进行第二颜色分量的预测,而且第二颜色分量为色度分量,即待预测分量为色度分量,那么当前块也可以称为色度块。
还需要说明的是,在本申请实施例中,当前块的参考像素(Reference Sample)可以是指与当前块相邻的参考像素点;其中,这里的相邻可以是空间相邻,但是并不局限于此。例如,相邻也可以是时域相邻、空间与时域相邻,甚至当前块的参考像素还可以是对空间相邻、时域相邻、空间和时域相邻的参考像素点进行某种处理后得到的参考像素等等,本申请实施例不作任何限定。
进一步地,在本申请的实施例中,可以选择根据当前块的参考像素,确定当前块的模板类型。其中,当前块的参考像素包括下述至少一项:当前块的左侧相邻参考像素、当前块的上侧相邻参考像素、当前块的左上侧相邻参考像素、当前块的左下侧相邻参考像素、当前块的右上侧相邻参考像素。
可以理解的是,在本申请的实施例中,当前块的参考像素可以包括当前块的相邻已重建像素,即可以选择利用当前块的相邻已重建像素作为模板在预定义搜索区域内搜索匹配模板。
需要说明的是,在本申请的实施例中,当前块的参考像素,即当前块的相邻已重建像素可以包括当前块的上侧参考像素、左上侧参考像素、右上侧参考像素、左侧参考像素和左下侧参考像素。
可以理解的是,在本申请的实施例中,在利用当前块的参考像素,确定当前块的模板类型时,根据相邻参考像素的可用与否可以对模板类型进行分类并确定模板类型。
进一步地,在本申请的实施例中,在根据当前块的参考像素,确定当前块的模板类型时,若当前块的左侧相邻参考像素、当前块的上侧相邻参考像素和当前块的左上侧相邻参考像素均可用,则确定当前块的模板类型为第一值;若当前块的左侧相邻参考像素可用,则确定当前块的模板类型为第二值;若当前块的上侧相邻参考像素可用,则确定当前块的模板类型为第三值;若当前块的左侧相邻参考像素和当前块的左上侧相邻参考像素均可用,则确定当前块的模板类型为第四值;若当前块的左侧相邻参考像素和当前块的左下侧相邻参考像素均可用,则确定当前块的模板类型为第五值;若当前块的上侧相邻参考像素和当前块的右上侧相邻参考像素均可用,则确定当前块的模板类型为第六值。
需要说明的是,在本申请的实施例中,第一值、第二值、第三值、第四值、第五值以及第六值可以为任意数值,本申请不进行具体限定。例如,第一值、第二值、第三值、第四值、第五值以及第六值的取值可以依次为1、2、3、4、5、6。
示例性的,在本申请的实施例中,可以用refTemplateType表示模板类型,相应的,如上述图3所示,用网格填充的块为当前块,且当前块的相邻区域为模板T,这里示出了六种模板类型。
示例性地,这六种模板类型如下所示:当左上侧参考像素、上侧参考像素和左侧参考像素均可用时,refTemplateType的值为1,模板形状如图3中的(a)所示;当只有左侧参考像素可用时,refTemplateType的值为2,模板形状如图3中的(b)所示;当只有上侧参考像素可用时,refTemplateType的值为3,模板形状如图3中的(c)所示;当只有左侧参考像素和左上侧参考像素可用时,refTemplateType的值为4,模板形状如图3中的(d)所示;当只有左侧参考像素和左下侧参考像素可用时,refTemplateType的值为5,模板形状如图3中的(e)所示;当只有上侧参考像素和右上侧参考像 素可用时,refTemplateType的值为6,模板形状如图3中的(f)所示。
进一步地,在本申请的实施例中,在根据模板类型确定当前块对应的第一模板时,可以先根据模板类型,以及模板类型对应的模板尺寸,确定当前块的模板参考像素,然后可以根据模板参考像素,确定当前块的第一模板。
需要说明的是,在本申请的实施例中,当前块的第一模板可以包括当前块的模板参考像素。其中,当前块的模板参考像素可以由当前块的模板类型和与该模板类型对应的模板尺寸来确定。
需要说明的是,在本申请的实施例中,当前块的第一模板可以由当前块的上、右上、左、左下、左上中的一个或多个区域的重建像素构成,即可以由述当前块的参考像素构成。
需要说明的是,在本申请的实施例中,模板类型对应的模板尺寸是可以预先设置好的,例如,获取左模板时,可以将模板宽度templateW_size设为4,获取上模板时,可以将模板高度templateH_size设为4。
相应的,在本申请的实施例中,结合当前块的模板类型refTemplateType的值,以及该refTemplateType对应的模板尺寸,便可以决定获取哪部分重建像素作为当前块的模板参考像素,进而可以确定出对应的第一模板。
示例性的,在本申请的实施例中,当refTemplateType的值为1的时候,可以选择获取当前块的左、左上及上重建像素;当refTemplateType的值为2的时候,则仅获取当前块的左4列重建像素;当refTemplateType的值为3的时候,仅获取当前编码块的上4行重建像素。
当然,预先设置的模板尺寸的取值可以为任意大于0的整数,不局限于4,对此本申请不进行具体限定。
可以理解的是,在本申请的实施例中,结合当前块的模板类型以及对应的模板尺寸,从当前块的参考像素中所确定的当前块的模板参考像素,既可以为当前块对应的第一模板,
步骤202、根据第一模板确定当前块对应的一个或多个块矢量。
在本申请的实施例中,在确定当前块对应的第一模板之后,可以进一步根据第一模板确定当前块对应的一个或多个块矢量。
需要说明的是,在本申请的实施例中,块矢量的搜索过程可以包括初始化过程,确定第一模板在当前帧内的搜索区域,在搜索区域中搜索并确定一个或对个最佳块矢量这几部分,因此,在执行搜索处理时,需要先完成初始化操作。
示例性的,如上述图5所示,nTbW和nTbH表示当前块的尺寸,templateW_size和templateH_size表示模板尺寸,uiPatchWidth和uiPatchHeight表示包含当前块及其模板的块尺寸。
相应的,在初始话处理时,可以初始化uiPatchWidth为nTbW+templateW_size,uiPatchHeight为nTbH+templateH_size,其中templateW_size和templateH_size可以是固定常数,也可以根据编码块尺寸动态调整,templateW_size和templateH_size可以相等,也可以不相等。比如templateW_size=4,templateH_size=4;或者当编码块的宽度大于8的时候,设置templateW_size=4,当编码块的宽度小于等于8的时候,设置templateW_size=2,当编码块的高度大于8的时候,设置templateH_size=4,当编码块的高度小于等于8的时候,设置templateH_size=2。
进一步地,初始化模板之间的代价阈值用diffThreshold表示,例如,当代价函数为SAD时,阈值可以是:diffThreshold=((1<<bitDepth)>>2)×(uiPatchHeight×uiPatchWidth-nTbH×nTbW)。其中,当图像比特深度bitDepth为10时,diffThreshold表示模板区域中每个像素点的最大失真为256。
进一步地,初始化当前块CB所在编码树块CTB的位置:ctbRsX,ctbRsY。
进一步地,初始化当前块CB在当前CTB内的位置偏移:offsetLCBY=yTbCmp–ctbRsY,offsetLCBX=xTbCmp–ctbRsX。
进一步地,初始化iTemplateSizeH=templateH_size,iTemplateSizeW=templateW_size。
进一步地,初始化iBvShift,iBvShift为块矢量BV的精度。例如,BV的精度可以是整像素精度,此时iBvShift为0;BV的精度也可以是亚像素精度,比如iBvShift为1时表示1/2像素精度,iBvShift为2时表示1/4像素精度,这里不作具体限定。
进一步地,初始化模板的预设搜索范围,模板的预设搜索范围可以设置为固定大小,也可以根据编码块尺寸动态调整搜索范围。例如,searchRangeWidth=TMP_SEARCH_RANGE_MULT_FACTOR×nTbW,searchRangeHeight=TMP_SEARCH_RANGE_MULT_FACTOR×nTbH;其中,TMP_SEARCH_RANGE_MULT_FACTOR的值可以为预设值,例如设置为5。
进一步地,在本申请的实施例中,在根据第一模板确定当前块对应的一个或多个块矢量时,可以先根据第一模板确定预设搜索区域;然后可以在预设搜索区域内进行搜索,确定一个或多个块矢量。
需要说明的是,在本申请的实施例中,搜索区域为当前图像中的已重建部分,并受搜索范围大小的限制。如上述图6所示,用深色填充的背景区域为已重建区域,用黑色填充的背景块为当前块,虚线框为搜索范围窗口。因此,IntraTMP技术的搜索区域不大于深色背景表示的重建区域与虚线框所标识区域的重叠部分。
由此可见,当前块模板的搜索区域可以是当前块所在CTB的已重建部分,也可以是其它已重建CTB区域。这里的搜索区域实际为所有搜索点的集合。由于该区域的形状往往不是单个矩形区域可以表示的,具体实现中,也可以在多个矩形区域中进行搜索,再综合不同区域的搜索结果得到最终的最佳匹配块以及最佳块矢量。
示例性的,参见上述图7,这里示出了8种不同子区域的划分方式。其中,用黑色填充的背景块为当前块;(a)、(b)、(c)、(d)、(f)这五种划分方式均为将搜索区域划分为四个子搜索区域,(e)、(g)、(h)这三种划分方式均为将搜索区域划分为三个子搜索区域,这里不同的填充图案表示一个子搜索区域。
在图7中,(a)、(b)、(c)、(d)是考虑了所有可用搜索范围,(e)、(f)、(g)、(h)是不搜索正上方区域和正左方区域。
示例性地,假设以regionId区别表示不同的搜索区域,考虑到当前编码块模板像素需要在图像重建区域取到且模板对应的重建块像素也需要在重建区域取到,因此需要根据当前编码块的位置(xTbCmp,yTbCmp)、当前编码块的大小(nTbW,nTbH)、当前图像的大小(picWidth,picHeight)、当前编码块所在CTB的大小(CtbSizeW,CtbSizeH)、模板的预设搜索范围(searchRangeWidth,searchRangeHeight)以及当前编码块在当前CTB内的位置偏移(offsetLCBY,offsetLCBX)进一步确定在不同regionId表示的搜索区域内能搜索到的位置,从而确定块矢量BV。具体地,以iVerMin 和iVerMax分别表示在垂直方向上至少和至多可搜索到的绝对坐标位置,iHorMin和iHorMax表示在水平方向上至少和至多可搜索到的绝对坐标位置。iVerMin、iVerMax、iHorMin、iHorMax的值在不同regionId表示的搜索区域中不同。
在一些实施例中,以图7中的(f)为例,将搜索区域划分为四个子搜索区域,其实现方式如下:
当regionId等于0时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
0=min((xTbCmp+searchRangeWidth)<<iBvShift,((picWidth-nTbW)<<iBvShift));
iHorMin
0=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMax
0=(yTbCmp-nTbH-offsetLCBY)<<iBvShift;
iVerMin
0=max(((iTemplateSizeH)<<iBvShift),((yTbCmp-searchRangeHeight)<<iBvShift))。
当regionId等于1时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin
1=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iHorMax
1=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iVerMin
1=(yTbCmp+1)<<iBvShift;
iVerMax
1=min(picHeight-nTbH,(yTbCmp-offsetLCBY+CtbSizeH-nTbH)<<iBvShift)。
当regionId等于2时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
2=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iHorMin
2=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMin
2=max((iTemplateSizeH)<<iBvShift,(yTbCmp-nTbH-offsetLCBY)<<iBvShift);
iVerMax
2=(yTbCmp)<<iBvShift。
当regionId等于3时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin
3=max((iTemplateSizeW)<<iBvShift,(xTbCmp-offsetLCBX-nTbW+1)<<iBvShift);
iHorMax
3=(xTbCmp-nTbW)<<iBvShift;
iVerMin
3=max(((iTemplateSizeH)<<iBvShift),(yTbCmp-offsetLCBY-nTbH+1)<<iBvShift);
iVerMax
3=(yTbCmp-nTbH)<<iBvShift。
在实际应用中,这里的iHorMin
regionId、iHorMax
regionId、iVerMin
regionId、iVerMax
regionId分别表示不同子搜索区域的左边缘、右边缘、上边缘和下边缘。
为了直观描述不同regionId对应的不同子搜索区域,如上述图8所示,R1、R2、R3、R4表示四个不同的子搜索区域。需要注意的是,图8是以块的左上角像素可以对齐的像素范围表示。
在一些实施例中,以图7中的(a)为例,将搜索区域划分为四个子搜索区域,其实现方式如下:
当regionId等于0时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
0=min((xTbCmp+searchRangeWidth)<<iBvShift,((picWidth-nTbW)<<iBvShift))
iHorMin
0=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iVerMax
0=(yTbCmp-nTbH-offsetLCBY)<<iBvShift
iVerMin
0=max(((iTemplateSizeH)<<iBvShift),((yTbCmp-searchRangeHeight)<<iBvShift))。
当regionId等于1时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin
1=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iHorMax
1=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iVerMin
1=(yTbCmp+1)<<iBvShift;
iVerMax
1=min(picHeight-nTbH,(yTbCmp-offsetLCBY+CtbSizeH-nTbH)<<iBvShift)。
当regionId等于2时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
2=(xTbCmp-nTbW)<<iBvShift;
iHorMin
2=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMin
2=max((iTemplateSizeH)<<iBvShift,(yTbCmp-nTbH)<<iBvShift);
iVerMax
2=(yTbCmp)<<iBvShift。
当regionId等于3时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下
iHorMin
3=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iHorMax
3=(xTbCmp)<<iBvShift;
iVerMin
3=max(((iTemplateSizeH)<<iBvShift),(yTbCmp-offsetLCBY-nTbH+1)<<iBvShift);
iVerMax
3=(yTbCmp-nTbH)<<iBvShift。
在实际应用中,这里的iHorMin
regionId、iHorMax
regionId、iVerMin
regionId、iVerMax
regionId分别表示不同子搜索区域的左边缘、右边缘、上边缘和下边缘。
为了直观描述不同regionId对应的不同子搜索区域,如图8所示,R1、R2、R3、R4表示四个不同的子搜索区域。需要注意的是,图8是以块的左上角像素可以对齐的像素范围表示。
在一些实施例中,以图7中的(b)为例,将搜索区域划分为四个子搜索区域,其实现方式如下:
当regionId等于0时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax0=min((xTbCmp+searchRangeWidth)<<iBvShift,((picWidth-nTbW)<<iBvShift))
iHorMin0=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iVerMax0=(yTbCmp-nTbH-offsetLCBY)<<iBvShift
iVerMin0=max(((iTemplateSizeH)<<iBvShift),((yTbCmp-searchRangeHeight)<<iBvShift))。
当regionId等于1时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin1=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iHorMax1=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iVerMin1=(yTbCmp+1)<<iBvShift;
iVerMax1=min(picHeight-nTbH,(yTbCmp-offsetLCBY+CtbSizeH-nTbH)<<iBvShift)。
当regionId等于2时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax2=(xTbCmp-nTbW)<<iBvShift;
iHorMin2=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMin2=max((iTemplateSizeH)<<iBvShift,(yTbCmp-nTbH-offsetLCBY)<<iBvShift);
iVerMax2=(yTbCmp)<<iBvShift。
当regionId等于3时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin3=max((iTemplateSizeW)<<iBvShift,(xTbCmp-nTbW+1)<<iBvShift);
iHorMax3=(xTbCmp)<<iBvShift;
iVerMin3=max(((iTemplateSizeH)<<iBvShift),(yTbCmp-offsetLCBY-nTbH+1)<<iBvShift);
iVerMax3=(yTbCmp-nTbH)<<iBvShift。
在实际应用中,这里的iHorMin
regionId、iHorMax
regionId、iVerMin
regionId、iVerMax
regionId分别表示不同子搜索区域的左边缘、右边缘、上边缘和下边缘。
为了直观描述不同regionId对应的不同子搜索区域,如图13所示,R1、R2、R3、R4表示四个不同的子搜索区域。需要注意的是,图13是以块的左上角像素可以对齐的像素范围表示。
进一步地,在本申请的实施例中,在预设搜索区域内进行搜索,确定一个或多个块矢量时,可以选择遍历预设搜索区域中的搜索点,根据预设的匹配准则确定预设搜索区域中的搜索点对应的匹配模板与第一模板之间的匹配代价值;然后可以选择根据匹配代价值,确定一个或多个块矢量,以及一个或多个块矢量对应的一个或多个候选模板。
需要说明的是,在本申请的实施例中,通过搜索处理所确定的块矢量的数量可以为一个或者多个,例如,可以确定当前块的N个块矢量,其中,N为大于0的整数。
相应的,在本申请的实施例中,在预设搜索区域内进行搜索,确定一个或多个块矢量时,可以先确定候选模板对应的预设数量N;然后遍历预设搜索区域中的搜索点,根据预设的匹配准则确定预设搜索区域中的搜索点对应的匹配模板与第一模板之间的匹配代价值;最后,可以根据匹配代价值,确定N个块矢量,以及N个块矢量对应的N个候选模板。
也就是说,在本申请的实施例中,在预设搜索区域中搜索并确定N个匹配模板对应的N个块矢量时,即在搜索区域(预设搜索区域)中搜索并确定N个匹配模板对应的块矢量BV的过程可以包括确定候选模板的数量N的值、确定匹配模板比较准则并记录N个匹配模板(所选中的N个候选模板)对应的N个块矢量BV。
可以理解的是,在本申请的实施例中,在确定候选模板对应的预设数量N时,可以选择按照预设的决策准则确定N;也可以按照第一预设数值确定N;还可以按照预设数值范围确定N。
也就是说,在本申请的实施例中,首先需要确定N的值,这里的N可以人为预设为某个常数,比如N为4;N也可以在一定数值范围内,比如N值可以是[2,8]中的任何一个整数,N值的范围通过为预先设置的,可以在编码端按照预设的决策准则确定N,例如,以代价1粗选、代价2粗选,或代价3粗选、代价4细选等方式决策出最佳N值并以码流形式将最佳N值传至解码端。其中包括代价1、2、3、4各项的预设的决策准则可以是SAD、SATD、MSE、MAD、RDO等用于衡量模式的代价函数中的一种。对于N的确定方式本申请不进行具体限定。
需要说明的是,在本申请的实施例中,预设的匹配准则包括绝对误差和SAD、变换绝对误差和SATD、差值平方和SSE、平均绝对差值MAD、平均绝对误差MAE、平均平方误差MSE、归一化相关系数NCC等用于衡量模式的代价函数中的任意一种。
进一步地,在本申请的实施例中,在根据匹配代价值,确定N个块矢量,以及N个块矢量对应的N个候选模板时,即确定一个或多个块矢量,以及一个或多个块矢量对应的一个或多个候选模板时,可以先在预设搜索区域中的搜索点对应的匹配模板与第一模板之间的匹配代价值中,确定N个最小匹配代价值;然后确定N个最小匹配代价值对应的N个块矢量和N个候选模板。
需要说明的是,在本申请的实施例中,对于N个块矢量中的任意一个块矢量,可以选择以bvXMins、bvXMaxs分别表示块矢量在水平方向的最小偏移、最大偏移;以bvYMins、bvYMaxs分别表示块矢量在垂直方向的最小偏移、最大偏移。
bvXMinsregionId、bvXMaxsregionId、bvYMinsregionId、bvYMaxsregionId可以通过已经确定的iVerMinregionId、iVerMaxregionId、iHorMinregionId、iHorMaxregionId计算得到:
bvXMinsregionId=iHorMinregionId-xTbCmp;
bvXMaxsregionId=iHorMaxregionId-xTbCmp;
bvYMinsregionId=iVerMinregionId-yTbCmp;
bvYMaxsregionId=iVerMaxregionId-yTbCmp;
bvXMinsregionId、bvXMaxsregionId、bvYMinsregionId和bvYMaxsregionId确定了搜索点相对于当前块的水平和垂直偏移量范围,即块矢量BV的范围。
还需要说明的是,通过每个搜索区域内的搜索点(iPosHor,iPoxVer),也即每个块矢量BV(由水平分量和垂直分量组成:(pX,pY),其中pX=iPosHor-xTbCmp,pY=iPosVer-yTbCmp,则pX处于bvXMins与bvXMaxs之间,pY处于bvYMins与bvYMaxs之间),可以在重建区域找到一个或多个当前块的匹配重建块,该一个或多个匹配重建块的相邻重建像素即为匹配模板。由此可以分别计算当前块相邻模板和一个或多个重建块相邻模板的匹配代价,记为pDiff。
进一步地,遍历所有搜索范围(regionId=0、1、2、3)中全部搜索点,比较得到匹配代价pDiff最小的一个或多个搜索点,其对应的匹配代价记为pDiff_BEST,其对应的一个或多个块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST),其对应的一个或多个匹配模板为最佳匹配模板T_BEST,即获得一个或多个候选模板。
可以理解的是,在本申请的实施例中,在确定候选模板的数量N的值之后,需要以某种比较准则选出较匹配的N个候选模板对应的N个块矢量BV。即与常见的搜索匹配模板并记录块矢量BV的相关技术相比,本申请的不同之处在于 可以选择筛选记录多个块矢量BV
n,根据块矢量BV
n,也就是根据模板偏移量pX
n和pY
n得到匹配模板后计算模板匹配代价并记录N个代价较小的匹配模板对应的N个BV,这里将该N个匹配模板称为N个候选模板。其中,模板匹配代价(预设的匹配准则)可以是SAD、SATD、MSE、MAD、RDO、相关系数等用于衡量模式的代价函数中的一种。
示例性的,在本申请的实施例中,匹配代价比较准则(预设的匹配准则)为平均绝对差(Mean Absolute Difference,MAD)时,计算公式如下:
其中,refT为搜索过程中的匹配模板,curT为当前编码块模板(当前块的第一模板),M为当前编码块模板的像素数,MAD(refT)为当前编码块模板curT和搜索到的匹配模板的平均绝对差。
相应的,在本申请的实施例中,基于MAD的筛选准则为:比较并记录N个MAD代价最小的匹配模板对应的N个块矢量BV。
示例性的,对于N个候选模板,第n个候选模板和当前编码块模板之间的MAD如下:
其中,refT
n为第n个候选模板,MAD(refT
n)为当前编码块模板curT和第n个候选模板的平均绝对差,n=0,…,N-1。
示例性的,在本申请的实施例中,匹配代价比较准则(预设的匹配准则)为SAD时,计算公式如下:
其中,SAD(refT)为当前编码块模板(当前块的第一模板)curT和搜索到的匹配模板的绝对误差和。
相应的,在本申请的实施例中,基于SAD的筛选准则为:比较并记录N个SAD代价较小的匹配模板对应的N个块矢量BV。
示例性的,对于N个候选模板,第n个候选模板和当前编码块模板之间的SAD如下:
其中,SAD(refT
n)为当前编码块模板和第n个候选模板的绝对误差和。
示例性的,在本申请的实施例中,可以将NCC归一化相关系数作为模板匹配准则进行比较,计算公式如下:
其中,refT为搜索过程中的匹配模板,curT为当前编码块模板(当前块的第一模板),M为当前编码块模板的像素数,refT
Avg为搜索到的匹配模板的像素平均值,curT
Avg为当前编码块模板的像素平均值,R(refT)为当前编码块模板和搜索到的匹配模板的相关系数。
相应的,在本申请的实施例中,基于NCC比较准则为:排序并记录N个相关系数R更大的匹配模板对应的N个块矢量BV。
其中,对于N个候选模板,第n个候选模板和当前编码块模板之间的相关系数如下:
其中,
为第n个候选模板的像素平均值,R(refT
n)为当前编码块模板和第n个候选模板的相关系数。值得一提的是,NCC归一化相关系数R的范围为[-1,1],R越大,表示相关性越强。
需要说明的是,在本申请的实施例中,在执行搜索处理时,可以采用的搜索策略可以包括但不限于基于不同搜索步长的搜索方式,例如,基于第一搜索步长的粗搜索和/或基于第二搜索步长的细搜索,其中,第一搜索步长大于第二搜索步长。
进一步地,在本申请的实施例中,可以选择按照第一搜索步长遍历预设搜索区域中的搜索点,确定块矢量和候选模板。或者,可以选择按照第二搜索步长遍历预设搜索区域中的搜索点,确定块矢量和候选模板。
进一步地,在本申请的实施例中,可以先按照第一搜索步长遍历预设搜索区域中的搜索点,确定初始块矢量,以及初始块矢量对应的初始匹配模板;然后根据初始匹配模板确定第一搜索区域;其中,第一搜索区域小于预设搜索区域;最后可以按照第二搜索步长遍历第一搜索区域中的搜索点,确定块矢量和候选模板;其中,第一搜索步长大于第二搜索步长。
也就是说,在本申请的实施例中,在搜索区域中搜索最佳匹配模板时可以采用先粗搜索后细搜索的搜索策略,也可以只进行细搜索,或者只进行粗搜索。
示例性的,在本申请的实施例中,粗搜索具体可以包括:以第一预设步长(即第一搜索步长,例如2)在搜索区域中确定最佳粗匹配模板,即获得最终的候选模板,或者,使用下采样(例如下采样因子为2)的模板在搜索区域中确定最佳粗匹配模板,即获得最终的候选模板。
示例性的,在本申请的实施例中,细搜索具体可以包括:以第二预设步长(即第二搜索步长,例如1)在搜索区域中确定最佳细匹配模板,即获得最终的候选模板,或者,在进行完粗搜索后在最佳粗匹配模板附近确定最佳细匹配模板,即获得最终的候选模板。
示例性的,在本申请的实施例中,如果搜索策略为只进行粗搜索,那么可以选择在每个区域内在pX处于bvXMinsregionId与bvXMaxsregionId之间,pY处于bvYMinsregionId与bvYMaxsregionId之间的搜索范围内,以大于1的步长进行粗搜索,例如以步长为2(即第一搜索步长为2)进行粗搜索记录模板匹配得到的最优的一个或多个匹配代价为pDiff_BEST,其对应的一个或多个块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST),即通过在预设搜索区域执行搜索处理获得当前块对应的一个或多个块矢量,且最优的一个或多个匹配代价对应的一个或多个匹配模板可以最为最终的一个或多个候选模板。
示例性的,在本申请的实施例中,如果搜索策略为只进行细搜索,那么可以选择在每个区域内在pX处于 bvXMinsregionId与bvXMaxsregionId之间,pY处于bvYMinsregionId与bvYMaxsregionId之间的搜索范围内,例如以步长为1(即第二搜索步长为1)进行细搜索记录模板匹配得到的最优的一个或多个匹配代价为pDiff_BEST,其对应的一个或多个块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST),即通过在预设搜索区域执行搜索处理获得当前块对应的一个或多个块矢量,且最优的一个或多个匹配代价对应的一个或多个匹配模板可以最为最终的一个或多个候选模板。
示例性的,在本申请的实施例中,如果搜索策略为先进行粗搜索,后进行细搜索,如图10所示。可以先以步长为2(即第一搜索步长为2)进行粗搜索记录模板匹配得到最佳粗匹配模板(初始匹配模板),然后可以以步长为1(即第二搜索步长为1)在最佳粗匹配模板附近确定最佳细匹配模板,即获得最终的候选模板。
其中,在粗搜索阶段,可以选择在每个区域内在pX处于bvXMinsregionId与bvXMaxsregionId之间,pY处于bvYMinsregionId与bvYMaxsregionId之间的搜索范围内,以大于1的步长进行粗搜索。例如以步长为2进行粗搜索记录模板匹配得到的最优匹配代价为pDiff1_BEST,其对应的块矢量BV记为最佳块矢量BV1_BEST(pX1_BEST,pY1_BEST),即初始块矢量,其对应的匹配模板即为初始匹配模板,此时,最佳匹配搜索点所在搜索区域为bestRegionId。
接着,在细搜索阶段,可以选择在粗搜索得到的最佳块矢量BV1_BEST(初始块矢量)附近进行搜索,即在第一搜索区域进行搜索。因此,首先需要确定细化搜索范围TmpRefineRange,即需要确定出第一搜索区域TmpRefineRange。其中,细化搜索范围(第一搜索区域TmpRefineRange)可以是固定大小,也可以和当前块尺寸有关,例如可以设为min(nTbW,nTbH)/2,然后计算粗搜索得到的最优匹配重建块的位置作为细搜索区域的基准位置:BestPosX=xTbCmp+pX1_BEST,BestPosY=yTbCmp+pY1_BEST。
在一种实施例中,可以根据bestRegionId的值首先获取已计算的iVerMinbestRegionId、iVerMaxbestRegionId、iHorMinbestRegionId、iHorMaxbestRegionId的值,再根据粗搜索得到的最优匹配块位置获取新的搜索范围iVerMinrefine、iVerMaxrefine、iHorMinrefine、iHorMaxrefine,获取方法如下:
iHorMinrefine=max(iHorMinbestRegionId,BestPosX-TmpRefineRange)
iHorMaxrefine=min(iHorMaxbestRegionId,BestPosX+TmpRefineRange)
iVerMinrefine=max(iVerMinbestRegionId,BestPosY-TmpRefineRange)
iVerMaxrefine=min(iVerMaxbestRegionId,BestPosY+TmpRefineRange)
然后,调整后的块矢量BVbvXMins、bvXMaxs、bvYMins、bvYMaxs可以通过iVerMinrefine、iVerMaxrefine、iHorMinrefine、iHorMaxrefine计算得到:
bvXMins=iHorMinrefine-xTbCmp;
bvXMaxs=iHorMaxrefine-xTbCmp;
bvYMins=iVerMinrefine-yTbCmp;
bvYMaxs=iVerMaxrefine-yTbCmp;
细搜索在pX处于bvXMinsrefine与bvXMaxsrefine之间,pY处于bvYMinsrefine与bvYMaxsrefine之间的块矢量范围内进行。例如,以步长为1进行搜索,记录模板匹配得到的最优匹配代价为pDiff_BEST,其对应的块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST),即最终确定的当前块的块矢量,其对应的匹配模板即为当前块的候选模板。
在完成上述操作后,即可得到最优的块矢量BV_BEST(pX_BEST,pY_BEST),其中pX_BEST和pY_BEST分别为最佳匹配模板相对于当前编码块模板的水平方向偏移量和垂直方向偏移量,也是最佳匹配重建块相对于当前编码块的水平方向偏移量和垂直方向偏移量。
由此可见,在本申请的实施例中,对应于在搜索区域中搜索并确定一个或多个块矢量的过程中可以包括三种搜索策略:只进行粗搜索、只进行细搜索、先粗搜索再细搜索。相应的,如果搜索策略为只进行粗搜索,那么只在粗搜索过程中确定N个匹配模板对应的N个块矢量BV,并将对应的该N个匹配模板作为N个候选模板。如果搜索策略为只进行细搜索,那么只在细搜索过程中确定N个匹配模板对应的N个块矢量BV,并将对应的该N个匹配模板作为N个候选模板。如果搜索策略为先粗搜索,后细搜索,那么可以在粗搜索过程中先确定K个初步匹配模板(初始匹配模板)对应的K个块矢量BV,其中,K为大于或者等于N的整数,基于该K个初步匹配模板在细搜索过程执行后确定最终N个匹配模板对应的N个块矢量BV,并将对应的该N个匹配模板作为N个候选模板。
进一步地,在本申请的实施例中,在执行搜索处理时,还可以按照第一搜索步长遍历预设搜索区域的子搜索区域中的搜索点,确定子搜索区域对应的初始矢量,以及初始块矢量对应的第二搜索区域;根据初始块矢量和第二搜索区域,在子搜索区域中确定多个目标子搜索区域;按照第二搜索步长遍历多个目标子搜索区域中的搜索点,确定块矢量和候选模板;其中,第一搜索步长大于第二搜索步长。
可以理解的是,在本申请的实施例中,在根据初始块矢量和第二搜索区域,在子搜索区域中确定多个目标子搜索区域时,可以根据每一个子搜索区域各自的最佳块矢量,即初始块矢量,以及对应的第二搜索区域进行区域判断,从而可以确定后续搜索处理过程中所使用的多个目标子搜索区域。
也就是说,在本申请的实施例中,对于先粗搜索、后搜索的搜索策略,还可以选择在不同的搜索区域之间跨界进行细搜索。其中,在完成粗搜索过程之后,在细搜索过程中可以进行各区域边界的方法。
示例性的,在本申请的实施例中,以图7中的(a)为例,将搜索区域划分为四个子搜索区域,其实现方式如下:
当regionId等于0时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
0=min((xTbCmp+searchRangeWidth)<<iBvShift,((picWidth-nTbW)<<iBvShift))
iHorMin
0=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iVerMax
0=(yTbCmp-nTbH-offsetLCBY)<<iBvShift
iVerMin
0=max(((iTemplateSizeH)<<iBvShift),((yTbCmp-searchRangeHeight)<<iBvShift))。
当regionId等于1时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMin
1=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift)
iHorMax
1=(xTbCmp-offsetLCBX-nTbW)<<iBvShift;
iVerMin
1=(yTbCmp+1)<<iBvShift;
iVerMax
1=min(picHeight-nTbH,(yTbCmp-offsetLCBY+CtbSizeH-nTbH)<<iBvShift)。
当regionId等于2时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下:
iHorMax
2=(xTbCmp-nTbW)<<iBvShift;
iHorMin
2=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iVerMin
2=max((iTemplateSizeH)<<iBvShift,(yTbCmp-nTbH)<<iBvShift);
iVerMax
2=(yTbCmp)<<iBvShift。
当regionId等于3时,iVerMin、iVerMax、iHorMin、iHorMax可以计算如下
iHorMin
3=max((iTemplateSizeW)<<iBvShift,(xTbCmp-searchRangeWidth)<<iBvShift);
iHorMax
3=(xTbCmp)<<iBvShift;
iVerMin
3=max(((iTemplateSizeH)<<iBvShift),(yTbCmp-offsetLCBY-nTbH+1)<<iBvShift);
iVerMax
3=(yTbCmp-nTbH)<<iBvShift。
在实际应用中,这里的iHorMin
regionId、iHorMax
regionId、iVerMin
regionId、iVerMax
regionId分别表示不同子搜索区域的左边缘、右边缘、上边缘和下边缘。
为了直观描述不同regionId对应的不同子搜索区域,如图14所示,R1、R2、R3、R4表示四个不同的子搜索区域。需要注意的是,图14是以块的左上角像素可以对齐的像素范围表示。
在细搜索阶段,可以针对每个粗搜索得到的块矢量附近进行搜索:进一步地,可以在粗搜索得到的最佳块矢量BV1_BESTk附近进行搜索。具体地,首先确定细化搜索范围TmpRefineRange,细化搜索范围可以是固定大小,也可以和当前块的尺寸有关,例如可以设为min(nTbW,nTbH)/2,然后计算粗搜索得到的最优匹配重建块的位置作为细搜索区域的基准位置:BestPosXk=xTbCmp+pX1_BESTk,BestPosYk=yTbCmp+pY1_BESTk。
在一些实施例中,依据每个BestPosXk实施的细搜索可以跨越多个区域进行,即可以选择在不同的搜索区域之间跨界进行细搜索。其中,可以先确定参与运算的bestRegionId的值:对regionId=0,1,2,3,进行判断:若BestPosYk-TmpRefineRange>=iVerMinregionId,且BestPosYk-TmpRefineRange<=iVerMaxregionId,
或BestPosYk+TmpRefineRange>=iVerMinregionId,且BestPosYk+TmpRefineRange<=iVerMaxregionId,
或BestPosYk-TmpRefineRange<=iVerMinregionId,且BestPosYk+TmpRefineRange>=iVerMaxregionId,
则该regionId设置相应的bestSearchFlagregionId为1。
对每个bestSearchFlagregionId值为1的搜索区域,依次设bestRegionId为该区域的regionId,并执行以下细搜索:根据bestRegionId的值首先获取已计算的iVerMinbestRegionId、iVerMaxbestRegionId、iHorMinbestRegionId、iHorMaxbestRegionId的值,再根据粗搜索得到的最优匹配块位置获取新的搜索范围iVerMinrefine、iVerMaxrefine、iHorMinrefine、iHorMaxrefine,获取方法如下:
iHorMinrefine=max(iHorMinbestRegionId,BestPosX-TmpRefineRange)
iHorMaxrefine=min(iHorMaxbestRegionId,BestPosX+TmpRefineRange)
iVerMinrefine=max(iVerMinbestRegionId,BestPosY-TmpRefineRange)
iVerMaxrefine=min(iVerMaxbestRegionId,BestPosY+TmpRefineRange)
然后,调整后的块矢量BVbvXMins、bvXMaxs、bvYMins、bvYMaxs可以通过iVerMinrefine、iVerMaxrefine、iHorMinrefine、iHorMaxrefine计算得到:
bvXMins=iHorMinrefine-xTbCmp;
bvXMaxs=iHorMaxrefine-xTbCmp;
bvYMins=iVerMinrefine-yTbCmp;
bvYMaxs=iVerMaxrefine-yTbCmp;
如此,细搜索在pX处于bvXMinsrefine与bvXMaxsrefine之间,pY处于bvYMinsrefine与bvYMaxsrefine之间的块矢量范围内进行。例如以步长为1进行搜索,记录模板匹配得到的最优匹配代价为pDiff_BEST,其对应的块矢量BV记为最佳块矢量BV_BEST(pX_BEST,pY_BEST)。
获取多个参与搜索的区域的总最佳块矢量。
在完成上述搜索操作后,即可得到最优的块矢量BV_BEST(pX_BEST,pY_BEST),其中pX_BEST和pY_BEST分别为最佳匹配模板相对于当前编码块模板的水平方向偏移量和垂直方向偏移量,也是最佳匹配重建块相对于当前编码块的水平方向偏移量和垂直方向偏移量。
步骤203、根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值。
在本申请的实施例中,在根据第一模板确定当前块对应的一个或多个块矢量之后,可以进一步根据一个或多个块矢量确定当前块的一个或多个参考块,然后可以根据一个或多个参考块确定当前块的预测值。
需要说明的是,在本申请的实施例中,当前块的一个或多个参考块包括第一参考块和/或第二参考块;其中,第一参考块与当前块均属于当前图像,第二参考块属于当前块对应的当前图像的参考图像。
也就是说,在本申请的实施例中,当前块的一个或多个参考块,可以为通过帧内预测获得的、当前图像中的第一参考块,也可以为通过帧间预测获得的、当前图像的参考图像中的第二参考块;还可以既包括通过帧内预测获得的、当前图像中的第一参考块,也包括通过帧间预测获得的、当前图像的参考图像中的第二参考块。
相应的,在本申请的实施例中,在进行第二参考块的获取时,可以确定一个或多个块矢量;然后可以在当前图像的参考图像中进行搜索,确定一个或多个块矢量对应的第二参考块。
也就是说,在本申请的实施例中,既可以通过帧内模板匹配的方式在当前图像内进行模板匹配搜索来确定当前块对应的一个或多个参考块,即第一参考块;还可以通过帧间模板匹配的方式在当前图像的一个或多个帧间参考图像上进行模板匹配搜索来确定当前块对应的一个或多个参考块,即第二参考块;还可以结合帧内模板匹配的方式与帧间模板匹配的方式,分别在当前图像内与一个或多个帧间参考图像上进行模板匹配搜索,确定当前块对应的一个或多个参考块,包 括第一参考块和第二参考块。
进一步地,在本申请的实施例中,在根据一个或多个块矢量确定当前块对应的一个或多个参考块时,可以先根据一个或多个块矢量确定当前块对应的一个或多个初始重建块;然后可以对一个或多个初始重建块进行修正处理,确定一个或多个参考块。
也就是说,在本申请的实施例中,在计获取N个候选重建块(参考块)时也可以采用其他方式,例如,先对获得的候选模板对应的初始重建块进行修正,进而确定对应的参考块。
相应的,在利用N个BV对应匹配重建块(初始重建块)复制获取N个候选重建块(参考块)后,既可以直接将这N个候选重建块进行加权,获得当前块的预测值;也可以在对N个BV对应匹配重建块(初始重建块)进行修正后得到的候选重建块(参考块),然后再进行加权,获得当前块的预测值。
进一步地,在本申请的实施例中,在对一个或多个初始重建块进行修正处理,确定一个或多个参考块时,可以对一个或多个初始重建块进行滤波处理,确定一个或多个参考块。
进一步地,在本申请的实施例中,在对一个或多个初始重建块进行修正处理,确定一个或多个参考块时,可以先根据一个或多个块矢量对应的一个或多个候选模板确定一个或多个修正参数向量;然后根据一个或多个修正参数向量对一个或多个初始重建块进行修正处理,确定一个或多个参考块。
进一步地,在本申请的实施例中,在根据一个或多个块矢量对应的一个或多个候选模板确定一个或多个修正参数向量时,可以先根据候选模板中的像素值,确定候选模板对应的自相关矩阵;然后根据第一模板中的像素值和候选模板中的像素值,确定互相关向量;进而可以根据自相关矩阵和互相关向量,确定修正参数向量。
可以理解的是,在本申请的实施例中,对初始重建块进行修正的方案,可以包括对初始重建块直接进行滤波处理,其中,在执行处理时所采用的滤波方案,可以是传统滤波方法,比如双边滤波、均值滤波等,也可以是基于神经网络的滤波增强。
可以理解的是,在本申请的实施例中,对初始重建块进行修正的方案,还可以包括利用匹配模板信息(候选模板)对匹配重建块(初始重建块)进行修正。
示例性的,在本申请的实施例中,在利用匹配模板信息对匹配重建块进行修正处理时,对于每个候选模板refT
n以及其对应的候选重建块(初始重建块)RefBlock
n,利用候选模板refT
n和当前编码块模板(当前块的第一模板)curT计算修正参数向量C
n,将该修正参数向量C
n用于与候选重建块RefBlock
n进行加权融合得到最终修正后的重建块RefBlock’
n,即最终获得当前块的参考块为RefBlock’
n。
在一些实施例中,修正参数向量C
n可以通过候选模板refT
n的重建值与所要预测的模板像素值最小化MSE进行推导。
可以理解的是,在本申请的实施例中,修正参数向量C
n可以看成是一个L抽头的滤波器。
在一些实施例中,在计算修正参数向量C
n时,对于每个候选模板refT
n,其中n=0,1…,N-1,MSE最小化的过程会将候选模板样本refT的自相关矩阵、候选模板样本refT和当前编码块相邻模板样本curT的互相关向量作为输入,输出当前候选模板对应候选重建块的权重。
示例性的,在本申请的实施例中,MSE计算如下:
为了方便表示MSE的计算公式,这里用E表示均方误差MSE,即:
其中,K为模板中的像素数。
在一些实施例中,通过最小化MSE推导得到候选模板refT对应候选重建块的权重c
l的过程可以包括以下步骤:
(1)首先对c
l求偏导并使其为0:
整理得:
(2)在确定候选模板区域refT
n后将步骤(1)得到的等式展开成矩阵形式为:
(3)步骤(2)中的自相关矩阵和互相关向量均为已知量,对(2)中的线性方程组进行求解即可得到滤波器的权重系数c0,…c
L-1,即修正参数向量C
n中某一候选重建块的滤波系数。
相应的,对于x=0…nTbW-1,y=0…nTbH-1,修正后的候选重建块RefBlock’
n为:
需要说明的是,在本申请的实施例中,在确定当前块的N个候选模板对应的N个块矢量BV后,可以选择通过N个BV获取N个候选重建块(即N个参考块),然后对N个候选重建块进行加权融合,便可以得到当前块的预测块(即当前块的预测值)。其中,在生成最终预测值时,可以先获取N个候选重建块(N个参考块),然后确定对应的加权融合权重(权重值),然后再通过加权融处理合生成当前块的预测值。
可以理解的是,在本申请的实施例中,在根据一个或多个块矢量确定当前块的一个或多个参考块时,对于得到的N个候选模板对应的N个块矢量BV
n,可以选择直接根据BV
n在当前图像和/或参考图像中获取的N个候选重建块(即参考块)RefBlock
n,其中,BV
n的水平偏移量为pX
n,垂直偏移量为pY
n,其中n=0,1…,N-1。
示例性的,在本申请的实施例中,在进行当前块的一个或多个参考块的确定时,可以利用简单的平移复制来实现。具体操作为:对于x=0…nTbW-1,y=0…nTbH-1,通过一下公式确定当前帧的重建像素(即当前块的参考块):
RefBlock
n[x][y]=recSamples[x+pX
n][y+pY
n] (15)
进一步地,在本申请的实施例中,在根据一个或多个参考块,确定当前块的预测值时,可以先确定一个或多个参考块对应的一个或多个权重值;然后再根据一个或多个权重值对一个或多个参考块进行加权融合处理,最终便可以确定当前块的预测值。
需要说明的是,在本申请的实施例中,在得到N个候选重建块RefBlock(即当前块的参考块)后,需要计算N个候选重建块加权融合的权重W。其中,可以采用多种方式进行参考块对应的权重值的确定。例如,权重可以为预定义确定值(如第二预设数值),也可以为利用代价值、像素值等自适应计算得到的值。
在一种实施例中,可以选择按照第二预设数值确定一个或多个权重值。其中,第二预设数值可以包括N个大于0的任意数值,且对于N个参考块中的不同参考块,对应的权重值可以相同,也可以不同,本申请不进行具体限定。
在一种实施例中,可以选择根据一个或多个块矢量对应的一个或多个候选模板确定一个或多个权重值。其中,在根据一个或多个块矢量对应的一个或多个候选模板确定一个或多个权重值时,可以先根据候选模板中的像素值,确定候选模板对应的自相关矩阵;然后可以根据第一模板中的像素值和候选模板中的像素值,确定互相关向量;进而可以根据自相关矩阵和互相关向量,确定权重值。
在一些实施例中,可以利用候选模板refT
n的重建值与所要预测的模板(第一模板)refpredT
n的像素值最小化MSE来推导加权融合权重(权重值)。
需要说明的是,为了使权重推导过程更加灵活,可以在推导加权融合权重的过程中加入非线性项和偏移项。
示例性的,在本申请的实施例中,在推导加权融合权重时,非线性项NonLinearTerm_T是基于候选模板构造的。其中,可以从N个候选模板中选择其中序号为0的一个候选模板用于构造。相应的,对于m=0,1…,M-1,有如下公式:
NonLinearTerm_T
n,m=(refT
n,m*refT
n,m+MidVal)>>bitDepth (16)
其中,n为0,1,…或N-1,表示N个候选模板中的任意某个模板;MidVal为1<<(bitDepth-1),bitDepth为图像比特深度。
示例性的,在本申请的实施例中,对于N个候选模板对应的每个候选重建块(参考块),在应用加权融合权重时,非线性项NonLinearTerm_Block是基于候选重建块构造的。其中,可以选择序号为0的候选模板对应的候选重建块。相应的,对于x=0,1…nTbW-1,y=0…nTbH-1,有如下公式:
NonLinearTerm_Block
n,x,y=(refBlock
n,x,y*refBlock
n,x,y+MidVal)>>bitDepth (17)
其中,n为0,1,…或N-1,表示N个候选模板中的任意某个模板对应的候选重建块(参考块)。
在推导权重过程和应用权重过程中的偏移值Bias可以是图像像素范围[0,(1<<bitDepth)-1]中的任意一个常数,例如,可以将Bias设为1<<(bitDepth-1)。
由于BiasTerm是一个常数,在实际计算过程中需要将其扩展为矩阵表示为BiasTerm,具体地:
对于N个候选模板中的每个模板:
对于m=0,1…,M-1:
BiasTerm
m=Bias (18)
对于N个候选模板对应的每个候选重建块:
对于x=0,1…nTbW-1,y=0…nTbH-1:
BiasTerm
x,y=Bias (19)
可以理解的是,在本申请的实施例中,在加入非线性项和偏移项后,需要推导N+2个加权权重(权重值),为了方便描述,这里采用变量P记录加权权重个数,其中P=N+2,并且统一将匹配模板样本/非线性项样本和偏移项样本称为匹配参考样本refT
N和refT
N+1,由此所有参与运算的参考量可统一表示为refT
p;同理,统一将匹配模板对应的重建块、非线性项中涉及的匹配模板对应的重建块以及偏移项称为候选重建样本refBlock
p,其中p=0,1…,P-1。
示例性的,在本申请的实施例中,MSE最小化的过程会将前P个匹配参考样本refT的自相关矩阵、前P个匹配参考样本refT和当前编码块相邻模板样本curT的互相关向量作为输入,输出每个匹配参考项对应重建块的权重。
其中,MSE计算公式如下:
对于每个匹配参考模板的同一位置像素,即对于m=0,1…,M-1:
为了方便表示MSE的计算公式,这里用E表示均方误差MSE,即:
最小化MSE推导得到每个匹配参考样本对应重建块的权重w
p的具体步骤如下:
(1)首先对w
p求偏导并使其为0:
整理得:
(2)在确定匹配参考样本区域refT
0,refT
1,…refT
P-1后将步骤(1)得到的等式展开成矩阵形式为:
(3)步骤(2)中的自相关矩阵和互相关向量均为已知量,对(2)中的线性方程组进行求解即可计算得到每个匹配参考项对应重建样本(参考块)的权重w0,…w
P-1。
在一种实施例中,在根据一个或多个块矢量对应的一个或多个候选模板确定一个或多个权重值时,还可以先确定第一模板与候选模板之间的匹配代价值;然后根据匹配代价值确定权重值。
进一步地,在本申请的实施例中,也可以采用其他方式计算加权权重。例如,可以根据N个匹配的候选模板的代价采用非线性权重模型对每个候选重建块(参考块)RefBlock
n分配相应的权重w
n。
需要说明的是,在本申请的实施例中,权重模型可以包括但不限于非线性归一化函数、非线性指数归一化函数等等。
示例性的,在本申请的实施例中,可以选择使用以下非线性函数计算每个候选重建块(参考块)的权重,其中,权重模型的输入为当前编码块模板curT和候选模板refT
n之间的匹配代价,匹配代价包括但不限于当前编码块模板curT和候选模板refT
n之间的SAD(refT
n)、MAD(refT
n)、相关系数R(refT
n)等,
在一些实施例中,权重模型对应的计算公式如下:
其中,offset为预设值,例如offset为1。
在一些实施例中,当匹配代价为归一化相关系数R(refT
n),权重模型对应的计算公式如下:
在一些实施例中,也可以使用Softmax函数作为权重模型,计算公式如下:
其中,S为模型控制参数,在一定条件下,可调整参数S从而调整权重模型。比如参数S可以和当前块大小有关,也可以跟模板类型有关。
在一些实施例中,除上述非线性权重模型外,也可直接将各个候选重建块的加权权重设为平均值,比如:
在一些实施例中,在利用候选模板refT
n的重建值与所要预测的模板(第一模板)refpredT
n的像素值最小化MSE来推导加权融合权重(权重值)的过程中,也可以选择不加入非线性项和偏移项。
示例性的,在申请的实施例中,如果选择不加入非线性项和偏移项,那么只需要推导N个加权权重(权重值)。其中,MSE最小化的过程会将前N个候选模板样本refT的自相关矩阵、前P个候选模板样本refT和当前编码块相邻模板样本curT的互相关向量作为输入,输出每个候选模板对应候选重建块的权重。
在一些实施例中,对于每个候选模板的同一位置像素,即对于m=0,1…,M-1,MSE计算公式如下:
为了方便表示MSE的计算公式,这里用E表示均方误差MSE,即:
最小化MSE推导得到每个候选模板对应候选重建块的权重w
n的具体步骤如下:
(1)首先对w
n求偏导并使其为0:
整理得:
(2)在确定候选模板区域refT
0,refT
1,…refT
N-1后将(1)得到的等式展开成矩阵形式为:
(3)步骤(2)中的自相关矩阵和互相关向量均为已知量,对(2)中的线性方程组进行求解即可计算得到每个候选模板对应重建样本的权重w0,…w
N-1。
在一些实施例中,在利用候选模板refT
n的重建值与所要预测的模板(第一模板)refpredT
n的像素值最小化MSE来推导加权融合权重(权重值)的过程中,也可以选择仅加入偏移项,不加入非线性项。
示例性的,在申请的实施例中,如果选择仅加入偏移项,不加入非线性项,那么需要推导N+1个加权权重(权重值),为了方便描述,这里采用变量P记录加权权重个数,其中P=N+1,并且统一将候选模板样本/偏移项样本称为匹配参考样本refT
N和refT
N+1,由此所有参与运算的参考量可统一表示为refT
p;同理,统一将候选模板对应的候选重建块以及偏移项称为候选重建样本refBlock
p,其中p=0,1…,P-1。
在一些实施例中,MSE最小化的过程会将前P个匹配参考样本refT的自相关矩阵、前P个匹配参考样本refT和当前编码块相邻模板样本curT的互相关向量作为输入,输出每个匹配参考项对应重建块的权重。
在一些实施例中,对于每个候选模板的同一位置像素,即对于m=0,1…,M-1,MSE计算公式如下:
为了方便表示MSE的计算公式,这里用E表示均方误差MSE,即:
最小化MSE推导得到每个匹配参考样本对应重建块的权重w
p的具体步骤如下:
(1)首先对w
p求偏导并使其为0:
整理得:
(2)在确定匹配参考样本区域refT
0,refT
1,…refT
P-1后将步骤(1)中得到的等式展开成矩阵形式为:
(3)步骤(2)中的自相关矩阵和互相关向量均为已知量,对(2)中的线性方程组进行求解即可计算得到每个匹配参考项对应重建样本的权重w0,…w
P-1。
在本申请的实施例中,在根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值之后,可以进一步根据当前块的预测值,确定当前块的预测差值(residual),并将预测差值写入码流。从而可以使得解码器通过解码码流,确定当前块对应的预测差值(residual);然后可以进一步根据预测差值和预测值,确定当前块的重建值。
综上所述,通过上述步骤201至步骤204所提出的编码方法,基于常见的Intra TMP技术进行改进和优化,采用了加权融合的手段,提出一种Intra TMP Fusion的预测方式。其中,在搜索区域中搜索并确定块矢量BV的过程中,可以选择确定当前块的至少一个块矢量,即可以确定多个块矢量;同时,在生成预测值的构成中,利用与至少一个块矢量对应的至少一个参考块进行加权融合处理,获得当前块的预测值,进而确定当前块的重建值。
也就是说,本申请的实施例提出Intra TMP Fusion技术,当前编码块模板(当前块的第一模板)在预定义范围内搜索到匹配代价最小的N个候选匹配模板对应的N个块矢量BV后,通过N个BV找到这N个候选匹配模板(N个候选模板)对应的N个候选重建块(N个参考块),然后按一定权重进行加权融合,并作为当前块的预测块(预测值)。
可以理解的是,本申请的实施例提出的Intra TMP Fusion方法,可以提高预测值准确性。其中,当前编码块模板(当前块的第一模板)在预定义范围内搜索到匹配代价最小的N个候选匹配模板对应的N个块矢量BV后,通过N个BV找到这N个候选匹配模板(N个候选模板)对应的N个候选重建块(N个参考块),然后按一定权重进行加权融合作为当前块的预测块。一方面充分考虑到了搜索过程中不同匹配模板对应的重建块信息,而不是单纯只考虑匹配代价最小的模板对应的重建块;另一方面通过匹配模板信息自适应地为候选重建块分配权重,这充分考虑了不同重建块信息对预测当前块的重要性不同。
可以理解的是,本申请的实施例提出的Intra TMP Fusion方法,在搜索匹配模板过程中可以充分利用不同匹配模板对应的候选重建块信息。一方面,充分利用了搜索过程中不同匹配模板对应的重建块信息,而不是单纯只考虑匹配代价最小的模板对应的重建块信息;另一方面,充分利用匹配模板信息自适应地为候选重建块分配权重,充分考虑了不同重建块信息对预测当前块的重要性不同。
由此可见,本申请的实施例提出的Intra TMP Fusion方法,能够在一定程度上避免由于模板匹配依据不准确或者直接复制重建块作为预测块所导致的预测准确性下降。
与常见的编解码技术相比,本申请的实施例提出的Intra TMP Fusion方法,以24帧间隔在All Intra条件下进行测试,可以在Y,Cb,Cr上分别获得-0.29%,-0.30%,-0.39%的BD-rate变化(即同等psnr下平均码率变化)。
本申请实施例提供了一种编码方法,编码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值。由此可见,在本申请的实施例中,提出一种Intra TMP Fusion的预测方式,其中,可以选择确定当前块的至少一个块矢量,进而可以利用与至少一个块矢量对应的至少一个参考块来获取当前块的预测值。也就是说,本申请实施例提出的编解码方法,充分考虑到了搜索过程中不同匹配模板对应的重建块信息对预测当前块的重要性不同,能够提升预测的准确性,从而获得最优的预测效果。
本申请的再一实施例中,参见图16,其示出了本申请实施例提供的一种编码器的组成结构示意图。如图16所示,该编码器180可以包括:第一确定单元1801;其中,
第一确定单元1801,配置为确定当前块对应的第一模板;根据所述第一模板确定所述当前块对应的一个或多个块矢量;根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值。
可以理解地,在本申请实施例中,“单元”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是模块,还可以是非模块化的。而且在本实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
因此,本申请实施例提供了一种计算机可读存储介质,应用于编码器180,该计算机可读存储介质存储有计算机程序,所述计算机程序被第一处理器执行时实现前述实施例中任一项所述的方法。
基于编码器180的组成以及计算机可读存储介质,参见图17,其示出了本申请实施例提供的编码器180的具体硬件结构示意图。如图17所示,编码器180可以包括:第一通信接口1901、第一存储器1902和第一处理器1903;各个组件通过第一总线系统1904耦合在一起。可理解,第一总线系统1904用于实现这些组件之间的连接通信。第一总线系统1904除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图17中将各种总 线都标为第一总线系统1904。其中,
第一通信接口1901,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
第一存储器1902,用于存储能够在第一处理器1903上运行的计算机程序;
第一处理器1903,用于在运行所述计算机程序时,执行:
确定当前块对应的第一模板;
根据所述第一模板确定所述当前块对应的一个或多个块矢量;
根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值。
可以理解,本申请实施例中的第一存储器1902可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data Rate SDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DRRAM)。本申请描述的系统和方法的第一存储器1902旨在包括但不限于这些和任意其它适合类型的存储器。
而第一处理器1903可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过第一处理器1903中的硬件的集成逻辑电路或者软件形式的指令完成。上述的第一处理器1903可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于第一存储器1902,第一处理器1903读取第一存储器1902中的信息,结合其硬件完成上述方法的步骤。
可以理解的是,本申请描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(Application Specific Integrated Circuits,ASIC)、数字信号处理器(Digital Signal Processing,DSP)、数字信号处理设备(DSP Device,DSPD)、可编程逻辑设备(Programmable Logic Device,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。对于软件实现,可通过执行本申请所述功能的模块(例如过程、函数等)来实现本申请所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
可选地,作为另一个实施例,第一处理器1903还配置为在运行所述计算机程序时,执行前述实施例中任一项所述的方法。
在本申请的再一实施例中,参见图18,其示出了本申请实施例提供的一种解码器的组成结构示意图。如图18所示,该解码器200可以包括:第二确定单元2001;其中,
第二确定单元2001,配置为确定当前块对应的第一模板;根据所述第一模板确定所述当前块对应的一个或多个块矢量;根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值;根据所述当前块的预测值,确定所述当前块的重建值。
可以理解地,在本实施例中,“单元”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是模块,还可以是非模块化的。而且在本实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本实施例提供了一种计算机可读存储介质,应用于解码器200,该计算机可读存储介质存储有计算机程序,所述计算机程序被第二处理器执行时实现前述实施例中任一项所述的方法。
基于解码器200的组成以及计算机可读存储介质,参见图19,其示出了本申请实施例提供的解码器200的具体硬件结构示意图。如图19所示,解码器200可以包括:第二通信接口2201、第二存储器2202和第二处理器2203;各个组件通过第二总线系统2204耦合在一起。可理解,第二总线系统2204用于实现这些组件之间的连接通信。第二总线系统2204除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图19中将各种总线都标为第二总线系统2204。其中,
第二通信接口2201,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
第二存储器2202,用于存储能够在第二处理器2203上运行的计算机程序;
第二处理器2203,用于在运行所述计算机程序时,执行:
确定当前块对应的第一模板;
根据所述第一模板确定所述当前块对应的一个或多个块矢量;
根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值;
根据所述当前块的预测值,确定所述当前块的重建值。
可选地,作为另一个实施例,第二处理器2203还配置为在运行所述计算机程序时,执行前述实施例中任一项所述的方法。
可以理解,第二存储器2202与第一存储器1902的硬件功能类似,第二处理器2203与第一处理器1903的硬件功能类似;这里不再详述。
本实施例提供了一种编解码器,编码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值;根据当前块的预测值,确定当前块的重建值。解码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值。由此可见,在本申请的实施例中,提出一种Intra TMP Fusion的预测方式,其中,可以选择确定当前块的至少一个块矢量,进而可以利用与至少一个块矢量对应的至少一个参考块来获取当前块的预测值。也就是说,本申请实施例提出的编解码方法,充分考虑到了搜索过程中不同匹配模板对应的重建块信息对预测当前块的重要性不同,能够提升预测的准确性,从而获得最优的预测效果。
在本申请的再一实施例中,参见图20,其示出了本申请实施例提供的一种编解码系统的组成结构示意图。如图20所示,编解码系统230可以包括编码器2301和解码器2302。
在本申请实施例中,编码器2301可以为前述实施例中任一项所述的编码器,解码器2302可以为前述实施例中任一项所述的解码器。
进一步地,本申请实施例还提供了一种码流,其中,码流是根据待编码信息进行比特编码生成的;其中,待编码信息包括下述至少一项:当前块的预测差值,预设数量N、一个或多个块矢量。
需要说明的是,在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本申请所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。
本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
本申请实施例提供了一种编解码方法、编码器、解码器以及存储介质,编码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值;根据当前块的预测值,确定当前块的重建值。解码器确定当前块对应的第一模板;根据第一模板确定当前块对应的一个或多个块矢量;根据一个或多个块矢量确定当前块的一个或多个参考块,并根据一个或多个参考块确定当前块的预测值。由此可见,在本申请的实施例中,提出一种Intra TMP Fusion的预测方式,其中,可以选择确定当前块的至少一个块矢量,进而可以利用与至少一个块矢量对应的至少一个参考块来获取当前块的预测值。也就是说,本申请实施例提出的编解码方法,充分考虑到了搜索过程中不同匹配模板对应的重建块信息对预测当前块的重要性不同,能够提升预测的准确性,从而获得最优的预测效果
Claims (60)
- 一种解码方法,应用于解码器,所述方法包括:确定当前块对应的第一模板;根据所述第一模板确定所述当前块对应的一个或多个块矢量;根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值;根据所述当前块的预测值,确定所述当前块的重建值。
- 根据权利要求1所述的方法,其中,所述根据所述第一模板确定所述当前块对应的一个或多个块矢量,包括:根据所述第一模板确定预设搜索区域;在所述预设搜索区域内进行搜索,确定所述一个或多个块矢量。
- 根据权利要求2所述的方法,其中,所述在所述预设搜索区域内进行搜索,确定所述一个或多个块矢量,包括:遍历所述预设搜索区域中的搜索点,根据预设的匹配准则确定所述预设搜索区域中的搜索点对应的匹配模板与所述第一模板之间的匹配代价值;根据所述匹配代价值,确定所述一个或多个块矢量,以及所述一个或多个块矢量对应的一个或多个候选模板。
- 根据权利要求3所述的方法,其中,所述方法还包括:确定所述候选模板对应的预设数量N;其中,N为大于0的整数;遍历所述预设搜索区域中的搜索点,根据所述预设的匹配准则确定所述预设搜索区域中的搜索点对应的匹配模板与所述第一模板之间的匹配代价值;根据所述匹配代价值,确定N个块矢量,以及所述N个块矢量对应的N个候选模板。
- 根据权利要求4所述的方法,其中,所述确定所述候选模板对应的预设数量N,包括:解码码流,确定所述N。
- 根据权利要求4所述的方法,其中,所述确定所述候选模板对应的预设数量N,包括:按照第一预设数值或者预设数值范围确定所述N。
- 根据权利要求4所述的方法,其中,所述根据所述匹配代价值,确定N个块矢量,以及所述N个块矢量对应的N个候选模板,包括:在所述预设搜索区域中的搜索点对应的匹配模板与所述第一模板之间的匹配代价值中,确定N个最小匹配代价值;确定所述N个最小匹配代价值对应的所述N个块矢量和所述N个候选模板。
- 根据权利要求4所述的方法,其中,所述预设的匹配准则包括绝对误差和SAD、变换绝对误差和SATD、差值平方和SSE、平均绝对差值MAD、平均绝对误差MAE、平均平方误差MSE、归一化相关系数NCC中的任意一种。
- 根据权利要求3或4所述的方法,其中,所述方法还包括:按照第一搜索步长遍历所述预设搜索区域中的搜索点,确定所述块矢量和所述候选模板;或者,按照第二搜索步长遍历所述预设搜索区域中的搜索点,确定所述块矢量和所述候选模板;其中,所述第一搜索步长大于所述第二搜索步长。
- 根据权利要求3或4所述的方法,其中,所述方法还包括:按照第一搜索步长遍历所述预设搜索区域中的搜索点,确定初始块矢量,以及所述初始矢量块对应的初始匹配模板;根据所述初始匹配模板确定第一搜索区域;其中,所述第一搜索区域小于所述预设搜索区域;按照第二搜索步长遍历所述第一搜索区域中的搜索点,确定所述块矢量和所述候选模板;其中,所述第一搜索步长大于所述第二搜索步长。
- 根据权利要求4或5所述的方法,其中,所述方法还包括:按照第一搜索步长遍历所述预设搜索区域的子搜索区域中的搜索点,确定所述子搜索区域对应的初始矢量,以及所述初始矢量块对应的第二搜索区域;根据所述初始矢量块和所述第二搜索区域,在所述子搜索区域中确定多个目标子搜索区域;按照第二搜索步长遍历所述多个目标子搜索区域中的搜索点,确定所述块矢量和所述候选模板;其中,所述第一搜索步长大于所述第二搜索步长。
- 根据权利要求1所述的方法,其中,所述一个或多个参考块包括第一参考块和/或第二参考块;其中,第一参考块与所述当前块均属于当前图像,所述第二参考块属于所述当前块对应的当前图像的参考图像。
- 根据权利要求12所述的方法,其中,所述方法还包括:解码码流,确定所述一个或多个块矢量;在所述当前图像的参考图像中进行搜索,确定所述一个或多个块矢量对应的所述第二参考块。
- 根据权利要求1所述的方法,其中,所述根据所述一个或多个块矢量确定所述当前块对应的一个或多个参考块,包括:根据所述一个或多个块矢量确定所述当前块对应的一个或多个初始重建块;对所述一个或多个初始重建块进行修正处理,确定所述一个或多个参考块。
- 根据权利要求14所述的方法,其中,所述对所述一个或多个初始重建块进行修正处理,确定所述一个或多个参考块,包括:对所述一个或多个初始重建块进行滤波处理,确定所述一个或多个参考块。
- 根据权利要求14所述的方法,其中,所述对所述一个或多个初始重建块进行修正处理,确定所述一个或多个 参考块,包括:根据所述一个或多个块矢量对应的一个或多个候选模板确定一个或多个修正参数向量;根据所述一个或多个修正参数向量对所述一个或多个初始重建块进行修正处理,确定所述一个或多个参考块。
- 根据权利要求16所述的方法,其中,所述根据所述一个或多个块矢量对应的一个或多个候选模板确定所述一个或多个修正参数向量,包括根据所述候选模板中的像素值,确定所述候选模板对应的自相关矩阵;根据所述第一模板中的像素值和所述候选模板中的像素值,确定互相关向量;根据所述自相关矩阵和所述互相关向量,确定所述修正参数向量。
- 根据权利要求1所述的方法,其中,所述根据所述一个或多个参考块,确定所述当前块的预测值,包括:确定所述一个或多个参考块对应的一个或多个权重值;根据所述一个或多个权重值对所述一个或多个参考块进行加权融合处理,确定所述当前块的预测值。
- 根据权利要求18所述的方法,其中,所述确定所述一个或多个参考块对应的一个或多个权重值,包括:按照第二预设数值确定所述一个或多个权重值。
- 根据权利要求18所述的方法,其中,所述确定所述一个或多个参考块对应的一个或多个权重值,包括:根据所述一个或多个块矢量对应的一个或多个候选模板确定所述一个或多个权重值。
- 根据权利要求20所述的方法,其中,所述根据所述一个或多个块矢量对应的一个或多个候选模板确定所述一个或多个权重值,包括:根据所述候选模板中的像素值,确定所述候选模板对应的自相关矩阵;根据所述第一模板中的像素值和所述候选模板中的像素值,确定互相关向量;根据所述自相关矩阵和所述互相关向量,确定所述权重值。
- 根据权利要求20所述的方法,其中,所述根据所述一个或多个块矢量对应的一个或多个候选模板确定所述一个或多个权重值,包括:确定所述第一模板与所述候选模板之间的匹配代价值;根据所述匹配代价值确定所述权重值。
- 根据权利1所述的方法,其中,所述确定当前块对应的第一模板,包括:确定所述当前块对应的模板类型,并根据所述模板类型确定所述当前块对应的第一模板。
- 根据权利要求23所述的方法,其中,所述确定当前块对应的模板类型,包括:根据所述当前块的参考像素,确定所述当前块的模板类型;其中,所述当前块的参考像素包括下述至少一项:所述当前块的左侧相邻参考像素、所述当前块的上侧相邻参考像素、所述当前块的左上侧相邻参考像素、所述当前块的左下侧相邻参考像素、所述当前块的右上侧相邻参考像素。
- 根据权利要求23所述的方法,其中,所述根据所述当前块的参考像素,确定所述当前块的模板类型,包括:若所述当前块的左侧相邻参考像素、所述当前块的上侧相邻参考像素和所述当前块的左上侧相邻参考像素均可用,则确定所述当前块的模板类型为第一值;若所述当前块的左侧相邻参考像素可用,则确定所述当前块的模板类型为第二值;若所述当前块的上侧相邻参考像素可用,则确定所述当前块的模板类型为第三值;若所述当前块的左侧相邻参考像素和所述当前块的左上侧相邻参考像素均可用,则确定所述当前块的模板类型为第四值;若所述当前块的左侧相邻参考像素和所述当前块的左下侧相邻参考像素均可用,则确定所述当前块的模板类型为第五值;若所述当前块的上侧相邻参考像素和所述当前块的右上侧相邻参考像素均可用,则确定所述当前块的模板类型为第六值。
- 根据权利要求1所述的方法,其中,所述根据所述模板类型确定所述当前块对应的第一模板,包括:根据所述模板类型,以及所述模板类型对应的模板尺寸,确定所述当前块的模板参考像素;根据所述模板参考像素,确定所述当前块的第一模板。
- 根据权利要求1所述的方法,其中,所述根据所述当前块的预测值,确定所述当前块的重建值,包括:解码码流,确定所述当前块对应的预测差值;根据所述预测差值和所述预测值,确定所述当前块的重建值。
- 一种编码方法,应用于编码器,所述方法包括:确定当前块对应的第一模板;根据所述第一模板确定所述当前块对应的一个或多个块矢量;根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值。
- 根据权利要求28所述的方法,其中,所述根据所述第一模板确定所述当前块对应的一个或多个块矢量,包括:根据所述第一模板确定预设搜索区域;在所述预设搜索区域内进行搜索,确定所述一个或多个块矢量。
- 根据权利要求28所述的方法,其中,所述在所述预设搜索区域内进行搜索,确定所述一个或多个块矢量,包括:遍历所述预设搜索区域中的搜索点,根据预设的匹配准则确定所述预设搜索区域中的搜索点对应的匹配模板与所述第一模板之间的匹配代价值;根据所述匹配代价值,确定所述一个或多个块矢量,以及所述一个或多个块矢量对应的一个或多个候选模板。
- 根据权利要求30所述的方法,其中,所述方法还包括:确定所述候选模板对应的预设数量N;其中,N为大于0的整数;遍历所述预设搜索区域中的搜索点,根据所述预设的匹配准则确定所述预设搜索区域中的搜索点对应的匹配模板与所述第一模板之间的匹配代价值;根据所述匹配代价值,确定N个块矢量,以及所述N个块矢量对应的N个候选模板。
- 根据权利要求31所述的方法,其中,所述确定所述候选模板对应的预设数量N,包括:按照预设的决策准则确定所述N。
- 根据权利要求4所述的方法,其中,所述确定所述候选模板对应的预设数量N,包括:按照第一预设数值或者预设数值范围确定所述N。
- 根据权利要求4所述的方法,其中,所述根据所述匹配代价值,确定N个块矢量,以及所述N个块矢量对应的N个候选模板,包括:在所述预设搜索区域中的搜索点对应的匹配模板与所述第一模板之间的匹配代价值中,确定N个最小匹配代价值;确定所述N个最小匹配代价值对应的所述N个块矢量和所述N个候选模板。
- 根据权利要求4所述的方法,其中,所述预设的匹配准则包括绝对误差和SAD、变换绝对误差和SATD、差值平方和SSE、平均绝对差值MAD、平均绝对误差MAE、平均平方误差MSE、归一化相关系数NCC中的任意一种。
- 根据权利要求3或4所述的方法,其中,所述方法还包括:按照第一搜索步长遍历所述预设搜索区域中的搜索点,确定所述块矢量和所述候选模板;或者,按照第二搜索步长遍历所述预设搜索区域中的搜索点,确定所述块矢量和所述候选模板;其中,所述第一搜索步长大于所述第二搜索步长。
- 根据权利要求3或4所述的方法,其中,所述方法还包括:按照第一搜索步长遍历所述预设搜索区域中的搜索点,确定初始块矢量,以及所述初始矢量块对应的初始匹配模板;根据所述初始匹配模板确定第一搜索区域;其中,所述第一搜索区域小于所述预设搜索区域;按照第二搜索步长遍历所述第一搜索区域中的搜索点,确定所述块矢量和所述候选模板;其中,所述第一搜索步长大于所述第二搜索步长。
- 根据权利要求4或5所述的方法,其中,所述方法还包括:按照第一搜索步长遍历所述预设搜索区域的子搜索区域中的搜索点,确定所述子搜索区域对应的初始矢量,以及所述初始矢量块对应的第二搜索区域;根据所述初始矢量块和所述第二搜索区域,在所述子搜索区域中确定多个目标子搜索区域;按照第二搜索步长遍历所述多个目标子搜索区域中的搜索点,确定所述块矢量和所述候选模板;其中,所述第一搜索步长大于所述第二搜索步长。
- 根据权利要求1所述的方法,其中,所述一个或多个参考块包括第一参考块和/或第二参考块;其中,第一参考块与所述当前块均属于当前图像,所述第二参考块属于所述当前块对应的当前图像的参考图像。
- 根据权利要求12所述的方法,其中,所述方法还包括:确定所述一个或多个块矢量;在所述当前图像的参考图像中进行搜索,确定所述一个或多个块矢量对应的所述第二参考块。
- 根据权利要求1所述的方法,其中,所述根据所述一个或多个块矢量确定所述当前块对应的一个或多个参考块,包括:根据所述一个或多个块矢量确定所述当前块对应的一个或多个初始重建块;对所述一个或多个初始重建块进行修正处理,确定所述一个或多个参考块。
- 根据权利要求14所述的方法,其中,所述对所述一个或多个初始重建块进行修正处理,确定所述一个或多个参考块,包括:对所述一个或多个初始重建块进行滤波处理,确定所述一个或多个参考块。
- 根据权利要求14所述的方法,其中,所述对所述一个或多个初始重建块进行修正处理,确定所述一个或多个参考块,包括:根据所述一个或多个块矢量对应的一个或多个候选模板确定一个或多个修正参数向量;根据所述一个或多个修正参数向量对所述一个或多个初始重建块进行修正处理,确定所述一个或多个参考块。
- 根据权利要求16所述的方法,其中,所述根据所述一个或多个块矢量对应的一个或多个候选模板确定所述一个或多个修正参数向量,包括根据所述候选模板中的像素值,确定所述候选模板对应的自相关矩阵;根据所述第一模板中的像素值和所述候选模板中的像素值,确定互相关向量;根据所述自相关矩阵和所述互相关向量,确定所述修正参数向量。
- 根据权利要求1所述的方法,其中,所述根据所述一个或多个参考块,确定所述当前块的预测值,包括:确定所述一个或多个参考块对应的一个或多个权重值;根据所述一个或多个权重值对所述一个或多个参考块进行加权融合处理,确定所述当前块的预测值。
- 根据权利要求18所述的方法,其中,所述确定所述一个或多个参考块对应的一个或多个权重值,包括:按照第二预设数值确定所述一个或多个权重值。
- 根据权利要求18所述的方法,其中,所述确定所述一个或多个参考块对应的一个或多个权重值,包括:根据所述一个或多个块矢量对应的一个或多个候选模板确定所述一个或多个权重值。
- 根据权利要求20所述的方法,其中,所述根据所述一个或多个块矢量对应的一个或多个候选模板确定所述一个或多个权重值,包括:根据所述候选模板中的像素值,确定所述候选模板对应的自相关矩阵;根据所述第一模板中的像素值和所述候选模板中的像素值,确定互相关向量;根据所述自相关矩阵和所述互相关向量,确定所述权重值。
- 根据权利要求20所述的方法,其中,所述根据所述一个或多个块矢量对应的一个或多个候选模板确定所述一个或多个权重值,包括:确定所述第一模板与所述候选模板之间的匹配代价值;根据所述匹配代价值确定所述权重值。
- 根据权利1所述的方法,其中,所述确定当前块对应的第一模板,包括:确定所述当前块对应的模板类型,并根据所述模板类型确定所述当前块对应的第一模板。
- 根据权利要求23所述的方法,其中,所述确定当前块对应的模板类型,包括:根据所述当前块的参考像素,确定所述当前块的模板类型;其中,所述当前块的参考像素包括下述至少一项:所述当前块的左侧相邻参考像素、所述当前块的上侧相邻参考像素、所述当前块的左上侧相邻参考像素、所述当前块的左下侧相邻参考像素、所述当前块的右上侧相邻参考像素。
- 根据权利要求23所述的方法,其中,所述根据所述当前块的参考像素,确定所述当前块的模板类型,包括:若所述当前块的左侧相邻参考像素、所述当前块的上侧相邻参考像素和所述当前块的左上侧相邻参考像素均可用,则确定所述当前块的模板类型为第一值;若所述当前块的左侧相邻参考像素可用,则确定所述当前块的模板类型为第二值;若所述当前块的上侧相邻参考像素可用,则确定所述当前块的模板类型为第三值;若所述当前块的左侧相邻参考像素和所述当前块的左上侧相邻参考像素均可用,则确定所述当前块的模板类型为第四值;若所述当前块的左侧相邻参考像素和所述当前块的左下侧相邻参考像素均可用,则确定所述当前块的模板类型为第五值;若所述当前块的上侧相邻参考像素和所述当前块的右上侧相邻参考像素均可用,则确定所述当前块的模板类型为第六值。
- 根据权利要求1所述的方法,其中,所述根据所述模板类型确定所述当前块对应的第一模板,包括:根据所述模板类型,以及所述模板类型对应的模板尺寸,确定所述当前块的模板参考像素;根据所述模板参考像素,确定所述当前块的第一模板。
- 根据权利要求1所述的方法,其中,所述方法还包括:根据所述当前块的预测值,确定所述当前块的预测差值,并将所述预测差值写入码流。
- 一种码流,其中,所述码流是根据待编码信息进行比特编码生成的;其中,待编码信息包括下述至少一项:当前块的预测差值,预设数量N、一个或多个块矢量。
- 一种编码器,包括第一确定单元;其中,所述第一确定单元,配置为确定当前块对应的第一模板;根据所述第一模板确定所述当前块对应的一个或多个块矢量;根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值。
- 一种编码器,包括第一存储器和第一处理器;其中,所述第一存储器,用于存储能够在所述第一处理器上运行的计算机程序;所述第一处理器,用于在运行所述计算机程序时,执行如权利要求28至54中任一项所述的方法。
- 一种解码器,包括第二确定单元;其中,所述第二确定单元,配置为确定当前块对应的第一模板;根据所述第一模板确定所述当前块对应的一个或多个块矢量;根据所述一个或多个块矢量确定当前块的一个或多个参考块,并根据所述一个或多个参考块确定所述当前块的预测值;根据所述当前块的预测值,确定所述当前块的重建值。
- 一种解码器,所述解码器包括第二存储器和第二处理器;其中,所述第二存储器,用于存储能够在所述第二处理器上运行的计算机程序;所述第二处理器,用于在运行所述计算机程序时,执行如权利要求1至27中任一项所述的方法。
- 一种计算机可读存储介质,其中,所述计算机可读存储介质存储有计算机程序,所述计算机程序被执行时实现如权利要求1至27中任一项所述的方法、或者实现如权利要求28至54中任一项所述的方法。
Publications (1)
Publication Number | Publication Date |
---|---|
WO2024145852A1 true WO2024145852A1 (zh) | 2024-07-11 |
Family
ID=
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11503284B2 (en) | Intra mode coding based on history information | |
CN113068028B (zh) | 视频图像分量的预测方法、装置及计算机存储介质 | |
KR20220101743A (ko) | 루프 필터링 방법 및 비일시적 컴퓨터 저장 매체 | |
WO2020192085A1 (zh) | 图像预测方法、编码器、解码器以及存储介质 | |
CN117223284A (zh) | 用于视频编解码的基于网络的图像滤波 | |
CN116547972A (zh) | 用于视频编解码的基于网络的图像滤波 | |
WO2020192109A1 (zh) | 图像分量预测方法、编码器、解码器以及存储介质 | |
WO2024145852A1 (zh) | 编解码方法、码流、编码器、解码器以及存储介质 | |
WO2020186763A1 (zh) | 图像分量预测方法、编码器、解码器以及存储介质 | |
AU2019357929A1 (en) | Video image component prediction method and apparatus, and computer storage medium | |
WO2022174469A1 (zh) | 一种光照补偿方法、编码器、解码器及存储介质 | |
WO2024145850A1 (zh) | 编解码方法、码流、编码器、解码器以及存储介质 | |
CN113766233B (zh) | 图像预测方法、编码器、解码器以及存储介质 | |
WO2020258052A1 (zh) | 图像分量预测方法、装置及计算机存储介质 | |
CN113395520B (zh) | 解码预测方法、装置及计算机存储介质 | |
CN112313950B (zh) | 视频图像分量的预测方法、装置及计算机存储介质 | |
WO2023141781A1 (zh) | 编解码方法、装置、编码设备、解码设备以及存储介质 | |
JP7448568B2 (ja) | 画像成分の予測方法、装置およびコンピュータ記憶媒体 | |
WO2023197193A1 (zh) | 编解码方法、装置、编码设备、解码设备以及存储介质 | |
WO2024077562A1 (zh) | 编解码方法及装置、编解码器、码流、存储介质 | |
WO2023197189A1 (zh) | 编解码方法、装置、编码设备、解码设备以及存储介质 | |
WO2020258053A1 (zh) | 图像分量预测方法、装置及计算机存储介质 | |
KR20200134302A (ko) | 이미지 처리 장치 및 방법 | |
WO2023051654A1 (en) | Method, apparatus, and medium for video processing | |
WO2023198057A1 (en) | Method, apparatus, and medium for video processing |