CN111567047B - 进行子预测块运动矢量推导的存储器访问窗口 - Google Patents

进行子预测块运动矢量推导的存储器访问窗口 Download PDF

Info

Publication number
CN111567047B
CN111567047B CN201780095715.1A CN201780095715A CN111567047B CN 111567047 B CN111567047 B CN 111567047B CN 201780095715 A CN201780095715 A CN 201780095715A CN 111567047 B CN111567047 B CN 111567047B
Authority
CN
China
Prior art keywords
motion vector
search space
prediction
pixel point
window
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201780095715.1A
Other languages
English (en)
Other versions
CN111567047A (zh
Inventor
塞米赫·艾森力克
赵志杰
阿南德·梅赫·科特拉
高晗
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN111567047A publication Critical patent/CN111567047A/zh
Application granted granted Critical
Publication of CN111567047B publication Critical patent/CN111567047B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/533Motion estimation using multistep search, e.g. 2D-log search or one-at-a-time search [OTS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/56Motion estimation with initialisation of the vector search, e.g. estimating a good candidate to initiate a search
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/57Motion estimation characterised by a search window with variable size or shape
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/573Motion compensation with multiple frame prediction using two or more reference frames in a given prediction direction

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本发明涉及能够减少确定和修正预测块的运动矢量时访问存储器的次数的模块。具体而言,本发明涉及能够减少以子预测块为单位确定和/或修正运动矢量时访问存储器的次数的模块。换句话说,将预测块拆分为子预测块,对所述子预测块至少分别进行运动矢量修正。存储器访问窗口限制对所述子预测块进行运动矢量确定和修正期间可访问的像素点(sample),所述存储器访问窗口不超过对所述预测块进行运动矢量确定和/或修正时使用的存储器访问窗口。

Description

进行子预测块运动矢量推导的存储器访问窗口
本发明涉及视频编码和解码过程中采用的运动矢量确定和修正。
背景技术
目前的混合型视频编解码器采用预测编码。视频序列的图像被细分为像素块,然后对这些块进行编码。整个块使用与块在空间或时间上靠近的已经编码的像素来进行预测,而不是逐个像素来编码整个块。编码器进一步只处理块与其预测块之间的差值。所述进一步处理通常包括将块像素转换为变换域中的系数。然后,可以通过量化进一步压缩系数,并通过熵编码进一步压缩系数以形成码流。该码流还包括使解码器能够解码已编码视频的任何信令信息。例如,信令可以包括有关编码器设置的设置,例如输入图像的大小、帧率、量化步长指示、应用于图像块的预测等。
时间预测利用了视频图像之间的时间相关性,视频图像也称为视频帧。时间预测也称为帧间预测,因为使用了(帧间)不同视频帧之间的依赖关系。相应地,从一个或多个之前的编码图像预测正在编码的块,之前的编码图像称为参考图像,正在编码的块称为当前块。参考图像不一定是在视频序列的显示顺序中位于当前块所在的当前图像之前的图像。编码器可以按照不同于显示顺序的编码顺序对图像进行编码。作为当前块的预测块,可以确定参考图像中的共址块。共址块在参考图像中的位置与当前块在当前图像中的位置相同。这种预测对于静止图像区域是准确的,静止图像区域即没有从一个图像移动到另一个图像的图像区域。
为了获得一个考虑到移动的预测值,即运动补偿预测值,在确定当前块的预测块时通常使用运动估计。相应地,当前块通过参考图像中的块进行预测,该块位于与共址块的位置相距由运动矢量给出的距离的位置上。为了使解码器能够确定当前块的相同预测块,可以在码流中指示运动矢量。为了进一步减少由于指示每个块的运动矢量带来的信令开销,可以估计运动矢量本身。可以对空域和/或时域中的相邻块的运动矢量执行运动矢量估计。
可以使用一张参考图像或通过加权从两个或两个以上参考图像获得的预测块来计算当前块的预测块。参考图像可以是相邻图像,即在显示顺序中紧接位于当前图像之前和/或紧接在当前图像之后的图像,因为相邻图像最有可能与当前图像相似。然而,一般来说,参考图像也可以是在显示顺序中位于当前图像之前或之后、在码流(解码顺序)中位于当前图像之前的任何其它图像。例如,在视频内容出现遮挡和/或非线性移动的情况下,这可以提供优势。因此,也可以在码流中指示参考图像识别。
帧间预测的一种特殊模式是所谓的双向预测,其中使用两个参考图像来生成当前块的预测块。具体而言,将在相应两个参考图像中确定的两个预测块组合成当前块的预测信号。双向预测对当前块的预测比单向预测仅使用单个参考图像进行的预测更准确。更准确的预测使得当前块的像素与预测块的像素之间的差值(也称为残差)更小,可以更有效地对这些差值进行编码,即压缩到更短的码流中。一般来说,可以使用两个以上参考图像来找到相应的两个以上参考块来预测当前块,即可以进行多参考帧间预测。因此,术语“多参考预测”包括双向预测以及使用两个以上参考图像的预测。
为了提供更准确的运动估计,可以通过在像素之间内插像素点来增强参考图像的分辨率。分数像素内可以通过对最接近的像素进行加权平均来执行。例如,在半像素分辨率的情况下,通常使用双线性内插。通过最接近像素与正在预测的像素之间的距离的倒数对最接近像素进行加权,然后对加权值取平均值,计算得到其它分数像素。
运动矢量估计是一项计算复杂的任务,其中计算当前块与参考图像中候选运动矢量指向的对应预测块之间的相似度。通常,搜索区域包括M×M个图像像素点,并且测试M×M个候选位置中的每个像素点位置。测试包括计算N×N参考块C与位于搜索区域的测试候选位置上的块R之间的相似度量。为简单起见,绝对差和(sum of absolute differences,SAD)是为此经常使用的一个度量,计算如下:
Figure GDA0002576941880000021
在上述公式中,x和y定义了在搜索区域内的候选位置,而索引i和j表示参考块C和候选块R内的像素点。候选位置通常称为块位移或偏移,反映块匹配描述为参考块在搜索区域内的移位,以及计算参考块C与搜索区域中的重叠部分之间的相似度。为了降低复杂度,通常通过将候选运动矢量限制在某个搜索空间内来减少候选运动矢量的数量。例如,搜索空间可以通过与当前图像中的当前块的位置对应的参考图像中的位置周围的像素的数目和/或位置来定义。在计算所有M×M个候选位置x和y的SAD之后,最佳匹配块R就是产生最小SAD的位置上的块,最小SAD对应于与参考块C的最大相似度。另一方面,候选运动矢量可以通过由相邻块的运动矢量组成的候选运动矢量列表来定义。
运动矢量通常至少部分在编码端确定,并在编码码流中向解码器指示。然而,也可以在解码器侧推导出运动矢量。在这种情况下,当前块在解码器处不可用,并且不能用于计算与参考图像中的候选运动矢量指向的块的相似度。因此,使用从已已解码块的像素中构建的模板来代替当前块。例如,可以使用与当前块相邻的已解码像素。这种运动估计减少了信令:运动矢量在编码器和解码器侧以相同方式推导出,因此不需要信令。另一方面,这种运动估计的准确性可能较低。
为了平衡准确性和信令开销,可将运动矢量估计分为两个步骤:运动矢量推导和运动矢量修正。例如,运动矢量推导可以包括从候选运动矢量列表中选择运动矢量。例如,可以通过在搜索空间进行搜索进一步修正此类已选择的运动矢量。通过计算每个候选运动矢量,即候选运动矢量指向的块的每个候选位置,的成本函数在搜索空间中进行搜索。
文件号JVET-D0029:X.Chen、J.An、J.Zheng发表的Decoder-Side Motion VectorRefinement Based on Bilateral Template Matching(基于双边模板匹配的解码端运动矢量修正)(文档获取网址http://phenix.it-sudparis.eu/jvet/)介绍了运动矢量修正,发现了整像素分辨率的第一运动矢量,并通过在第一运动矢量周围的搜索空间中以半像素分辨率进行搜索来进一步修正第一运动矢量。
为了执行运动矢量修正,需要将为了执行修正当前块所必需的至少那些像素点存储在存储器中,这些像素点即对应于搜索空间的像素点以及在搜索空间中进行模板匹配时可以访问的像素点。
外部存储器访问是当前硬件架构和/或软件实施方式中的一个重要设计参数。这是由于外部存储器访问的处理速度比使用内部存储器的处理速度慢造成的。另一方面,由于芯片大小的原因,芯片上的内部存储器是有限的。
发明内容
本发明基于以下观察:运动矢量修正,特别是以子预测块为单位实施时,可能需要增加存储器访问次数或需要更大的片上存储器。
鉴于上述问题,本发明提供了运动矢量预测,对于多个子PB中的每个子PB,通过访问窗口内的像素点而不访问窗口外的像素点来确定运动矢量,所述窗口定义为具有进行预测块的运动矢量修正时可访问的像素点的窗口。
这是通过独立权利要求的特征来实现的。
一些示例性和非限制性有利实施例是从属权利要求的标的物。
根据本发明一方面,提供了一种用于确定预测块的运动矢量的装置,包括处理电路,用于:获取所述预测块(prediction block,PB)的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定所述初始运动矢量的修正,其中,所述搜索空间位于由所述初始运动矢量给出的位置上且在进行所述模板匹配时可访问的整数像素点组成的窗口内;将所述PB拆分为多个子PB;对于所述多个子PB中的每个子PB,通过访问所述窗口内的像素点且不访问所述窗口外的像素点来确定运动矢量。
在一个实施例中,所述确定所述多个子PB的运动矢量包括:对于每个子PB,基于为所述PB确定的修正运动矢量和/或基于与所述子PB在时间或空间上相邻的子PB和/或PB的运动矢量生成候选运动矢量集合,其中,生成的所述候选运动矢量集合只包括候选运动矢量,所述候选运动矢量分别指向子PB的位置,对于所述子PB,执行所述模板匹配时使用的所述模板中的每个像素点位于所述窗口内;从所述生成的候选运动矢量集合中选择最佳匹配候选运动矢量。
例如,所述确定所述多个子PB的运动矢量包括:对于每个子PB,通过模板匹配确定预定输入运动矢量的修正,其中,所述模板匹配在搜索空间内执行,所述搜索空间不包括所述模板匹配需要所述窗口之外的访问像素点的任何位置。
例如,所述窗口为N乘以M个整数像素点的矩形,N和M为大于1的整数。特定而言,N和/或M的值可取决于PB的大小。
在一示例中,所述处理电路用于在搜索空间中进行模板匹配来确定所述预定输入运动矢量的所述修正,所述搜索空间在最近一次迭代中沿所述搜索空间中的一个或多个最佳匹配位置给出的方向迭代扩展,且所述窗口由预定义的最大迭代次数限定。
在一个实施例中,所述搜索空间位于由取整的初始运动矢量给出的位置上并且包括一个或多个分数像素点位置(即使在所述整数初始运动矢量周围构建所述搜索空间,但仍可测试一些分数像素点位置),属于所述搜索空间的所述分数像素点位置中的每个分数像素点位置是通过预定义抽头大小的滤波器进行内插滤波获得的,其中所述滤波器仅访问窗口内的整数像素点,所述窗口由在所述搜索空间中执行所述模板匹配时可访问的整数像素点组成。
在可与任何前述实施例结合的另一实施例中,所述搜索空间位于由所述初始运动矢量给出的位置上,并且所述模板匹配:访问预定窗口内的整数像素点位置,所述预定窗口包括所述搜索空间和进行所述模板匹配时可访问的其它整数像素点位置;将位于所述窗口之外的至少一个整数像素点位置替换为以所述窗口内的至少一个像素点为单位的替换值。所述模板匹配还使用所述访问整数像素点位置值以及所述替换值来执行所述模板匹配。
在另一实施例中,当所述初始运动矢量指向分数像素点位置时,所述搜索空间位于通过将所述初始运动矢量指向的所述分数像素点位置取整为整数像素点位置而给出的位置上。
根据本发明的一方面,提供了一种用于编码预测块的装置,包括:如上所述的用于确定所述预测块的运动矢量的装置;编码单元,用于对所述预测块与根据所述运动矢量得到的预测值之间的差值进行编码,得到码流。
根据本发明的一方面,一种用于从码流中解码出预测块的装置,包括:解码单元,用于从所述码流中解码出所述预测块与根据运动矢量获得的预测值之间的差值;如上述任一实施例和示例中的用于确定所述预测块的运动矢量的装置;运动预测单元,用于根据所述运动矢量确定所述预测值;重建器,用于根据所述预测值和所述解码差值重建所述预测块。
根据本发明的一方面,提供了一种用于确定预测块的运动矢量的方法,其特征在于,包括以下步骤:获取所述预测块(prediction block,PB)的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配确定所述初始运动矢量的修正,其中,所述搜索空间位于由所述初始运动矢量给出的位置上且在进行所述模板匹配时可访问的整数像素点组成的窗口内;将所述PB拆分为多个子PB;对于所述多个子PB中的每个子PB,通过访问所述窗口内的像素点且不访问所述窗口外的像素点来确定运动矢量。
此外,根据一个方面,提供了一种用于编码预测块的方法,包括:如上述任一实施例和示例中的确定所述预测块的运动矢量;对所述预测块与根据所述运动矢量得到的预测值之间的差值进行编码,得到码流。
根据本发明的另一方面,提供了一种用于从码流中解码出预测块的方法,包括:从所述码流中解码出所述预测块与根据运动矢量获得的预测值之间的差值;如上述任一实施例和示例中的确定所述预测块的所述运动矢量;根据所述运动矢量确定所述预测值;根据所述预测值和所述解码差值重建所述预测块。
根据本发明的一方面,提供了一种存储指令的非瞬时性计算机可读存储介质,所述指令在由处理器/处理电路执行时执行上述任一方面或实施例或其组合中的步骤。
附图说明
下文将参考以下附图详细描述示例实施例:
图1为可进行运动矢量推导和修正的编码器的示例性结构的框图;
图2为可进行运动矢量推导和修正的解码器的示例性结构的框图;
图3为适用于双向预测的示例性模板匹配的示意图;
图4为适用于单向预测和双向预测的示例性模板匹配的示意图;
图5为在不需要在码流中修正初始运动矢量情况下操作的运动矢量推导各阶段的框图;
图6为实施本发明实施例的示例性硬件的框图;
图7为用于编码块的包含需要访问的像素点的示例性窗口的示意图;
图8为迭代搜索空间的示意图;
图9为存储器访问窗口由于内存滤波在水平方向上的扩展的示意图;
图10为相对于编码块的存储器访问窗口的定义的示意图;
图11为将预测块细分为子预测块的示意图;
图12为用于拆分后预测块的存储器访问窗口的示意图;
图13为采用预测块拆分的运动矢量推导的流程图;
图14为采用预测块拆分和部分结果的运动矢量推导的性能的示意图;
图15为基于处理单元的运动矢量修正的示意图;
图16为基于子PB的运动矢量推导和修正的示意图;
图17为典型情况下存储器访问窗口处理的流程图;
图18为根据实施例的典型情况下存储器访问窗口处理的流程图;
图19为分数像素点位置的子窗口的定义的示意图;
图20为包括能够用来形成用于运动矢量修正的搜索空间位置的分数像素点位置的示例性位置的示意图;
图21为不能用来形成用于运动矢量修正的搜索空间位置的示例性分数像素点位置的示意图;
图22为确定搜索空间的哪个位置能够通过用于运动矢量修正的模板匹配来测试的流程图;
图23为进行分数像素点位置计算的两个像素点的填充的示意图;
图24为能够在搜索空间边界上进行模板匹配的四个像素点的填充的示意图;
图25为应用像素点填充的方法的流程图;
图26为分数初始运动矢量的调整的示意图;
图27为在没有对初始运动矢量坐标进行取整的情况下获得的搜索空间与在对初始运动矢量坐标进行取整的情况下获得的搜索空间之间的比较的示意图;
图28A为不对初始运动矢量进行取整的运动矢量修正的流程图;
图28B为将初始运动矢量取整到预定整数位置的运动矢量修正的流程图;
图28C为不将初始运动矢量取整到多个整数位置的运动矢量修正的流程图。
具体实施方式
本发明涉及对子预测块执行运动矢量修正时使用的存储器访问窗口。
如上所述,外部存储器访问是当今硬件和软件体系结构中最重要的设计考虑因素之一。尤其是在包括模板匹配时,例如,在进行运动矢量修正的情况下,运动矢量估计还可以与内插滤波一起用于获取搜索空间的分数像素点位置。不仅仅只对整个预测块(编码块)执行运动矢量修正。为了进一步修正结果,可以将预测块细分为子预测块(子PB)。然后,分别单独对子PB执行运动矢量修正。进行内插滤波还可能需要增加需要从存储器中访问的像素点的数量。然而,这可能会导致使用更多的昂贵的片上存储器,或者增加外部存储器访问次数,另一方面减慢了实现速度。尤其是在解码端,这些问题可能导致应用的成本增加、速度变慢,这是不可取的。
根据本发明,提供了一种用于确定预测块的运动矢量的装置,包括处理电路。该处理电路用于:
–获取预测块(prediction block,PB)的初始运动矢量和模板;
–通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正,其中,所述搜索空间位于由初始运动矢量给出的位置上且在由进行模板匹配时可访问的整数像素点组成的窗口内;
–将所述PB拆分为多个子PB;
–对于所述多个子PB中的每个子PB,通过访问所述窗口内的像素点且不访问所述窗口外的像素点来确定运动矢量。
图12示出了此类窗口的示例。
术语“预测块”是指图像帧的一个块,也可以表示为“预测单元”或“编码单元”。一般来说,术语“编码单元(coding unit,CU)”表示亮度像素点的编码块、具有三个像素点数组的图像的色差像素点的两个对应编码块,或黑白图像的像素点的编码块,或使用三个独立颜色平面和用于编码像素点的语法结构进行编码的图像的编码块。然而,需要说明的是,本文中的术语“CU”也用于表示一个颜色分量的像素点。然而,如本领域技术人员所清楚的,对亮度的操作可以以相同的方式应用于色差,或者可以独立于亮度单独分别处理色差。本发明适用于一个或多个颜色分量。术语“CU”一般包括进行编码的单元。下文将详细描述的编码可包括图像分割、变换和预测,相应地,术语“CU”可用于变换单元和/或预测单元和/或图像分割信息(将图像帧拆分和划分成块进行预测、变换等)。
相应地,术语“预测单元(prediction unit,CU)”表示亮度像素点的预测块、具有三个像素点数组的图像的色差像素点的两个对应预测块,黑白图像的像素点的预测块,或使用三个独立的颜色平面和用于预测块像素点的语法结构进行编码的图像的预测块。资料来源:H.265标准文档。如上所述,本发明适用于任何一个或多个颜色分量。
关于术语“子PB”,需要注意的是,子PB的预测操作不是独立定义的(没有单独针对每个子PB的语法结构),而是依赖于父PB。换句话说,子PB不是独立定义的预测单元,全部或部分预测操作由父PB定义。而子PB用于运动矢量修正。
子PB可以是不相交的,即PB可以细分为子PB。然而,本发明不限于这种方法,而且子PB也可以重叠。
PB和子PB的区别如下:由于PB是图像帧内部的帧分割单元,因此它具有由语法元素(编码到码流中或从码流中解码)提供的指定必须如何执行预测操作的相关指令。语法元素定义预测模式(帧内/帧间)、预测方向(帧间预测的单向/双向预测或帧内预测的参考像素点内插方向)和运动矢量信息(用于帧间预测)和其它预测信息。在由与预测块相关联的语法元素所表达的信息中,可能存在指示将PB进一步分割为子PB的信息。此信息可以直接指示或(例如,根据PB大小)推断出。
另一方面,对于子PB,没有指示指定预测操作的附加语法元素。相反,与父PB相关联的预测信息被继承下来并略微调整。例如,如果使用帧间预测和运动矢量MV0来预测父PB,则PB内部的子PB可能具有通过进行运动矢量修正而获得的略有不同的运动矢量。在这种情况下,尽管多个子PB使用相同的语法元素(与父PB相关联),但是对每个子PB进行的预测操作可能略有不同(即,不同的MV、不同的预测模式、不同的预测方向、不同的参考图像……)。术语“PU”和“PB”的区别在于,PU是一个概念性术语,用于定义PB以及管理与PB相关联的预测操作的语法元素。此外,术语“CU”用于指定PU以及与变换和残差像素点构建操作相关的附加语法元素。
应用中只涉及预测操作,对变换和残差构建没有特别的关注。因此,在本申请中,术语“PU”、“PB”和“CU”可互换使用。
需要说明的是,在一些视频编码标准中,例如,H.265,一个编码单元可能包含多个预测单元。在应用中,如果术语“编码单元”可互换地用于指代预测块,则假设编码单元仅包括一个预测单元(和预测块)。这种应用侧重于预测块(单元)和子预测块之间的区别,因此术语“PU”、“PB”和“CU”可互换使用。
本发明实施例可用于编码器和解码器,以下将进行示例性说明。
图1示出了编码器100,包括用于接收视频流的帧或图像的输入图像像素点的输入端和用于生成编码视频码流的输出端。本发明中的术语“帧”用作图像的同义词。然而,需要说明的是,在进行隔行扫描的情况下,本发明也适用于场。一般来说,一个图像包括m×n个像素。这对应于图像像素点,并且可以包括一个或多个颜色分量。为了简单起见,以下描述均指像素,即亮度像素点。然而,需要说明的是,本发明的运动矢量搜索可以应用于包括色差的任何颜色分量或搜索空间中的RGB等分量。另一方面,仅对一个分量执行运动矢量估计并将确定的运动矢量应用于更多(或所有)分量可能是有益的。
待编码的输入块的大小不一定相同。一个图像可以包括不同大小的块,不同图像的块栅格也可以不同。
在说明性实现方式中,编码器100用于对视频流进行预测、变换、量化和熵编码。变换单元106、量化单元108和熵编码单元170分别执行变换、量化和熵编码,以生成编码视频码流作为输出。
视频流可以包括多个帧,其中每个帧被划分为一定大小的块,这些块要么进行帧内编码要么进行帧间编码。例如,视频流的第一帧的块通过帧内预测单元154进行帧内编码。帧内编码帧仅使用同一帧内的信息来编码,使得该帧能够独立解码,并且能够在码流中提供入口点进行随机访问。视频流的其他帧的块可以通过帧间预测单元144进行帧间编码,之前编码帧(参考帧)中的信息用来减少时间冗余,使得根据参考帧中的块来预测帧间编码帧的每个块。模式选择单元160用于选择帧的块将由帧内预测单元154还是由帧间预测单元144处理。模式选择单元160还控制帧内预测或帧间预测的参数。为了能够刷新图像信息,可以在帧间编码帧内提供帧内编码块。此外,可以定期地将仅包含帧内编码块的帧内编码帧插入到视频序列中,以便提供解码的入口点,即解码器无需从之前编码帧中获取信息即可开始解码的点。
帧内估计单元152和帧内预测单元154是执行帧内预测的单元。具体而言,帧内估计单元152也可以基于原始图像的信息推导出预测模式,而帧内预测单元154提供对应的预测值,即使用所选预测模式进行预测的像素点,进行差异化编码。为了执行空间预测或时间预测,编码块可进一步由反量化单元110和逆变换单元112处理。在块重建之后,环路滤波单元120用于进一步提高解码图像的质量。然后,滤波块组成参考帧,随后将参考帧存储在解码图像缓冲区130中。编码端的这种解码环路(解码器)提供的优点是,产生的参考帧与解码端重建的参考图像相同。相应地,编码端和解码端以对应的方式操作。此处术语“重建”是指通过将预测块添加到解码残差块来获取重建块。
帧间估计单元142从解码图像缓冲区130接收待进行帧间编码的当前帧或图像的块和一个或几个参考帧作为输入。运动估计由帧间估计单元142执行,而运动补偿由帧间预测单元144执行。运动估计用于基于某一成本函数获取运动矢量和参考帧,例如,还使用待编码的原始图像。例如,运动估计单元142可提供初始运动矢量估计。然后,初始运动矢量可以直接以矢量的形式在码流中指示,或者指示为根据预定规则在编码器和解码器侧以相同的方式构建的候选运动矢量列表中的候选运动矢量的索引。然后,运动补偿推导出当前块的预测值,看作是参考帧中与当前块共址的块向参考帧中的参考块平移,即通过运动矢量来描述。帧间预测单元144输出当前块的预测块,其中所述预测块使成本函数最小化。例如,成本函数可以是当前待编码块与其预测块之间的差值,即成本函数使残差块最小化。例如,残差块的最小化是基于计算候选参考图像中当前块和候选块的所有像素(像素点)之间的绝对差和(sum of absolute differences,SAD)。然而,一般来说,可使用任何其它相似度量,例如均方误差(mean square error,MSE)或结构相似度量(structural similaritymetric,SSIM)。
然而,成本函数也可以是编码这种帧间块和/或这种编码产生的失真所需的比特数。因此,码率失真优化流程可用于决定运动矢量选择和/或一般地用于决定编码参数,例如是使用块的帧间预测还是帧内预测以及使用哪些设置。
帧内估计单元152和帧间预测单元154接收待帧内编码的当前帧或图像的块以及当前帧的重建区域的一个或几个参考像素点作为输入。然后,帧内预测通过当前帧的参考像素点的函数来描述当前帧的当前块的像素。帧内预测单元154输出当前块的预测块,其中所述预测块有利于使当前待编码块与其预测块之间的差值最小化,即,使残差块最小化。例如,残差块的最小化可以基于码率失真优化流程。具体而言,获取预测块作为参考像素点的方向内插。方向可以通过码率失真优化和/或通过计算上述与帧间预测相关的相似度量来确定。
帧间估计单元142接收待进行帧间编码的当前帧或图像的块或更通用格式的图像像素点以及两个或两个以上解码图像231作为输入。然后,帧间预测在相对于参考图像的参考图像像素点的运动矢量方面来描述当前帧的当前图像像素点。帧间预测单元144输出当前图像像素点的一个或多个运动矢量,其中,运动矢量指向的所述参考图像像素点有利于使当前待编码图像像素点与其参考图像像素点之间的差值最小化,即使残差图像像素点最小化。然后,当前块的预测值由帧间预测单元144提供,用于差分编码。
当前块与其预测块之间的差值,即残差块105,随后由变换单元106进行变换。变换系数107由量化单元108量化并由熵编码单元170进行熵编码。因此生成的编码图像数据171亦即编码视频码流包括帧内编码块和帧间编码块以及对应的信令(例如,模式指示、运动矢量指示和/或帧内预测方向)。变换单元106可进行诸如傅里叶或离散余弦变换(DFT/FFT或DCT)等线性变换。这种向空间频域的变换提供了以下优点:所得系数107通常在较低频率下具有较高值。因此,在有效系数扫描(例如z形)和量化之后,所得值序列在开始和结束时通常具有一些较大的值,其中包含一连串零。这样能够实现更有效编码。量化单元108通过降低系数值的分辨率来执行实际的有损压缩。然后,熵编码单元170将二进制码字分配给系数值以产生码流。熵编码单元170还对信令信息(图1中未示出)进行编码。
图2示出了视频解码器200。视频解码器200具体包括解码图像缓冲区230、帧间预测单元244和帧内预测单元254,帧内预测单元254是块预测单元。解码图像缓冲区230用于存储从编码视频码流重建的至少一个参考帧(用于单向预测)或至少两个参考帧(用于双向预测)。所述参考帧不同于编码视频码流的当前帧(当前解码帧)。帧内预测单元254用于生成预测块,预测块是待解码块的估计值。帧内预测单元254用于基于从解码图像缓冲区230获取的参考像素点生成该预测块。
解码器200用于解码由视频编码器100生成的编码视频码流,优选地,解码器200和编码器100都为待编码/解码的相应块生成相同的预测块。解码图像缓冲区230和帧内预测单元254的特征与图1中的解码图像缓冲区130和帧内预测单元154的特征相似。
视频解码器200包括其它单元,这些单元也存在于视频编码器100中,例如,反量化单元210、逆变换单元212和环路滤波单元220,分别对应视频编码器100中的反量化单元110、逆变换单元112和环路滤波单元120。
熵解码单元204用于对接收到的编码视频码流进行解码,相应地用于获取量化残差变换系数209和信令信息。量化残差变换系数209输送到反量化单元210和逆变换单元212以生成残差块。将残差块添加到预测块265,并相加结果输送到环路滤波单元220,得到解码视频。解码视频的帧可以存储在解码图像缓冲区230中,并用作解码图像231进行帧间预测。
通常,图1和图2中的帧内预测单元154和帧内预测单元254可以使用已编码区域中的参考像素点来生成需要编码或解码的块的预测信号。
熵解码单元204接收编码码流171作为其输入。一般来说,首先解析码流,即从码流中提取信令参数和残差。通常,码流的语法和语义由标准定义,以便编码器和解码器可以通过互操作方式工作。如上文背景技术部分所述,编码码流不仅包括预测残差。在运动补偿预测的情况下,运动矢量指示也在码流中编码并在解码器侧从中解析。运动矢量指示可以通过提供运动矢量的参考图像和运动矢量坐标来给出。到目前为止,已考虑编码完整的运动矢量。但是,也可以仅编码码流中的当前运动矢量与前一运动矢量之间的差值。该方法允许利用相邻块的运动矢量之间的冗余。
为了有效地编码参考图像,H.265编解码(ITU-T、H265、H系列:Audiovisual andmultimedia systems:High Efficient Video Coding(视听和多媒体系统:高效视频编码))提供了一个参考图像列表,从而将列表索引分配给相应参考帧。然后,通过在码流中包含对应分配的列表索引,在码流中指示参考帧。这种列表可以在标准中定义,或者在视频的开头或多个帧的集合中指示。需要说明的是,H.265中定义了两个参考图像列表,称为L0和L1。然后,通过指示列表(L0或L1)并在该列表中指示与预期参考图像相关联的索引,在码流中指示参考图像。提供两个或两个以上列表可能有利于更好地压缩。例如,L0可用于单向帧间预测片和双向帧间预测片,而L1可仅用于双向帧间预测片。然而,一般来说,本发明不限于L0和L1列表的任何内容。
列表L0和L1可以在标准中定义并且是固定的。然而,通过在视频序列的开始指示两个列表,编码/解码可以有更大的灵活性。相应地,编码器可以配置列表L0和L1具有根据索引排序的特定参考图像。列表L0和L1可以具有相同的固定大小。一般来说,可能有两个以上列表。运动矢量可以直接由参考图像中的坐标指示。或者,H.265中还规定可以构建候选运动矢量列表,并且可以传输列表中与特定运动矢量相关联的索引。
当前块的运动矢量通常与当前图像或之前编码图像中的相邻块的运动矢量相关。这是因为相邻块很可能对应于存在类似运动的同一运动对象,并且对象的运动不大可能随时间发生突然变化。因此,使用相邻块中的运动矢量作为预测值减小了所指示运动矢量差的大小。运动矢量预测值(Motion Vector Predictor,MVP)通常从共址图像中的空间相邻块或时间相邻块中的已经编码/解码的运动矢量推导出。在H.264/AVC中,这是通过对三个空间相邻运动矢量按分量取中间值来实现的。使用这种方法,不需要指示预测值。H.264/AVC中的时域直接模式只考虑共址图像中的时域MVP。H.264/AVC直接模式还用于推导出除运动矢量之外的其它运动数据。因此,这些模式与HEVC中的块合并概念关系更大。在HEVC中,隐式推导出MVP的方法被一种称为运动矢量竞争的技术所取代,该技术显式地指示MVP列表中的哪个MVP用于运动矢量推导。HEVC中的可变编码四叉树块结构会产生一个块,这个块的相邻块使用运算矢量作为潜在的候选MVP。以左侧相邻块为例,在最坏的情况下,当64×64亮度编码树块不再进一步拆分且左侧亮度编码树块被拆分到最大深度时,64×64亮度预测块可以在左侧具有16个4×4亮度预测块。
引入高级运动矢量预测(Advanced Motion Vector Prediction,AMVP)来修改运动矢量竞争,以适应这种灵活的块结构。在HEVC的发展过程中,最初的AMVP设计被大大简化,以更好地平衡编码效率和实现友好设计。AMVP的最初设计包括三类不同预测值中的五个MVP:空间相邻块中的三个运动矢量、三个空间预测值的中间数和共址时间相邻块中的缩放运动矢量。此外,通过重新排序来将最可能的运动预测值放置在第一位置并删除冗余候选预测值来确保最小的指示开销,从而修改预测值列表。AMVP候选列表构建的最终设计包括以下两个候选MVP:(a)从五个空间相邻块中获取的最多两个空间候选MVP;(b)当两个空间候选MVP均不可用或相同时,从两个时间共址块中获取的一个时间候选MVP;(c)当空间MVP、时间MVP或两个候选MVP均不可用时,零运动矢量。关于运动矢量确定的详细内容,可在2014年V.Sze等人(编者)在施普林格出版社(Springer)发表的书中找到:High EfficiencyVideo Coding(HEVC):Algorithms and Architectures(高效视频编码(HEVC):算法和架构),尤其是第5章,其内容以引用的方式并入本文中。
为了在不进一步增加信令开销的情况下进一步改进运动矢量估计,进一步修正编码端获取的在码流中提供的运动矢量可能是有益的。可以在解码器侧执行运动矢量修正,而无需编码器的辅助。解码器环路中的编码器可以采用相同的修正以获得对应的运动矢量。在包括参考图像的整数像素位置和分数像素位置的搜索空间中执行运动矢量修正。例如,分数像素位置可以是半像素位置或四分之一像素位置或其它分数像素点位置。可以通过内插,例如双线性内插,从整数(全)像素位置获得分数像素位置。
在当前块的双向预测中,将使用列表L0的第一运动矢量和列表L1的第二运动矢量获得的两个预测块组合到单个预测信号,相比于单向预测,能够更好地适应原始信号,从而减少残差信息,并有可能获得更有效的压缩。
因为在解码器侧,当前块由于正在解码而不可用,所以为了运动矢量修正,使用模板,该模板是当前块的估计值并基于已经处理(即,在编码端编码,在解码端解码)的图像部分进行构建。
首先,在解码器200侧接收第一运动矢量MV0的估计值和第二运动矢量MV1的估计值作为输入。在编码端100,运动矢量估计MV0和MV1可以通过块匹配和/或通过搜索与当前块相邻的块(在同一图像中或在相邻图像中)的运动矢量组成的候选运动矢量列表(例如合并列表)来获得。然后,有利的是,在码流中向解码端指示MV0和MV1。然而,需要说明的是,一般来说,编码器侧的第一确定阶段也可以通过模板匹配执行,有利于减少信令开销。
在解码端200,有利的是,基于码流中的信息获得运动矢量MV0和MV1。要么直接指示,要么差异化指示MV0和MV1,和/或指示运动矢量列表(合并列表)中的索引。然而,本发明不限于在码流中指示运动矢量。相反,运动矢量可以由已经处于第一阶段的模板匹配确定,与编码器的操作相对应。可以在与第二修正阶段的搜索空间不同的搜索空间中执行第一阶段的模板匹配(运动矢量推导)。具体而言,可以对分辨率较高(即搜索位置之间的距离更近)的搜索空间执行修正。
同样向解码器提供MV0和MV1分别指向的两个参考图像RefPic0和RefPic1的指示。参考图像作为之前处理(即,相应的编码和解码)的结果存储在编码端和解码端的解码图像缓冲区中。通过搜索选择其中一个参考图像进行运动矢量修正。运动矢量确定装置中的参考图像选择单元用于选择MV0指向的第一参考图像和MV1指向的第二参考图像。在选择之后,参考图像选择单元确定第一参考图像或第二参考图像是否用于进行运动矢量修正。为了执行运动矢量修正,第一参考图像中的搜索区域定义在运动矢量MV0指向的候选位置周围。通过在搜索空间内执行模板匹配并确定绝对差和(sum of absolute differences,SAD)等相似度量,分析搜索区域内的候选搜索空间位置以找到与模板块最相似的块。搜索空间的位置表示模板左上角匹配的位置。如上所述,左上角只是一种约定,搜索空间的任意点,例如中心点,一般可用于表示匹配位置。
根据上述文件JVET-D0029,解码端运动矢量修正(decoder-side motion vectorrefinement,DMVR)将指向两个相应参考图像RefPict0和RefPict1的初始运动矢量MV0和MV1作为输入。这些初始运动矢量用于确定RefPict0和RefPict1中的相应搜索空间。此外,使用运动矢量MV0和MV1,基于MV0和MV1分别指向的(像素点的)块A和块B来构建模板,如下所示:
模板=函数((块A,块B))。
该函数可以是结合按像素点进行加权求和的像素点裁剪运算。然后,使用模板在基于相应参考图像0和1中的MV0和MV1确定的搜索空间中执行模板匹配。用于确定相应搜索空间中的最佳模板匹配的成本函数是SAD(模板,块candA’),其中块candA’是指横跨MV0给出的位置的搜索空间中的候选MV指向的候选编码块。图3示出了确定最佳匹配块A’和所得修正运动矢量MV0’。相应地,使用相同的模板来找到最佳匹配块B’和指向块B’的对应运动矢量MV1’,如图3所示。换句话说,在根据初始运动矢量MV0和MV1指向的块A和块B构建模板之后,利用模板在RefPic0和RefPic1上搜索,找到修正运动矢量MV0’和MV1’。
运动矢量推导技术有时也称为帧率上转换(frame rate up-conversion,FRUC)。初始运动矢量MV0和MV1通常可以在码流中指示,以确保编码器和解码器可以使用同一初始点进行运动矢量修正。或者,可以通过提供包括一个或多个初始候选运动矢量的初始候选运算矢量列表来获得初始运动矢量。对于每个运动矢量,确定修正运动矢量,最终选择使成本函数最小化的修正运动矢量。
还需要注意的是,本发明不限于上文结合图3所述的模板匹配。图4示出了一种同样适用于单向预测的替代模板匹配。详细内容请见文件JVET-A1001,具体是Jianle Chen等人发表的标题为Algorithm Description of Joint Exploration Test Model 1(联合探索测试模型1的算法描述)中的第2.4.6节的Pattern matched motion vector derivation(模式匹配的运动矢量推导),访问网址是http://phenix.it-sudparis.eu/jvet/。这种模板匹配方法中的模板被确定为与当前帧中的当前块相邻的像素点。如图3所示,可以采用与当前块的左上边界相邻的已重建像素点,称为“L形模板”。
图5示出了另一类也可使用的运动矢量推导。运动矢量推导过程的输入是指示是否进行运动矢量推导的标志位。隐晦地说,推导过程的另一输入是(时间上或空间上)相邻的之前编码/重建块的运动矢量。将多个相邻块的运动矢量用作运动矢量推导的初始搜索步骤的候选运动矢量。该过程的输出分别为MV0’(如果使用双向预测,则也可能是MV1’)和对应的参考图像索引refPict0且可能为refPict1。然后,运动矢量修正阶段包括如上所述的模板匹配。在找到一个(单向预测)运动矢量或多个(双向预测/多帧预测)运动矢量后,构建当前块的预测值(对于双向/多帧预测,通过加权像素点预测,否则,参考MV修正后指向的像素点)。
本发明不限于上述两种模板匹配方法。例如,称为双向匹配(也在文件JVET-A1001中描述)的第三模板匹配方法也可以用于运动矢量修正,并且本发明以类似的方式适用。根据双向匹配,搜索沿着两个不同参考图像中当前块的运动轨迹的两个块之间的最佳匹配。假设存在连续运动轨迹,指向两个参考块的运动矢量MV0和MV1应与当前图像与两个参考图像之间的时间距离亦即TD0和TD1成比例。在双向匹配中,可能使用SAD(块cand0’,块cand1’)等成本函数,其中MV0指向块cand0’,MV1指向块cand1’。
图6示出了处理电路600。该处理电路可以包括任何硬件,配置可以通过任何类型的编程或硬件设计或两者组合来实现。例如,处理电路可以由单个处理器,例如通用处理器,和实现上述步骤的对应软件组成。另一方面,处理电路可以由专用集成电路(Application-Specific Integrated Circuit,ASIC),现场可编程门阵列(Field-Programmable Gate Array,FPGA)或数字信号处理器(Digital Signal Processor,DSP)等专用硬件来实现。
该处理电路可以包括一个或多个上述硬件组件,这些硬件组件互连以执行上述运动矢量推导。处理电路600包括计算逻辑,该计算逻辑实现两种功能:初始运动矢量(如果使用双向/多帧预测下,则是多个初始运动矢量)和模板获取单元610、运动矢量修正单元620。这两个功能可以在同一块硬件上实现,或者可以由单独的硬件单元执行,例如初始运动矢量和模板获取单元610、运动矢量修正单元620。处理电路600可以通信地连接到存储有重建参考图像像素点的外部存储器650。此外,处理电路600还可以包括内部存储器640,内部存储器640缓存窗口中从外部存储器传送来的用于确定当前处理块的运动矢量的像素点。处理电路可以作为一个集成电路包含在单个芯片上。
需要说明的是,处理电路可以实现结合图1和图2描述的编码器和/或解码器的其它功能。内部存储器可以是片上存储器,例如高速缓存或线路存储器。有利的是,可以在编码器/解码器芯片上实现芯片存储器,以加快计算速度。由于芯片尺寸有限,片上存储器通常较小。另一方面,外部存储器可以很大,但是对外部存储器的访问消耗更多的能量,而且访问速度要慢得多。通常,在执行计算之前,所有必要的信息都从外部存储器检索到片上存储器。最坏的情况是,外部存储器访问(或设计存储器总线时所需供应的带宽)表示解码一个帧或一个编码单元时的外部存储器与芯片之间的最大可能内存传输量。存储器(特别是外部存储器)通常只能以预定义的块单元为单位进行访问。换句话说,通常不可能访问单个像素,而是必须访问最小单元(例如,8×8)。片上存储器的大小也是一个重要的设计考虑因素,因为片上存储器越大成本越高。
换句话说,上述装置可以是集成电路,还包括:嵌在集成电路中的内部存储器和用于将位于所述窗口内的整数像素点从外部存储器提取到内部存储器的存储器访问单元(接口)。
上述使用的术语“预测块”是指将要预测的当前块。预测块是图像内的块,可以通过将图像细分为大小相等或大小不同的块(例如,通过将编码树单元(coding tree unit,CTU)分层分割为更小的单元)来获得。该块可以是正方形或一般而言的矩形,因为这些形状是当前编码器/解码器中也使用的典型形状。然而,本发明不限于任何大小/形状的块。
包括处理电路的装置可以是编码器或解码器,甚至可以是包括这种编码器或解码器的装置,例如记录设备和/或播放设备。
分数像素点位置是通过重建如图1所示进行编码的参考图像获得的真实图像像素点位置之间的位置。因此,分像素点位置必须基于最接近的整数像素位置通过内插获得。内插滤波的详细内容可以在2014年V.Sze等人在施普林格出版社出版的High EfficiencyVideo Coding(高效视频编码)(这本书的第5.3节的Fractional Sample Interpolation(分数像素点内插)分数中找到。
内插滤波通常采用不同的滤波器产生不同的分数像素(像素点)位置。例如,在H.265视频压缩标准中,使用下面的1D可分离滤波器来生成四分之一像素位置和半像素位置:
Figure GDA0002576941880000121
Figure GDA0002576941880000131
从上表中可以看出,内插滤波需要分数像素位置周围的几个像素点,对应于滤波器抽头(表中系数的数量)。使用上述示例的滤波器,为了生成半像素位置,需要左/上方和右/下角的4个整数像素点。需要说明的是,内插滤波器的长度对于四分之一像素点位置(7抽头)和对于半像素点位置(8抽头)是不同的。在本申请中,术语“像素点(sample)”和“像素(pel和pixel)”可互换使用,表示给定时间点中(一个或多个颜色分量中)的图像像素点。原则上,像素点是一个强度值。
在本发明一些实施例中,预定义抽头大小的内插滤波器仅在所述搜索空间中进行模板匹配时可访问的整数像素点给出的窗口内访问整数像素点。该窗口包含的像素点可能比实际上计算某个预测块所用的像素点多。这是因为修正搜索操作通常使用快速搜索方法(而不是暴力搜索方法)来实现,根据这个事实,一些像素点不是根据搜索操作的渐进过程进行评估的。因此,对于每个预测块,模板匹配迭代次数以及修正搜索操作计算中使用的像素点数量可能发生变化。
图7示出了窗口中的编码块(预测块)和对应的像素点。需要说明的是,图7所示的像素点是参考图像像素点,这里的编码块实际上是与当前帧中的当前块的大小和位置对应的块,在参考图像中推导当前块的运动矢量。因此,图7中的编码块实际上是与预测值需要搜索的块共址的块。然而,为简单起见,该块在下文中称为“编码块”。
在本示例中,非修正运动矢量MV0指向一个整数像素点位置。运动矢量修正搜索粒度为1个整数像素点,表示由于起始点为一个整数像素点,所以只搜索整数像素点点。在本示例中,在逐渐发展的搜索空间中执行搜索。这意味着搜索空间在每次迭代中都会添加新的搜索位置而得以扩大,取决于通过之前测试位置的成本函数确定的最佳方向。
图8以简化的方式示出了这种方法。在图8中,初始运动矢量指向中心点810。搜索空间是围绕初始运动矢量位置逐步构建的。在第一步中,对初始运动矢量指向的位置810以及紧邻位置810的上、下、左、右的四个位置进行测试。根据测试的五个点之中产生最低成本函数的方向,将其它待测试位置添加到搜索空间中。在本示例中,最低成本函数可以在右边点上出现,所以在第二步中,搜索空间水平向右再扩展了三个点。在第二步中,最低成本函数可以在右边点(相对于第一步的最低成本点)上出现,从而使得搜索空间水平向右再扩展三个点。在第三步中,在相对于步骤2的最低成本点的右边点上再次出现最低成本函数,从而使得搜索空间水平向右再扩展三个点。根据图8中的示例,按此顺序向上方、向右方再执行三个步骤。在该示例中,每次迭代使用菱形模式(由5个搜索点组成),并且扩展搜索空间,以便在每个步骤中完成缺少的搜索点。
在搜索空间确定的每次迭代中,搜索空间可增加一个或多个整数像素点位置。现在回到图7,在该示例中,最大搜索迭代次数为4。由于最多可能进行4次迭代,因此需要从存储器中检索在左侧示出的所有像素点以执行搜索操作,以防搜索空间逐渐发展到左侧。类似地,需要4个像素点扩展到上方。因此,搜索空间在两个方向(从左到右和从上到下)中都得到了扩展,因为修正MV可以在任一方向上移动,并且硬件实施方式要求所有可能需要的像素点在执行修正搜索之前从外部存储器中提取。如果搜索空间在下方或左方发展,则需要再扩展4个其它像素点,因为模板对应于编码块(预测块)大小的模板匹配将需要访问这些像素点中的一些像素点。此外,角落像素点(例如,右上方)也必须从存储器中获取,因为硬件实施方式通常不能获取不规则形状(矩形访问更可行)。
需要说明的是,上述迭代搜索空间发展仅是示例性的,每次迭代中用于扩展搜索空间的规则和点数可能不同,即用不同的方式指定。
图8还示出了由于上述外部存储器访问规则而可能发生的场景。从外部存储器中获取的像素点数量比计算步骤中实际使用的像素点数量多得多。假设这里的模板只是一个大的像素点(为了简单起见),白色圆圈代表从外部存储器中检索的像素点和实际使用的带阴影的像素点。然而,如果要减少外部存储器访问次数,则这种冗余是有必要的,因为当开始处理当前块时,实际需要的像素点尚未获知。
应注意的是,例如,搜索空间也可以以不同方式定义为位于初始运动矢量指向的位置上的固定形状。该形状可以是方形、矩形、菱形等任意形状。
图9示出了搜索空间还可以包括分数像素点的示例。在图7和图8中,对整数像素点执行运动矢量搜索,从而得到访问窗口中包含的较大实线点指示的位置。如果现在对半像素分辨率的像素点(较小的实线点)执行搜索,则为了生成左手侧示出的分数像素点,假设内插滤波器是对称的并且具有八个抽头,同样需要从存储器中再检索三列像素点。此外,由于搜索操作是对称的(可以迭代地向左和向右移动),因此必须在左侧(扩展3列像素)进行相同操作,以便分数像素可以位于窗口的左侧。
由于内插滤波,需要从存储器中检索的像素点数量进一步增加,由虚线表示,现在还包括表示由于分数像素内插而添加的位置的点线圆。类似地,如果还允许搜索垂直方向上的半像素位置,则要从存储器访问的像素点的窗口还需要在垂直方向上(图9的示例中未示出)在上方和下方进行扩展。
存储器访问窗口定义为矩形,该窗口包含需要从存储器中检索的所有像素点,以便对预测块(编码块)执行运动矢量搜索。存储器访问窗口不仅包括所需的实际像素点,还包括在运动矢量搜索操作期间可能被访问的所有剩余像素点。在图9的示例中,运动矢量搜索移动到右侧。但是,它也可能向左移动,这是事先不知道的。相应地,为了不多次访问外部存储器,存储器访问窗口(或访问窗口)包括进行相应处理时可访问的所有像素点。
图11示出了将预测块(在图中称为编码单元(coding unit,CU))细分为四个大小相同且形状相同的子PB。
图13示出了以子PB为单位执行运动矢量推导的示例性方法。具体而言,在第一阶段中,为预测块(图中的CU)推导运动矢量。该阶段包括以下步骤:首先,获取初始运动矢量。这可以通过上述各种方式实现。图13示出了预测单元的候选运动矢量列表的构建。然后,基于对列表中候选运动矢量进行测试,例如在编码器侧为预测块(prediction block,PB)选择最佳候选运动矢量,该预测块对应于成本函数值最小的PU。在解码器侧,可以通过从码流中提取(解析)索引到候选运动矢量列表来选择最佳候选运动矢量,该索引在列表中标识最佳匹配候选运动矢量。然后,该最佳匹配候选运动矢量是初始运动矢量的基础或直接是初始运动矢量。如上所述,可以在图13中对CU执行的运动矢量修正操作中进一步修正初始运动矢量。
为了进一步修正运动矢量分辨率,预测块(prediction block,CU)进一步拆分为多个(两个或两个以上,在本示例中为四个)子PB(子块)。
然后,分别单独对每个子PB执行以下第二阶段的操作。具体而言,对于每个子PB,构建一个单独的候选运动矢量列表。如图13所示,候选运动矢量列表可以包括为父PB修正和/或初始确定的的运动矢量。然后,为每个子PB选择最佳候选运动矢量。与上述对整个CU进行的处理类似,在编码器侧,可以通过测试候选运动矢量并选择成本最低的候选运动矢量来确定最佳候选运动矢量。在解码器侧,可以指示最佳候选运动矢量。然而,本发明不限于这种方法。
分别对每个PB执行运动矢量修正。相应地,也相对每个PB分别确定一个搜索空间。应注意的是,图13是示例性的。一般来说,各个阶段可能看起来不同。例如,在第二阶段中,可能跳过第一部分,仅拆分PB和修正PB的运动矢量,同时假设初始运动矢量对应于修正的父PB或对应于PB的初始运动矢量。
图14示出了上文结合图13描述的流程的步骤。具体而言,在第一阶段中,从预测块的候选运动矢量列表中选择最佳运动矢量。选择的最佳候选点指向编码单元(codingunit,CU)的位置。具体而言,左上角的一个黑点表示选择的最佳候选点,该黑点对应于最佳候选点指向的位置,同时表示运动矢量修正的起始位置(运动矢量的坐标),即初始运动矢量。然后,对整个预测块执行运动矢量修正。图14的(b)部分示出了修正运动矢量相对于初始运动矢量的位移。具体而言,除(a)部分外,(b)部分示出了对应于修正运动矢量指向的像素点的块,即CU级运动矢量修正的输出坐标。
在第一阶段之后,将父预测块细分为四个子PB,如图11所示。第二阶段包括分别为每个子PB确定初始运动矢量。这在图13的(c)部分中示出,其中每个子PB具有从各自的候选运动矢量列表中确定的不同初始运动矢量。这导致这些初始运动矢量指向的子PB可能分布在第一阶段中的修正运动矢量指向的CU和/或第一阶段中的初始运动矢量指向的CU的位置周围。最后,图14的(d)部分示出了修正后获得的相应运动矢量指向的子PB。如在说明性图中所见,子PB的修正运动矢量可分布在父CU的初始运动矢量周围。这意味着子PB的搜索空间以及确定子PB运动矢量时可访问的对应像素点数量可能显著增长,并且需要更大的存储器访问窗口或多次存储器访问。
换句话说,为了对CU执行运动矢量修正、为子PB选择最佳候选运动矢量和对子PB执行运动矢量修正,可能在视频的编码器和解码器中,需要实现相当大的片上存储器或在每次操作之前需要访问外部存储器,这可能导致多次访问重叠区域或访问更多不必要的像素点,并可能导致延迟增加。
为了避免这些缺点,引入了一种限制条件,针对按子PB级执行额外操作定义搜索空间/访问窗口,相对于父预测块的搜索空间/访问窗口。
具体而言,在一个实施例中,对每个子PB执行MV推导和修正过程,使得每个子PB的运动矢量和内插扩展不超过父CU的存储器访问窗口。需要说明的是,CU的存储器访问窗口大小可以根据CU的大小(宽度和高度)而定。此外,子PB运动矢量推导过程除了修正之外,还可以包括选择自身的候选运动矢量的过程。CU的存储器访问窗口被定义为进行CU修正时可访问的(因此潜在需要的)像素点,而同一窗口用于限制子PB的整个运动矢量推导过程。换句话说,子PB可以使用其父CU的存储器访问窗口内的所有像素点来进行运动矢量推导和/或修正。
在一种具体的实施方式中,上述三种操作(CU运动矢量修正、子PB初始运动矢量选择和子PB运动矢量修正)使用的存储器访问窗口均相同。根据CU的初始运动矢量(选择的最佳运动矢量)定义存储器访问窗口。这种实施方式具有特殊的好处,因为能够充分利用从外部存储器访问的像素点。换句话说,对父CU以及子PB进行的操作共同使用仅从外部存储器检索一次的所有像素点。
在一个实施例中,为多个子PB确定运动矢量包括:对于每个子PB,基于为PB确定的修正运动矢量和/或基于与子PB在时间或空间上相邻的PB的运动矢量生成候选运动矢量集合,其中,生成的候选运动矢量集合只包括候选运动矢量,这些候选运动矢量分别指向子PB,对于该子PB,执行模板匹配时使用的模板中的每个像素点位于所述窗口内,以及从生成的候选运动矢量集合中选择最佳匹配候选运动矢量。
因此,换句话说,候选运动矢量列表可以只包括可以在不超出CU的存储器访问窗口的情况下进行测试的运动矢量。这种测试要求模板位于窗口内。此处的模板为进行匹配的任意模板。例如,模板本身可能是块,其通常在编码器侧用于所选运动矢量可以在码流中指示的情况。此外,模板本身可能不同于块,但可能有块的形式和大小。例如,在如上所述的双向运动矢量估计中,运动矢量修正使用的模板可以确定为初始运动矢量指向的块与相应两个参考图像的函数。上文结合图3论述了这个示例。此外,模板可以是包含与执行运动矢量确定/修正的CU/子PB相邻的像素点的模板。上文结合图4示出了一个示例(L形)。
候选运动矢量集合可以基于为PB确定的修正运动矢量来生成。例如,父CU的修正运动矢量指向CU的左上角。然后,可以将四个相应子PB的运动矢量候选确定为具有相同方向和大小的运动矢量。
换句话说,当前帧中当前PB的运动矢量将在参考图像中找到。在参考图像中,共址PB(其左上角或中心或其它预定义点)表示运动矢量的起始,通常为点(0,0)。因此,x和y方向上定义从(0,0)位置的位移的两个坐标对应于运动矢量。因此,CU的修正运动矢量从点(0,0)开始具有一定大小和方向。假设将PB细分为子PB,将要推导出运动矢量的每个这种子PB都为针对运动矢量推导定义这种(0,0)起点。对应地,每个子PB可以继承父PB(CU)的运动矢量作为候选运动矢量,该运动矢量定义了特定方向和特定长度的位移。
当以图11为例时,将N×M大小的CU细分为四个大小相等的子PB,每个子PB的大小为N1×M1。需要说明的是,图11仅是示例,一般来说,在不脱离本发明的范围的情况下,一个父CU内的子PB可能数量不同、形式也不同。CU可以拆分为两个大小相等或不等的子PB,甚至可以分层拆分,类似于H.265中的编码树单元的拆分方法。
或者或另外,可以基于与子PB(或所有相应子PB)在时间上或空间上相邻的PB的运动矢量来确定子PB(或所有相应子PB)的候选运动矢量。换句话说,对于子PB,处理电路可以通过插入方向和大小对应于空间和/或时间相邻的子PB或CU的运动矢量作为候选运动矢量来构建列表。
如图13中简要示出,为多个子PB确定运动矢量包括:对于每个子PB(由为此配置的处理电路执行),通过模板匹配确定预定输入运动矢量的修正,其中模板匹配在搜索空间内执行,该搜索空间不包括执行模板匹配需要窗口之外的访问像素点的任何位置。如上所述,此处的模板可以是与子PB大小和形式相同的模板(参见图3)或者大小和形状都不相同的模板(参见图4)。
窗口为K乘以L个整数像素点的矩形,K和L为大于1的整数。例如,N和/或M的值取决于PB的大小。
需要说明的是,存储器访问窗口可以以各种方式定义。图13示出了将存储器访问窗口定义为编码块的左/右或上/下(对应于初始运动矢量给出的编码块的位置)方的扩展EXT的示例。扩展量可根据编码块或预测块的大小和形状而定。在图13中,扩展为每个方向(上、下、左、右)上的4个像素点。然而,需要说明的是,EXT也可以在不同方向上采用不同的值,具体根据块大小(在垂直和水平方向上具有不同的大小)和/或搜索空间的形式和大小而定。
例如,根据一个示例,将窗口定义为相对于预测块初始运动矢量的N个整数像素点列和M个整数像素点行,其中N和M为非零整数值。在图13中,N和M被指示,但具有相同的大小。如上所述,N和M可以具有不同的大小。N和M为整数,且至少有一个为非零。取参数N和M,以及模板形式和大小,就可以确定访问窗口的大小。具体而言,如果模板具有T1行和T2列,则访问窗口的大小可以计算为(N+T1+N)行和(M+T2+M)列。这是因为可以向左或向右搜索N个像素点,从而水平搜索2N个像素点,向上或向下搜索M个像素点,从而垂直搜索2M个像素点。另外,模板可以与2N×2M个像素点位置中的任意一个位置上的T1×T2个像素点进行匹配。
另一方面,对于参考图7和图8描述的搜索空间构建的具体方法,存储器访问窗口可以根据最大修正迭代(搜索空间构建迭代)次数和迭代步长(每次迭代中可用的最大像素点距离)来定义,迭代步长之后可以转换为左侧、右侧、上方、下方的最大位移量。因此,存储器访问窗口被定义为每个方向上的最大位移。例如,4次迭代,其中每次迭代最多可使搜索空间推进一个整数像素点位置,得到EXT=4。
换句话说,根据本示例,处理电路用于通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正,该搜索空间在最近一次迭代中沿搜索空间的一个(或多个)最佳匹配位置给出的方向迭代扩展,该窗口由预定义的最大迭代次数限定。
需要说明的是,一般来说,本发明不限于确定搜索空间的任何特定形状或形式或种类。在另一个示例中,搜索空间为窗口的矩形子窗口,或可以等于窗口。存储器访问窗口的定义与此相关,以便可能将对应的信令参数包括到码流中(例如参数EXT或参数N和M)。然而,存储器访问窗口大小也可以在标准中定义,或者基于其它编码参数(例如,模板大小、预测块大小、图像分辨率等)推导。
如图13所示,在操作A期间,使用模板匹配函数从候选运动矢量列表中选择最佳候选MV(除了模板匹配之外,还可能使用其它方法选择最佳候选MV,例如,通过解析指示候选MV在候选运动矢量列表中的位置的候选索引)。这个操作的输出可以表示为MVA。在操作B中,在起始点MVA周围为整个CU定义“CU的MV修正”的存储器访问窗口。操作B不允许使用位于此窗口之外的像素点。该操作中使用的存储器访问窗口可以表示为Window_B。
一般来说,为了避免进行大量存储器访问,如果用于MV修正的搜索坐标(MV–MVA)位于存储器访问窗口之外,则根据稍后将描述的实施例,不访问(不搜索)该搜索坐标。这个过程的输出可以表示为MVB
在操作C中,为每个子PB构建候选MV列表,并执行模板匹配操作,为每个子PB选择最优MV。根据本发明,如果(MV–MVA+“子PB偏移量”)需要存储器访问窗口之外的像素点,则在MV列表构建过程中,候选MV列表中不包括MV。该操作中使用的存储器访问窗口表示为Window_C。这个过程的输出可以表示为MVC
在操作D中,在MVC周围执行MV修正。根据本发明,如果(MV–MVA+“子PB偏移量”)需要存储器访问窗口之外的像素点,则不检查(或不从存储器访问)候选搜索坐标“MV”。该操作中使用的存储器访问窗口表示为Window_D。
需要说明的是,对每个具有不同子PB偏移的子PB执行操作C和D。子PB偏移表示特定子PB的左上角像素点坐标到PB的左上角像素点坐标的距离。偏移就像运动矢量一样是一个二维距离度量。在上述描述中,虽然对每个子PB分别执行C和D操作,但是每个子PB都使用相同的存储器访问窗口(Window_C和Window_D)。
换句话说,这些限制条件是相对于MVA定义的,显示了存储器访问窗口的关系。为了限制计算复杂性,MV修正过程可能会存在额外的限制,例如迭代次数的限制(如果搜索空间是迭代确定的)。由于每次迭代使用固定步长执行,因此这种限制可以转换为存储器访问窗口限制。在图8的示例中,如果最大迭代次数为4,并且如果每次MV修正迭代都检查一个像素点周围的8个像素点(围绕当前像素点的8个紧邻像素点),则在MV修正过程中,将有可能访问图中的所有像素点。需要说明的是,在图8中,N=4,M=4。因此,在运动矢量修正操作之后,不可能在任何方向超出定义的存储器访问窗口,这表明了最大可允许运动矢量修正操作次数如何转换为存储器访问窗口定义。
使用最大MV修正迭代次数的具体实现可以包括基于CU的MV修正过程的迭代次数受阈值MaxIterationCU次数限制的条件。基于CU的实际迭代次数用numCUiteration表示,最大不超过MaxIterationCU。然后,基于子PB的MV修正过程的迭代次数可能受MaxIterationSubPB–numCUiteration的限制。在本方面的具体实施方式中,MaxIterationSubPB可以设为等于MaxIterationCU。
上述实现同时限制了计算复杂度和存储器访问。如果不存在“操作C”,即,如果未选择子PB的初始运动矢量,而是从CU的修正运动矢量(或非修正初始CU运动矢量)中推导,则上述实现尤其有用。因此,仅基于子PB进行修正。
在具体实施方式中,存储器访问窗口Window_B、Window_C和Window_D均相同。这种实施方式具有特殊的好处,因为充分利用了从外部存储器访问的像素点。换句话说,操作B、C和D共同使用仅从外部存储器检索一次的所有像素点。
这在图15和图16中说明。在图15中,示出了基于PB的运动矢量修正,对应于操作B。在标记有粗虚线的窗口内搜索整个PB(CU)的修正运动矢量。在图16中,即使对每个子PB分别执行运动矢量修正,窗口保持不变。
Window_C和Window_D定义为适用于一个预测单元的所有子PB的集体(联合)存储器访问窗口。需要说明的是,每个单独的子PB可能进一步存在对存储器访问的限制条件,意味着每个单独的子PB可能限制在一个较小的存储器访问窗口。在这种情况下,每个单独的子PB的存储器访问窗口必须是Window_C和/或Window_D的子集。
子PB的搜索空间可以包括整数像素点位置以及分数像素位置。如上所述,分数像素位置可能需要来自窗口之外的额外像素点。
图17和图18示出了示例性方法。图17示出了在执行CU级运动矢量修正之后,可能需要额外的外部存储器访问,以便获取用于子PB级运动矢量确定和/或修正的像素点。为了避免这点,在图18中,用于基于CU和基于子PB的运动矢量确定和/或修正的访问存储器窗口相同。因此,只需要进行一次外部存储器访问。
需要说明的是,本实施例通过定义对执行操作C和/或D时可访问的像素点的数量和位置的要求来提供优点。一旦提供了这些要求,特定实施方式就可以利用仅访问一次外部存储器的可能性。
在上述实施例和示例中,存在一个存储器访问窗口的像素点可用于两个运动矢量确定过程,一个基于预测单元和一个基于子PB。以下实施例涉及在分数像素点位置内插等需要存储器访问窗口之外的其它像素点时可以采取的措施。一方面,可以对搜索空间中分数像素点位置的地点引入一些限制条件,这样针对模板匹配定义的存储器访问窗口不需要扩展。作为其替代方案,可以填充位于窗口之外的像素点。作为这两种方法补充或替代,如果初始运动矢量指向分数像素点,为了构建搜索空间而无需在其中内插每个位置,则分数初始运动矢量四舍五入为整数。
内插滤波的受限存储器访问窗口
如上所述,外部存储器访问在当今硬件和软件体系结构中是最重要的设计考虑因素之一。尤其是在包括模板匹配时,例如,在运动矢量修正的情况下,运动矢量估计还可以与内插滤波一起用于获得搜索空间的分数像素点位置。使用内插滤波可能需要增加需要从存储器中访问的像素点的数量。然而,这可能会导致使用更多的昂贵的片上存储器,或者增加外部存储器访问的次数,另一方面,减慢了实现速度。尤其是在解码端,这些问题可能导致应用成本增加、速度变慢,这是不可取的。
为了防止这种情况,本发明另一实施例提供了对外部存储器访问的限制条件。根据本发明实施例,执行运动矢量修正时可访问的像素点的窗口定义在非修正运动矢量亦即初始运动矢量指向的位置周围。该窗口定义了为了执行运动矢量修正而需要从存储器中访问的像素点的最大数量。一般而言,待访问像素点包括待执行模板匹配的搜索空间中的位置上的像素点和对应于搜索空间中的所有位置要与模板进行匹配的像素点。后者通常超出了搜索空间。为简单起见,存储器访问窗口可定义为编码块(需要找到运动矢量的当前块)周围的一种扩展。例如,当前块的左侧和右侧的R个像素点和上边界和下边界的R个像素点可以定义该窗口。换句话说,在当前块的大小为N×N个像素点时,访问窗口的大小可以是(R+N+R)×(R+N+R),即(N+2R)×(N+2R)个像素点,例如,R可以等于4。然而,当前块的垂直大小N可以不同于水平大小N,并且扩展像素点在上、下、左和右方向的数量也可以不同。
根据本发明,为了限制存储器访问窗口,仅当执行内插所需的像素点位于存储器访问窗口内以进行如针对整数像素点定义的运动矢量修正时,执行运动矢量修正时才访问分数像素坐标。
图19示出了执行运动矢量修正时的存储器访问窗口。中心点1910是指非修正输入运动矢量(从码流或通过如上所述先前执行的模板匹配或候选运动矢量的测试获得的初始运动矢量)所指向的位置。为了避免由于向搜索空间添加分数像素点位置而进一步增大窗口大小,按照以下规则执行运动矢量修正:
(A)执行修正的存储器访问窗口定义在非修正初始运动矢量坐标(即初始运动矢量指向的位置)周围。该窗口标识为了通过搜索空间的模板匹配执行运动矢量修正而需要从存储器访问的像素点的最大数量。
1.在这个示例中,为了简单起见,当前块的大小(编码块大小)为1×1像素点,但是可以更大,而且通常也会更大。
2.存储器访问窗口定义在编码块周围扩展,例如图中所示的左/侧右侧的4个像素点和上方/下方的4个像素点。
(B)仅当执行内插所需的像素点位于存储器访问窗口内时,分数执行MV修正才访问坐标。
规则B确保对整数像素点执行运动矢量修正所需的像素点定义的访问窗口不会进一步扩展。根据此规则可访问的实际分数像素点根据内插滤波器的大小和形状给出。相应地,在图19中,假设内插滤波器有6个抽头,则点线表示分数像素点可能所处的区域。然而,需要说明的是,能够使用更多分数像素位置,结合图20所示。具体而言,仍然可以使用仅需要垂直滤波或水平滤波而不需要扩展到访问窗口之外的分数像素点位置。因此,将分数像素点位置限制在图19所示的分数像素点窗口对于一些应用可能太过局限。
换句话说,根据一个实施例,存储器访问窗口包括对整数像素点执行运动矢量修正时可访问的所有像素点,不包括对整数像素点执行运动矢量修正时不可访问的像素点。因此,如果执行运动矢量修正时要使用分数像素点,则以不需要额外像素点的方式获取分数像素点。
在图19的示例中,通过仅使用分数像素点来实现这点,对于预定义的内插滤波器形状和大小,分数不需要使用访问窗口之外的像素点。点线分数像素点窗口在访问窗口内扩展。如果T是内插滤波器抽头的数目,则分数像素点窗口边界通过与访问窗口边界像素点相距向下取整(T/2)–1的距离1920的整数像素点来定义。具体而言,在本示例中,T=6,T/2=3,访问窗口边界像素点与分数窗口像素点的距离为T/2–1=2个整数像素点。
然而,需要说明的是,分数窗口的这种确定方式仅仅是一个示例。一般而言,该窗口可能有不同的形式和大小。垂直和水平内插可以由不同大小的滤波器完成。此外,一些分数像素点位置可能需要在垂直方向和水平方向上存在滤波器,一般来说,该滤波器可以是可分离或不可分离滤波器。
或者,可以针对图19中点线窗口外的分数像素点位置改变内插滤波器(例如,抽头数至少在一个方向上减少)。然而,出于实施目的和内插质量原因,这种解决方案可能吸引力较小。
需要说明的是,一般而言,本发明不限于确定搜索空间的任何特定形状或形式或种类,例如迭代方法。在另一个示例中,搜索空间是该窗口的矩形子窗口,使得在对子窗口中的每个分数像素点执行内插滤波时访问的所有整数像素点位于所述对应于预定义抽头大小的内插滤波器的窗口内。上文已经结合图19论述了类似示例。在图19中,搜索空间由9×9整数像素点和位于5×5整数像素点形成的区域内的分数像素点组成,其中初始运动矢量位置在搜索空间的中心处。
图20示出了存在不同分数像素位置的示例。对于本示例,假设模板的大小为1×1个像素点(为简单起见),并且每个半像素位置使用6抽头内插滤波器。在该示例中,搜索的搜索坐标由数字1至6表示,这些数字表示检查这些坐标的顺序,即执行模板匹配搜索的顺序。位置1和2为半像素位置(是指位于两个整数像素点位置的中间位置,在本申请中,术语“像素(pel和pixel)”与术语“像素点(sample)”可互换使用)。检查位置1和2,因为执行内插滤波时的必要扩展发生在存储器访问窗口内(位置1对角线左上角的3个整数像素点和右下方的3个整数像素点;位置2右侧的3个整数像素点和左侧的3个整数像素点)。需要说明的是,分数像素点点1需要在水平和垂直方向上都进行扩展,这两个方向上的扩展发生在窗口内。位置2只需要向左和向右扩展即可。
位置3、4和5是整数像素点(整数像素)位置。由于执行内插滤波不需要扩展,因此可以搜索这些位置。还可以访问分数(半像素)像素点6,因为仅需要在垂直方向上整数进行扩展(分别向上和向下扩展三个整像素位置),该扩展仍发生在窗口内。在水平方向上不需要扩展。此外,在上述实施方式中,仅当在存储器访问窗口内进行必要的内插扩展时才访问分数像素点点。
换句话说,根据一个示例,当分数像素点位置在整数像素点的相应水平或垂直线上时,内插滤波器是访问K个水平或垂直整数像素点的一维滤波器。
这些一维分数像素点位置(例如,图20中的位置2和6)在两个水平或垂直相邻的整数整像素位置之间的线上,要求仅在水平方向或垂直方向上进行内插的扩展,即只能由相应的水平或垂直内插滤波器进行滤波。为了能够利用尽可能多的分数像素点位置,除了图19示例中能够使用的分数像素点位置之外,添加其它一维位置,例如图20中所示的位置6,可能是有利的。
换句话说,搜索空间还包括位于分数子窗口(参见图19的点线窗口)之外的分数像素点位置,这些分数像素点位置:
–与子窗口的上方或下方相邻且在整数像素点的水平线上,或
–与子窗口的左侧或右侧相邻且在整数像素点的垂直线上。
需要说明的是,一些分数像素点可能需要在某个方向(水平或垂直)上有更多的整数像素点。这发生在预定义的滤波器大小不同以在相应方向上生成该位置的情况下。
图21示出了无法访问的分/半像素位置1和2的示例。这两个位置在图19所示的子窗口之外。对于本示例,假设6抽头内插滤波器用于半像素位置。半像素搜索点1和2不能进行搜索,因为水平或垂直内插滤波需要使用位于窗口外的像素点。图21中用虚线表示水平滤波器滤波位置1和垂直滤波器用于滤波位置2所需的整数像素点位置。可以看出,虚线圆对应存储器访问窗口之外的整像素位置。
在上述示例中,定义了存储器访问窗口,使得在运动矢量修正过程中不会访问窗口之外的像素点(即使是执行内插滤波)。换句话说,存储器访问窗口是包含执行运动矢量修正和内插可能需要访问的像素点的最小窗口。此外,根据基于整数像素点位置执行运动矢量修正所需的像素点,设计了存储器访问窗口。然后,仅能够使用不需要将这种访问窗口扩展其它整数整像素位置的分数像素点位置。需要说明的是,上述示例是针对半像素内插而提供的。然而,本发明并不限于此。一般而言,可使用1/4、1/8等任何分数像素点位置,即使用对应的内插滤波器进行内插。
此外,提供了一种用于确定预测块的运动矢量的方法,包括以下步骤:获取预测块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正,其中所述搜索空间位于初始运动矢量指定的位置上并包括一个或多个分数像素点位置,其中属于搜索空间的每个分数像素点位置分数都是通过使用预定义抽头大小的滤波器进行内插滤波获得的,该滤波器仅访问位于窗口内的整数像素点,所述窗口由在所述搜索空间中执行模板匹配时可访问的整数像素点组成。抽头与滤波系数相对应。抽头大小与滤波顺序相对应。在此,假设滤波器为线性滤波器。在一些示例中,滤波器可以是对称的,即具有对称系数。然而,本发明不限于对称滤波器或线性滤波器或任何种类的滤波器。一般而言,可以基于相邻像素点以任何方式获得分数像素点位置。
图22示出了根据一个实施例的方法的示例性实施方式。函数InterpolationFilterLength(C)返回为了执行内插滤波而在水平和垂直方向必须使用的额外像素点数。所需像素点数的变化取决于:
搜索坐标是否为整数像素、半像素或四分之一像素位置。
是否需要在水平方向、垂直方向或者两个方向都使用内插滤波器来生成搜索坐标像素点。
该方法从步骤2230开始。具体而言,初始运动矢量位置为待测试的第一搜索空间位置C(x,y)。为了执行内插滤波,函数InterpolationFilterLength(C)针对此位置返回水平和垂直方向的像素点数。如果C(x,y)与InterpolationFilterLength(C(x,y))之和超过MAX(max_x,max_y)定义的访问窗口大小,则该位置不作为搜索空间的一部分。相反,在步骤2240中,选择要测试的下一个搜索坐标C(x,y)(例如,x或y或两者都递增,取决于执行搜索的顺序)。如果步骤2230中的测试位置不需要超出访问窗口,则在步骤2210中,针对该位置C(x,y)执行作为运动矢量修正一部分的模板匹配。然后,在步骤2220中测试是否仍有用于模板匹配的搜索空间位置。如果没有,则终止修正。如果有,则在步骤2240中选择下一个坐标,并且为新位置评估步骤2230的条件。重复这些步骤。
如上所述,存在其它的可能性来定义允许的分数像素点位置(例如图19中的窗口,可能通过如图20所示的其它分数像素点来扩展)。基于此,在步骤2230中,仅评估位置C(x,y)是否属于允许窗口,就可以制定更简单的条件。
换句话说,本实施例基于以下观察:与分数内插结合实施的运动矢量修正可能需要进一步增加片上存储器大小,甚至增加外部存储器访问次数。这两种选择都是不可取的。
鉴于上述问题,本实施例提供运动矢量预测,能够考虑对外部存储器的访问次数以及在对编码块的运动矢量执行修正时所需的可访问像素点的数量。
这通过将像素点数量限制为执行整数像素点模板匹配时所需的像素点数量,并且仅启用那些可以通过预定内插滤波器获得整数的分数像素点位置而不需要额外整像素点来实现。
根据本发明一方面,提供了一种用于确定预测块的运动矢量的装置,包括处理电路,用于:获取预测块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正。该搜索空间位于初始运动矢量指定的位置上,并且包括一个或多个分数像素点位置,其中,属于该搜索空间的分数像素点位置中的每个分数像素点位置是通过使用预定义抽头大小的滤波器执行内插滤波获得的,所述滤波器仅访问位于窗口内的整数像素点,所述窗口由在所述搜索空间中执行所述模板匹配时可访问的整数像素点组成。
这种运动矢量确定的优点之一是,对预测块执行运动矢量修正时可访问的像素点数量得到线制,同时限制了对外部存储器或通常对存储整个参考图像的内存/存储器/缓存的访问次数。
在一个示例中,将窗口定义为相对于预测块初始运动矢量的N个整数像素点列和M个整数像素点行,N和M为非零整数值。这样定义可以提供一种简单方法来指定执行运动矢量确定和/或修正需要检索哪些像素点。例如,还可以很容易在位流或标准中进行配置。
在一个实施例中,处理电路用于通过在搜索空间使用所述模板进行模板匹配确定初始运动矢量的修正,该搜索空间在最近一次迭代中沿搜索空间的一个或多个最佳匹配位置指定的方向迭代扩展,且窗口由预定义的最大迭代次数限定。
搜索空间可包括该窗口的矩形子窗口,使得对子窗口中的每个分数像素点执行内插滤波时访问的所有整数像素点位于预定义抽头大小的内插滤波器使用的窗口内。
具体而言,在一个具体示例中,当分数像素点位置位于整数像素点的相应水平线或垂直线上时,内插滤波器是访问K个水平或垂直整数像素点的一维滤波器。
此外,例如,搜索空间还包括位于子窗口之外的分数像素点位置,该分数像素点位置:
–与子窗口的上方或下方相邻且在整数像素点的水平线上,或
–与子窗口的左侧或右侧相邻且在整数像素点的垂直线上。
根据本发明另一方面,提供了一种编码装置,用于将拆分为预测块的视频图像编码到码流中,该编码装置包括:如上所述的用于确定预测块的运动矢量的装置;编码电路,用于对预测块与基于确定的运动矢量的位置上的预测块指定的预测值之间的差值进行编码,以及用于生成包括编码差值和初始运动矢量的码流。
根据本发明另一方面,提供了一种解码装置,用于从码流中解码出拆分为预测块的视频图像,该解码装置包括:解析单元,用于从码流中解析出初始运动矢量和预测块与修正运动矢量指定的位置上的预测块给出的预测值之间的编码差值;如上所述的用于确定预测块的修正运动矢量的装置;以及解码电路,用于通过解析差值和由修正运动矢量指定的位置上的预测块给出的预测值的函数来重建预测块。该函数可以是或包括一个和。该函数还可包括裁剪、取整、比例缩放或其它运算。
根据本发明另一方面,提供了一种用于确定预测块的运动矢量的方法,包括以下步骤:获取预测块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正,其中,该搜索空间位于由初始运动矢量给出的位置上并且包括一个或多个分数像素点位置,属于搜索空间的分数像素点位置中的每个分数像素点位置都是通过使用预定义抽头大小的滤波器执行内插滤波获得的,滤波器仅访问位于窗口内的整数像素点,所述窗口由在搜索空间中执行模板匹配时可访问的整数像素点组成。
例如,将窗口定义为相对于预测块初始运动矢量的N个整数像素点列和M个整数像素点行,N和M为非零整数值。
在一个实施例中,初始运动矢量的修正是通过在搜索空间中使用所述模板进行模板匹配确定的,该搜索空间在最近一次迭代中沿搜索空间的一个或多个最佳匹配位置值定的方向迭代扩展,且窗口由预定义的最大迭代次数限定。
在一种示例性实施方式中,搜索空间包括该窗口的矩形子窗口,使得对子窗口中的每个分数像素点执行内插滤波时访问的所有整数像素点位于预定义抽头大小的内插滤波器的窗口内。
此外,例如,当分数像素点位置位于整数像素点的相应水平线或垂直线上时,内插滤波器是访问K个水平或垂直整数像素点的一维滤波器。
有利的是,搜索空间还包括位于子窗口之外的分数像素点位置,该分数像素点位置:与子窗口的上方或下方相邻且在整数像素点的水平线上,或与子窗口的左侧或右侧相邻且在整数像素点的垂直线上。
填充
或者,为了基于存储器访问窗口限制搜索空间中的分数像素点位置,本发明在其另一个实施例中填充位于存储器访问窗口之外的像素点,如果需要的话,例如,为了内插分数像素点。
提供替换像素点(填充像素点)搜索空间上的模板匹配结合也是有利的,这些搜索空间也包括分数像素点。换句话说,预测块的搜索空间可以包括至少一个分数像素点位置,该至少一个分数像素点位置的值是通过预定义抽头大小的滤波器执行内插滤波得到的。内插滤波使用窗口中的像素点位置值和至少一个替换值来获得至少一个分数像素点位置值。
图23示出了用于运动矢量修正的存储器访问窗口,该窗口围绕中心点2310,中心点2310是初始运动矢量指向的位置。此外,分数像素点位置2320也属于搜索空间。然而,分数像素点位置2320将由6抽头滤波器使用分数像素点位置左侧的3个整数像素点位置和分数像素点位置右侧的3个整数像素点位置进行内插。由于分数像素点位置2320在整数像素点位置的线上,因此可以使用一维滤波器执行内插,例如,如上文参考图9描述的示例所示的一维滤波器。如图23所示,为了内插分数像素点2320,还需要两个位于窗口之外的像素点位置2330。为了避免从外部存储器额外加载这些像素点,根据本发明,将窗口外位置2330的值替换为基于窗口内的像素点获得的值。
图23示出了分数像素点位置2320,分数像素点位置2320位于两个整数像素点位置的中间且因此是半像素位置。然而,本发明同等地可以应用于其它分数像素点位置,例如四分之一或1/8像素位置。此外,像素点位置2320位于与整数像素点位置中的行对应的水平线上,以便可以使用水平一维滤波执行内插。然而,本发明不限于此类分数像素点位置。相反,分数像素点位置可以位于与整数像素点位置的列对应的垂直线上,以便可以使用垂直一维滤波执行内插。此外,分数像素点位置根本不必与整数像素点位于同一像素线上。在这种情况下,可以使用二维滤波对此类像素点进行内插;这种2D滤波可以与垂直和水平1D滤波分开。
各种分数像素点位置的示例如图20所示。具体而言,分数像素点位置1是同时通过水平和垂直滤波执行内插的位置,因为该位置不在整数像素点位置的行和列线上。位置2为只通过水平滤波执行内插的位置,位置6为只通过垂直滤波执行内插的位置。图20中所示的所有分数像素点位置都可以只通过窗口内的整数位置获得。
返回图23,根据一个实施例,围绕非修正运动矢量1810指向的位置定义执行修正的存储器访问窗口。该窗口标识为了执行运算矢量修正搜索而需要从存储器访问的像素点的最大数量。这里的搜索空间对应于访问窗口。换句话说,为了简单起见,在本示例中,模板的大小被认为是1×1,但是在实际中,通常可以并且会更大。存储器访问窗口通常定义在编码块周围扩展。在本示例中,该窗口包括左侧/右侧的4个像素点和上方/下方的4个像素点。如果在模板匹配期间测试的当前搜索空间位置需要来自存储器访问窗口之外的像素点,则通过填充获得重建编码块所需的像素点。这是图23中分数像素点位置2320的情况。如果模板匹配要在此位置上或使用此位置执行,则必须使用位于窗口之外的附加填充位置2330进行内插。
例如,可以使用以下方法之一生成填充像素点:
–最接近像素点复制。
–沿内插滤波的轴进行镜像。
具体而言,最接近像素点复制是指一种确定替换值等于最接近的访问整数像素点位置的值的方法。例如,在图23中,两个缺失的位置2330的值将被替换成紧邻待内插的分数像素点位置2320右边的像素点的值。然而,需要说明的是,此方法仅仅是一个示例,本发明不限于仅复制相邻像素点。或者,可以使用几个最接近的像素点位置来内插缺失像素点2330。例如,可以使用边界上的离缺失像素点最接近的三个像素点(例如通过加权平均)来内插缺失像素点,例如通过加权平均,其中将权重设为与这三个像素点与缺失像素点的距离成反比。
镜像是指一种方法,根据该方法,通过相对于内插滤波器的轴对相应的访问整数像素点位置的值进行镜像来确定替换值。例如,在图23中,两个缺失的像素点2330将替换为分数像素点位置2320左侧的像素点的值。具体而言,分数像素点位置2320右侧的第二个像素点替换为分数像素点位置2320左侧第二个位置的值,而分数像素点位置2320右侧的第三个像素点替换为分数像素点位置2320左侧第三个位置的值。
需要说明的是,还可以应用上述两种方法的组合,其中,缺失像素点是镜像像素点和最接近像素点的函数。
根据一个实施例,窗口由在搜索空间内的整数像素点位置上执行模板匹配时可访问的所有整数像素点位置组成。例如,这是图23的示例的情况,其中窗口外的附加像素点仅在对非整数、分数像素点位置执行模板匹配时是必需的。换句话说,在图23中,在上述示例中,要搜索的半像素坐标需要使用存储器访问窗口之外的像素点。因此,执行填充操作来生成不可用像素点。然而,本发明并不限于此。
图24示出了一种窗口不包括在所述搜索空间内对整数像素点位置执行模板匹配时可访问的所有整数像素点位置的替代方法。在先前的示例中,为简单起见,将编码块大小描述为1×1。在图24中,大小是4×4个整数像素点。在本示例中,如果搜索坐标(待计算模板匹配的位置)指向整数像素点,则在块中的一些像素点位于存储器访问窗口之外的情况下仍然可以进行填充。这种方法可以进一步限制窗口大小。
具体如下:图24示出了包括一些可访问像素点的窗口2420,初始运动矢量指向标记编码块左上角的位置。在此,搜索空间可被视为等同于该窗口。然而,需要说明的是,搜索空间通常可以小于该窗口,这样是有意义的,因为如果模板大于1×1个整数像素点,则除了搜索空间中包括的像素点之外,还需要其它像素点来执行模板匹配。然而,如果搜索空间定义了窗口的大小,则替代地,可以填充缺失像素点。图24显示了窗口的第二行和第10列中的示例性搜索位置。模板为4×4个整数像素点的模板匹配也需要窗口外的像素。因此,这些像素点被填充,即被根据窗口内像素点确定或计算的值替换。可以采用上述填充方法,例如最解近相邻像素点或镜像。
窗口可以根据其相对于以下各者的垂直和/或水平大小定义:
–搜索空间,或者
–包括初始运动矢量位置上的预测块大小的块,或
–初始运动矢量位置。
窗口定义的示例如图10所示,并在上文中进行了描述。这对应于基于初始运动矢量位置上的预测块的大小确定窗口大小。或者,窗口大小可以相对于初始矢量位置在x和y方向中的一个方向或两个方向上的大小来定义。例如,可以将窗口定义为位于初始运动矢量指向的位置周围,并将A个整数像素点向上、下、左、右方向中的每个方向扩展。或者,该窗口可以将A个整数像素点分别向左和向右扩展,B个整数像素点分别向上和向下扩展。其它定义是可能的。
根据一个实施例的方法,使用图25中示出的以下步骤确定预测块的运动矢量。在步骤2510中,获得预测块的初始运动矢量和模板,随后通过在搜索空间中使用所述模板进行模板匹配来确定所述初始运动矢量的修正。搜索空间位于初始运动矢量指定的位置上。在2520中确定存储器访问窗口。需要说明的是,这不必明确执行。存储器访问窗口可以是预定义和已知的。因此,为了说明,本步骤是为了表示存储器访问窗口大小的信息是已知的。然后执行步骤2530至2590进行模板匹配。
模板匹配:访问预定窗口内的整数像素点位置,该预定窗口包括所述搜索空间和执行模板匹配时可访问的其它整数像素点位置;将位于窗口之外的至少一个整数像素点位置替换为基于所述窗口内的至少一个像素点的替换值。使用访问整数像素点位置值以及替换值执行模板匹配,如图25所示。对搜索空间中的所有位置执行模板匹配。在步骤2530中,测试当前位置上的模板匹配是否需要一个或多个位于存储器访问窗口之外的像素点。如果是肯定的(在步骤2530中为是),则在步骤2540中如上所述填充窗口外的像素点。该步骤之后,在步骤2550中使用填充像素点在当前位置执行模板匹配(即搜索)。或者,如果所有必要的像素点均未超出窗口(在步骤2530中为否),则在步骤2550中使用可用像素点在当前位置执行模板匹配(即搜索)。如果当前位置是待测试搜索空间中的最后一个位置(在步骤2560中为是),则模板匹配结束。否则(在步骤2560中为否),则在步骤2570中获得下一个位置,并且如上文所述,在步骤2530中继续对新位置执行模板匹配。
在模板匹配结束后,识别最佳匹配位置(例如,作为成本最低的存储位置)。
换句话说,本实施例提供运动矢量预测,能够考虑外部存储器访问次数以及为对编码块的运动矢量执行运动矢量修正时可访问所需的像素点数量。这通过将位于预定义存储器访问窗口之外的用于运动矢量修正和/或分数内插的值替换为基于来自存储器访问窗口内的一个或多个像素点的替换值来实现。根据本发明一方面,提供了一种用于确定预测块的运动矢量的装置,该装置包括处理电路,用于:获得所述预测块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正。所述搜索空间位于初始运动矢量指定的位置上,此外,所述模板匹配:访问预定窗口内的整数像素点位置,该预定窗口包括所述搜索空间和执行模板匹配时可访问的其它整数像素点位置;将位于窗口之外的至少一个整数像素点位置替换为基于该窗口中的至少一个像素点的替换值;使用访问整数像素点位置值以及替换值执行模板匹配。
这种装置提供了的优点是,限制为了执行运动矢量确定(修正)而要使用的像素点数量,同时还避免增加对存储全部参考图像的存储器/外部存储器的访问次数。
在一个实施例中,所述搜索空间包括至少一个分数像素点位置,该至少一个分数像素点位置的值是通过预定义抽头大小的滤波器执行内插滤波得到的;内插滤波使用所述访问整数像素点位置值和至少一个替换值来获得所述至少一个分数像素点位置值。
例如,通过相对于内插滤波器的轴对访问整数像素点位置的值进行镜像来确定替换值。内插滤波可以是一维滤波,也可以是可分离的二维滤波。
在一个示例性实施方式中,窗口由在搜索空间内的整数像素点位置上执行模板匹配时可访问的所有整数像素点位置组成。
例如,根据相对于搜索空间的垂直和/或水平大小,或者根据初始运动矢量位置上的预测块的大小的块,或者根据初始运动矢量位置来定义窗口。
又例如,确定替换值等于最接近的访问整数像素点位置上的值。
根据本发明另一方面,提供了一种编码装置,用于将拆分为预测块的视频图像编码到码流中,该编码装置包括:如上所述的用于确定预测块的运动矢量的装置;编码电路,用于对预测块和基于确定的运动矢量的位置上的预测块指定的预测值之间的差值进行编码,以及用于生成包括编码差值和初始运动矢量的码流。
根据本发明另一方面,提供了一种解码装置,用于从码流中解码出拆分为预测块的视频图像,该解码装置包括:解析单元,用于从码流中解析出初始运动矢量和预测块与修正运动矢量指定的位置上的预测块指定的预测值之间的编码差值;如上所述的用于确定预测块的修正运动矢量的装置;以及解码电路,用于将预测块重建为解析差值和由修正运动矢量指定的位置上的预测块给出的预测值之和。
根据本发明一方面,提供了一种用于确定预测块的运动矢量的方法,包括以下步骤:获取预测块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正。搜索空间位于初始运动矢量给出的位置上。模板匹配:访问预定窗口内的整数像素点位置,该预定窗口包括所述搜索空间和执行模板匹配时可访问的其它整数像素点位置;将位于窗口之外的至少一个整数像素点位置替换为基于所述窗口内的至少一个像素点的替换值;使用访问整数像素点位置值以及替换值执行所述模板匹配。
在一个实施例中,所述搜索空间包括至少一个分数像素点位置,该至少一个分数像素点位置的值通过预定义抽头大小的滤波器执行的内插滤波获得;内插滤波使用所述访问整数像素点位置值和至少一个替换值来获得所述至少一个分数像素点位置的值。
例如,通过相对于内插滤波器的轴对相应的访问整数像素点位置的值进行镜像来确定替换值。此外,在一个示例中,内插滤波是一维滤波,也可以是可分离的二维滤波。
例如,窗口由对所述搜索空间内的整数像素点位置进行模板匹配时可访问的所有整数像素点位置组成。
根据一种示例性实施方式,通过窗口相对于搜索空间的垂直大小和/或水平大小,或者通过初始运动矢量位置上的预测块的大小的块,或者通过初始运动矢量位置来定义窗口。
根据另一个示例,确定替换值等于最接近的访问整数像素点位置的值。
分数初始运动矢量取整
根据另一个实施例,由于进行分数像素点内插使得更多像素点位于窗口之外,所以进一步降低对这些像素点的需求。
本实施例基于以下观察:当运动矢量修正与分数内插联合实施时,可能需要进一步增加片上存储器大小,甚至增加外部存储器访问次数。这两种选择都可能不可取。此外,当初始运动矢量指向分数像素点位置时,即具有分数坐标的位置,包括彼此距离1个像素点或1个像素点的倍数的像素点的搜索空间和初始运动矢量产生全部需要内插的分数像素点位置。
鉴于上述问题,本发明提供运动矢量预测,能够考虑外部存储器的访问次数以及对编码块的运动矢量进行运动矢量修正时必须要访问的像素点的数量。这可以通过在初始运动矢量坐标为分数的情况下对其取整来实现。
图26示出了初始运动矢量指向的分数像素点位置2610。为了避免搜索空间的构建,其中与初始运动矢量位置的距离为整数的点均为分数,需要内插所有这些点,因此需要存储器中的其它整数位置,分数点2610移动至最近整数点(如图26中带阴影的圆圈所示)。在图26中,初始运动矢量指向的分数像素点位置2610是两个整数点之间的半像素位置,该半像素位置到这两个整数点的距离相同。在这种情况下,存在一种约定,规定要使用两个距离相等的整数点中的哪一个。在本示例中,遵循了从左到右的规则。类似地,可以使用先上后下,先水平后垂直的规则,从而得到优选顺序:左、上、右、下。换句话说,如果分数像素点位置到4个整数位置的距离相同,那么将这个分数像素点位置取整到左上位置。然而,这些只是示例。一般来说,该顺序可以是任何其它顺序,只要能识别出,使得编码器和解码器可以相应地处理。
如果有一个以上整数像素点到初始运动矢量的距离相同,则可以采用的另一种规则可以是选择最接近(0,0)中心坐标的像素点坐标。该规则之所以有意义,是因为从统计学上观察到较大幅度的运动矢量(沿x轴或y轴的任一方向)的概率小于较小幅度的运动矢量。换句话说,视频序列通常包含的运动和静止背景(可以通过小的运动矢量预测)比不规则运动和运动背景(可以通过大的运动矢量来预测)少。
根据上述段落中给出的取整规则,初始运动矢量的垂直分量(沿y轴方向)为5.5,水平分量为–3.5,则取整为(5,3)。根据取整规则,如果初始运动矢量最接近于一个以上整数像素点坐标,则对初始运动矢量进行取整,以实现在x轴和y轴绝对值最小的取整运动矢量。例如,这种取整可以通过简单地将逗号后面的位置截断来实现,即,通过函数“向下取整”。
换句话说,如果有一个以上整数像素点位置到分数像素点位置的距离相同,则取整是在距离相同的整数像素点位置中进行取整,从而使得取整初始运动矢量的大小更小。
在一实施例中,搜索空间由彼此间隔整数像素点步长的像素点位置组成,如图26所示,其中在如上所述移动分数初始运动矢量位置之后,搜索空间窗口2600将围绕对应于取整整数位置的中心位置(阴影圆)构建的搜索空间的整数像素点框起来。
为了确保运动矢量修正的预测结果比初始运动矢量的预测结果更好,在一个示例性实施例中,计算指向分数像素点位置的初始运动矢量的模板匹配成本,并与确定的初始运动矢量修正的模板匹配成本进行比较。最后,如果所确定的修正的模板匹配成本不低于计算出的分数像素点位置的模板匹配成本,则基于分数像素点位置确定预测块的运动矢量。换句话说,如果预测块优于初始运动矢量(就成本函数而言),则仅为该预测块选择修正,这意味着如果所确定的修正的模板匹配成本低于(或等于)计算出的分数像素点位置的模板匹配成本,则基于所确定的修正来确定预测块的运动矢量。
一方面,如果所确定的修正的模板匹配成本不低于计算出的分数像素点位置的模板匹配成本,则可以直接确定预测块的运动矢量为分数像素点位置。然而,可能还有进一步修改运动矢量的其它步骤(例如,分数搜索空间中的下一次模板搜索、运动矢量裁剪等)。
搜索空间可以由位于彼此相距整数距离的行和列中的K行和L列像素点组成,其中取整的分数像素点位置是搜索空间的像素点之一。这里,K和L为大于1的整数。如图26所示,K和L的值可以相等(本示例中为9)。然而,一般来说,K和L的值可能不同,即搜索空间可以是边长不等的矩形。
术语“搜索空间”一般是指位置集合,每个位置都要执行模板匹配。这些位置实际上是通过模板匹配检查的,即对于每个搜索空间位置,计算一个相应的成本函数值。相反,存储器访问窗口(在本发明中也称为访问窗口或窗口)包括搜索空间,但还可以包括进行模板匹配时可访问的像素点,即可用于计算上述搜索空间位置中的至少一个位置的成本函数。在上述搜索空间K×L的示例中,存储器访问窗口的大小可以相同或更大。
取整的分数像素点位置实质上可以位于搜索空间的中心或存储器访问窗口的中心或同时位于这两个中心,如图26所示。此处术语“实质上”是指如果搜索空间和/或存储器访问窗口的行数和/或列数是偶数,则不存在整数中心这一事实。在这种情况下,取整的分数像素点位置将位于距离中心最近的一个位置上。
然而,需要说明的是,本发明不限于上述搜索空间配置。一般来说,可以使用任何搜索空间(例如,如上所述迭代获得的搜索空间)。此外,初始运动矢量不一定位于搜索空间的中心。例如,迭代搜索空间的情况不是这样,其中搜索空间在最低成本函数方向上进行了几次迭代,从而从初始运动矢量沿一个特定方向上扩展,而初始运动矢量当时不在搜索空间的中心。
如上文结合上述实施例所述(参见图10),根据本示例,处理电路用于通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正,该搜索空间在最近一次迭代中沿搜索空间中的一个(或多个)最佳匹配位置给出的方向迭代扩展,该窗口由预定义的最大迭代次数限定。
如上所述,模板匹配不一定在包括所有位置的矩形搜索空间中执行。在替代性实施例中,对搜索空间执行模板匹配,其中的像素点位置通过多个步骤(迭代地)确定,包括以下步骤:确定由彼此间隔整数像素点步长的像素点位置组成的;在整数搜索空间中执行模板匹配,得到最佳匹配整数位置;基于最佳匹配整数位置,确定分数搜索空间,其中的至少一个像素点与最接近的整数搜索空间像素点位置的间隔小于整数像素点步长;在分数搜索空间中执行模板匹配,得到最佳匹配位置。换句话说,搜索空间可以是有限像素点,各行各列的像素点在起点处彼此间隔整数距离,搜索空间有可能经过几次迭代,通过添加一些分数像素点位置进一步扩展。
根据成本函数迭代执行且还包括分数像素点位置的搜索空间构建能够减少为了发现运动矢量修正而要执行模板匹配操作的次数。此外,还可以通过提供要检查的分数像素点位置来提高准确度。
例如,最接近初始运动矢量指向的分数像素点位置的整数像素点位置可以作为取整的结果。如果有一个以上整数像素点位置到分数像素点位置的距离相同,则取整作为预定义方向上的整数像素点位置、预定义方向或组合方向的整数像素点位置,该预定义方向可以是左侧、右侧、上方或下方或这些方向的组合。如上所述,整数像素点搜索空间中的分数像素点位置可以有两个或四个最接近的相邻位置。可以通过以优选顺序对四个可能的方向进行排序来指定预定义方向,以便在两个距离相等的相应整数像素点的两个方向中选择在预定义顺序中排列第一的方向。如果分数像素点位置与整数像素点不在一条线上,而是在水平和垂直方向上的偏移量,那么方向的组合是相关的。在这种情况下,分数像素点位置必须在两个方向(例如,左上、右上等)上取整为整数位置。
然而,本发明不限于一种取整可能性。或者,如果有一个以上整数像素点位置到分数像素点位置的距离相同,则搜索空间是位于与分数像素点位置距离相同的一个以上整数像素点位置上的搜索空间的整体。换句话说,该搜索空间是通过移动所有(两个或四个)距离相等的整数像素点位置而得到的搜索空间的组合。在实践中,例如,相较于仅对两个间隔相等的整数位置执行单个移位的情况,上述方式将在所得搜索空间中增加一个列和/或行。
另一种可应用的取整规则可能是选择最接近(0,0)中心坐标的像素点坐标。中心坐标一般是初始运动矢量开始的坐标。通常,中心坐标将是共址块的位置,该共址块即参考图像中对应于当前帧中要确定预测值的预测块的位置的编码块。相应地,如果初始运动矢量与一个以上整数像素点坐标的距离相同,则对所述初始运动矢量取整,以实现沿x轴和y轴的绝对值最小的取整运动矢量。
图27在左手侧示出了一种初始运动矢量位置指向分数像素点位置(运动矢量的起始坐标)2710的典型方法。运动矢量修正过程通常使用固定的步长(搜索点之间的距离差)来进行。通常,该距离为整数像素点距离,即对应于两个整数像素点之间的距离。这意味着,如果搜索操作的起点是分数像素点,那么连续的搜索点也是分数像素点,在图27中用几个分数像素点位置(小的粗圆)示出。在图27的示例中,没有示出所有分数像素点位置,原则上,如果搜索空间被定义为围绕初始运动矢量的矩形,则会有对应于图27中所示的整数像素点的网格中的每个网格的分数像素点位置。从图中可以看出,分数像素点位置的内插可能需要搜索空间之外的像素点位置2720的值。例如,如果使用6抽头滤波器,搜索空间的右侧还需要两列。如果如本示例中认为存储器访问窗口与搜索空间相同,则这需要额外的存储器访问来获取额外的像素点,或者需要更大的存储器来在内部再存储两列像素点。需要说明的是,一般而言,搜索空间和存储器访问窗口并不相同。图27是假设模板大小为1×1的简化示例。一般而言,搜索空间将小于存储器访问窗口。存储器访问窗口将另外包括不属于搜索空间位置但用于模板匹配的位置。附加像素的数量取决于模板的大小。此外,如果内插滤波器大小除以2大于模板大小,则与模板匹配相比,分数像素内插只需要额外的像素点位置。然而,需要说明的是,在这种情况下,对初始运动矢量进行取整不仅有利于减小窗口大小,而且还减少了内插分数像素点位置以获得搜索空间所需的操作次数。
在图27的右手侧,显示了分数像素点位置2710到整数位置的移位(取整)。因此,根据对应于取整的分数像素点位置的整数位置构建的搜索空间包括整数像素点,并且在本示例中不需要任何额外的分数像素点位置内插。
换句话说,在现有技术中,由于起点是半像素位置,并且由于修正搜索步骤的步长通常为1个像素(像素点),因此总是搜索分数像素点位置。因此,由于内插滤波需要来自右侧的搜索空间/存储器窗口之外的像素点,因此最坏情况是存储器访问次数高。根据本发明的一个实施例,首先将起始坐标取整为整数起始点。因此,即使搜索坐标位于存储器访问窗口的边界(仍然在存储器访问窗口内),也不需要访问存储器访问窗口之外的像素点。
分数初始运动位置的主要优点是:给定预定义的存储器访问窗口,取整有助于搜索操作到达比初始起始点更远的点(因为整数搜索坐标不需要内插滤波,因此不需要额外的像素点)。根据不同的观点,如果进行相同数量的修正迭代,本发明的存储器访问需求小于现有技术的需求。参考图6描述的处理电路可以在如图1和图2所示的编码器和/或解码器中使用,并且具有上述任一实施例单独和组合的功能。
图28A示出了一种初始运动矢量输入到运动矢量修正的典型方法。然后,确定搜索空间,其中的位置与初始运动矢量的距离为整数像素点,并在该搜索空间中执行搜索。这导致搜索空间中只有分数像素点位置,如果初始运动矢量具有分数坐标,这些分数像素点位置都要进行内插。另外,一些分数距离像素点可以添加到搜索空间中,并且还通过模板匹配测试,以找到预测块的最佳匹配。
图28B示出了根据本发明的一种方法。具体而言,将初始(非修正)运动矢量输入到运动矢量修正流程中。如果初始运动矢量指向的位置(即至少一个运动矢量坐标)为分数,则将位置(一个或两个分数坐标)取整到下一个最接近的整数位置。然后,根据图28A所示确定搜索空间。然而,由于进行了取整,搜索空间由整数位置组成。
在进行整数距离搜索之后,可以在整数距离搜索空间中围绕运动矢量修正执行更细的分数距离搜索。鉴于未超出定义的存储器访问窗口(由于附加内插操作),本发明后续允许进行基于分数搜索坐标的运动矢量修正搜索。通常,修正操作通过逐步减小的步长执行,一旦完成了整数步长搜索,还可以检查更小的步长。在一种特殊情况下,可以始终检查初始非修正MV并将其与其余搜索坐标进行比较,因为初始非修正MV是通过前一操作选择为最佳运动矢量的候选坐标。
图28C示出了以不同方式执行取整从而产生不同重叠搜索空间的一种替代方法。具体而言,通过运动矢量取整步骤可以产生一个以上取整替代方案,尤其当存在一个以上最接近的整数像素点位置时。相应地,为了减少存储器访问次数,将起始搜索点取整到整数像素点(更一般地,重建需要较少像素扩展的位置)或更多整数像素点(通常为2个或4个)。因此,后续的搜索点也是整数像素点。
根据本发明一方面,提供了一种用于确定预测块的运动矢量的装置,包括处理电路,用于:获取预测块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正。当初始运动矢量指向分数像素点位置时,该搜索空间位于通过将初始运动矢量指向的分数像素点位置取整为整数像素点位置给出的位置上。
这种装置可以有利于减少模板匹配所需的分数像素点位置的数目,一方面降低了复杂度,因为需要更少的内插操作,另一方面,减少了存储器访问窗口所需的额外整数像素点的数目,因为内插所需的分数像素点位置及整数像素点位置的数目减少了。
在一个实施例中,处理电路还用于:计算指向分数像素点位置的初始运动矢量的模板匹配成本;将分数像素点位置的计算出的模板匹配成本与确定的初始运动矢量修正的模板匹配成本进行比较;如果所述确定的修正的模板匹配成本不低于分数像素点位置的计算出的模板匹配成本,则基于分数像素点位置确定预测块的运动矢量。
例如,搜索空间由彼此间隔整数像素点步长的像素点位置组成。该搜索空间由位于彼此相距整数距离的行和列中的K行和L列像素点组成,其中取整的分数像素点位置是搜索空间的像素点之一。
根据一个示例,取整的分数像素点位置实质上位于搜索空间的中心。
处理电路还可用于对搜索空间执行模板匹配,其中的像素点位置在多个步骤中确定,包括:确定由彼此间隔整数像素点步长的像素点位置组成的整数搜索空间;在整数搜索空间中执行模板匹配,得到最佳匹配整数位置;基于最佳匹配整数位置,确定分数搜索空间,其中的至少一个像素点与最接近的整数搜索空间像素点位置的间隔小于整数像素点步长的;在分数搜索空间中执行模板匹配,得到最佳匹配位置。
在一个示例中,取整作为最接近初始运动矢量指向的分数像素点位置的整数像素点位置。
如果有多于一个整数像素点位置与分数像素点位置的距离相同,则在一个示例中,取整作为预定义方向上的整数像素点位置,该预定义方向为左、右、上或下方向。
如果有一个以上整数像素点位置与所述分数像素点位置的距离相同,则在另一个示例中,搜索空间是位于与所述分数像素点位置距离相同的一个以上整数像素点位置上的搜索空间的整体。
如果有一个以上整数像素点位置与所述分数像素点位置的距离相同,则在再一示例中,取整作为距离相同的整数像素点位置中的一个,从而使得取整初始运动矢量的大小更小。
根据本发明一方面,提供了一种用于编码预测块的装置,包括:如上所述的用于确定所述预测块的运动矢量的装置;编码单元,用于对预测块与根据运动矢量得到的预测值之间的差值进行编码,得到码流。
根据本发明的另一方面,提供了一种用于从码流中解码出预测块的装置,包括:解码单元,用于从所述码流中解码出所述预测块与根据运动矢量获得的预测值之间的差值;如上述所述的用于确定所述预测块的运动矢量的装置;运动预测单元,用于根据运动矢量确定预测值;重建器,用于根据预测值与解码差值重建预测块。
根据本发明一方面,提供了一种用于确定预测块的运动矢量的方法,包括以下步骤:获取预测块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正;其中,当初始运动矢量指向分数像素点位置时,搜索空间位于通过初始运动矢量指向的分数像素点位置取整整数像素点位置给出的位置上。
在一个实施例中,该方法还包括以下步骤:计算指向分数像素点位置的初始运动矢量的模板匹配成本;将分数像素点位置的计算出的模板匹配成本与初始运动矢量的确定的修正的模板匹配成本进行比较;如果确定的修正的模板匹配成本不低于分数像素点位置的计算出的模板匹配成本,则基于分数像素点位置确定预测块的运动矢量。
在一示例性实施方式中,搜索空间由彼此间隔整数像素点步长的像素点位置组成。
例如,搜索空间由位于彼此相距整数距离的行和列中的K行和L列像素点组成,取整的分数像素点位置是搜索空间的像素点之一。这里的K和L是非零的整数,其中至少有一个大于1。
取整的分数像素点位置实质上可能位于搜索空间的中心。
在一个实施例中,该实施例可以与上述任一实施例或示例组合,对搜索空间执行模板匹配,其中的像素点位置在多个步骤中确定,包括:确定由彼此间隔整数像素点步长的像素点位置组成的整数搜索空间;在整数搜索空间中执行模板匹配,得到最佳匹配整数位置;基于最佳匹配整数位置,确定分数搜索空间,其中的至少一个像素点与最接近的整数搜索空间像素点位置的间隔小于整数像素点步长;在分数搜索空间中执行模板匹配,得到最佳匹配位置。
除上述实施例和示例之外,或替代地,取整作为最接近初始运动矢量指向的分数像素点位置的整数像素点位置。
在一个示例中,如果有多于一个整数像素点位置与分数像素点位置的距离相同,则取整作为预定义方向上的整数像素点位置,该预定义方向为左、右、上或下方向。
在另一个示例中,如果有一个以上整数像素点位置与所述分数像素点位置的距离相同,则搜索空间是位于与所述分数像素点位置距离相同的一个以上整数像素点位置上的搜索空间的整体。
在又一个示例中,如果有一个以上整数像素点位置与所述分数像素点位置的距离相同,则取整作为距离相同的整数像素点位置中的一个,从而使得取整初始运动矢量的大小更小。
根据本发明一方面,提供了一种用于编码预测块的方法,包括:根据上文任一实施例和示例中描述的确定预测块的运动矢量;对预测块与根据运动矢量得到的预测值之间的差值进行编码,得到码流。
根据本发明另一方面,提供了一种用于从码流中解码出预测块的方法,包括以下步骤:从所述码流中解码出预测块与根据运动矢量获得的预测值之间的差值;根据上文任一实施例和示例中描述的确定预测块的运动矢量;根据运动矢量确定预测值;根据预测值与解码差值重建预测块。
在上述实施例和示例中,通过将分数运动矢量位置移位到整数位置,可以构建主要包括整数像素点的搜索空间。然而,这种基于取整初始运动矢量而不是分数运动矢量的移位搜索空间可以包括一些分数像素点位置。例如,如果结合图8所示迭代地确定搜索空间,则在最后一次迭代中,可以测试一个或多个分数像素点位置。然而,这只是一个示例,分数像素点位置可以在任一迭代中测试。为了避免分数像素点位置需要重复访问存储器以获取进行分数内插可能需要的额外像素点,在下文中,进一步描述了两个实施例,即:
–限制存储器访问窗口,并在搜索空间模板匹配操作中仅启用不需要扩展窗口的分数像素点位置,其中,定义存储器访问窗口是为了能够访问对某个预测块进行模板匹配时所必需的任何像素点。
–使用一些预定替换值来填充在存储器访问窗口中扩展的像素点,这些预定替换值取决于窗口内的像素点。
上文对这些实施例进行了详细描述。具体而言,可以相应地进一步配置处理电路,以保持存储器访问窗口及减少访问次数。提供了相应的方法和装置。
需要说明的是,上述示例是针对半像素内插而提供的。然而,本发明并不限于此。通常,可使用1/4、1/8等任何分数像素点位置,即使用对应的内插滤波器进行对其内插。
参考图6描述的处理电路可以在如图1和图2所示的编码器和/或解码器中使用。
具体而言,提供了一种编码装置,用于将拆分为预测块的视频图像编码为码流,该编码装置包括:如上所述的(以子PB为单位)包括处理电路的用于确定预测块的运动矢量的装置;编码电路,用于对预测块与由确定的运动矢量指定的位置上的预测块给出的预测值之间的差值进行编码,以及用于生成包括编码差值和初始运动矢量的码流。
上文结合图1所述的编码器的其它单元和功能也可以在处理电路中提供或实现。
对应地,可提供一种解码装置,用于从码流中解码出拆分为预测块的视频图像,该解码装置包括:解析单元,用于从码流中解析出初始运动矢量和预测块与修正运动矢量指定的位置上的预测块给出的预测值之间的编码差值;如上所述的包括处理电路的用于确定预测块的修正运动矢量的装置;以及解码电路,用于将预测块重建为解析差值和基于修正运动矢量的位置上的预测块给出的预测值之和。例如,可以通过修正运动矢量的位置直接给出预测值。然而,获取当前预测块的运动矢量可能还存在其它处理步骤,进而可以改变运动矢量(例如,滤波、裁剪、进一步修正等)。
上文结合图2所述的解码器的其它单元和功能也可以在处理电路中提供或实现。
此外,从装置的角度描述了本发明实施例,处理电路执行运动矢量修正。然而,本发明并不限于此,还提供了相应的方法,这些方法包括的处理步骤对应于上文配置处理电路所描述的那些步骤。
抽头与滤波系数相对应。抽头大小与滤波器顺序相对应。在此,假设滤波器为线性滤波器。在一些示例中,滤波器可以是对称的,即具有对称系数。然而,本发明不限于对称滤波器或线性滤波器或任何种类的滤波器。一般来说,可以基于相邻像素点以任何方式获得分数像素点位置。
此外,提供了一种用于确定预测块的运动矢量的方法,包括以下步骤:获取预测块(prediction block,PB)的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正,其中,该搜索空间位于由初始运动矢量给出的位置上,且在进行模板匹配时可访问的整数像素点组成的窗口内;将PB拆分为多个子PB;对于多个子PB中的每个子PB,通过访问窗口内的像素点且不访问窗口外的像素点来确定运动矢量。
此外,提供了一种编码方法,用于将拆分为预测块的视频图像编码到码流中,该编码方法包括以下步骤:根据上文任一方法确定预测块的运动矢量;对预测块与基于确定的运动矢量的位置上的预测块给出的预测值之间的差值进行编码,以及生成包括编码差值和初始运动矢量的码流。
该编码方法还可以包括结合图1中块的功能描述的步骤。
再进一步地,提供了一种解码方法,用于从码流中解码出拆分为预测块的视频图像,该解码方法包括:从码流中解析出初始运动矢量和预测块与修正运动矢量指定的位置上的预测块给出的预测值之间的编码差值;根据上文任一方法确定预测块的修正运动矢量;以及将预测块重建为解析差值和由修正运动矢量指定的位置上的预测块给出的预测值之和。
该解码方法还可以包括结合图2中块的功能描述的步骤。
然而,需要说明的是,图1和图2并不限制本发明。图1和图2仅提供现有编码器和/或解码器内本发明实施方式的非限制性示例。
如上所述的使用像素点填充的运动矢量确定可以实现为视频信号(运动图像)的编码和/或解码的一部分。然而,运动矢量确定还可以用于图像处理中的其它目的,例如移动检测、移动分析等,但不限于用于编码/解码。
运动矢量确定可实现为一种装置。这种装置可以是软件和硬件的组合。例如,运动矢量确定可以由通用处理器、数字信号处理器(digital signal processor,DSP)、现场可编程门阵列(field programmable gate array,FPGA)等芯片执行。然而,本发明并不限于在可编程硬件上的实现。可以在专用集成电路(application-specific integratedcircuit,ASIC)上实现,或者通过上述硬件组件的组合实现。
运动矢量确定也可以通过存储在计算机可读介质上的程序指令来实现。程序在执行时,使计算机执行上述方法的步骤。该计算机可读介质可以是存储程序的任何介质,例如DVD、CD、USB(闪存)驱动器、硬盘、通过网络可用的服务器存储等。
编码器和/或解码器可以在各种设备中实现,各种设备包括电视机、机顶盒、PC、平板电脑、智能手机等,即任何录制、编码、转码、解码或播放设备。可以是实现方法步骤和存储在/运行在如上述电子设备中包括的处理器上的软件或应用。
概括而言,本发明涉及用于能够减少确定和/或修正预测块的运动矢量时访问存储器的次数的模块。具体而言,本发明涉及能够减少以子预测块单位确定和/或修正运动矢量时访问存储器的次数的模块。换句话说,将预测块拆分为子预测块,对子预测块至少单独进行运动矢量修正。存储器访问窗口限制对子预测块进行运动矢量确定和修正期间可访问的像素点,该存储器访问窗口不超过对所述预测块执行运动矢量确定和/或修正时使用的存储器访问窗口。

Claims (15)

1.一种用于确定预测块的运动矢量的装置,其特征在于,包括处理电路,用于:
获取所述预测块(prediction block,PB)的初始运动矢量和模板;
通过在搜索空间中使用所述模板进行模板匹配来确定所述初始运动矢量的修正,其中,所述搜索空间位于由所述初始运动矢量给出的位置上且在进行所述模板匹配时可访问的整数像素点组成的预定窗口内,所述预定窗口包括所述搜索空间和进行所述模板匹配时可访问的其它整数像素点位置;
将所述PB拆分为多个子PB;
对于所述多个子PB中的每个子PB,通过访问所述预定窗口内的像素点且不访问所述预定窗口外的像素点来确定运动矢量。
2.根据权利要求1所述的装置,其特征在于,确定所述多个子PB的运动矢量包括:对于每个子PB,
基于为所述PB确定的修正运动矢量和/或基于与所述子PB在时间或空间上相邻的子PB和/或PB的运动矢量生成候选运动矢量集合,其中,生成的所述候选运动矢量集合只包括候选运动矢量,所述候选运动矢量分别指向子PB的位置,对于所述子PB,执行所述模板匹配时使用的所述模板中的每个像素点位于所述预定窗口内;
从生成的所述候选运动矢量集合中选择最佳匹配候选运动矢量。
3.根据权利要求1或2所述的装置,其特征在于,确定所述多个子PB的运动矢量包括:对于每个子PB,
通过模板匹配确定预定输入运动矢量的修正,其中,所述模板匹配在搜索空间内执行,所述搜索空间不包括所述模板匹配需要所述预定窗口之外的访问像素点的任何位置。
4.根据权利要求1或2所述的装置,其特征在于,所述预定窗口为N乘以M个整数像素点的矩形,N和M为大于1的整数。
5.根据权利要求4所述的装置,其特征在于,N和/或M的值取决于所述PB的大小。
6.根据权利要求3所述的装置,其特征在于,
所述处理电路用于在搜索空间中进行模板匹配来确定所述预定输入运动矢量的所述修正,所述搜索空间在最近一次迭代中沿所述搜索空间中的一个或多个最佳匹配位置给出的方向迭代扩展;
所述预定窗口由预定义的最大迭代次数定限定。
7.根据权利要求1、2、5或6所述的装置,其特征在于,
所述搜索空间位于由取整的初始运动矢量给出的位置上并且包括一个或多个分数像素点位置,
属于所述搜索空间的所述分数像素点位置中的每个分数像素点位置是通过预定义抽头大小的滤波器进行内插滤波获得的,其中所述滤波器仅访问所述预定窗口内的整数像素点,
所述预定窗口由在所述搜索空间中进行所述模板匹配时可访问的整数像素点组成。
8.根据权利要求1、2、5或6所述的装置,其特征在于,
所述搜索空间位于所述初始运动矢量给出的位置上,
所述模板匹配:
访问所述预定窗口内的整数像素点位置;
将位于所述预定窗口之外的至少一个整数像素点位置替换为以所述预定窗口内的至少一个像素点为单位的替换值;
使用访问到的整数像素点位置值以及所述替换值来执行所述模板匹配。
9.根据权利要求1、2、5或6所述的装置,其特征在于,当所述初始运动矢量指向分数像素点位置时,所述搜索空间位于通过将所述初始运动矢量指向的所述分数像素点位置取整为整数像素点位置给出的位置上。
10.一种用于编码预测块的装置,其特征在于,包括:
根据权利要求1至9中任一项所述的用于确定所述预测块的运动矢量的装置;
编码单元,用于对所述预测块与根据所述运动矢量得到的预测值之间的差值进行编码,得到码流。
11.一种用于从码流中解码出预测块的装置,其特征在于,包括:
解码单元,用于从所述码流中解码出所述预测块与根据运动矢量获得的预测值之间的差值;
根据权利要求1至9中任一项所述的用于确定所述预测块的所述运动矢量的装置;
运动预测单元,用于根据所述运动矢量确定所述预测值;
重建器,用于根据所述预测值和所述解码差值重建所述预测块。
12.一种用于确定预测块的运动矢量的方法,其特征在于,包括以下步骤:
获取所述预测块(prediction block,PB)的初始运动矢量和模板;
通过在搜索空间中使用所述模板进行模板匹配确定所述初始运动矢量的修正,其中,所述搜索空间位于由所述初始运动矢量给出的位置上且在进行所述模板匹配时可访问的整数像素点组成的预定窗口内,所述预定窗口包括所述搜索空间和进行所述模板匹配时可访问的其它整数像素点位置;
将所述PB拆分为多个子PB;
对于所述多个子PB中的每个子PB,通过访问所述预定窗口内的像素点且不访问所述预定窗口外的像素点来确定运动矢量。
13.一种用于编码预测块的方法,其特征在于,包括:
根据权利要求12所述的方法确定所述预测块的运动矢量;
对所述预测块与根据所述运动矢量得到的预测值之间的差值进行编码,得到码流。
14.一种用于从码流中解码出预测块的方法,其特征在于,包括:
从所述码流中解码出所述预测块与根据运动矢量获得的预测值之间的差值;
根据权利要求12所述的方法确定所述预测块的所述运动矢量;
根据所述运动矢量确定所述预测值;
根据所述预测值和所述解码差值重建所述预测块。
15.一种存储指令的计算机可读介质,其特征在于,所述指令在处理器上执行时使得所述处理器执行根据权利要求12至14中任一项所述的方法。
CN201780095715.1A 2017-10-09 2017-10-09 进行子预测块运动矢量推导的存储器访问窗口 Active CN111567047B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/EP2017/075713 WO2019072371A1 (en) 2017-10-09 2017-10-09 MEMORY ACCESS WINDOW FOR PREDICTION SUB-BLOCK MOTION VECTOR CALCULATION

Publications (2)

Publication Number Publication Date
CN111567047A CN111567047A (zh) 2020-08-21
CN111567047B true CN111567047B (zh) 2022-07-22

Family

ID=60162189

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780095715.1A Active CN111567047B (zh) 2017-10-09 2017-10-09 进行子预测块运动矢量推导的存储器访问窗口

Country Status (4)

Country Link
US (1) US11245916B2 (zh)
EP (1) EP3682635A1 (zh)
CN (1) CN111567047B (zh)
WO (1) WO2019072371A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3747194A1 (en) * 2018-01-29 2020-12-09 VID SCALE, Inc. Frame-rate up conversion with low complexity
TWI729483B (zh) * 2018-09-04 2021-06-01 聯發科技股份有限公司 視訊編解碼系統的運動向量湊整統一的方法以及裝置
WO2020141993A1 (en) * 2019-01-02 2020-07-09 Telefonaktiebolaget Lm Ericsson (Publ) Side motion refinement in video encoding/decoding systems
CN116389765B (zh) * 2019-04-25 2024-01-30 北京达佳互联信息技术有限公司 对视频数据编码的利用光流的预测细化方法、设备和介质
US20230093043A1 (en) * 2021-09-22 2023-03-23 Tencent America LLC Method and apparatus for adaptive reordering for reference frames
US20230388485A1 (en) * 2022-05-26 2023-11-30 Tencent America LLC Subblock based motion vector predictor displacement vector reordering using template matching

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104935939A (zh) * 2009-01-23 2015-09-23 Sk电信有限公司 对图像进行编码/解码的装置和方法
WO2017036414A1 (en) * 2015-09-02 2017-03-09 Mediatek Inc. Method and apparatus of decoder side motion derivation for video coding
CN107071461A (zh) * 2010-12-14 2017-08-18 M&K控股株式会社 用于解码运动画面的设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9247266B2 (en) * 2011-04-18 2016-01-26 Texas Instruments Incorporated Temporal motion data candidate derivation in video coding
US20130343447A1 (en) * 2012-06-25 2013-12-26 Broadcom Corporation Adaptive loop filter (ALF) padding in accordance with video coding
US9762927B2 (en) * 2013-09-26 2017-09-12 Qualcomm Incorporated Sub-prediction unit (PU) based temporal motion vector prediction in HEVC and sub-PU design in 3D-HEVC
US10958927B2 (en) * 2015-03-27 2021-03-23 Qualcomm Incorporated Motion information derivation mode determination in video coding

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104935939A (zh) * 2009-01-23 2015-09-23 Sk电信有限公司 对图像进行编码/解码的装置和方法
CN107071461A (zh) * 2010-12-14 2017-08-18 M&K控股株式会社 用于解码运动画面的设备
WO2017036414A1 (en) * 2015-09-02 2017-03-09 Mediatek Inc. Method and apparatus of decoder side motion derivation for video coding

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Algorithm Description of Joint Exploration Test Model 7 (JEM 7);Chen J et al.;《JVET-G1001》;20170819;第20-28页 *

Also Published As

Publication number Publication date
EP3682635A1 (en) 2020-07-22
US20200236388A1 (en) 2020-07-23
CN111567047A (zh) 2020-08-21
US11245916B2 (en) 2022-02-08
WO2019072371A1 (en) 2019-04-18

Similar Documents

Publication Publication Date Title
CN111886870B (zh) 使用整数像素分辨率的运动矢量修正搜索
KR102527169B1 (ko) 모션 벡터 리파인먼트를 위한 제한된 메모리 액세스 윈도우
US11153595B2 (en) Memory access window and padding for motion vector refinement
CN111201792B (zh) 指向分数像素点位置的运动矢量的修正运动矢量
CN111567047B (zh) 进行子预测块运动矢量推导的存储器访问窗口

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant