CN111201792B - 指向分数像素点位置的运动矢量的修正运动矢量 - Google Patents
指向分数像素点位置的运动矢量的修正运动矢量 Download PDFInfo
- Publication number
- CN111201792B CN111201792B CN201780095766.4A CN201780095766A CN111201792B CN 111201792 B CN111201792 B CN 111201792B CN 201780095766 A CN201780095766 A CN 201780095766A CN 111201792 B CN111201792 B CN 111201792B
- Authority
- CN
- China
- Prior art keywords
- motion vector
- pixel point
- search space
- integer
- fractional
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/57—Motion estimation characterised by a search window with variable size or shape
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/513—Processing of motion vectors
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/513—Processing of motion vectors
- H04N19/517—Processing of motion vectors by encoding
- H04N19/52—Processing of motion vectors by encoding by predictive encoding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/533—Motion estimation using multistep search, e.g. 2D-log search or one-at-a-time search [OTS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/56—Motion estimation with initialisation of the vector search, e.g. estimating a good candidate to initiate a search
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/573—Motion 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
本发明涉及视频编码和解码过程中采用的运动矢量确定和修正。
背景技术
目前的混合型视频编解码器采用预测编码。视频序列的图像被细分为像素块,然后对这些块进行编码。整个块使用与块在空间或时间上靠近的已经编码的像素来进行预测,而不是逐个像素来编码整个块。编码器进一步只处理块与其预测块之间的差值。所述进一步处理通常包括将块像素转换为变换域中的系数。然后,可以通过量化进一步压缩系数,并通过熵编码进一步压缩系数以形成比特流。该比特流还包括使解码器能够解码已编码视频的任何信令信息。例如,信令可以包括有关编码器设置的设置,例如输入图像的大小、帧率、量化步长指示、应用于图像块的预测等。
时间预测利用了视频图像之间的时间相关性,视频图像也称为视频帧。时间预测也称为帧间预测,因为使用了(帧间)不同视频帧之间的依赖关系。相应地,从一个或多个之前的编码图像预测正在编码的块,之前的编码图像称为参考图像,正在编码的块称为当前块。参考图像不一定是在视频序列的显示顺序中位于当前块所在的当前图像之前的图像。编码器可以按照不同于显示顺序的编码顺序对图像进行编码。作为当前块的预测块,可以确定参考图像中的对应位置(co-located)块。对应位置块在参考图像中的位置与当前块在当前图像中的位置相同。这种预测对于静止图像区域是准确的,静止图像区域即没有从一个图像移动到另一个图像的图像区域。
为了获得一个考虑到移动的预测值,即运动补偿预测值,在确定当前块的预测块时通常使用运动估计。相应地,当前块通过参考图像中的块进行预测,该块位于与对应位置块的位置相距由运动矢量给出的距离的位置上。为了使解码器能够确定当前块的相同预测块,可以在比特流中指示运动矢量。为了进一步减少由于指示每个块的运动矢量带来的信令开销,可以估计运动矢量本身。可以对空域和/或时域中的相邻块的运动矢量执行运动矢量估计。
可以使用一张参考图像或通过加权从两个或两个以上参考图像获得的预测块来计算当前块的预测块。参考图像可以是相邻图像,即在显示顺序中紧接位于当前图像之前和/或紧接在当前图像之后的图像,因为相邻图像最有可能与当前图像相似。然而,一般来说,参考图像也可以是在显示顺序中位于当前图像之前或之后、在比特流(解码顺序)中位于当前图像之前的任何其它图像。例如,在视频内容出现遮挡和/或非线性移动的情况下,这可以提供优势。因此,也可以在比特流中指示参考图像识别。
帧间预测的一种特殊模式是所谓的双向预测,其中使用两个参考图像来生成当前块的预测块。具体而言,将在相应两个参考图像中确定的两个预测块组合成当前块的预测信号。双向预测对当前块的预测比单向预测仅使用单个参考图像进行的预测更准确。更准确的预测使得当前块的像素与预测块的像素之间的差值(也称为残差)更小,可以更有效地对这些差值进行编码,即压缩到更短的比特流中。一般来说,可以使用两个以上参考图像来找到相应的两个以上参考块来预测当前块,即可以进行多参考帧间预测。因此,术语“多参考预测”包括双向预测以及使用两个以上参考图像的预测。
为了提供更准确的运动估计,可以通过在像素之间内插像素点来增强参考图像的分辨率。分数像素内可以通过对最接近的像素进行加权平均来执行。例如,在半像素分辨率的情况下,通常使用双线性内插。通过最接近像素与正在预测的像素之间的距离的倒数对最接近像素进行加权,然后对加权值取平均值,计算得到其它分数像素。
运动矢量估计是一项计算复杂的任务,其中计算当前块与参考图像中候选运动矢量指向的对应预测块之间的相似度。通常,搜索区域包括M×M个图像像素点,并且测试M×M个候选位置中的每个像素点位置。测试包括计算N×N参考块C与位于搜索区域的测试候选位置上的块R之间的相似度量。为简单起见,绝对差和(sum of absolute differences,SAD)是为此经常使用的一个度量,计算如下:
在上述公式中,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/)介绍了运动矢量修正,发现了整像素分辨率的第一运动矢量,并通过在第一运动矢量周围的搜索空间中以半像素分辨率进行搜索来进一步修正第一运动矢量。
为了执行运动矢量修正,需要将为了执行修正当前块所必需的至少那些像素点存储在存储器中,这些像素点即对应于搜索空间的像素点以及在搜索空间中进行模板匹配时可以访问的像素点。
外部存储器访问是当前硬件架构和/或软件实施方式中的一个重要设计参数。这是由于外部存储器访问的处理速度比使用内部存储器的处理速度慢造成的。另一方面,由于芯片大小的原因,芯片上的内部存储器是有限的。
发明内容
本发明基于以下观察:当运动矢量修正与分数内插联合实施时,可能需要进一步增加片上存储器大小,甚至增加外部存储器访问次数。这两种选择都可能不可取。此外,当初始运动矢量指向分数像素点位置时,即具有分数坐标的位置,包括彼此距离1个像素点或1个像素点的倍数的像素点的搜索空间和初始运动矢量产生全部需要内插的分数像素点位置。
鉴于上述问题,本发明提供运动矢量预测,能够考虑外部存储器的访问次数以及对编码块的运动矢量进行运动矢量修正时必须要访问的像素点的数量。这可以通过在初始运动矢量坐标为分数的情况下对其取整来实现。
根据本发明一方面,提供了一种用于确定编码块的运动矢量的装置,包括处理电路,用于:获取编码块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正运动矢量。当初始运动矢量指向分数像素点位置时,该搜索空间位于通过将初始运动矢量指向的分数像素点位置取整为整数像素点位置得到的位置上。
这种装置可以有利于减少模板匹配所需的分数像素点位置的数目,一方面降低了复杂度,因为需要更少的内插操作,另一方面,减少了存储器访问窗口所需的额外整数像素点的数目,因为内插所需的分数像素点位置及整数像素点位置的数目减少了。
在一个实施例中,处理电路还用于:计算指向分数像素点位置的初始运动矢量的模板匹配代价;将分数像素点位置的计算出的模板匹配代价与确定的初始运动矢量的修正运动矢量的模板匹配代价进行比较;如果确定的修正运动矢量的模板匹配代价不低于分数像素点位置的计算出的模板匹配代价,则基于分数像素点位置确定编码块的运动矢量。
例如,搜索空间由基于整数像素点步长相互间隔的像素点位置组成。例如,该搜索空间由基于整数距离相互间隔的的行和列中的K行和L列像素点组成,其中取整的分数像素点位置是搜索空间的像素点之一。
根据一个示例,取整的分数像素点位置主要位于搜索空间的中心。
处理电路还可用于对搜索空间执行模板匹配,其中的像素点位置通过多个步骤确定,包括:确定由基于整数像素点步长相互间隔的像素点位置组成的整数搜索空间;在整数搜索空间中执行模板匹配以得到最佳匹配整数像素点位置;基于最佳匹配整数像素点位置,确定分数搜索空间,其中的至少一个像素点与最接近的整数搜索空间像素点位置的间隔小于整数像素点步长的;在分数搜索空间中执行模板匹配以得到最佳匹配位置。
在一个示例中,取整得到的位置为最接近初始运动矢量指向的分数像素点位置的整数像素点位置。
如果存在一个以上与分数像素点位置等同接近的整数像素点位置,则在一个示例中,取整得到的位置为预定义方向上的整数像素点位置,该预定义方向为左、右、上或下方向。
如果存在一个以上与分数像素点位置等同接近的整数像素点位置,则在另一个示例中,搜索空间为位于一个以上与分数像素点位置等同接近的整数像素点位置的搜索空间之和。
如果存在一个以上与分数像素点位置等同接近的整数像素点位置,则在又一示例中,取整得到的位置为等同接近的整数像素点位置中的一个,从而使得取整后的初始运动矢量的幅值更小。
根据本发明一方面,提供了一种对编码块进行编码的装置,包括:如上所述的用于确定所述编码块的运动矢量的装置;编码单元,用于对编码块与根据运动矢量得到的预测值之间的差值进行编码,生成比特流。
根据本发明另一方面,提供了一种用于从比特流中解码编码块的装置,包括:解码单元,用于从所述比特流中解码出所述编码块与根据运动矢量获得的预测值之间的差值;如上述所述的用于确定所述编码块的运动矢量的装置;运动预测单元,用于根据运动矢量确定预测值;重建器,用于根据预测值和解码差值重构编码块。
根据本发明一方面,提供了一种用于确定编码块的运动矢量的方法,包括以下步骤:获取编码块的初始运动矢量和模板;通过在搜索空间使用模板进行模板匹配来确定初始运动矢量的修正运动矢量;其中,当初始运动矢量指向分数像素点位置时,搜索空间位于通过初始运动矢量指向的分数像素点位置取整到整数像素点位置得到的位置上。
在一个实施例中,该方法还包括以下步骤:计算指向分数像素点位置的初始运动矢量的模板匹配代价;将分数像素点位置的计算出的模板匹配代价与确定的初始运动矢量的修正运动矢量模板匹配代价进行比较;如果确定的修正运动矢量的模板匹配代价不低于所述分数像素点位置的计算出的模板匹配代价,则基于所述分数像素点位置确定编码块的运动矢量。
在一个示例性实现方式中,搜索空间由基于整数像素点步长相互间隔的像素点位置组成。
例如,搜索空间由基于整数距离相互间隔的的行和列中的K行和L列的像素点组成,其中取整的分数像素点位置是搜索空间的像素点之一。这里的K和L都是非零的整数,其中至少有一个大于1。
取整的分数像素点位置可能主要位于所述搜索空间的中心。
在一个实施例中,该实施例可以与上述任一实施例或示例组合,对搜索空间执行模板匹配,其中的像素点位置通过多个步骤确定,包括:确定由基于整数像素点步长相互间隔的像素点位置组成的整数搜索空间;在整数搜索空间中执行模板匹配以得到最佳匹配整数像素点位置;基于最佳匹配整数像素点位置,确定分数搜索空间,其中的至少一个像素点与最接近的整数搜索空间像素点位置的间隔小于整数像素点步长;在分数搜索空间中进行模板匹配,得到最佳匹配位置。
除上述实施例和示例之外,或替代地,所述取整得到的位置为最接近初始运动矢量指向的分数像素点位置的整数像素点位置。
在一个示例中,如果存在一个以上与分数像素点位置等同接近的整数像素点位置,则取整得到的位置为预定义方向上的整数像素点位置,该预定义方向为左、右、上或下方向。
在另一示例中,如果存在一个以上与分数像素点位置等同接近的整数像素点位置,则搜索空间为位于一个以上与分数像素点位置等同接近的整数像素点位置的搜索空间之和。
在又一示例中,如果存在一个以上与分数像素点位置等同接近的整数像素点位置,则取整得到的位置为等同接近的整数像素点位置中的一个,从而使得取整后的初始运动矢量的幅值更小。
根据本发明一方面,提供了一种用于编码编码块的方法,根据上文任一实施例和示例中描述的确定编码块的运动矢量;对编码块与根据运动矢量得到的预测值之间的差值进行编码,生成比特流。
根据本发明一方面,提供了一种从比特流中解码编码块的方法,包括以下步骤:从所述比特流中解码出编码块与根据运动矢量获得的预测值之间的差值;根据上文任一实施例和示例中描述的确定编码块的运动矢量;根据运动矢量确定预测值;根据预测值和解码差值重构编码块。
根据本发明一方面,提供了一种存储指令的非瞬时性计算机可读存储介质,所述指令在由处理器/处理电路执行时执行上述任一方面或实施例或其组合中的步骤。
下文将参考以下附图详细描述示例实施例:
图1为可进行运动矢量推导和修正的编码器的示例性结构的框图。
图2为可进行运动矢量推导和修正的解码器的示例性结构的框图。
图3为适用于双向预测的示例性模板匹配的示意图。
图4为适用于单向预测和双向预测的示例性模板匹配的示意图。
图5为在不需要在比特流中修正初始运动矢量情况下操作的运动矢量推导各阶段的框图。
图6为实施本发明实施例的示例性硬件的框图。
图7为用于编码块的包含需要访问的像素点的示例性窗口的示意图。
图8为迭代搜索空间的示意图。
图9为存储器访问窗口由于内存滤波在水平方向上的扩展的示意图。
图10为分数初始运动矢量调整的示意图。
图11为分数像素点位置的子窗口的定义的示意图。
图12为在没有对初始运动矢量坐标进行取整的情况下获得的搜索空间与在对初始运动矢量坐标进行取整的情况下获得的搜索空间之间的比较的示意图。
图13A为不对初始运动矢量进行取整的运动矢量修正的流程图。
图13B为将初始运动矢量取整到预定整数像素点位置的运动矢量修正的流程图。
图13C为不将初始运动矢量取整到多个整数像素点位置的运动矢量修正的流程图。
图14为分数像素点位置的子窗口的定义的示意图。
图15为包括能够用来形成用于运动矢量修正的搜索空间位置的分数像素点位置的示例性位置的示意图。
图16为不能用来形成用于运动矢量修正的搜索空间位置的示例性分数像素点位置的示意图。
图17为确定搜索空间的哪个位置能够通过用于运动矢量修正的模板匹配来测试的流程图。
图18为进行分数像素点位置计算的两个像素点的填充的示意图。
图19为能够在搜索空间边界上进行模板匹配的四个像素点的填充的示意图。
图20为应用像素点填充的方法的流程图。
具体实施方式
如上所述,在当今的硬件和软件体系结构中,外部存储器访问是最重要的设计考虑因素之一。尤其在包括模板匹配时,例如在运动矢量修正的情况下,运动矢量估计还可以与内插滤波一起使用以获得搜索空间的分数像素点位置。内插滤波的使用可能需要增加从存储器中访问的像素点的数量。然而,这可能增加昂贵的片上存储器,或者增加外部存储访问空间,另一方面减慢了实现速度。特别是在解码器侧,这些问题可能导致应用的代价增加、速度变慢,这是不可取的。
根据本发明,为了限制存储器访问窗口,通过确定相对于由移动到最近的整数像素点位置的初始运动矢量所指向的位置的搜索空间来减少或避免分数像素点位置的插值。
根据本发明的实施例,提供了一种用于确定编码块的运动矢量的装置,包括处理电路,用于:获取所述编码块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定所述初始运动矢量的修正运动矢量。当初始运动矢量指向分数像素点位置时,所述搜索空间位于通过将初始运动矢量指向的分数像素点位置取整为整数像素点位置得到的位置上。
图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)或结构相似度量(structuralsimilarity metric,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、H.265、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)发表的书中找到:HighEfficiency Video 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和RefPicl的指示。参考图像作为之前处理(即,相应的编码和解码)的结果存储在编码端和解码端的解码图像缓冲区中。通过搜索选择其中一个参考图像进行运动矢量修正。运动矢量确定装置中的参考图像选择单元用于选择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/。这种模板匹配方法中的模板被确定为与当前帧中的当前块相邻的像素点。如图4所示,可以采用与当前块的左上边界相邻的已重建像素点,称为“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可分离滤波器来生成四分之一像素位置和半像素位置:
从上表中可以看出,内插滤波需要分数像素位置周围的几个像素点,对应于滤波器抽头(表中系数的数量)。使用上述示例的滤波器,为了生成半像素位置,需要左/上方和右/下角的4个整数像素点。需要说明的是,内插滤波器的长度对于四分之一像素点位置(7抽头)和对于半像素点位置(8抽头)是不同的。在本申请中,术语“像素点(sample)”和“像素(pel和pixel)”可互换使用,表示得到时间实例中(一个或多个颜色分量)的图像像素点。原则上,像素点是一个强度值。
在本发明一些实施例中,预定义抽头大小的内插滤波器仅在所述搜索空间中进行模板匹配时可访问的整数像素点给出的窗口内访问整数像素点。该窗口包含的像素点可能比实际上计算某个编码块所用的像素点多。这是因为修正搜索操作通常使用快速搜索方法(而不是暴力搜索方法)来实现,根据这个事实,一些像素点不是根据搜索操作的渐进过程进行访问的。因此,对于每个编码块,模板匹配迭代次数以及修正搜索操作计算中使用的像素点数量可能发生变化。
图7示出了窗口的编码块(编码块)和对应的像素点。应注意,图7中所示的像素点是参考图像像素点,这里的编码块实际上是当前帧中与当前块的大小和位置对应的块,其中,运动矢量在参考图像中推导得到的。因此,实际上,图7中的编码块实际上是与搜索预测值的块对应位置(co-located)的块。然而,出于简化的原因,这种类型的块在下文中称为“编码块”。
在这个例子中,未修正的运动矢量MV0指向一个整数像素点位置。运动矢量修正搜索粒度为1个整数像素点,即从整数像素点开始,只搜索整数像素点。在本示例中,在逐渐发展的搜索空间中执行搜索。这意味着搜索空间在每次迭代中都通过添加新的搜索位置、根据先前测试位置的代价函数的最佳方向而发展。
图8中以简化的方式说明了这种方法。在图8中,初始运动矢量指向中心点810。搜索空间是围绕初始运动矢量位置逐步构建的。在第一步中,测试与初始运动矢量所指向的位置810以及初始运动矢量所指向的位置810直接相邻的上方、下方、左侧和右侧的四个位置。根据在测试的五个点中产生最低代价函数的方向,将要测试的其他位置添加到搜索空间中。在此示例中,最低代价函数可以在右侧的点上看到,所以在第二步中,搜索空间在水平右侧方向上又扩展了三个点。在第二步中,最低代价函数可以在右侧的点(相对于第一步的最低代价点)看到,从而使得搜索空间在水平右侧方向上进一步扩展了三个点。在第三步中,相对于步骤二的最低代价点,在右侧的点再次观察到最低代价函数,从而在水平右侧方向上将搜索空间再扩展三个点。根据图8中的示例,在上方、上方和右侧方向按此顺序执行另外三个步骤。在该示例中,每次迭代使用菱形图案(由5个搜索点组成),并且扩展搜索空间,以便在每个步骤中完成丢失的搜索点。
在搜索空间确定的每次迭代中,搜索空间可增加一个或多个整数像素点位置。参见图7,在该示例中,最大搜索迭代次数为4。由于最多可以进行4次迭代,因此需要从存储器中获得出左侧所示的所有像素点以执行搜索操作,避免搜索空间逐渐发展移动到左侧。同样地,需要4个像素点延伸到上方。因此,搜索空间在两个方向(从左到右和从上到下)上都得到了扩展,因为修正MV可以在两个方向中的任意一个方向上移动,并且硬件实施方式要求在应用修正搜索之前从外部存储器中获取可能需要的所有像素点。如果搜索空间在下方或右侧方向发展,则需要进一步扩展4个像素点,因为与对应于编码块(编码块)大小的模板匹配的模板需要访问这些像素点中的一些像素点。此外,还必须从存储器中获取角落像素点(例如,右上角),因为硬件实现通常无法获取不规则形状(矩形像素点更容易访问)。
应注意,上述迭代搜索空间发展仅仅是示例性的,并且在每次迭代中扩展搜索空间的规则和点数可能不同,即以不同的方式指定。
图8还显示了由于上述外部存储器访问规则而可能发生的情况。从外部存储器中获取的像素点数量比计算步骤中实际使用的像素点数量更多。假设这里的模板仅是一个大的像素点(出于简化的原因),那么白色圆圈代表从外部存储器中读取到的像素点,带阴影的像素点为实际使用的像素点。然而,如果对外部存储器的访问次数要保持在较低水平,则这种冗余是必要的,因为当开始处理当前块时,不知道实际需要的像素点。
应注意,搜索空间也可以以不同方式定义,例如,定义为位于初始运动矢量所指向的位置处的稳定形状。所述形状可以是方形、矩形、菱形等任意形状。
图9示出了搜索空间还可以包括分数像素点的示例。在图7和图8中,对整数像素点执行运动矢量搜索,从而得到访问窗口中包括的较大的实线点指示的位置。如果现在对具有半像素分辨率(较小的实线点)的像素点执行搜索,假设内插滤波器是对称的并且具有八个抽头,为了生成在左手边所示的分数像素点,还需要从存储器中获得另外三列像素点。此外,由于搜索操作是对称的(可以迭代地向左和向右移动),因此必须在左侧(扩展3列像素)上应用相同的操作,以便分数像素可以位于窗口的左侧。
由于内插滤波,需要从存储器中获得的像素点数量进一步增加,现在由虚线表示的内容还包括表示因分数插值而添加的位置的虚线圆。类似地,如果还允许在垂直方向上搜索每个位置的一半,则从存储器中访问的像素点的窗口还需要在垂直方向上(图9的示例中未示出)在上方和下方进行扩展。
存储器访问窗口定义为矩形,所述窗口包含需要从存储器中获得的所有像素点,以便执行编码块(编码块)的运动矢量搜索。存储器访问的窗口不仅包括所需的实际像素点,还包括在运动矢量搜索操作期间可能访问的所有剩余像素点。在图9的示例中,运动矢量搜索移动到右侧。但是,它也可能被移到左边的方向,这是事先不知道的。因此,为了不多次访问外部存储器,存储器访问窗口(或访问窗口)包括相应处理可访问的所有像素点。
图10示出了初始运动矢量指向的分数像素点位置1010。为了避免与初始运动矢量位置相隔整数距离的点都是分数的搜索空间结构,需要插值所有这些点,从而从存储器中进一步插值整数像素点位置,将分数点1010移至最近的整数点(在图10中显示为阴影圆圈)。在图10中,所述初始运动矢量指向的所述分数像素点位置1010是位于两个整数点之间的半像素位置,该位置位于所述两个整数点的相同距离处。在这种情况下,可以约定使用两个距离相等的整数点中的哪一个。在这个例子中,遵循了从左到右的规则。类似地,可以使用先上方后下方,先水平后垂直的规则,从而得到优选顺序:左、上、右、下方。换句话说,如果所述分数像素点位置与4个整数像素点位置具有相同的距离,那么该分数像素点位置将被取整到左上方的位置。然而,这些仅仅是示例。通常,所述顺序可以是任何其它顺序,只要识别出所述顺序,所述编码器和解码器就可以相应地处理。
如果与初始运动矢量的距离相同的整数像素点不止一个,则可以采用另一种规则选择与(0,0)中心坐标距离最近的像素点坐标。具有较大幅值的运动矢量(沿x轴和y轴的任一方向)的统计概率要小于具有较小幅值的运动矢量的统计概率,因此需要该规则。换句话说,视频序列通常包含的运动和静止背景(可以用较小幅值的运动矢量来预测)比混乱的运动和运动背景(可以用较大幅值的运动矢量来预测)要少。
根据以上段落中的取整规则,初始运动矢量的垂直分量(沿y轴方向)为5.5,水平分量为-3.5,取整为(5,3)。根据所述取整规则,如果所述初始运动矢量最接近于一个以上整数像素点坐标,则对所述初始运动矢量进行取整,以实现沿x轴和y轴具有最小绝对幅值的最终取整运动矢量。例如,这种取整可以通过简单地将逗号后面的位置截断来实现,即通过取整“floor”函数来实现。
换句话说,如果存在一个以上与所述分数像素点位置等同接近的整数像素点位置,则所述取整得到的位置为所述等同接近的整数像素点位置中的一个,从而使得所述取整后的初始运动矢量的幅值更小。
在一实施例中,所述搜索空间由基于整数像素点步长相互间隔的像素点位置组成,也如图10所示,其中搜索空间窗口1000将围绕中心位置(阴影圆圈)构建的所述搜索空间的整数像素点帧化,该中心位置对应于在如上所述移动所述分数初始运动矢量位置后的取整而得的整数像素点位置。
为了确保所述运动矢量的修正不会使所述初始运动矢量变得更差,在一个示例性实施例中,计算指向所述分数像素点位置的所述初始运动矢量的模板匹配代价,并与所述确定的初始运动矢量的修正运动矢量的所述模板匹配代价进行比较。最后,如果所述确定的修正运动矢量的所述模板匹配代价不低于所述分数像素点位置的所述计算出的所述模板匹配代价,则基于所述分数像素点位置确定所述编码块的所述运动矢量。换句话说,如果所述编码块优于所述初始运动矢量(就代价函数而言),则仅为该编码块选择修正,这意味着如果所述确定的修正运动矢量的所述模板匹配代价较低(或等于)所述分数像素点位置的所述计算出的模板匹配代价,则基于所述确定的修正运动矢量来确定所述编码块的所述运动矢量。
一方面,如果所述确定的修正运动矢量的所述模板匹配代价不低于所述分数像素点位置的所述计算出的所述模板匹配代价,则可以直接确定所述编码块的所述运动矢量为所述分数像素点位置。然而,可能还有其它步骤(例如,在所述分数搜索空间、运动矢量削波等中的后续模板搜索)修正所述运动矢量。
所述搜索空间可以由基于整数距离相互间隔的行和列中的K行和L列的像素点组成,其中所述取整的分数像素点位置是所述搜索空间的像素点之一。其中,K和L为大于1的整数。如图10所示,K和L的值可以相等(本实施例中为9)。然而,一般来说,K和L的取值可能不同,即所述搜索空间可能是边长不同的矩形。
术语“搜索空间”通常指要进行模板匹配的所有位置的集合。这些位置实际上是由模板匹配检查的,即对于每个搜索空间位置,都会计算出一个相应的代价函数值。相反,所述存储器访问窗口(在本发明中也称为访问窗口或窗口)包括该搜索空间,但也可以包括模板匹配可访问的像素点,即可用于计算上述搜索空间位置中的至少一个空间位置的代价函数。在上述K×L搜索空间的示例中,所述存储器访问窗口的大小可以相同或者更大。
所述取整的分数像素点位置可能主要位于所述搜索空间的中心或所述存储器访问窗口的中心或两者的中心,如图10所示。此处术语“主要”是指以下事实:如果所述搜索空间和/或所述存储器访问窗口的行和/或列的数目是偶数,则不存在整数中心。在这种情况下,所述取整的分数像素点位置将位于距离该中心最近的一个位置上。
然而,应注意的是,本发明不限于上述搜索空间配置。通常,可以使用任何搜索空间(例如,如上所述的迭代得到的搜索空间)。此外,所述初始运动矢量不一定位于所述搜索空间的所述中心。例如,对于迭代搜索空间,情况并非如此,在该迭代搜索空间中,所述搜索空间在所述最低代价函数的方向上进行多次迭代发展,从而从所述初始运动矢量开始在一个特定方向上延伸,而所述初始运动矢量当时不在所述初始运动矢量的所述中心。
用于存储器访问的窗口可以以各种方式定义。图11示出了一个示例,其中所述存储器访问窗口被定义为在所述编码块在左/右或上/下(对应于由所述初始运动矢量得到的所述编码块的所述位置)上的扩展EXT。扩展量可取决于所述编码块或编码块的大小和形状。在图11中,扩展部分在每个方向(上方、下方、左侧和右侧)上为4个像素点长度。然而,应注意的是,EXT也可以针对不同的方向采用不同的值,具体取决于块的大小(其在垂直和水平方向上可能具有不同的大小)和/或所述搜索空间的形式和大小。
例如,根据示例,将所述窗口定义为相对于所述编码块初始运动矢量的N个整数像素点列和M个整数像素点行,其中N和M为非零整数值。在图11中,指示了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。
换句话说,根据此示例,所述处理电路用于通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正运动矢量,所述搜索空间在最近一次迭代中沿着所述搜索空间中的一个(或多个)最佳匹配位置得到的方向迭代扩展,所述窗口由预定义的最大迭代次数定义。
应注意,通常,本发明不限于确定所述搜索空间的任何特定形状或形式或种类。在另一个示例中,搜索空间为窗口的矩形子窗口,或者可以等于窗口。所述存储器访问窗口的定义可以是相关的,以便可能在比特流中包含相应的信令参数(例如,参数ET或参数N和M)。然而,该存储器访问窗口的大小也可以在标准中定义,或者基于其它编码参数(例如,模板大小、编码块大小、图像分辨率等)推导得到的。如上所述,所述模板匹配不一定在包括所有位置的矩形搜索空间中进行。在一个替代性实施例中,所述对搜索空间进行模板匹配,其中所述搜索空间的所述像素点位置在多个步骤(迭代地)中确定,包括以下步骤:确定由基于整数像素点步长相互间隔的像素点位置组成的整数搜索空间;在所述整数搜索空间中进行模板匹配以得到最佳匹配的整数像素点位置;基于所述最佳匹配的整数像素点位置,、从最近的整数搜索空间像素点位置中确定具有基于小于整数像素点步长间隔的至少一个像素点的分数搜索空间;在所述分数搜索空间中进行模板匹配以得到最佳匹配位置。换句话说,所述搜索空间可以处于起始位置,并且可能受限于行和列中基于整数距离相互间隔的像素点的几次迭代,可以通过添加一些分数像素点位置来进一步发展。
根据所述代价函数迭代执行并且还包括分数像素点位置的搜索空间构建使得能够减少要执行的模板匹配操作的数量,以找到修正运动矢量。此外,所述搜索空间构建还可以通过提供要检查的分数像素点位置来提高准确度。
例如,所述取整得到的位置可以为最接近所述初始运动矢量指向的所述分数像素点位置的整数像素点位置。如果存在一个以上与所述分数像素点位置等同接近的整数像素点位置,则所述取整得到的位置为预定方向上的、所述预定义方向或方向组合的整数像素点位置,所述预定方向或方向组合可以是左侧、右侧、上方或下方。如上所述,整数像素点搜索空间中的分数像素点位置可以具有两个或四个最近的邻居。可以通过以优选顺序对所述四个可能的方向进行排序来指定所述预定方向,以便在所述两个距离相等的相应整数像素点的两个方向中选择一个,以所预定的顺序列出其中的第一个。如果所述分数像素点位置与所述整数像素点不在一条直线上,而是在水平和垂直方向上移位,那么方向的组合是相关的。在这种情况下,所述分数像素点位置必须在两个方向上取整为一个整数像素点位置,例如左上角或右上角等。
然而,本发明不限于单次取整的可能性。可选地,如果存在一个以上与所述分数像素点位置同等接近的整数像素点位置,则所述搜索空间为位于所述一个以上与所述分数像素点位置等同接近的整数像素点位置上的搜索空间之和。换句话说,所述搜索空间是通过分别移位到所有(两个或四个)等同接近的整数像素点位置而得到的搜索空间的组合。在实践中,与仅对两个等距间隔的整数像素点位置执行单次移位的情况相比,这将导致在结果搜索空间中增加一列和/或行等情况。
另一种可应用的取整规则可能是选择最接近(0,0)中心坐标的像素点坐标。所述中心坐标一般是所述初始运动矢量起始的坐标。通常,该中心坐标是对应位置的块,即所述参考图像中的编码块的位置,其中参考图像对应于要在当前帧中待确定的预测值的所述预测块的位置。因此,如果所述初始运动矢量等同接近于一个以上的整数像素点坐标,则对初始运动矢量进行取整,以获得沿x轴和y轴具有最小绝对幅值的取整运动矢量。
图12左手侧示出了一个典型方法,其中所述初始运动矢量位置指向一个分数像素点位置(运动矢量的起始坐标)1210。通常使用固定步长(搜索点之间的距离差值)应用运动矢量修正过程。通常,所述距离为整数像素点距离,即对应两个整数像素点之间的距离。这意味着,如果搜索操作的起点是分数像素点,那么连续的搜索点也会是分数像素点,在图12中用几个分数像素点位置(较小的加粗圆圈)来表示。在图12的示例中,原则上并未示出所有的分数像素点位置,如果所述搜索空间被定义为围绕所述初始运动矢量的矩形,则将会有对应于图12中所示的所述整数像素点的网格中的每个网格的分数像素点位置。从图中可以看出,所述分数像素点位置的插值可能需要所述搜索空间之外的像素点位置1220的值。例如,如果使用6抽头滤波器,则在所述搜索空间的右侧还需要再增加两个列。如果在本示例中认为所述存储器访问窗口与搜索空间相同,则这将需要额外的存储器访问来获取额外的像素点,或者需要更大的存储空间以在内部存储另外两列像素点。需要说明的是,一般情况下,所述搜索空间和所述存储器访问窗口并不相同。图12是一个简化的示例,在该示例中,假设模板的大小为1×1。通常,所述搜索空间将小于所述存储器访问窗口。所述存储器访问窗口会另外包括不属于搜索空间位置但用于模板匹配的位置。所述附加像素的数量取决于所述模板的大小。此外,如果所述内插滤波器的大小除以2大于所述模板的大小,则与所述模板匹配相比,所述分数插值只需要额外的像素点位置。然而,应注意的是,在这种情况下,对所述初始运动矢量进行取整不仅具有减小所述窗口大小的优点。此外,还减少了进行插值分数像素点位置以获得搜索空间所必需的操作次数。
在图12的右手侧示出了分数像素点位置1210到整数像素点位置的移位(取整)。因此,根据对应于所述取整的分数像素点位置的所述整数像素点位置构建的所述搜索空间包括整数像素点,并且在本示例中不需要任何额外的分数像素点位置插值。
换句话说,在现有技术中,由于起点是半像素位置,并且由于修正搜索步骤的步长通常为1个像素(像素点),因此总是搜索分数像素点位置。因此,由于内插滤波需要来自右侧的搜索空间/存储器窗口之外的像素点,因此最坏情况是存储器访问次数高。根据本发明的一个实施例,首先将起始坐标取整为整数起始点。因此,即使搜索坐标位于存储器访问窗口的边界(仍然在存储器访问窗口内),也不需要访问存储器访问窗口之外的像素点。
分数初始运动位置的主要优点是:给定预定义的存储器访问窗口,取整有助于搜索操作到达比初始起始点更远的点(因为整数搜索坐标不需要内插滤波,因此不需要额外的像素点)。根据不同的观点,如果进行相同数量的修正迭代,本发明的存储器访问需求小于现有技术的需求。
需要说明的是,上述示例是针对半像素内插而提供的。然而,本发明并不限于此。一般而言,可使用1/4、1/8等任何分数像素点位置,即使用对应的内插滤波器进行内插。
参考图6描述的处理电路可以在如图1和图2所示的编码器和/或解码器中使用。
具体而言,提供了一种编码装置,用于将拆分为编码块的视频图像编码为比特流,该编码装置包括:如上所述的包括处理电路的用于确定编码块的运动矢量的装置;编码电路,用于对编码块与由确定的运动矢量指定的位置上的编码块得到的预测值之间的差值进行编码,以及用于生成包括编码差值和初始运动矢量的比特流。
上文结合图1所述的编码器的其它单元和功能也可以在处理电路中提供或实现。
对应地,可提供一种解码装置,用于从比特流中解码出拆分为编码块的视频图像,该解码装置包括:解析单元,用于从比特流中解析出初始运动矢量和编码块与修正运动矢量指定的位置上的编码块得到的预测值之间的编码差值;如上所述的包括处理电路的用于确定编码块的修正运动矢量的装置;以及解码电路,用于将编码块重建为解析差值和基于修正运动矢量的位置上的编码块得到的预测值之和。例如,可以通过修正运动矢量的位置直接得到预测值。然而,获取当前编码块的运动矢量可能还存在其它处理步骤,进而可以改变运动矢量(例如,滤波、裁剪、进一步修正等)。
上文结合图2所述的解码器的其它单元和功能也可以在处理电路中提供或实现。
此外,从装置的角度描述了本发明实施例,处理电路执行运动矢量修正。然而,本发明并不限于此,还提供了相应的方法,这些方法包括的处理步骤对应于上文配置处理电路所描述的那些步骤。
抽头与滤波系数相对应。抽头大小与滤波器顺序相对应。在此,假设滤波器为线性滤波器。在一些示例中,滤波器可以是对称的,即具有对称系数。然而,本发明不限于对称滤波器或线性滤波器或任何种类的滤波器。一般来说,可以基于相邻像素点以任何方式获得分数像素点位置。
图13A示出了一种初始运动矢量输入到运动矢量修正的典型方法。然后,确定搜索空间,其中的位置与初始运动矢量的距离为整数像素点,并在该搜索空间中执行搜索。这导致搜索空间中只有分数像素点位置,如果初始运动矢量具有分数坐标,这些分数像素点位置都要进行内插。另外,一些分数距离像素点可以添加到搜索空间中,并且还通过模板匹配测试,以找到编码块的最佳匹配。
图13B示出了根据本发明的一种方法。具体而言,将初始(非修正)运动矢量输入到运动矢量修正流程中。如果初始运动矢量指向的位置(即至少一个运动矢量坐标)为分数,则将位置(一个或两个分数坐标)取整到下一个最接近的整数像素点位置。然后,根据图13A所示确定搜索空间。然而,由于进行了取整,搜索空间由整数像素点位置组成。
在进行整数距离搜索之后,可以在整数距离搜索空间中围绕运动矢量修正执行更细的分数距离搜索。鉴于未超出定义的存储器访问窗口(由于附加内插操作),本发明后续允许进行基于分数搜索坐标的运动矢量修正搜索。通常,修正操作通过逐步减小的步长执行,一旦完成了整数步长搜索,还可以检查更小的步长。在一种特殊情况下,可以始终检查初始非修正MV并将其与其余搜索坐标进行比较,因为初始非修正MV是通过前一操作选择为最佳运动矢量的候选坐标。
图13C示出了以不同方式执行取整从而产生不同重叠搜索空间的一种替代方法。具体而言,通过运动矢量取整步骤可以产生一个以上取整替代方案,尤其当存在一个以上最接近的整数像素点位置时。相应地,为了减少存储器访问次数,将起始搜索点取整到整数像素点(更一般地,重建需要较少像素扩展的位置)或更多整数像素点(通常为2个或4个)。因此,后续的搜索点也是整数像素点。
在上述实施例和示例中,通过将分数运动矢量位置移位到整数像素点位置,可以构建主要包括整数像素点的搜索空间。然而,这种基于取整初始运动矢量而不是分数运动矢量的移位搜索空间可以包括一些分数像素点位置。例如,如果结合图8所示迭代地确定搜索空间,则在最后一次迭代中,可以测试一个或多个分数像素点位置。然而,这只是一个示例,分数像素点位置可以在任一迭代中测试。为了避免分数像素点位置需要重复访问存储器以获取进行分数内插可能需要的额外像素点,在下文中,进一步描述了两个实施例,即:
-限制存储器访问窗口,并在搜索空间模板匹配操作中仅启用不需要扩展窗口的分数像素点位置,其中,定义存储器访问窗口是为了能够访问对某个编码块进行模板匹配时所必需的任何像素点。
-使用一些预定替换值来填充在存储器访问窗口中扩展的像素点,这些预定替换值取决于窗口内的像素点。
下面将对这些实施例进行详细描述。具体而言,可以相应地进一步配置处理电路,以保持存储器访问窗口及减少访问次数。提供了相应的方法和装置。
内插滤波的受限存储器访问窗口
如上所述,在当今的硬件和软件体系结构中,外部存储器访问是最重要的设计考虑因素之一。尤其是在包括模板匹配时,例如,在运动矢量修正的情况下,运动矢量估计还可以与内插滤波一起用于获得搜索空间的分数像素点位置。使用内插滤波可能需要增加需要从存储器中访问的像素点的数量。然而,这可能会导致使用更多的昂贵的片上存储器,或者增加外部存储器访问的次数,另一方面,减慢了实现速度。尤其是在解码端,这些问题可能导致应用的代价增加、速度变慢,这是不可取的。
为了防止这种情况,本发明另一实施例提供了对外部存储器访问的限制条件。根据本发明实施例,执行运动矢量修正时可访问的像素点的窗口定义在非修正运动矢量亦即初始运动矢量指向的位置周围。该窗口定义了为了执行运动矢量修正而需要从存储器中访问的像素点的最大数量。一般而言,待访问像素点包括待执行模板匹配的搜索空间中的位置上的像素点和对应于搜索空间中的所有位置要与模板进行匹配的像素点。后者通常超出了搜索空间。为简单起见,存储器访问窗口可定义为编码块(需要找到运动矢量的当前块)周围的一种扩展。例如,当前块的左侧和右侧的R个像素点和上边界和下边界的R个像素点可以定义该窗口。换句话说,在当前块的大小为N×N个像素点时,访问窗口的大小可以是(R+N+R)×(R+N+R),即(N+2R)×(N+2R)个像素点,例如,R可以等于4。然而,当前块的垂直大小N可以不同于水平大小N,并且扩展像素点在上、下、左和右方向的数量也可以不同。
根据本发明,为了限制存储器访问窗口,仅当执行内插所需的像素点位于存储器访问窗口内以进行如针对整数像素点定义的运动矢量修正时,执行运动矢量修正时才访问分数像素坐标。
图14示出了执行运动矢量修正时的存储器访问窗口。中心点1410是指非修正输入运动矢量(从比特流或通过如上所述先前执行的模板匹配或候选运动矢量的测试获得的初始运动矢量)所指向的位置。为了避免由于向搜索空间添加分数像素点位置而进一步增大窗口大小,按照以下规则执行运动矢量修正:
A)执行修正的存储器访问窗口定义在非修正初始运动矢量坐标(即初始运动矢量指向的位置)周围。该窗口标识为了通过搜索空间的模板匹配执行运动矢量修正而需要从存储器访问的像素点的最大数量。
1.在这个示例中,为了简单起见,当前块的大小(编码块大小)为1×1像素点,但是可以更大,而且通常也会更大。
2.存储器访问窗口定义在编码块周围扩展,例如图中所示的左/侧右侧的4个像素点和上方/下方的4个像素点。
B)仅当执行内插所需的像素点位于存储器访问窗口内时,分数执行MV修正才访问坐标。
规则B确保对整数像素点执行运动矢量修正所需的像素点定义的访问窗口不会进一步扩展。根据此规则可访问的实际分数像素点根据内插滤波器的大小和形状得到。相应地,在图14中,假设内插滤波器有6个抽头,则点线表示分数像素点可能所处的区域。然而,需要说明的是,能够使用更多分数像素位置,结合图15所示。具体而言,仍然可以使用仅需要垂直滤波或水平滤波而不需要扩展到访问窗口之外的分数像素点位置。因此,将分数像素点位置限制在图14所示的分数像素点窗口对于一些应用可能太过局限。
换句话说,根据一个实施例,存储器访问窗口包括对整数像素点执行运动矢量修正时可访问的所有像素点,不包括对整数像素点执行运动矢量修正时不可访问的像素点。因此,如果执行运动矢量修正时要使用分数像素点,则以不需要额外像素点的方式获取分数像素点。
在图14的示例中,通过仅使用分数像素点来实现这点,对于预定义的内插滤波器形状和大小,分数不需要使用访问窗口之外的像素点。点线分数像素点窗口在访问窗口内扩展。如果T是内插滤波器抽头的数目,则分数像素点窗口边界通过与访问窗口边界像素点相距向下取整(T/2)-1的距离1420的整数像素点来定义。具体而言,在本示例中,T=6,T/2=3,访问窗口边界像素点与分数窗口像素点的距离为T/2-1=2个整数像素点。
然而,需要说明的是,分数窗口的这种确定方式仅仅是一个示例。一般而言,该窗口可能有不同的形式和大小。垂直和水平内插可以由不同大小的滤波器完成。此外,一些分数像素点位置可能需要在垂直方向和水平方向上存在滤波器,一般来说,该滤波器可以是可分离或不可分离滤波器。
或者,可以针对图14中点线窗口外的分数像素点位置改变内插滤波器(例如,抽头数至少在一个方向上减少)。然而,出于实施目的和内插质量原因,这种解决方案可能吸引力较小。
需要说明的是,一般而言,本发明不限于确定搜索空间的任何特定形状或形式或种类,例如迭代方法。在另一个示例中,搜索空间是该窗口的矩形子窗口,使得在对子窗口中的每个分数像素点执行内插滤波时访问的所有整数像素点位于所述对应于预定义抽头大小的内插滤波器的窗口内。上文已经结合图14论述了类似示例。在图14中,搜索空间由9×9整数像素点和位于5×5整数像素点形成的区域内的分数像素点组成,其中初始运动矢量位置在搜索空间的中心处。
图15示出了存在不同分数像素位置的示例。对于本示例,假设模板的大小为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个水平或垂直整数像素点的一维滤波器。
这些一维分数像素点位置(例如,图15中的位置2和6)在两个水平或垂直相邻的整数整像素位置之间的线上,要求仅在水平方向或垂直方向上进行内插的扩展,即只能由相应的水平或垂直内插滤波器进行滤波。为了能够利用尽可能多的分数像素点位置,除了图14示例中能够使用的分数像素点位置之外,添加其它一维位置,例如图15中所示的位置6,可能是有利的。
换句话说,搜索空间还包括位于分数子窗口(参见图14的点线窗口)之外的分数像素点位置,这些分数像素点位置:
-与子窗口的上方或下方相邻且在整数像素点的水平线上,或
-与子窗口的左侧或右侧相邻且在整数像素点的垂直线上。
需要说明的是,一些分数像素点可能需要在某个方向(水平或垂直)上有更多的整数像素点。这发生在预定义的滤波器大小不同以在相应方向上生成该位置的情况下。
图16示出了无法访问的分/半像素位置1和2的示例。这两个位置在图14所示的子窗口之外。对于本示例,假设6抽头内插滤波器用于半像素位置。半像素搜索点1和2不能进行搜索,因为水平或垂直内插滤波需要使用位于窗口外的像素点。图16中用虚线表示水平滤波器滤波位置1和垂直滤波器用于滤波位置2所需的整数像素点位置。可以看出,虚线圆对应存储器访问窗口之外的整像素位置。
在上述示例中,定义了存储器访问窗口,使得在运动矢量修正过程中不会访问窗口之外的像素点(即使是执行内插滤波)。换句话说,存储器访问窗口是包含执行运动矢量修正和内插可能需要访问的像素点的最小窗口。此外,根据基于整数像素点位置执行运动矢量修正所需的像素点,设计了存储器访问窗口。然后,仅能够使用不需要将这种访问窗口扩展其它整数整像素位置的分数像素点位置。需要说明的是,上述示例是针对半像素内插而提供的。然而,本发明并不限于此。一般而言,可使用1/4、1/8等任何分数像素点位置,即使用对应的内插滤波器进行内插。
此外,提供了一种用于确定编码块的运动矢量的方法,包括以下步骤:获取编码块的初始运动矢量和模板;通过在搜索空间使用所述模板进行模板匹配来确定初始运动矢量的修正运动矢量,其中所述搜索空间位于基于初始运动矢量得到的位置上并包括一个或多个分数像素点位置,其中属于搜索空间的每个分数像素点位置分数都是通过使用预定义抽头大小的滤波器进行内插滤波获得的,该滤波器仅访问位于窗口内的整数像素点,所述窗口由在所述搜索空间中执行模板匹配时可访问的整数像素点组成。抽头与滤波系数相对应。抽头大小与滤波顺序相对应。在此,假设滤波器为线性滤波器。在一些示例中,滤波器可以是对称的,即具有对称系数。然而,本发明不限于对称滤波器或线性滤波器或任何种类的滤波器。一般而言,可以基于相邻像素点以任何方式获得分数像素点位置。
图17示出了根据一个实施例的方法的示例性实施方式。函数InterpolationFilterLength(C)返回为了执行内插滤波而在水平和垂直方向必须使用的额外像素点数。所需像素点数的变化取决于:
-搜索坐标是否为整数像素、半像素或四分之一像素位置。
-是否需要在水平方向、垂直方向或者两个方向都使用内插滤波器来生成搜索坐标像素点。
该方法从步骤1730开始。具体而言,初始运动矢量位置为待测试的第一搜索空间位置C(x,y)。为了执行内插滤波,函数InterpolationFilterLength(C)针对此位置返回水平和垂直方向的像素点数。如果C(x,y)与InterpolationFilterLength(C(x,y))之和超过MAX(max_x,max_y)定义的访问窗口大小,则该位置不作为搜索空间的一部分。相反,在步骤1740中,选择要测试的下一个搜索坐标C(x,y)(例如,x或y或两者都递增,取决于执行搜索的顺序)。如果步骤1730中的测试位置不需要超出访问窗口,则在步骤1710中,针对该位置C(x,y)执行作为运动矢量修正一部分的模板匹配。然后,在步骤1720中测试是否仍有用于模板匹配的搜索空间位置。如果没有,则终止修正。如果有,则在步骤1740中选择下一个坐标,并且为新位置评估步骤1730的条件。重复这些步骤。
换句话说,本实施例基于以下观察:与分数内插结合实施的运动矢量修正可能需要进一步增加片上存储器大小,甚至增加外部存储器访问次数。这两种选择都是不可取的。
鉴于上述问题,本实施例提供运动矢量预测,能够考虑对外部存储器的访问次数以及在对编码块的运动矢量执行修正时所需的可访问像素点的数量。
这通过将像素点数量限制为执行整数像素点模板匹配时所需的像素点数量,并且仅启用那些可以通过预定内插滤波器获得整数的分数像素点位置而不需要额外整像素点来实现。
根据本发明一方面,提供了一种用于确定编码块的运动矢量的装置,包括处理电路,用于:获取编码块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正运动矢量。该搜索空间位于基于初始运动矢量得到的位置上,并且包括一个或多个分数像素点位置,其中,属于该搜索空间的分数像素点位置中的每个分数像素点位置是通过使用预定义抽头大小的滤波器执行内插滤波获得的,所述滤波器仅访问位于窗口内的整数像素点,所述窗口由在所述搜索空间中执行所述模板匹配时可访问的整数像素点组成。
这种运动矢量确定的优点之一是,对编码块执行运动矢量修正时可访问的像素点数量得到线制,同时限制了对外部存储器或通常对存储整个参考图像的内存/存储器/缓存的访问次数。
在一个示例中,将窗口定义为相对于编码块初始运动矢量的N个整数像素点列和M个整数像素点行,N和M为非零整数值。这样定义可以提供一种简单方法来指定执行运动矢量确定和/或修正需要获得哪些像素点。例如,还可以很容易在比特流流或标准中进行配置。
在一个实施例中,处理电路用于通过在搜索空间使用所述模板进行模板匹配确定初始运动矢量的修正运动矢量,该搜索空间在最近一次迭代中沿搜索空间的一个或多个最佳匹配位置指定的方向迭代扩展,且窗口由预定义的最大迭代次数限定。
搜索空间可包括该窗口的矩形子窗口,使得对子窗口中的每个分数像素点执行内插滤波时访问的所有整数像素点位于预定义抽头大小的内插滤波器使用的窗口内。
具体而言,在一个具体示例中,当分数像素点位置位于整数像素点的相应水平线或垂直线上时,内插滤波器是访问K个水平或垂直整数像素点的一维滤波器。
此外,例如,搜索空间还包括位于子窗口之外的分数像素点位置,该分数像素点位置:
-与子窗口的上方或下方相邻且在整数像素点的水平线上,或
-与子窗口的左侧或右侧相邻且在整数像素点的垂直线上。
根据本发明另一方面,提供了一种编码装置,用于将拆分为编码块的视频图像编码到比特流中,该编码装置包括:如上所述的用于确定编码块的运动矢量的装置;编码电路,用于对编码块与基于确定的运动矢量的位置上的编码块得到的预测值之间的差值进行编码,以及用于生成包括编码差值和初始运动矢量的比特流。
根据本发明另一方面,提供了一种解码装置,用于从比特流中解码出拆分为编码块的视频图像,该解码装置包括:解析单元,用于从比特流中解析出初始运动矢量和编码块与修正运动矢量指定的位置上的编码块得到预测值之间的编码差值;如上所述的用于确定编码块的修正运动矢量的装置;以及解码电路,用于通过解析差值和由修正运动矢量指定的位置上的编码块给出的预测值的函数来重建编码块。该函数可以是或包括和。该函数还可包括裁剪、取整、比例缩放或其它运算。
根据本发明另一方面,提供了一种用于确定编码块的运动矢量的方法,包括以下步骤:获取编码块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正运动矢量,其中,该搜索空间位于由初始运动矢量给出的位置上并且包括一个或多个分数像素点位置,属于搜索空间的分数像素点位置中的每个分数像素点位置都是通过使用预定义抽头大小的滤波器执行内插滤波获得的,滤波器仅访问位于窗口内的整数像素点,所述窗口由在搜索空间中执行模板匹配时可访问的整数像素点组成。
例如,将窗口定义为相对于编码块初始运动矢量的N个整数像素点列和M个整数像素点行,N和M为非零整数值。
在一个实施例中,初始运动矢量的修正运动矢量是通过在搜索空间中使用所述模板进行模板匹配确定的,该搜索空间在最近一次迭代中沿搜索空间的一个或多个最佳匹配位置值定的方向迭代扩展,且窗口由预定义的最大迭代次数限定。
在一种示例性实施方式中,搜索空间包括该窗口的矩形子窗口,使得对子窗口中的每个分数像素点执行内插滤波时访问的所有整数像素点位于预定义抽头大小的内插滤波器的窗口内。
此外,例如,当分数像素点位置位于整数像素点的相应水平线或垂直线上时,内插滤波器是访间K个水平或垂直整数像素点的一维滤波器。
有利的是,搜索空间还包括位于子窗口之外的分数像素点位置,该分数像素点位置:与子窗口的上方或下方相邻且在整数像素点的水平线上,或与子窗口的左侧或右侧相邻且在整数像素点的垂直线上。
填充
或者,为了基于存储器访问窗口限制搜索空间中的分数像素点位置,本发明在其另一个实施例中填充位于存储器访问窗口之外的像素点,如果需要的话,例如,为了内插分数像素点。
提供替换像素点(填充像素点)搜索空间上的模板匹配结合也是有利的,这些搜索空间也包括分数像素点。换句话说,编码块的搜索空间可以包括至少一个分数像素点位置,该至少一个分数像素点位置的值是通过预定义抽头大小的滤波器执行内插滤波得到的。内插滤波使用窗口中的像素点位置值和至少一个替换值来获得至少一个分数像素点位置值。
图18示出了用于运动矢量修正的存储器访问窗口,该窗口围绕中心点1810,中心点1810是初始运动矢量指向的位置。此外,分数像素点位置1820也属于搜索空间。然而,分数像素点位置1820将由6抽头滤波器使用分数像素点位置左侧的3个整数像素点位置和分数像素点位置右侧的3个整数像素点位置进行内插。由于分数像素点位置1820在整数像素点位置的线上,因此可以使用一维滤波器执行内插,例如,如上文参考图9描述的示例所示的一维滤波器。如图18所示,为了内插分数像素点1820,还需要两个位于窗口之外的像素点位置1830。为了避免从外部存储器额外加载这些像素点,根据本发明,将窗口外位置1830的值替换为基于窗口内的像素点获得的值。
图18示出了分数像素点位置1820,分数像素点位置1820位于两个整数像素点位置的中间且因此是半像素位置。然而,本发明同等地可以应用于其它分数像素点位置,例如四分之一或1/8像素位置。此外,像素点位置1820位于与整数像素点位置中的行对应的水平线上,以便可以使用水平一维滤波执行内插。然而,本发明不限于此类分数像素点位置。相反,分数像素点位置可以位于与整数像素点位置的列对应的垂直线上,以便可以使用垂直一维滤波执行内插。此外,分数像素点位置根本不必与整数像素点位于同一像素线上。在这种情况下,可以使用二维滤波对此类像素点进行内插;这种2D滤波可以与垂直和水平1D滤波分开。
各种分数像素点位置的示例如图15所示。具体而言,分数像素点位置1是同时通过水平和垂直滤波执行内插的位置,因为该位置不在整数像素点位置的行和列线上。位置2为只通过水平滤波执行内插的位置,位置6为只通过垂直滤波执行内插的位置。图15中所示的所有分数像素点位置都可以只通过窗口内的整数像素点位置获得。
返回图18,根据一个实施例,围绕非修正运动矢量1810指向的位置定义执行修正的存储器访问窗口。该窗口标识为了执行运算矢量修正搜索而需要从存储器访问的像素点的最大数量。这里的搜索空间对应于访问窗口。换句话说,为了简单起见,在本示例中,模板的大小被认为是1×1,但是在实际中,通常可以并且会更大。存储器访问窗口通常定义在编码块周围扩展。在本示例中,该窗口包括左侧/右侧的4个像素点和上方/下方的4个像素点。如果在模板匹配期间测试的当前搜索空间位置需要来自存储器访问窗口之外的像素点,则通过填充获得重建编码块所需的像素点。这是图18中分数像素点位置1820的情况。如果模板匹配要在此位置上或使用此位置执行,则必须使用位于窗口之外的附加填充位置1830进行内插。
例如,可以使用以下方法之一生成填充像素点:
-最接近像素点复制。
-沿内插滤波的轴进行镜像。
具体而言,最接近像素点复制是指一种确定替换值等于最接近的访问整数像素点位置的值的方法。例如,在图18中,两个缺失的位置1830的值将被替换成紧邻待内插的分数像素点位置1820右边的像素点的值。然而,需要说明的是,此方法仅仅是一个示例,本发明不限于仅复制相邻像素点。或者,可以使用几个最接近的像素点位置来内插缺失像素点1830。例如,可以使用边界上的离缺失像素点最接近的三个像素点(例如通过加权平均)来内插缺失像素点,例如通过加权平均,其中将权重设为与这三个像素点与缺失像素点的距离成反比。
镜像是指一种方法,根据该方法,通过相对于内插滤波器的轴对相应的访问整数像素点位置的值进行镜像来确定替换值。例如,在图18中,两个缺失的像素点1830将替换为分数像素点位置1820左侧的像素点的值。具体而言,分数像素点位置1820右侧的第二个像素点替换为分数像素点位置1820左侧第二个位置的值,而分数像素点位置1820右侧的第三个像素点替换为分数像素点位置1820左侧第三个位置的值。
需要说明的是,还可以应用上述两种方法的组合,其中,缺失像素点是镜像像素点和最接近像素点的函数。
根据一个实施例,窗口由在搜索空间内的整数像素点位置上执行模板匹配时可访问的所有整数像素点位置组成。例如,这是图18的示例的情况,其中窗口外的附加像素点仅在对非整数、分数像素点位置执行模板匹配时是必需的。换句话说,在图18中,在上述示例中,要搜索的半像素坐标需要使用存储器访问窗口之外的像素点。因此,执行填充操作来生成不可用像素点。然而,本发明并不限于此。
图19示出了一种窗口不包括在所述搜索空间内对整数像素点位置执行模板匹配时可访问的所有整数像素点位置的替代方法。在先前的示例中,为简单起见,将编码块大小描述为1×1。在图19中,大小是4×4个整数像素点。在本示例中,如果搜索坐标(待计算模板匹配的位置)指向整数像素点,则在块中的一些像素点位于存储器访问窗口之外的情况下仍然可以进行填充。这种方法可以进一步限制窗口大小。
具体如下:图19示出了包括一些可访问像素点的窗口1920,初始运动矢量指向标记编码块左上角的位置。在此,搜索空间可被视为等同于该窗口。然而,需要说明的是,搜索空间通常可以小于该窗口,这样是有意义的,因为如果模板大于1×1个整数像素点,则除了搜索空间中包括的像素点之外,还需要其它像素点来执行模板匹配。然而,如果搜索空间定义了窗口的大小,则替代地,可以填充缺失像素点。图19显示了窗口的第二行和第10列中的示例性搜索位置。模板为4×4个整数像素点的模板匹配也需要窗口外的像素。因此,这些像素点被填充,即被根据窗口内像素点确定或计算的值替换。可以采用上述填充方法,例如最接近相邻像素点或镜像。
窗口可以根据其相对于以下各者的垂直和/或水平大小定义:
-搜索空间,或者
-包括初始运动矢量位置上的编码块大小的块,或
-初始运动矢量位置。
窗口定义的示例如图11所示,并在上文中进行了描述。这对应于基于初始运动矢量位置上的编码块的大小确定窗口大小。或者,窗口大小可以相对于初始矢量位置在x和y方向中的一个方向或两个方向上的大小来定义。例如,可以将窗口定义为位于初始运动矢量指向的位置周围,并将A个整数像素点向上、下、左、右方向中的每个方向扩展。或者,该窗口可以将A个整数像素点分别向左和向右扩展,B个整数像素点分别向上和向下扩展。其它定义是可能的。
根据一个实施例的方法,使用图20中示出的以下步骤确定编码块的运动矢量。在步骤2010中,获得编码块的初始运动矢量和模板,随后通过在搜索空间使用所述模板进行模板匹配来确定所述初始运动矢量的修正运动矢量。搜索空间位于基于初始运动矢量得到的位置上。在2020中确定存储器访问窗口。需要说明的是,这不必明确执行。存储器访问窗口可以是预定义和已知的。因此,为了说明,本步骤是为了表示存储器访问窗口大小的信息是已知的。然后执行步骤2030至2090进行模板匹配。
模板匹配:访问预定义窗口内的整数像素点位置,该预定义窗口包括所述搜索空间和执行模板匹配时可访问的其它整数像素点位置;将位于窗口之外的至少一个整数像素点位置替换为基于所述窗口内的至少一个像素点的替换值。使用访问整数像素点位置值以及替换值执行模板匹配,如图20所示。对搜索空间中的所有位置执行模板匹配。在步骤2030中,测试当前位置上的模板匹配是否需要一个或多个位于存储器访问窗口之外的像素点。如果是肯定的(在步骤2030中为是),则在步骤2040中如上所述填充窗口外的像素点。该步骤之后,在步骤2050中使用填充像素点在当前位置执行模板匹配(即搜索)。或者,如果所有必要的像素点均未超出窗口(在步骤2030中为否),则在步骤2050中使用可用像素点在当前位置执行模板匹配(即搜索)。如果当前位置是待测试搜索空间中的最后一个位置(在步骤2060中为是),则模板匹配结束。否则(在步骤2060中为否),则在步骤2070中获得下一个位置,并且如上文所述,在步骤2030中继续对新位置执行模板匹配。
在模板匹配结束后,识别最佳匹配位置(例如,作为代价最低的存储位置)。
换句话说,本实施例提供运动矢量预测,能够考虑外部存储器访问次数以及为对编码块的运动矢量执行运动矢量修正时可访问所需的像素点数量。这通过将位于预定义存储器访问窗口之外的用于运动矢量修正和/或分数内插的值替换为基于来自存储器访问窗口内的一个或多个像素点的替换值来实现。根据本发明一方面,提供了一种用于确定编码块的运动矢量的装置,包括处理电路,用于:获得所述编码块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定所述初始运动矢量的修正运动矢量。所述搜索空间位于基于初始运动矢量得到的位置上,此外,所述模板匹配为:访问预定义窗口内的整数像素点位置,该预定义窗口包括所述搜索空间和执行模板匹配时可访问的其它整数像素点位置;将位于窗口之外的至少一个整数像素点位置替换为基于该窗口中的至少一个像素点的替换值;使用访问整数像素点位置值以及替换值执行模板匹配。
这种装置提供了的优点是,限制为了执行运动矢量确定(修正)而要使用的像素点数量,同时还避免增加对存储全部参考图像的存储器/外部存储器的访问次数。
在一个实施例中,所述搜索空间包括至少一个分数像素点位置,该至少一个分数像素点位置的值是通过预定义抽头大小的滤波器执行内插滤波得到的;内插滤波使用所述访问整数像素点位置值和至少一个替换值来获得所述至少一个分数像素点位置值。
例如,通过相对于内插滤波器的轴对访问整数像素点位置的值进行镜像来确定替换值。内插滤波可以是一维滤波,也可以是可分离的二维滤波。
在一个示例性实施方式中,窗口由在搜索空间内的整数像素点位置上执行模板匹配时可访问的所有整数像素点位置组成。
例如,根据相对于搜索空间的垂直和/或水平大小,或者根据初始运动矢量位置上的编码块的大小的块,或者根据初始运动矢量位置来定义窗口。
又例如,确定替换值等于最接近的访问整数像素点位置上的值。
根据本发明另一方面,提供了一种编码装置,用于将拆分为编码块的视频图像编码到比特流中,该编码装置包括:如上所述的用于确定编码块的运动矢量的装置;编码电路,用于对编码块和基于确定的运动矢量的位置上的编码块指定的预测值之间的差值进行编码,以及用于生成包括编码差值和初始运动矢量的比特流。
根据本发明另一方面,提供了一种解码装置,用于从比特流中解码出拆分为编码块的视频图像,该解码装置包括:解析单元,用于从比特流中解析出初始运动矢量和编码块与修正运动矢量指定的位置上的编码块指定的预测值之间的编码差值;如上所述的用于确定编码块的修正运动矢量的装置;以及解码电路,用于将编码块重建为解析差值和由修正运动矢量指定的位置上的编码块得到的预测值之和。
根据本发明一方面,提供了一种用于确定编码块的运动矢量的方法,包括以下步骤:获取编码块的初始运动矢量和模板;通过在搜索空间中使用所述模板进行模板匹配来确定初始运动矢量的修正运动矢量。搜索空间位于初始运动矢量得到的位置上。模板匹配:访问预定义窗口内的整数像素点位置,该预定义窗口包括所述搜索空间和执行模板匹配时可访问的其它整数像素点位置;将位于窗口之外的至少一个整数像素点位置替换为基于所述窗口内的至少一个像素点的替换值;使用访问整数像素点位置值以及替换值执行模板匹配。
在一个实施例中,所述搜索空间包括至少一个分数像素点位置,该至少一个分数像素点位置的值通过预定义抽头大小的滤波器执行的内插滤波获得;内插滤波使用所述访问整数像素点位置值和至少一个替换值来获得所述至少一个分数像素点位置的值。
例如,通过相对于内插滤波器的轴对相应的访问整数像素点位置的值进行镜像来确定替换值。此外,在一个示例中,内插滤波是一维滤波,也可以是可分离的二维滤波。
例如,窗口由对所述搜索空间内的整数像素点位置进行模板匹配时可访问的所有整数像素点位置组成。
根据一种示例性实施方式,通过窗口相对于搜索空间的垂直大小和/或水平大小,或者通过初始运动矢量位置上的编码块的大小的块,或者通过初始运动矢量位置来定义窗口。
根据另一个示例,确定替换值等于最接近的访问整数像素点位置的值。
此外,提供了一种编码方法,用于将拆分为编码块的视频图像编码到比特流中,该编码方法包括以下步骤:根据上文任一方法确定编码块的运动矢量;对编码块与基于确定的运动矢量的位置上的编码块给出的预测值之间的差值进行编码,以及生成包括编码差值和初始运动矢量的比特流。
该编码方法还可以包括结合图1中块的功能描述的步骤。
再进一步地,提供了一种解码方法,用于从比特流中解码出拆分为编码块的视频图像,该解码方法包括:从比特流中解析出初始运动矢量和编码块与修正运动矢量指定的位置上的编码块给出的预测值之间的编码差值;根据上文任一方法确定编码块的修正运动矢量;以及将编码块重建为解析差值和由修正运动矢量指定的位置上的编码块给出的预测值的函数(例如,和)。
该解码方法还可以包括结合图2中块的功能描述的步骤。
然而,需要说明的是,图1和图2并不限制本发明。图1和图2仅提供现有编码器和/或解码器内本发明实施方式的非限制性示例。
如上所述的使用初始运动矢量取整的运动矢量确定可以实现为视频信号(运动图像)的编码和/或解码的一部分。然而,运动矢量确定还可以用于图像处理中的其它目的,例如移动检测、移动分析等,但不限于用于编码/解码。
运动矢量确定可实现为一种装置。这种装置可以是软件和硬件的组合。例如,运动矢量确定可以由通用处理器、数字信号处理器(digital signal processor,DSP)、现场可编程门阵列(field programmable gate array,FPGA)等芯片执行。然而,本发明并不限于在可编程硬件上的实现。可以在专用集成电路(application-specific integratedcircuit,ASIC)上实现,或者通过上述硬件组件的组合实现。
运动矢量确定也可以通过存储在计算机可读介质上的程序指令来实现。程序在执行时,使计算机执行上述方法的步骤。该计算机可读介质可以是存储程序的任何介质,例如DVD、CD、USB(闪存)驱动器、硬盘、通过网络可用的服务器存储等。
编码器和/或解码器可以在各种设备中实现,各种设备包括电视机、机顶盒、PC、平板电脑、智能手机等,即任何录制、编码、转码、解码或播放设备。可以是实现方法步骤和存储在/运行在如上述电子设备中包括的处理器上的软件或应用。
概括而言,本发明涉及使用模板匹配的运动矢量确定。首先,获取初始运动矢量。如果所述初始运动矢量指向分数的位置并因此要求从所述整数像素点位置进行插值,则将所述初始运动矢量取整到最近的整数像素点位置。然后,使用所述取整的位置来定义模板匹配的搜索空间,以定义初始运动矢量的修正运动矢量。
Claims (17)
1.一种用于确定编码块的运动矢量的装置,其特征在于,包括处理电路,用于:
获取所述编码块的初始运动矢量和模板;
通过在搜索空间中使用所述模板进行模板匹配来确定所述初始运动矢量的修正运动矢量,
其中,当所述初始运动矢量指向分数像素点位置时,所述搜索空间位于通过将所述初始运动矢量指向的所述分数像素点位置取整到整数像素点位置得到的位置上;
其中,所述处理电路,用于对搜索空间进行模板匹配,其中所述搜索空间的所述像素点位置通过多个步骤确定,包括:
确定由基于整数像素点步长相互间隔的像素点位置组成的整数搜索空间;
在所述整数搜索空间中进行模板匹配以得到最佳匹配的整数像素点位置;
基于所述最佳匹配的整数像素点位置,从最近的整数搜索空间像素点位置中确定具有基于小于整数像素点步长间隔的至少一个像素点的分数搜索空间;
在所述分数搜索空间中进行模板匹配以得到最佳匹配位置。
2.根据权利要求1所述的装置,其特征在于,所述处理电路还用于:
计算指向所述分数像素点位置的所述初始运动矢量的模板匹配代价;
将所述分数像素点位置的所述计算出的模板匹配代价与所述确定的初始运动矢量的修正运动矢量的模板匹配代价进行比较;
如果所述确定的修正运动矢量运动矢量的所述模板匹配代价不低于所述分数像素点位置的所述计算出的所述模板匹配代价,则基于所述分数像素点位置确定所述编码块的所述运动矢量。
3.根据权利要求1或2所述的装置,其特征在于,所述搜索空间由基于整数像素点步长相互间隔的像素点位置组成。
4.根据权利要求1至3中任一项所述的装置,其特征在于,所述搜索空间由基于整数距离相互间隔的行和列中的K行和L列的像素点组成,其中所述取整的分数像素点位置是所述搜索空间的像素点之一。
5.根据权利要求1至4中任一项所述的装置,其特征在于,所述取整的分数像素点位置主要位于所述搜索空间的中心。
6.根据权利要求1至5中任一项所述的装置,其特征在于,所述取整得到的位置为最接近所述初始运动矢量指向的所述分数像素点位置的整数像素点位置。
7.根据权利要求6所述的装置,其特征在于,如果存在一个以上与所述分数像素点位置等同接近的整数像素点位置,则所述取整得到的位置为在预定方向上的整数像素点位置,所述预定方向为左侧、右侧、上方或下方。
8.根据权利要求6所述的装置,其特征在于,如果存在一个以上与所述分数像素点位置等同接近的整数像素点位置,则所述搜索空间为位于所述一个以上与所述分数像素点位置等同接近的整数像素点位置上的搜索空间之和。
9.根据权利要求6所述的装置,其特征在于,如果存在一个以上与所述分数像素点位置等同接近的整数像素点位置,则所述取整得到的位置为所述等同接近的整数像素点位置中的一个,从而使得所述取整后的初始运动矢量的幅值更小。
10.根据权利要求1至9中任一项所述的装置,其特征在于:
所述搜索空间位于所述取整后的初始运动矢量得到的位置上,并且包括一个或多个分数像素点位置;
属于所述搜索空间的所述分数像素点位置中的每个分数像素点位置都是通过使用预定义抽头大小的滤波器进行内插滤波获得的,其中所述滤波器仅访问位于窗口内的整数像素点;
所述窗口由所述搜索空间中的所述模板匹配可访问的整数像素点组成。
11.根据权利要求1至9中任一项所述的装置,其特征在于:
所述搜索空间位于基于所述初始运动矢量得到的位置上,
所述模板匹配包括:
访问预定义窗口内的整数像素点位置,所述预定义窗口包括所述搜索空间和所述模板匹配可访问的其他整数像素点位置;
将位于所述窗口之外的至少一个整数像素点位置替换为基于所述窗口中的至少一个像素点的替换值;
使用所述已访问的整数像素点位置的值以及所述替换值进行所述模板匹配。
12.一种对编码块进行编码的装置,其特征在于,包括:
根据权利要求1至11中任一项所述的用于确定所述编码块的运动矢量的装置;
编码单元,用于对所述编码块与根据所述运动矢量得到的预测值之间的差值进行编码,生成比特流。
13.一种用于从比特流中解码编码块的装置,其特征在于,包括:
解码单元,用于从所述比特流中解码所述编码块与根据运动矢量得到的预测值之间的差值;
根据权利要求1至11中任一项所述的用于确定所述编码块的运动矢量的装置;
运动预测单元,用于根据所述运动矢量确定所述预测值;
重构器,用于根据所述预测值和所述解码差值重构所述编码块。
14.一种用于确定编码块的运动矢量的方法,其特征在于,包括以下步骤:
获取所述编码块的初始运动矢量和模板;
通过在搜索空间中使用所述模板进行模板匹配来确定所述初始运动矢量的修正运动矢量,
其中,当所述初始运动矢量指向分数像素点位置时,所述搜索空间位于通过将所述初始运动矢量指向的所述分数像素点位置取整到整数像素点位置得到的位置上;
其中,对搜索空间进行模板匹配,其中所述搜索空间的所述像素点位置通过多个步骤确定,包括:
确定由基于整数像素点步长相互间隔的像素点位置组成的整数搜索空间;
在所述整数搜索空间中进行模板匹配以得到最佳匹配的整数像素点位置;
基于所述最佳匹配的整数像素点位置,从最近的整数搜索空间像素点位置中确定具有基于小于整数像素点步长间隔的至少一个像素点的分数搜索空间;
在所述分数搜索空间中进行模板匹配以得到最佳匹配位置。
15.一种用于编码编码块的方法,其特征在于,包括:
根据权利要求14所述的方法确定所述编码块的运动矢量;
对所述编码块与根据所述运动矢量得到的预测值之间的差值进行编码,生成比特流。
16.一种从比特流中解码编码块的方法,其特征在于,包括:
从所述比特流中解码所述编码块与根据运动矢量得到的预测值之间的差值;
根据权利要求14所述的方法确定所述编码块的运动矢量;
根据所述运动矢量确定所述预测值;
根据所述预测值和所述解码差值重构所述编码块。
17.一种计算机可读介质,其特征在于,所述计算机可读介质存储指令,所述指令在处理器上运行时,使得所述处理器执行根据权利要求14至16中任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/EP2017/075714 WO2019072372A1 (en) | 2017-10-09 | 2017-10-09 | MOTION VECTOR REFINEMENT OF A MOTION VECTOR POINTING TO A FRACTIONAL SAMPLE POSITION |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111201792A CN111201792A (zh) | 2020-05-26 |
CN111201792B true CN111201792B (zh) | 2022-06-14 |
Family
ID=60080795
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780095766.4A Active CN111201792B (zh) | 2017-10-09 | 2017-10-09 | 指向分数像素点位置的运动矢量的修正运动矢量 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11159820B2 (zh) |
EP (1) | EP3682634A1 (zh) |
CN (1) | CN111201792B (zh) |
WO (1) | WO2019072372A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7171770B2 (ja) | 2018-06-28 | 2022-11-15 | ホアウェイ・テクノロジーズ・カンパニー・リミテッド | 動きベクトル精密化および動き補償のためのメモリアクセスウィンドウおよびパディング |
EP4266687A1 (en) * | 2018-11-16 | 2023-10-25 | Sharp Kabushiki Kaisha | Methods for deriving a motion vector prediction in video coding |
WO2020191034A1 (en) * | 2019-03-18 | 2020-09-24 | Tencent America LLC | Method and apparatus for video coding |
EP3970376A4 (en) * | 2019-06-17 | 2022-11-09 | Beijing Dajia Internet Information Technology Co., Ltd. | METHODS AND DEVICES FOR DECODER-SIDE MOTION VECTOR REFINING IN VIDEO CODING |
JP7534395B2 (ja) * | 2019-09-30 | 2024-08-14 | ホアウェイ・テクノロジーズ・カンパニー・リミテッド | インター予測装置用の補間フィルタおよびビデオコーディングのための方法 |
CN117678220A (zh) * | 2021-06-29 | 2024-03-08 | 抖音视界有限公司 | 用于视频处理的方法、装置和介质 |
US12114009B2 (en) * | 2021-09-22 | 2024-10-08 | Tencent America LLC | Method and apparatus for adaptive reordering for reference frames |
CN118369917A (zh) * | 2021-09-29 | 2024-07-19 | 抖音视界有限公司 | 用于视频处理的方法、装置和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101686393A (zh) * | 2008-09-28 | 2010-03-31 | 华为技术有限公司 | 应用于模板匹配的快速运动搜索方法及装置 |
CN102263951A (zh) * | 2011-07-06 | 2011-11-30 | 北京航空航天大学 | 一种快速的分形视频压缩与解压缩方法 |
CN103974077A (zh) * | 2014-05-14 | 2014-08-06 | 东南大学 | 一种用于h.264编码的整数运动估计快速搜索方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7116831B2 (en) * | 2002-04-10 | 2006-10-03 | Microsoft Corporation | Chrominance motion vector rounding |
US9544592B2 (en) * | 2012-02-10 | 2017-01-10 | Texas Instruments Incorporated | Methods and systems for encoding pictures associated with video data |
US9325991B2 (en) * | 2012-04-11 | 2016-04-26 | Qualcomm Incorporated | Motion vector rounding |
US9693060B2 (en) * | 2012-11-16 | 2017-06-27 | Qualcomm Incorporated | Device and method for scalable coding of video information |
US10200711B2 (en) * | 2015-03-27 | 2019-02-05 | Qualcomm Incorporated | Motion vector derivation in video coding |
WO2016176592A1 (en) * | 2015-04-29 | 2016-11-03 | Arris Enterprises Llc | Reference picture selection for inter-prediction in video coding |
EP3876541A1 (en) * | 2015-09-02 | 2021-09-08 | Mediatek Inc. | Fast sum of absolute differences calculation for motion vector derivation in video coding |
US10701366B2 (en) * | 2017-02-21 | 2020-06-30 | Qualcomm Incorporated | Deriving motion vector information at a video decoder |
-
2017
- 2017-10-09 WO PCT/EP2017/075714 patent/WO2019072372A1/en unknown
- 2017-10-09 CN CN201780095766.4A patent/CN111201792B/zh active Active
- 2017-10-09 EP EP17783460.3A patent/EP3682634A1/en active Pending
-
2020
- 2020-04-08 US US16/843,707 patent/US11159820B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101686393A (zh) * | 2008-09-28 | 2010-03-31 | 华为技术有限公司 | 应用于模板匹配的快速运动搜索方法及装置 |
CN102263951A (zh) * | 2011-07-06 | 2011-11-30 | 北京航空航天大学 | 一种快速的分形视频压缩与解压缩方法 |
CN103974077A (zh) * | 2014-05-14 | 2014-08-06 | 东南大学 | 一种用于h.264编码的整数运动估计快速搜索方法 |
Non-Patent Citations (1)
Title |
---|
Algorithm Description of Joint Exploration Test Model 7 (JEM 7);Jianle Chen;《Joint Video Exploration Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11 7th Meeting: Torino, IT, 13–21 July 2017》;20170819;第2.2.2-2.3.8节,图20-24 * |
Also Published As
Publication number | Publication date |
---|---|
EP3682634A1 (en) | 2020-07-22 |
US11159820B2 (en) | 2021-10-26 |
WO2019072372A1 (en) | 2019-04-18 |
US20200236398A1 (en) | 2020-07-23 |
CN111201792A (zh) | 2020-05-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111886870B (zh) | 使用整数像素分辨率的运动矢量修正搜索 | |
CN111567047B (zh) | 进行子预测块运动矢量推导的存储器访问窗口 | |
CN111201792B (zh) | 指向分数像素点位置的运动矢量的修正运动矢量 | |
KR102527169B1 (ko) | 모션 벡터 리파인먼트를 위한 제한된 메모리 액세스 윈도우 | |
US11153595B2 (en) | Memory access window and padding for motion vector refinement |
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 |