CN102263947B - 图像运动估计的方法及系统 - Google Patents

图像运动估计的方法及系统 Download PDF

Info

Publication number
CN102263947B
CN102263947B CN201110141693.2A CN201110141693A CN102263947B CN 102263947 B CN102263947 B CN 102263947B CN 201110141693 A CN201110141693 A CN 201110141693A CN 102263947 B CN102263947 B CN 102263947B
Authority
CN
China
Prior art keywords
search
block
scanning
row
subwindow
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.)
Expired - Fee Related
Application number
CN201110141693.2A
Other languages
English (en)
Other versions
CN102263947A (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.)
Hong Kong University of Science and Technology HKUST
Original Assignee
Hong Kong University of Science and Technology HKUST
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 Hong Kong University of Science and Technology HKUST filed Critical Hong Kong University of Science and Technology HKUST
Publication of CN102263947A publication Critical patent/CN102263947A/zh
Application granted granted Critical
Publication of CN102263947B publication Critical patent/CN102263947B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/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/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/43Hardware specially adapted for motion estimation or compensation
    • H04N19/433Hardware specially adapted for motion estimation or compensation characterised by techniques for memory access
    • 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/567Motion estimation based on rate distortion criteria

Landscapes

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

Abstract

本发明提供了一种图像运动估计的方法及系统。提供了一种子块运动估计,其包括在运动矢量预测周围的减少搜索范围的完全搜索。还提供了一种单一的(或统一)运动矢量预测和一种类似率失真成本函数的函数。还提供了一种能够降低或基本上消除多余的数据装载和/或实现不同的数据复用率的扫描顺序。而且,还提供了一种基于单一运动矢量预测和类似于率失真代价函数的函数的可重构多分辨率运动矢量重用硬件体系结构。此外,通过利用所披露的方面,只有一小部分过去的运动矢量被传播,且这些方面可以很容易地对不同空间分辨率的视频重新配置。

Description

图像运动估计的方法及系统
本申请要求以下申请的优先权:于2010年5月27日提交的名为“MULTI-RESOLUTIONMOTIONVECTORRE-USEHARDWAREARCHITECTURE”的美国临时申请No.61/344,124;于2010年5月27日提交的名为“RECONFIGURABLESMARTSNAKESCANWITHRRA”的美国临时申请No.61/344,125;于2010年5月27日提交的名为“HARDWAREFRIENDLYVARIABLEBLOCK-SIZEMOTIONESTIMATIONWITHUNIFIEDMOTIONVECTORFREDICTORANDRD-LIKECOSTFUNCTION”的美国临时申请No.61/344,126”。所有的上述申请全部作为引文并入本文。
技术领域
本发明主题涉及视频处理,特别是视频处理中的运动估计。
背景技术
视频的传输和存储对于许多应用非常重要,已经获得了世界范围内的关注。但是,原始的未经压缩的视频序列可能非常大。例如,对于高清视频,原始的未经压缩的视频数据可能近448G。而且,原始的未压缩的视频数据包含很多的冗余信息,像时域上的冗余、空域上的冗余和/或统计冗余。因此,利用视频压缩来减小原始视频数据量。
已经开发了多种视频编码标准,像运动视频专家组的MPEG-1/2/4和国际电信联盟电信标准的ITU-TH.261/263/264,以求达到高效的视频压缩。例如,不同的编码标准应用运动估计和补偿来实现视频压缩,对时域冗余信息进行压缩。一些视频编码方法应用离散余弦变换来实现对空间冗余信息的压缩。一些利用熵编码实现统计压缩。还有一些视频编码标准应用量化来减少视觉冗余以达到压缩目的。
然而,各种视频压缩技术都会有相应的权衡,那就是增加运算的复杂度和编码时间。例如,整数运动估计占用了将近60%的编码时间。如果采用分数运动估计,相应的编码时间会达到90%。
之前对于现代的视频处理技术上的描述的不足之处仅仅是为了提供一个对传统系统概述的一些问题,而不是为了进行穷举。传统系统的其他问题在以下的描述中将更加明了。
发明内容
此处给出有关本发明概要的描述。
根据一个或多个方面以及对应的公开内容,各方面都是和率失真最优化(RDO)运动矢量预测(MVP)偏移可变块大小(VBS)运动估计算法有关(将该算法称为率失真最优化单一运动矢量预测偏移全搜索(RDOMFS)算法),及其对应的可重构的硬件架构。在一方面,RDOMFS使用易于硬件实现的一个单一MVP(SMVP)及RD代价函数,以能够取得与H.264参考软件JM中的FS-RD-var-mvp相似的编码效率。在其他方面,匹配算法对应的硬件架构使用了2-D脉动阵列来实现所提出的RDOMFS。RDOMFS重新使用当前帧中的MVP,以消除或者基本上消除将MV存储在片上芯片中的需要。一个新颖的MV再利用架构被提出,从而可以消除,或极大地减少MV所需的存储器。其次,RDOMFS使用了一种新型的扫描方法,在搜索窗口中使用了一种新的扫描顺序,使得冗余度去能够被最小化,且能够实现不同的数据利用率。
以下将详细描述这些和其它实施例。
附图说明
参照附图,进一步描述各种非限制性实施例,其中:
图1显示了提供视频压缩的示例性系统的上层框图;
图2A显示了对于不同的块大小的H.264中值运动矢量预测值的定义;
图2B显示了根据一个方面的所有子块统一的单一运动矢量预测值(SMVP);
图2C显示了左侧、顶部和右上角子块的空间上的不同定义;
图3显示了根据一个方面的一种视频压缩方法;
图4显示了根据一个方面的一种系统;
图5显示了所公开方面的顶层框图;
图6A显示了传统的光栅扫描;
图6B显示了传统的蛇型扫描;
图6C显示了根据一个方面的一种智能的蛇型扫描顺序;
图6D示出了根据一个方面的图6C的两个放大的子区域;
图7显示了根据一个方面的一种视频处理的方法;
图8显示了根据一个方面的一种视频编码的系统;
图9显示了当前帧中MVP再利用方法的概念;
图10显示了根据一个方面的一种多分辨率MVP再利用策略的设备;以及
图11显示了根据一个方面的一种视频编码的方法。
具体实施方式
如之前所提到的,许多应用都利用视频的传输和存储,因此,高效的视频压缩得到了广泛的关注。传统的视频压缩技术或应用运动估计和补偿来实现视频压缩中对时域冗余信息的压缩,应用离散余弦变换来实现对空间冗余信息的压缩,利用熵编码实现统计压缩和应用量化来减少视觉冗余,以达到压缩的目的。
运动估计(ME)和运动补偿(MC)可有效降低时域冗余,因为时域上相邻帧之间存在很强的时间相关性。通过使用参考帧预测的框架,构建一个预测帧,并从当前帧减掉预测帧,得到的帧(称为残帧)往往有比原来低得多的熵,从而可以用提升的编码率失真性能编码。
然而,ME的效率有一个权衡,这就是增加了计算复杂性和编码时间。运动估计主要包括两部分:整数ME和分数ME。根据H.264参考软件(JM)的整像素运动估计(IME)的计算复杂度可以消耗近60%的编码时间。当包含分像素运动估计,可以消耗高达90%的编码时间。
现有运动估计技术大多是基于块匹配(BM)。通常,在块匹配中,当前帧被划分为非重叠的块,称为宏块(MB),每个宏块的大小为N×N(例如,N=16)。对于当前帧中的每个当前的宏块MB,搜索窗口是指在参考帧中围绕一个参考点(例如,前一帧的相同位置的点或某一预测位置)的局域。不失一般性,在该详细描述中,假设在水平方向和垂直方向搜索范围是[-P,P)。在搜索窗口中的每个点被称为一个搜索位置,相当于一个候选宏块用以对当前宏块进行预测。一个失真测度被定义为衡量候选宏块和当前宏块的相似性。在搜索窗口搜索与当前宏块最相似的候选宏块(即,匹配宏块)。匹配宏块和当前宏块的位移称为运动矢量(MV)。
存在很多方法来确定在搜索窗口中的候选宏块与当前宏块的不匹配程度,如平方差(SSD)的总和、绝对变换差之和(SATD)。当然,不匹配程度越小意味着相似程度越高。然而,由于简单性和有效性,最常用的衡量不匹配程度的是绝对差之和(SAD)。
SAD k , l ( m , n ) = Σ i = 0 N - 1 Σ j = 0 N - 1 | X t ( k + i , l + j ) - X t - 1 ( k + m + i , l + n + j ) | - - - ( 1 )
其中(m,n)为在-Pm,n<P范围内的运动矢量,Xt(i,j)和X(t-1)(i,j)为在位置(i,j)处的t时刻的当前帧和在t-1时刻的参考帧的像素值,(k,l)为在当前帧的当前块的位置。SAD计算具有高度的一致性并且适合高效的实现。此外,传统的运动估计架构基于SAD。最近,另一种方法,拉格朗日率失真(RD)成本函数,已经得到广泛的关注。RD的一般形式是:
RDCost=D+λ·R(2)
其中D是失真率,例如SSD,SATD或SAD,R是相关的码率(如MV和/或残差的),λ是拉格朗日乘数。
在一般情况下,因为MV本身可能需要许多位来编码,寻找具有最小不匹配度的MV的方法可能无法找到合适的MV。例如,一个次优不匹配MV可能需要很少的位数来编码。这就是H.264编码器的情况,其需要用很多的位数来编码运动矢量。例如,在H.264编码器中,一个接近于中值预测运动矢量(MVP)的MV比离中值更远的MV需要用更少的位数来编码。为了实现码率失真优化,SAD或者SSD的成本函数一般不适合。相反,拉格朗日码率失真成本函数是一个很好的解决方案。例如,λ的选择使得能够在R项和D项之间进行一种权衡。一个具有大λ的码率失真函数往往是由R主导整个函数,这样,倾向于选择具有小码率(R)的MV。另一方面,一个具有小λ的率失真代价往往是由D主导整个函数,这样,倾向于选择具有小失真率的MV。这是为什么码率失真成本函数被经常用在最先进的视频编码中,如H.264/AVC,例如,去实现高质量率失真性能。在H.264中,λ对不同的量化参数Qp是不同的,Qp可以有51个左右可能的值。当率失真成本函数被应用时,运动估计指的是率失真最优或者RDO。但是,在硬件中难以实现率失真成本函数,因为使用率失真成本函数的计算使用浮点乘法和/或用于查找表的硬件资源的耗费很严重。
一个普遍的运动估计技术是全搜索块匹配算法(FS),其以硬算方式搜索了搜索窗口中的所有搜索点。FS是零偏置,这意味着其在参考帧中搜索窗口的中心坐标和当前MB的位置相同或大致相同。全搜索是搜索搜索区域中的所有点,因此,可以实现全局最小不匹配,因此也有良好的视觉质量。全搜索在软件实现中需要巨大的计算量,然而,全搜索可以有效地用硬件实现以获得良好的数据吞吐量,因为它的数据流是有规律的且适合用于流水线。此外,数据复用可以在相邻的搜索区域之间被利用,因为它们的参考像素区域是重叠的。
除了全搜索算法,人们提出了许多快速运动估计(FME)算法来避免全搜索的巨大的计算量。许多的快速搜索算法在搜索中心周围进行一定的搜索。搜索中心可能是零偏置或MVP偏置的。零偏置搜索中心是(0,0)运动矢量。一些常用的零偏置的快速搜索算法包括NTSS(新三步搜索)、菱形搜索,FTS(动态三角搜索)、交叉搜索。MVP偏置搜索的搜索中心是根据一定的标准从许多MVP中选择出来的。通常典型的MVP是空间和时间上相邻块的MV。此外,MVP偏置的搜索中心可能是或可能不是(0,0)运动矢量。一些常见的MVP偏置搜索包括PMVFAST(预测的运动矢量场自适应搜索技术)、UMHexagonS、以及EPZS(有效的预测区域算法)。通常情况下,一些局部搜索是围绕在FME搜索中心进行的。在这种情况下,最后获得的MV只能达到局部最小不匹配(而不是FS的全局最小)。往往这种局部最小不匹配会导致比全搜索低的视觉质量。然而,MVP偏置的快速运动估计搜索算法往往比零偏置快速运动估计搜索算法具有的更高的视觉质量,因为MVP偏置的搜索中心往往是较零偏置搜索中心更加接近全搜索的全局最低点。有时,许多MVP偏置的快速搜索算法的率失真性能大致和全局搜索的相同。这大概就是为什么MVP偏置的快速搜索算法在MPEG-4和H.264等参考软件中使用的原因。另一个MVP偏置搜索中心可取的特点是,它往往会提供比零偏置搜索中心更平滑的运动领域,更接近实际情况。然而,往往难以在硬件中实现MVP偏置的运动估计算法,因为要考虑多个MVP和局部搜索的不规则性往往可以轻易地打破硬件的流水线结构从而降低硬件效率,具有较低的数据再利用和更多的内存访问。
早期的视频编码标准,如MPEG-1、MPEG-2、H.263、和MPEG-4倾向于使用16x16的宏块作为基本的编码单位和执行固定块大小(FBS)的运动估计。另一方面,最新的H.264允许一个16x16MB的宏块被分成均存在自己运动矢量的子块并且对所有可能的子块进行可变块大小(VBS)的运动估计。例如,16x16MB可被划分成大小16×16、16×8、8×16、8×8、8×4、4×8和4×4的子块。VBS的运动估计允许不同的MV有不同的子块,从而可以为所有的子块实现比固定块运动估计更好的匹配。通过改进的预测,VBS的运动估计可以用于H.264以实现更高的编码效率。VBS在宏块中包含多个运动不一致的对象时十分有用。VBS对宏块内存在旋转和变形也是十分有用的。虽然VBS的运动估计比固定块大小的运动估计有良好的码率失真性能,但VBS巨大的计算量和不规则的内存访问使硬件实现很困难。
虽然早期的ME算法由于运算复杂性往往使用SAD作为不匹配原则,最近运动估计算法考虑码率失真问题倾向于使用码率失真函数。在该详细说明中,“-SAD”和“-RD”被用来区分任何算法的两个不同版本:一个用SAD作为衡量不匹配函数,一个使用RD函数作为成本函数。例如,FS-SAD是使用的SAD的全局搜索而FS-RD是使用RD成本函数的全局搜索。同样,在该详细说明中,“-zero”和“-mvp”是分别用来指明零偏置版本和MVP偏置版本的。此外在该详细说明中,“-var”和“-fix”是分别用来表示变化块大小和固定块大小的。例如,FS-SAD-fix-zero是零偏置的以SAD作为不匹配函数的固定块大小的全局搜索,和FS-RD-var-mvp是MVP偏置的以RD函数为衡量函数的变化块大小的全局搜索。
多年来,许多运动估计的架构被提出。其中,有些是针对快速运动估计的,但其中大多数是针对全局搜索的。在那些针对全局搜索的运动估计的框架中,一些是MVP偏置的,一些是应用码率失真函数的,但其中大部分都是零偏置的利用SAD作为失真程度的衡量标准(例如,FS-SAD-zero)。虽然早期的运动估计的架构往往是为实现固定块搜索,而新的体系结构多为变化块大小的搜索。
一些运动估计的体系结构包括一个有16个处理单元(PE)的一维(1-D)脉动阵列结构来实现全搜索VBSME(FSVBSME)。另一个运动估计的架构是三个有256个处理单元的2-D脉动阵列结构,在H.264JM参考软件中相比FS-RD-var-mvp它具有较低的RD性能。其他一些运动估计架构使用FS-RD-var-mvp,但是,这种架构要使用一个额外的芯片上大量内存来存储所有的用于生成MVP的MV。此外,运动估计的架构可能在搜索窗口中产生大量的冗余读取,导致巨大延迟和相当多的功耗。在本详细描述使用的术语“冗余读取”是指数据被读取一次以上。
因此,这将有利于提供更有效率的码率失真优化(RDO)的运动估计,以利用时间冗余达到良好的码率失真(RD)的性能、实时的实现高数据吞吐量、规则的数据流、良好的并行性、以及高的内存利用率。此外,这将有利于提供一个更有效的整数运动估计来实时视频编码。这也有利于提供更有效率的VBS的运动估计。
本发明的一个方面涉及到的一种方法,包括将一个或多个由多个块创建的视频帧划分成多个子块,并确定在一个或多个视频帧中的参考帧。该方法还包括将多个子块的一个搜索区域定义为多个运动矢量预测(MVP)的函数,其中包括将搜索区域集中限定于参考帧内的位置周围。此外,该方法还包括搜索多个子块中的至少一个子块,包括确定率失真(RD)代价,并根据RD代价选择相应的运动矢量作为所述至少一个子块的运动矢量(MV)。
在一个实现方式中,确定RD代价包括确定代价函数中的两个可加项,第一个可加项为当前子块和候选参考子块之间的误差项(即,失真度量),第二个可加项为lambda算子(为子块大小和位置、块位置和类型、量化参数、目标码率、及缓存条件或者缓存性能中的至少一个的函数)与候选运动矢量和运动矢量预测之间的差值的函数二者的乘积。该实现方式进一步包括确定第二可加项包括将第二可加项确定为相邻块或相邻子块的运动矢量的函数。
在另一个实现方式中,该方法包括将多个MVP确定为多个相邻块或相邻子块的MV的函数,以及其中定义搜索区域包括将将搜索中心确定为多个MVP的函数。更进一步,该方法包括将多个MVP中的一个MVP指定作为左方的块、上方的块和右上方的块上的块运动矢量的中值。
在进一步的实现方式中,确定搜索区域包括将搜索中心确定为三个过去的相邻块的运动矢量的中值,这三个以前的相邻块包括一个在左边的第一个块、一个在上方的第二块、和一个在右上方的第三块。更进一步,该方法包括在当第一块或者第二块或者第三块不存在时提供至少一个替代块。在一方面,确定至少一个替代块包括选择左上角位置的第四块。
本发明的另一个方面涉及到一种系统,其包括将一个视频帧分成多个块的分割元件和将多个块划分成多个子块的子分割元件。该系统还包括一个选择元件来从多个子块中选择参考帧,和一个归类元件来来确定一个包括搜索中心的搜索区域。这个搜索区域基于多个运动矢量预测值(MVP)。此外,该系统包括一个评估元件来为搜索区域中所选的搜索点计算率失真(RD)成本函数以为多个子块选择一个运动矢量(MV)。
在一个实现方式中,RD成本函数包括第一元素和第二元素,其中第一元素是一种失真衡量,第二元素是一个参数和一个衡量候选MV和多个MVP中的一个MVP之间的差异的函数的乘积。更进一步,所述参数是lambda,其是子块大小和位置、块位置和类型、量化参数、目标码率、缓存条件和缓存性能的函数。在一个方面,该参数为Lambda并且lambda可以近似成2的幂的线性组合。
在一方面,第二元素的MVP是与过去的相邻块的运动矢量相关的函数。在另一方面,第二元素的MVP是与当前块相关的左边、上方和右上方的过去的相邻块的运动矢量的函数。在另一方面,第二元素的MVP是与当前块相关的左边、上方和右上方的过去的相邻块的运动矢量的中值。
在一个实现方式中,搜索区域和当前块或当前子块和参考帧中同样大小的候选参考块或者候选子块之间的运动矢量相关。在一些实现方式中,搜索中心是MVP。
在一些实现方式中,搜索中心是所确定的三个过去的相邻块的运动矢量的中值。更进一步,三个过去的相邻块包括和当前块相关的一个左边的块、一个上方的块和一个右上方的块。
本发明的另一个方面涉及到一种方法,其包括:从多个视频帧中确定参考帧和在该参考帧中确定包括多个搜索点的搜索区域,该搜索区域包含多个搜索点。该方法还包括将搜索区域划分成多个子窗口和处理多个帧视频,处理多个视频帧包括在多个子窗口中确立扫描顺序,每一个子窗口至少被扫描一次,并且两个扫描顺序相邻的子窗口会在空间上相近。
在一个实现中,扫描多个子窗口包括执行水平扫描、竖直扫描、或同时执行水平扫描和竖直扫描。在一些实现方式中,该方法还包括在参考帧中确定包括多个搜索点的搜索区域之前将一视频帧分成包含NxN个像素的块;以及其中所述处理步骤包括在一个时钟周期内并行读取N个像素和一次性加载子窗口内的所有像素。在进一步的实现方式中,扫描多个子窗口的步骤包括用从16种不同蛇形扫描中所选择的至少一种蛇型扫描来进行扫描。
在一些实现方式中,扫描多个子窗口的步骤还包括用第一种类型的蛇形扫描来扫描第一子窗口、移动到第二子窗口中的相邻搜索点、以及用第二种类型的蛇形扫描来扫描第二子窗口。
在另一实现方式中,将搜索区域划分成多个子窗口的步骤包括将搜索区域划分成一些不相互覆盖的子窗口。在一个实现方式中,扫描多个子窗口的步骤包括使用从搜索窗口的左上角、右上角、左下角、或右下角开始的扫描来定义扫描顺序,以及其中所述扫描是水平扫描或者竖直扫描。某些实现方式中,扫描多个子窗口的步骤包括将搜索区域划分为多个子区域,并且在多个子区域中局部地使用蛇形扫描。
本发明的另外一个方面涉及一种系统,其包括选择元件,用来确定参考帧;一个指定元件,用来在参考帧中定义搜索区域。该系统还包括一个子分割元件,用来将搜索区域分割为多个子窗口;一个扫描元件,用来选择在多个子窗口之间的扫描顺序,每一个子窗口至少被扫描一次,并且扫描顺序相邻的两个子窗口在空间上是接近的。
在一个实现方式上,扫描元件用来实现对多个子窗口的水平扫描、竖直扫描、或水平及竖直扫描。某些实现方式中,所述扫描元件构造为执行其中在第一方向上水平扫描第一行而在第二方向上水平扫描第二行(即,以不同的方向来扫描第一行和第二行)的水平扫描。在另一实现方式中,扫描元件被构造为执行其中在第一方向上竖直扫描第一列而在第二方向上竖直扫描第二列(即,以不同的方向来扫描第一列和第二列)的竖直扫描。在某些实现方式中,扫描元件被构造为需要选择不同扫描顺序的蛇形扫描(包括从搜索窗口区域的左上角、右上角、左下角、右下角开始的蛇形扫描),并且其中蛇形扫描可以为水平扫描或竖直扫描。
某些实现方式中,搜索窗口区域中的多个搜索点是对应于当前块和参考帧中相同大小的候选参考块之间的候选运动矢量,其表示相似大小的当前块和参考块之间的距离。
某些实现方式中,子分割元件被用来将搜索区域分割成多个矩形的子窗口,以及其中搜索区域中的多个搜索点属于多个子窗口。
某些实现方式中,所述系统包含一个数据总线,其配置为在一个时钟周期中读取N个像素,其中参考帧的块包括NxN个像素。所述系统还包括一个可重构寄存器阵列,用来存储可能再利用的像素而存储一行的数据以用在下一行中,其中N个像素可以同时加载到多个子窗口中。
在某些实现中,扫描元件被构造为从16种不同的蛇形扫描中选择扫描顺序,其中第一组蛇形扫描针对竖直扫描,而第二组蛇形扫描针对水平扫描。某些实现方式中,扫描元件被构造为选择一种扫描顺序,该扫描顺序将搜索区域分割成多个子区域,并在多个子区域中局部应用蛇形扫描。
本发明的另一个方面涉及一种方法,所披露方法的特性是支持多个参考帧及多个MVP。所披露的方法同样支持在多个参考帧中规定搜索区域,并且可以以第一MVP及第二MVP为中心,具体地讲,其包括从一组视频帧中确定多个参考帧,并且从多个参考帧中获取第一运动矢量预测值(MVP)和第二MVP。该方法还包括在多个参考帧中定义搜索区域,该搜索区域以第一MVP或者第二MVP为中心。其次,该披露的方法还包括基于支持多在参考帧的第一MVP和第二MVP的基础上进行子块的运动估计并且从多个参考帧的子块中选择运动矢量。
在某些实现方式中,获取第一MVP和第二MVP的过程包括基于之前块的MV获取第一MVP和第二MVP。某些实现方式中,获取第一MVP或获取第二MVP包括获取当前块的相邻左块、上块和右上块的MV的中值。
某些实现方式中,执行运动估计包括执行单一MVP,仅仅使用第一MVP或者第二MVP中的一个,而不是多个。
在某些方面中,所披露的方法包括以第一MVP或第二MVP为中心,进行局部全搜索运动估计。在此基础之上,执行运动估计包括计算成本函数,其包括两个可加项,第一个为误差项(失真项),第二个为lambda算子(其为子块的大小和位置、块位置和类型、量化参数、目标码率、及缓存条件或缓存性能中的至少一个的函数)及编码MV所需要的码率函数的乘积。
在此,对视频处理和图像运动估计进行了一个简介。在接下来将详细介绍一些具体的实现方式。
图像的运动估计
图1显示了一种用来实现视频压缩的示例性视频处理系统100的上层框图。视频处理系统100包括一个分割元件102,用来将一个或多个视频帧104分割成多个块106。在某些实现方式中,系统100可以包括一个子分割模块108,用以将至少一个块106进一步分成两个或多个子块110。某些情况下,分割元件102可以将至少一个块106进一步分成两个或多个子块110。某些情况下,至少一个块106(有时称为“当前块”)可以被进一步子分割为多个当前子块(如子块110)。子块110可以有不同的大小或/和不同的形状。
同时系统100还包括一个选择元件112,用来选择第二帧作为参考帧114。一个归类元件116用来为至少一个子块110定义搜索区域118。在某些情况下,搜索区域118以一个位置为中心,定义为参考帧114中的搜索中心。
搜索区域118中的一个或多个点(记为“搜索点”)可以对应于候选运动矢量(MV),其表示当前块(或当前子块)与参考帧114中相似大小(或相同大小)的候选参考快(或候选参考子块)之间的距离。
某些情况下,搜索中心可以由一系列的运动矢量预测(MVP)来得到。一个或多个MVP可以由相邻的块或子块的运动矢量来得到。例如,一个MVP可以为当前块的相邻的左边、上方、右上方块的运动矢量的中值来得到(记为单一运动矢量预测SMVP)。
一个评估元件120被用来针对一个或多个当前子块,在搜索区域内进行基于RD代价方程的搜索,通过计算搜索区域内所选搜索点的RD成本函数来进行搜索。每一个搜索点都会有一个对应的RD代价,对应的运动矢量可以选择作为该子块的MV,基于此选择最优的子块的MV。
在某些情况下,RD代价方程会包含多个项。例如,RD代价中的第一项为可加项,也就是当前子块与候选参考子块间的误差(即,失真衡量)。RD代价中的第二项是一个参数(称为lambda算子)与候选MV和MVP之间的差的函数(编码MV所需要的比特数)的乘积。某些情况下,误差项可以为SAD。某些情况下,lambda算子可以用2的幂来近似。某些情况下,所需要的比特数可以由SMVP和候选MV之间的差来估计。在某些情况下,RD代价的第二项中的MVP可以上相邻块或子块的运动矢量的函数(单一MVP)。在某些情况下,对于当前块中的所有(或者基本上所有)子块,利用相同的(或类似的)MVP。
综上所述,系统100(及其相关情况),也被称为率失真优化的单一MVP偏置的全搜索(RDOMFS),使用单一MVP,并通过计算RD代价方程来进行搜索,即使用单一MVP偏置和RD代价方程(也成为成本函数)。在某些情况下,RDOMFS可以取得与FS-RD-var-mvp(H.264参考软件JM中默认的运动估计算法)相当的率失真效率,并超过FS-SAD-var-zero的率失真效率。
例如,在最新的H.264标准的参考软件JM中采用了几种率失真效果很好并且计算复杂度低的快速运动估计算法。大部分快速运动估计算法使用MVP作为起始搜索点,并采用了局部搜索模式如钻石搜索、六边形搜索。一般来说,快速运动估计算法首先会计算几个可能的候选MVP的代价,并从中选出一个作为搜索起始点。采用局部搜索可能导致局部最优的MV而不是全局最优的MV。使用多个MVP可以有效的提高全局最优的概率。
一般来说,这些快速运动估计算法中所使用的MVP是通过空域或时域相邻块的MV得到的。时域相邻的MV既是参考帧中同一位置的块的MV,这需要存储参考帧中的块的MV。空域相邻的MV则包括左边、上方、右上方的子块。由这三个MV来推导MVP,例如中值。注意在H.264中,对于左边、上方、右上方的块的定义可能根据子块大小的不同而不同,并且对于不同位置上的大小相同或基本相同的子块来说可以不同。所以,需要大量的存储单元来存储所有大小的子块的MV。图2A以子块大小为4x4及16x16为例。另外,计算中值的数据流也是不规则的。
具体的来说,使用多个MVP会造成不利于硬件实现的结果。这是因为,第一,如图2B所示,空域上的对于左边、上方、右上方子块的定义是不同的,这会导致不规则的数据流。第二,在选择MVP时,整体硬件的效率会下降,并不利于有效的流水线设计。第三,注意多个MVP可能分布在搜索区域的不同位置,因此,对应多个MVP的参考像素是单独加载的,不能被再利用,这会造成存储器带宽的增加。第四,需要存储大量的MV,导致显著的片上存储器需求和成本。
为了使算法更加易于硬件实现,本发明提出的RDOMFS中使用了一种单一的运动矢量预测(SMVP)来替代多个运动矢量预测。在一个宏块中,对于所有的不同大小的子块(或者基本上所有的子块和/或基本上所有的大小)使用统一的SMVP定义。使用符号MV16×16来表示16×16模式下的最优运动矢量,那么SMVP可以被定义为:
S M V P = M e d i a n ( MV 16 × 16 l e f t , MV 16 × 16 t o p , MV 16 × 16 t o p _ r i g h t ) - - - ( 3 )
它是相邻的左,上,右上的三个宏块的MV16×16的中值,如同图2C所示。也就是说,在同一宏块中的任意位置上的不同大小的所有的子块(或基本上所有的子块)都使用相同的或基本上相同的SMVP。
虽然使用单一MVP会使得陷入局部最小的概率增大,当使用多个MVP的时候,局部最小与全局最小相同的概率会更高,但是实际上的效果只有微小的区别。并且,本发明所披露的SMVP可以有效地解决上述问题并带来一系列的益处。例如,虽然所披露的SMVP是基于空域上相邻的宏块的MV,但由于不同大小的所有子块都使用相同的(或大致相同的)SMVP定义,使得数据流更加规则。其二,由于使用了SMVP,也就实际上省略了从多个MVP中选择最终MVP的过程,使得算法更加便于流水线设计。实际上由于只存在一个候选,所以不存在MVP选择阶段。其三,同所披露的MVP再利用架构相配合,SMVP不需要存储大量已得到的MV,可以极大的减少片上内存的需求,将会在随后详细讨论。
由于涉及规则的局部搜索,因此不同的快速运动估计(FME)算法会使用不同的迭代局部搜索,并使用不同的局部搜索模式,例如矩形搜索,菱形搜索,六边形搜索,环状搜索等。在每一次迭代中,快速运动估计算法根据所使用的搜索模式计算搜索点的误差,并据此选择最优的下一次迭代的搜索中心。估计的误差可以使用SAD或RD。在不同迭代和不同方向上,可以使用不同的步长。在快速运动估计算法中,快速结束是一种使得搜索在一定前提下提前结束的技术。如果没有使用快速结束技术,那么快速运动估计算法将继续直到完成所有的迭代,或搜索模式的中心为下一迭代的起始搜索点。
上文所提到的局部搜索有着很大的缺点。例如,这样的贪婪算法会使得搜索相对于局部全搜索率失真性能下降。其二,在各个搜索模式的搜索点中与候选相关的像素值需要被单独读取,无法再利用,这将导致巨大的存储器带宽消耗和时延。其三,由于每次迭代选择的新起始点是不可预计的,这将导致不规则的数据流和不易于硬件实现。同样,使用快速结束技术和不同步长也会导致这个问题。为了解决这些与规则局部搜索相关的问题,披露的RDOMFS使用了一种基于MVP的预测局部全搜索。因此,RDOMFS是FS-MVP。
如上所述,在两种常见的误差估计方法SAD和RD之间是存在着一种关系的。SAD的计算相对简单且易于硬件实现,现存的绝大多数的ME硬件架构都是基于SAD的。另一方面,RD被定义为:
RD(MV)=SAD(MV)+λ(Qp)R(|MVmedian-MV|)(4)
其中MV为候选MV,λ是拉格朗日算子(Lagrangemultiplier),其随量化因子Qp变化而变化,MVmedian是H.264中的MV编码使用的中值运动矢量预测,R是比特速率,用来编码运动矢量误差的。在H.264JM参考软件中,λ也就是λME被定义为:
λ M E = λ mod e - - - ( 5 )
其中λmode是:
λmode,l,P=0.85×2(Qp-12)/3(6)
是对于I块和P块的,对于B块:
λ mod e , B = max ( 2 , min ( 4 , Q p - 12 6 ) ) × λ mod e , I , p - - - ( 7 )
虽然相比于SAD,RD可以提供更好的率失真(RD)性能,但是其很难被硬件实现,基于如下理由。其一,计算RD时,需要浮点数运算来计算λ和R的乘积。这会消耗大量的资源、时间和芯片面积,如果使用查找表的形式来实现,由于λ有52种可能性而R的可能性为数千种(由MV决定),查找表的大小将会非常巨大。其二,计算MVmedian需要储存以前所有的MV,并且计算的过程、数据流是不规则的。
在所披露的RDOMFS中,能够在保证率失真(RD)性能的同时,利用SAD的利于硬件实现的特点。所以,在这里披露了一种利于硬件实现的类RD的代价方程RDsmvp,定义如下:
RDsmvp(MV)=SAD(MV)+λsmvp(Qp)R(|SMVP-MV|)(8)
其中不规则MVmedian被规则SMVP替换(如公式3),浮点数的λ被利于硬件实现的2的幂λsmvp所替代。
λ s m v p = 2 n ; n = f l o o r lnλ M E l n 2 - - - ( 9 )
所披露的RDsmvp可以用于解决以上所提出的问题。例如,使用披露的λsmvp,λsmvp与R相乘的过程就可以被简化成将R左移或右移|n|位,容易实现。由于使用λsmvp而不是λ性能上并无显著变化。由于lambda与lambdasmvp之间的近似误差所产生的性能下降很小。并且,对于所有大小的各种子块的统一(或部分一致)的SMVP定义使得,当计算RDsmvp时可以取得规则的数据流,并且所消耗的片上内存量最小,如果没有被消除(或部分消除)。
图3示出了根据一方面的用于视频压缩的方法300。在步骤302,一个或多个(或每一个)视频帧被分割成块。在步骤304,一个或多个(每一个)块可以被进一步分割成一个或多个子块。例如,每个块(有时被称为当前块)可以被进一步分割为多个当前子块。这些子块可以为不同的大小和/或不同的形状。
在步骤306,另一(第二)帧被定义为参考帧。对于每一个当前子块,将会在参考帧中定义一个搜索窗口(区域)(在步骤308),其中心为搜索中心。在搜索窗口中的每一搜索点对应一个候选运动矢量(MV),其表示了当前块或当前子块与参考帧中相同大小(或基本相同大小)的对应候选参考块或候选子块之间的距离。
从某一方面讲,搜索中心可由一系列的运动矢量预测(MVP)推导出来。而每一个MVP可由一系列的相邻块或相邻子块的运动矢量推导出来。例如,一个MVP可由相邻的左,上,右上块的运动矢量的中值推导而来(被称为SMVP)。
在步骤310,对于每一个当前子块进行搜索。并且,搜索是基于计算RD代价方程来选择在搜索窗口中的搜索点而执行的。并且在步骤312,选出具有最合适的RD代价的最合适的搜索点。基于此,选出对应的运动矢量作为子块的适当MV。
大部分情况下,RD代价方程会由多个部分组成。例如,RD代价方程中的第一部分是一个可加的部分,也就是计算当前子块与候选参考块之间的误差。RD代价中的第二个部分也可以是一个可加的部分,为一个参数(被称为lambda)和候选MV与MVP之间的误差的积。RD代价的第二部分中的MVP是相邻块或子块的运动矢量(单MVP)的函数,可由相邻块或子块的运动矢量推导出来。某些情况下,当前块中不同大小的所有子块可以使用同一个(或类似的)MVP的定义。
某些情况下,MVP可由周围(相邻)块的最优的运动矢量推导而来。某些情况下,MVP由临时(过去)的周围块的适当运动矢量的中值得到。某些情况下,MVP为之前的某三个周围块的最合适的运动矢量的中值。例如,这三个之前的周围块可以为一个在左,一个在上,和一个在右上的块。如果其中的一个或多个块不可用,可以使用一个替代的块,如左上的块,或其他预定义的MVP值。
某些情况下,搜索中心为MVP。某些情况下,搜索中心由三个之前的周围块的最合适的运动矢量的中值得到。某些情况下,MVP为之前的某三个块的运动矢量的中值。例如,这三个之前的周围块可以为一个在左,一个在上,和一个在右上的块。如果其中的一个或多个块不可用,可以使用至少一个替代的块,如左上的块,或其他预定义的MVP值或可配置的MVP值。
某些情况下,在RD代价方程的第二部分中的lambda参数可由子块的大小,位置和其他属性;块的位置,类型和其他属性;量化参数和其他属性;目标比特率,及缓存情况和属性等共同决定。某些情况下,在RD代价方程的第二部分中的lambda参数可以用一些易于计算的值来近似,例如一些2的幂的线性组合。
在某些情况下,在RD代价方程的第二部分中使用的MVP可以通过之前周围的已编码的块的运动矢量得到。某些情况下,在RD代价方程的第二部分中使用的MVP可以通过之前相邻的左,上,右上块的运动矢量(MV)得到。某些情况下,在RD代价方程的第二部分中使用的MVP可以通过之前相邻的左,上,右上块的MV的中值得到。
图4示出了另一种实现的系统。系统400中包含了分割元件402,其用来将一帧或多帧视频404分割为块406,或称为“当前块”。选择元件408被设计用来定义参考帧(第二帧)410。指定元件412被设计用来在参考帧410中定义一个搜索窗口414。搜索窗口414可以被分成矩形搜索区域。每一个搜索区域(或搜索窗口414)中的点(或称为搜索点)对应一个候选运动矢量(MV),用来表示当前块和参考帧410中同样大小(或类似大小)的候选参考块之间的距离。
子分割元件416被用来进一步分割搜索窗口414,分割为一些矩形子窗口,其中所有的,或大部分的搜索窗口中的搜索点都属于一些子窗口。某些情况下,矩形的子窗口可为同样大小,或相似的大小,或者不同的大小。某些情况下,子窗口的形状可以为其他形状(例如正方形)而不是矩形。
系统400同样包含了一个扫描元件418,设计用来实现一种在子窗口间的子窗口扫描方法。扫描元件418可以实现子窗口扫描顺序,其至少扫描每一个子窗口至少一次。其次,扫描元件418可以实现一种子窗口扫描顺序,使得任意相邻的两个子窗口在子窗口扫描顺序中可以被相近的扫描。
在一个示例中,对每一个子窗口的扫描,可以使用16种可能的蛇形扫描(SS)。例如,8种蛇形扫描为水平方向的扫描,另外8种为竖直方向的扫描。对于水平扫描,扫描元件418首先扫描第一行,并沿水平方向进行第一个方向的扫描。当到达第一行的最后位置时,扫描元件418继续对下一行的相邻搜索点进行扫描,但是使用第二个方向(与第一方向相反的方向)。某些情况下,第一行可以位于子窗口的顶部或底部。第一个方向可以从左到右或从右到左。当扫描第二行完成后,下一行会使用第一个方向(即与扫描第二行的方向相反的方向)继续扫描,直到所有的行都被扫描。
对于竖直方向的扫描,扫描元件418首先扫描第一列,并沿竖直方向进行第一个方向的扫描。当到达第一列的最后位置时,扫描元件418继续对下一列的相邻搜索点进行扫描,但是使用第二个方向(与第一方向相反的方向)。某些情况下,第一列可以位于子窗口的最左边或最右边。第一个方向可以从上到下或从下到上。当扫描第二列完成后,下一列会使用第一个方向(即与扫描第二列的方向相反的方向)继续扫描,直到所有的行都被扫描。
对于水平(竖直)扫描,有4个可能的起始扫描点:左上角,右上角,左下角,右下角。对于每一个起始点,如果该子窗口有奇数行(列),那么扫描结束点将为起始点的对角相对点(例如左下角是右上角的对角相对点)。如果子窗口内有偶数行(列),那么扫描结束点将为最后一行(列)的最后一个点,而不是对角相对点。对于4个可能的起始点(即4个角),和奇数或偶数行(列),水平(或竖直)扫描共有八种蛇形扫描(SS)。
当扫描元件418完成一个子窗口的扫描后(使用16种蛇形扫描模式中的一种),扫描元件418将会继续扫描按照子窗口扫描顺序的下一个(第二个)子窗口中的相邻搜索点。某些情况下,下一个子窗口的大小可以和第一个子窗口的不同。某些情况下,对下一个子窗口所采用的蛇形扫描模式可以和上一个(第一个)的不同,或相同。
用来实现RDOMFS的系统400可以为一种可重构系统,其基于2-D脉动PE阵列。综上所述,由于使用了SMVP及类RD代价方程,RDOMFS比FS-RD-var-mvp更易于硬件实现。
一种对于RDOMFS的直接的硬件设计会包括以下几个元件:一个2-D的脉动PE阵列,其中每一个处理单元(PE)处理一个像素;一个加法器树,用来计算所有可能的子块的41个可能的SAD值;片上或片下的内存,来存储生成SMVP时所需要的所有之前的MV。对于局部全搜索(FS),最常用的扫描方式为光栅扫描(栅状搜索),其可以实现充足的数据再利用率。
但是,RDOMFS的设计硬件架构通常会有如下几个问题。例如,这样的设计无法取得不同的数据再利用率,除非进行彻底的再设计,进行相当大的硬件改变。也就是,这样的设计是非可重构的。其次,虽然光栅扫描可以取得很好的数据再利用率,但是其不能完全的发掘潜在的数据再利用。例如,其在水平方向上能够取得很好的数据再利用率,但是在竖直方向上却完全没有。低效的数据再利用会导致很高的功率消耗,并增加系统(片上内存)的大小及系统时延。第三,用来计算RDOMFS中的SMVP的过去的MV被存储在片上或片下的内存中。虽然SMVP的内存使用只需要使用但这样所需的带宽,及读取使用MV所造成的功率消耗和时延也是非常可观的。
虽然简单直接的设计也可以取得可以接受的效果,但是披露的设计可以取得更好的效果并解决我们提到的问题。例如,披露的设计是可重构的。其次,披露的设计可以取得更高的数据再利用率,且在竖直方向也可以进行数据再利用。第三,披露的设计可以配置为不用存储计算SMVP所需要的过去MV(或者仅存储最小数量的过去MV)。某些情况下,使用智能蛇形(SmartSnake)扫描替代光栅扫描。智能蛇形扫描可以取得不同的数据再利用率,甚至完全消除冗余数据读取。披露的设计还包括了一种基于SS的多分辨率适应的MVP再利用架构,其可以实现不储存过去的MV。
所披露的设计的总体架构图500如图5所示。架构图500是基于一个2-D的脉动阵列502,并包括一个控制模块504。每一个脉动阵列502中的处理单元处理一个像素,计算1个像素的SAD。不同的像素级的SAD在2-D加法器树506(2DAT)中进行合并,并得到对于不同大小的子块的41个可能的SAD值。41个SAD将传递到MV选择器508中进行筛选。
已经处理过的宏块(MB)的MV16×16将会被传递进一个自适应的移位寄存器阵列(ASRA)510中,并用来计算SMVP及相应的MV代价。最终,可以由SAD与λsmvp及MV代价的积的和来计算RDsmvp,基于此,最优的子块组合及相应的最优的MV将会被选择出来。
2-D脉动阵列502包含了256个处理单元(PE)。每一个处理单元储存一个当前16x16宏块(MB)的像素。参考像素可以在脉动阵列502中传递,来计算相应的SAD。从概念上说,脉动阵列502可以分解为16个子阵列,每一个由4x4个处理单元组成,对应一个4x4的子块。一个可重构的寄存器阵列(RRA)512可以帮助脉动阵列来达到可重构的能力,并提高数据再利用率。可重构的寄存器阵列512是被设计来实现我们提出的SS扫描方法的,将会在随后详细讨论。
当所有当前16x16宏块的像素被读取并存储于脉动阵列502后,参考像素将会被传入脉动阵列502。每一个时钟周期中,256个处理单元将会计算出256个基于像素的SAD,对应搜索窗中的搜索点,并将它们传给2DAT506。在41个SAD中,共有16个4x4子块的SAD,8个8x4的,8个4x8的,4个8x8的,两个16x8的,两个8x16的及一个16x16的,总共41个。2DAT506将使用两个时钟周期来计算16个4x4子块的SAD,三个时钟周期计算8个8x4的和8个4x8的,四个时钟周期计算4个8x8的,五个时钟周期计算两个16x8的及两个8x16的,六个时钟周期计算一个16x16的。
已经处理的宏块的MV16×16将会被传递到ASRA510,且能够在脉动阵列502读取当前宏块的像素时,再利用来计算SMVP,所以SMVP的计算并不需要额外的时钟周期。可重构可以由调整ASRA的时延来达到,并且对于不同的帧的大小进行自适应。
使用SMVP来计算MV代价,并传给(可以在2DAT计算41个SAD的同时)最优MV选择器(BMVS)。例如,传入的数据将由一个中值生成器514,MV代价生成器516及MV选择器508来处理。基于所有的候选MV的易于硬件实现的类RD代价方程,在扫描完搜索窗口中的所有可能的位置之后,最优的MV将会被选出。
某些情况下,数据总线518被配置为从内存(RAM)520中接收数据。数据总线518可以在每一时钟周期中并行读取N个像素,假设参考帧的块包括NxN个像素,被分为NxN的块。RRA512可以存储一行数据,这些数据在处理接下来的搜索点时将会被再利用,其中一次在多个子窗口中读取N个像素。
假设搜索窗口的大小为2Px2Q,宏块的大小为NxN。如果在窗口中使用全搜索,对应的传统的使用光栅扫描的硬件架构如图6A所示。在光栅扫描中,每一行的扫描(搜索)都是从最左边的搜索点到最右边的搜索点,直到扫描完整个搜索窗口中的所有搜索点。光栅扫描可以有效的提高水平方向上的数据再利用率,并且可以实现相对高的数据在利用率。例如,如图6A中的一个搜索点A所对应的参考快,所有的NxN像素块需要被读入脉动PE阵列。当光栅扫描中的下一个搜索点B被处理时,只需要读取1xN个像素,而不是NxN。也就是说,(N-1)×N个像素被再利用了。但是其没有考虑相邻行之间的数据再利用。所以,大量的像素被读取了N次,其中N-1次都是不必要的冗余读取。
如果采用一些其他的扫描方式,如蛇形扫描(图6B),传统的架构可以提高数据再利用的能力,但是这样的提高是非常有限的。在蛇形扫描中,第一行搜索点由左至右扫描,而第二行由右至左,第三行由左至右,直到完成扫描。在沿行进行水平扫描期间,蛇形扫描从一个搜索点到另一个搜索点再利用了(N-1)×N个像素。由于其可以在相邻行之间再利用数据,因此蛇形扫描比光栅扫描更强。蛇形扫描能够在水平扫描时取得与栅状扫描同样的数据再利用率,且能够在第k行扫描完成后,在处理第k+1行的第一个搜索点时再利用(N-1)×N个像素。但是,在k+1行的其他搜索点(水平方向上)依然没有再利用第k行读取的像素,从而导致大量的数据的冗余读取。值得注意的是,无论是蛇形扫描还是光栅扫描,它们的数据再利用率是固定的。
这里将披露一种扫描方法,被称为智能蛇形扫描。其可以达到不同的数据再利用率,并且极大地减少,或消除冗余的数据读取。某些情况下,在每一个搜索窗内的每一个像素都被读取并只被读取一次。
在智能蛇形扫描中,首先,搜索窗口被分割成一些不互相覆盖的矩形子区域。一个将搜索窗口分为两行三列6个子区域的例子如图6C。例如,在每一个矩形子区域中,使用蛇形扫描来实现更高的数据再利用。当完成一个子区域的扫描后,智能蛇形扫描会继续在进行下一个相邻子区域使用蛇形扫描。在不同的子区域中,蛇形扫描的方向可以不同,可以使用从上至下(如子区域L1),或从下至上(如子区域L2),或从左至右(如子区域L1,L2,L3),或从右至左(如子区域L4,L5,L6)。可以为水平扫描(如子区域L1,L2),或竖直扫描(如子区域L3,L4)。这里,我们所谓的“水平”指的是按行处理搜索点,而“竖直”指的是按列处理搜索点。
每一个子区域的宽度可以小于或等于一个参数M。同时,建立起一个硬件架构(被称为可重构寄存器阵列RRA),为(M-1)*(N-1)个寄存器的阵列。我们用处理L1的过程来举例,其他的子区域采用相同的过程。L1中的整个智能蛇形扫描(数据读取)过程由两个初始化的步骤(A和B)和两个固定态步骤(C和D)组成。假设L1的大小为W×H,同时W<=M。智能蛇形扫描的步骤A处理搜索窗口L1中的最左上方的搜索点。然后,步骤B执行W-1次来从左到右的处理来处理L1的第一行(首行)的其余的搜索点。当在稳定状态,在第一方向(即,在第一行的从左到右的方向)上完成扫描第一行后,步骤C扫描第二行(下一行)的第一个搜索点,步骤D执行W-1次,完成第二行,这一行的步骤D的方向与第一行的步骤B的方向相反(即,在第二行中从右到左)。
步骤A中,首先对应于左上搜索点的N×N的参考像素被读入脉动PE阵列。每一个时钟周期读取一列N个像素的值,共需要N个时钟周期来初始化。在完成一个搜索点的SAD计算后,脉动PE阵列中的右侧的N-1列像素值向左移动并用于第一行的以下搜索点,在下一次SAD的计算中再利用。而最左侧的一列的某些像素(该列底部的N-1个)可能在以后的搜索点(第二、三等行)再使用,所以将其传输到RRA中。而该列顶部的1个像素被丢弃,其不再被使用。
步骤A完成后,步骤B被执行W-1次,使用W-1个时钟周期扫描第一行剩下的W-1个搜索点。每一个时钟周期处理一个搜索点,同时读取一列新的参考像素值(数据读取速率为N像素/周期)。脉动PE阵列中的右侧的N-1列像素值向左移动并在下一次SAD的计算中再利用。而最左侧的一列的某些像素(该列底部的N-1个)可能在以后的搜索点再使用,所以将其传输到RRA中。而该列顶部的1个像素被丢弃。
当扫描完一行之后,步骤C被用来进行换行的操作,并使用一个时钟周期向下移动一个搜索点。脉动PE阵列中的底部的N-1行向上移动,并读入新一行N个像素(数据读取速率为N像素/周期)。RRA中的数据保持不变。
在步骤C后,步骤D在W-1个时钟周期中,处理这一行余下的W-1个搜索点。每个时钟中,只读取1一个新的像素值,N-1个像素值由RRA传递回脉动PE阵列。所以数据读取速率可以由步骤A,B和C中的N像素/周期降低为步骤D中的1像素/周期。步骤D中,右侧的列底部的N-1个像素在将来的搜索点会用到,所以传输到RRA。继续使用步骤C和D直到所有的位于L1中的搜索点搜被处理。注意,在某些情况下,L1中每一个像素都被读取且只被读取了一次,也就是说,完全没有冗余读取。
当处理完一个子区域后,一个相邻的子区域将会被处理,使用蛇形扫描。同上,相对于L1使用的步骤A,B,C,D,相似的四个步骤A′,B′,C′和D′将会被使用。某些情况下,步骤B′,C′和D′与步骤B,C,D完全一致,除了他们的处理方向可以不同(向右或左的宽度级处理,或者向上或下的长度级处理)。但是,步骤A′和A是不同的,步骤A′只需要1个时钟周期来处理新子区域的第一个搜索点,紧接着,基于两个子区域的相对位置及他们的蛇形扫描方向(竖直或水平),可能会使用步骤B或C。这些步骤被持续使用,直到所有的子区域都被处理。
当且仅当只有一个子区域时(W=2P=M),将完全消除冗余数据读取,且硬件效率将达到最高,几乎为100%。在某些情况下(例如P=8),搜索窗口被分成多个子区域时,大部分的参考像素都被且只被读取一次,少部分像素被读取了两次。例如,子区域L1和L2之间,(N-1)×H个像素被读取了两次。通过调整每个子区域的大小,披露的方法可以取得不同的数据再利用率。
图7显示了一个视屏处理的方法700。视频的每一帧在步骤702被分成块(例如,当前块)。另外的一帧(第二帧)在步骤704被定义为参考帧。在步骤706,一个搜索区域(即,搜索窗口)被定义在参考帧中,搜索区域可以为矩形。搜索区域中的每一点(即,搜索点)对应一个候选运动矢量(MV),其表示当前块和候选参考块(相同大小或相近大小)间的距离。
在步骤708,搜索窗口被进一步分为子窗口(子区域)。子窗口可以为矩形。某些情况下,这些子窗口的大小可以相同或不同(部分相同或部分不同)。搜索窗口被分割后,搜索点也被随着子窗口的划分而划分。某些情况下,搜索窗口被划分为不相互覆盖的子窗口。不相互覆盖的子窗口可以为矩形。某些情况下,不相互覆盖的矩形子窗口大小可以相同或不同(或部分相同或部分不同)。
子窗口在步骤710被扫描。提出了一种子窗口扫描方法保证每一个子窗口至少被扫描过一次。在某些情况下,空间上相近的子窗口将被顺序或顺序上相近的扫描。
例如,在每一子窗口中,可以使用16种蛇形扫描的其中一种来扫描其中的搜索点。其中八种蛇形扫描用于水平扫描,剩下的八种用于竖直扫描。在水平扫描中,首先对第一行水平地进行第一方向的扫描。这里的第一行可以指子窗口中的最顶部或最底部的一行。第一方向可以为从左至右,或从右至左。当扫描完第一行后,继续从最相邻的搜索点以相反的方向扫描接下来的一行。然后周而复始。
在竖直扫描中,首先对第一列竖直地进行第一方向的扫描。这里的第一列可以指子窗口中的最左边或最右边的一列。第一方向可以为从上至下,或从下至上。当扫描完第一列后,继续从最相邻的搜索点以相反的方向扫描接下来的一列。然后周而复始。
对于水平(竖直)扫描,有4个可能的起始扫描点:左上角,右上角,左下角,右下角。对于每一个起始点,如果该子窗口中有奇数行(列),那么扫描结束点将为起始点的对角相对点(例如左下角是右上角的对角相对点)。如果子窗口内有偶数行(列),那么扫描结束点将为最后一行(列)的最后一个点,而不是对角相对点。对于4个可能的起始点(即,4个角),和奇数或偶数行(列),水平(或竖直)扫描共有八种蛇形扫描。
当一个子窗口被扫描完成后(使用16种蛇形扫描中的一种),将会继续扫描相邻的第二个子窗口(根据子窗口扫描方法的下一个子窗口)中的相邻搜索点。第二个子窗口可以和第一个的大小不同或相同。在某些情况下,可以使用不同的蛇形扫描。
某些情况下,子窗口的扫描方法就是水平或垂直的蛇形扫描。水平或垂直扫描可以从搜索窗口的左上角,右上角,左下角,右下角开始。
某些情况下,子窗口扫描方法会将搜索窗口分割成子区域并在子区域中使用蛇形扫描。
某些情况下,一个块包括NxN个像素,一个NxN的脉冲PE阵列被用来计算N^2个基于像素的当前块和候选参考块之间的SAD。使用数据总线来在一个时钟周期内并行读取N个像素。一个大小为(M-1)*(N-1)的可重构寄存器阵列(RRA)被用来暂时存储可在下一行中再利用的像素值。某些情况下,使用RRA可以使得每一个像素(数据点)被读取且只被读取一次。对于搜索窗口中的第一个子窗口,一(第一)组至少4个步骤(即,A,B,C,D)用来读取所需要的像素值和扫描搜索点。对于接下来的一个子窗口,另一(第二)组至少4个步骤(例如A’,B’,C’,D’)用来读取所需要的像素值和扫描搜索点。第一组中的第一个步骤(即,A)需要N个时钟周期来处理第一个搜索点。其余的所有步骤(即,B,C,D,A’,B,C’,D’)只需要一个时钟周期来处理一个搜索点。对于第一组步骤中的前三个步骤(A,B,C),数据读取率为每时钟周期N个像素。对于第二组步骤中的前三个步骤(A’,B’,C’)及第一组步骤中的第四个步骤(D),数据读取率仅为每时钟周期一个像素。
某些情况下,步骤A和步骤B用来处理第一个子窗口的第一行(列)。步骤A只使用一次,用来处理第一个子窗口的起始搜索点,并需要N个时钟周期,每个时钟周期读取N个像素。步骤B使用N-1次,用来处理第一行(列)剩余的N-1个搜索点,需要N-1个周期,每个周期读取N个像素。
某些情况下,第一个子窗口的起始点对应的所有参考块的像素值在第一个步骤A被读入脉动PE阵列。如果每个时钟周期读取N个像素,步骤A需要N个时钟周期。在逐像素计算SAD之后,在处理下一搜索点的步骤B之前会先进行至少两个步骤。例如,在沿处理方向的N-1个边界的列(行)将会在脉动PE序列中传输,同时最后一列(行)中N-1个像素将传输到下一列(行)中要使用的RRA中。
某些情况下,步骤B会沿移动方向每个时钟周期读入一列(或行)新的像素值到脉动PE阵列中,并完成一个搜索点的处理。在逐像素完成SAD的计算后,在沿处理方向的N-1个边界的列(行)将会在脉动PE阵列中传输,同时在该列(行)在RRA中旋转之后,最后一列(行)中N-1个像素将传输到RRA中。某些情况下,第一行的最后一个搜索点发生的行结束(或列结束)的情况将会为步骤C处理第二(下一)行(列)的第一个(下一个)搜索点做准备。在这个时候,会将靠近下一个搜索点(边界的)的N-1行(或列)在脉动PE阵列中移动,而不是像步骤B一样移动N-1列(行)。当执行步骤C时,RRA保持不变(即没有移动和旋转)。
某些情况下,当完成第一行的扫描后,子窗口中的剩下的行将会使用步骤C和D来扫描。在扫描完一行(列)后,使用步骤C和D来处理接下来的行(列)。例如,步骤C将会在每行(列)的起始点被使用一次,其在一个时钟周期内读取N个像素。然后步骤D将会被使用W-1次来处理该行(列)中剩下的W-1个搜索点,需要N-1个时钟周期,每个时钟周期处理一个搜索点且数据读取率为每周期一个像素。
某些情况下,步骤C负责向下一行(列)移动并处理第一个(相邻)搜索点,并读入新的一行(列)的参考像素到PE阵列。在完成SAD的计算后,在沿处理方向的N-1个边界的列(行)将会在脉动PE阵列中传输,同时在该列在RRA中旋转之后,最后一列(行)中的N-1个像素将传输到RRA中。
某些情况下,步骤D会读取一个新的像素,并且同时一列N-1的像素从RRA中传输到脉动PE阵列中来合并为一个新的N个像素的列(或行)。步骤D在每一个时钟周期内处理一个搜索点。在逐像素完成SAD的计算后,在沿处理方向的N-1个边界的列(行)将会在脉动PE阵列中传输,同时在该列(行)在RRA中旋转之后,最后一列(行)中的N-1个像素将传输到RRA中。在每一行(列)的最后一个搜索点发生行结束(或列结束)的情况将会为步骤C处理下一行(列)的第一个(下一个)搜索点做准备。这个时候,会将靠近下一个搜索点(边界的)的N-1行(或列)在脉动PE阵列中移动,而不是像步骤B一样移动N-1列(行)。当执行步骤C时,RRA保持不变(即没有数据移动和旋转)。这样的情况也可能发生在当前子窗口的最后一个搜索点。
一个子窗口处理完后,根据某些方面,A’步骤用来将当前子窗口的最后一个搜索点转换到下一个子窗口的起始点(根据子窗口的扫描顺序)。这两个搜索点可能相邻。如果转换是水平(或垂直)移动,在最后一个扫描点发生行结束(列结束)的情况会为传输N-1列(或行)做准备,并且RRA保持不变。
如果转换是水平(或垂直)移动,A’步骤只是B步骤的一部分。在B步骤中,新的一列(行)将被载入。如果新的子窗口执行水平扫描(垂直扫描),N-1列(行)将被传送到脉动PE阵列中,最后一列(行)的N-1个像素在SAD计算后将被传送到RRA中。A’步骤消耗一个时钟周期,同时数据载入率是每个时钟周期N个像素。之后再用B’,C’和D’步骤,使用和上面描述的B,C,D步骤在第一个窗口中类似的方法,处理子窗口中剩下的数据。B’步骤使用了N-1次,去处理行(或者垂直扫描时的列)中剩下的搜索点。C’和D’步骤循环使用,处理剩下的行(列)。对每一行来说,C’步骤只是用了1次来改变方向和处理第一个搜索点;D’步骤使用了N-1次来处理剩下的N-1个搜索点。B’,C’和D’步骤基本上和B,C和D步骤相同。但是根据新的字窗口中的扫描方式(水平扫描或垂直扫描)不同方向可能不同。
有些时候,一个块包含了NxN个像素。一个块也可以是MxN的长方形。对应的脉动PE阵列也包含MxN个子PE。一个时钟周期内,一条数据线最多并行读取(M,N)个像素。对应的RRA的大小可以是(M-1)x(N-1)。对应的列和行的大小分别为N和M。根据是垂直扫描还是水平扫描占优,A,B,C,A’,B’,和C’步骤的数据载入率可能是M或N像素/周期。同样的,根据占优的垂直或者水平子块扫描方式,要么M-1要么N-1个像素会被传送到RRA。类似的,B,D,B’,和D’步骤使用了要么N-1或者M-1次。A步骤可能消耗M或者N个时钟周期。
依照某些方面,数据总线可能配置成一个周期内读取a*N/b个像素(a和b是整数)。载入N个像素,至少消耗b/a个时钟周期(而不是一个时钟周期)。某些时候,RRA可能比(M-1)*(N-1)大。
某些情况下,一个元件可以配置给A步骤使得NxN个参考块在任意个时钟周期内以相应的数据载入率被载入。
第二行可能在第一行上或者下。第二列可能在第一列左边或者右边。一个子窗口的起始搜索点可能在左上角,右上角,左下角或右下角。子窗口的宽度(高度)可以是奇数或偶数。水平或者垂直扫描将被选择使用。
在一个方面,SAD可以被另一个误差估计代替,比如MSE等,或者其他代价函数。
在一个方面,一个块可能包含NxN个像素;一个NxN的脉动PE阵列可以被用来计算当前块和参考块的N^2点的SAD。数据总线配置成一个时钟周期内并行地读取N个像素。一个可重构的(N-1)*(N-1)寄存器阵列用来存储一行的数据,在下一行中会被用到。使用RRA,一个子窗口内,每一个数据点(像素)被载入一次且仅一次。A,B,C和D四个步骤用来为第一个扫描的子窗口中的搜索点载入数据。A’,B’,C’和D’用来为后续的子窗口载入数据。A步骤消耗了N个时钟周期来处理第一个搜索点,除此之外,其余的步骤只消耗一个时钟周期来处理一个搜索点。A,B,C和A’,B’,C’步骤的数据载入率为N像素/时钟周期;D步骤的数据载入速率仅是1像素/时钟周期。
A和B步骤可以用于处理第一个子窗口的第一行(列)。A步骤在第一个子窗口的起始搜索点时使用一次。A步骤消耗N个时钟周期,数据载入率为N像素/时钟周期。B步骤使用了N-1次来处理一行(列)中剩下的搜索点。B步骤消耗N-1个时钟周期,数据载入率为N像素/时钟周期。
在初始化步骤A步骤中,所有对应于第一个子窗口的起始搜索点的参考块的像素将被载入脉动PE阵列。因为N个像素在一个时钟周期内被载入,A步骤消耗N个时钟周期。SAD计算后,为处理下一个搜索点的A步骤做准备,指向下一个搜索点的N-1个列(行)会被传送到脉动PE阵列中。之后,最后一列(行)的N-1个像素将被传送到一个可重构的寄存器阵列(RRA)中,准备在下一行中使用。
在B步骤中,靠近扫描方向的一个新的列(行)被载入脉动PE阵列。B步骤使用一次在一个时钟周期内完成对一个新的搜索点的处理。SAD计算之后,靠近扫描方向的N-1个列被传送到PE中,同时最后一列(行)的N-1个像素在列(行)在RRA中被旋转后被传送到RRA中。行末(列末)出现在第一列的最后一个搜索点,为处理第二行(列)中的下一个搜索点的C步骤做准备。传送靠近扫描方向(指向下一个查找点)的N-1个行(列)到脉动PE阵列,而不是传送列。RRA保持不变(没有数据传送和旋转)。
子窗中第一行(或列)后面的行(或列)用步骤C和D处理。每当处理完一行(或一列),用步骤C和D处理下一行(或列)。步骤C在每行(或列)的起始点使用一次。它需要1个时钟周期并且每周期载入N个像素。行(或列)中剩下的N-1个搜索点由步骤D处理N-1次。它需要N-1个时钟周期并且每周期载入一个像素。
步骤C中,扫描移至下一行(或列)中相邻的搜索点。扫描在脉动PE阵列中载入新的一行(或一列)。在计算SAD后,紧挨前进边缘的(朝着下一个搜索点的)N-1列(或行)在脉动PE阵列中传输,而最后一列的N-1个像素则在可重构寄存器阵列中的列旋转后被传输至可重构寄存器阵列。
步骤D中,一个新的像素以及可重构寄存器阵列中一个包含N-1个像素的列被载入至脉动PE阵列中,构成一条新的N像素列(行)的前进边缘。每个时钟周期进行并完成一次步骤D用以处理一个新的搜索点。在逐像素的SAD计算后,紧挨前进边缘的N-1个列在脉动PE阵列中传输,而最后一列(或行)的N-1个像素则在可重构寄存器阵列中的列(或行)旋转后被传输至可重构寄存器阵列。行结束(或列结束)的处理发生在一行的最后一个搜索点,以准备用步骤C处理下一行的下一个搜索点。扫描在脉动PE阵列中传输紧靠前进边缘(朝着下个搜索点)的N-1行(或列),而不是执行列传输。可重构寄存器阵列保持不变(没有数据传输和旋转)。在此披露的处理方式同样出现在处理当前子窗口的最后一个搜索点的时候。
当一个子窗口处理完后,步骤A’被用于从当前子窗口的最后一个搜索点过渡到下一个子窗口的第一个(起始)搜索点(根据子窗口的扫描顺序)。两个搜索点相邻或者在空间上接近。如果过渡是水平(或竖直)位移,在最后一个搜索点使用行结束(或列结束)的处理方式来传输紧挨前进边缘的N-1列(或行),并且可重构寄存器阵列保持不变。
如果过渡是水平(或垂直)位移,步骤A’相当于步骤B中前进边缘新的列(或行)被载入的简化版(其中的一个步骤)。
如果新的子窗口进行的扫描是水平的(或竖直的),N-1个列(或行)在脉动PE阵列中被传输,并且最后一列(或行)的N-1个像素在SAD计算后被传至可重构寄存器阵列。
步骤A’需要一个时钟周期并且数据的读入速度是每周期N个像素。则,步骤B’,C’和D’可使用跟第一个子窗口中步骤B,C和D相同的方式来处理剩余子窗口。步骤B’被执行N-1次,用以处理行(或列,如果是垂直扫描)中剩余的搜索点。步骤C’和D’可以迭代执行来处理剩余的行(或列)。对每一行,步骤C’被执行一次,用以改变方向并且处理第一个搜索点,而步骤D’被执行N-1次,用以处理剩余的N-1个搜索点。步骤B’,C’和D’可以实质上等于步骤B,C和D,除了方向可能会根据新子窗口使用的是水平扫描还是垂直扫描而有所不同。
在实际实现中,对于一个多分辨率运动矢量预测(MVP)重用策略,如果不存在运动矢量预测的重用,则所有选择的运动矢量都被存储在片上或片下存储器中并在接下来被重新读回用以帮助生成当前宏块(MB)的运动矢量预测以开始搜索。这将会导致片上存储器容量的增加,大时延以及相当的功耗。因此,在此披露的情况能根据一个方面重用运动矢量预测。
转至图8,图中示出的是一个根据一个方面的编码视频的系统。比如,视频编码系统800可以利用一个多分辨率运动矢量重用的硬件结构。系统800中包含了一个配置为将一个或多个视频帧804分开为P列Q行的像素块806的分割模块802。一方面,像素块之间可以不重叠;另一方面,像素块之间也可以重叠。比如,像素块可以为一个NxM的矩形像素阵列。在一些情况下,像素块806通过子分割模块808可以继续分解为一个或多个子块810。子块可以有M/a的宽度和N/b的高度,其中a和b是整数值(例如,“a”可以是1,2,4,8,16,32等等;“b”与“a”类似)。
选择器812配置为确定参考帧814的数目L。一个运动矢量元件816被设计来基于“过去块”的运动矢量从参考帧814取得运动矢量预测(MVP)818的数目。“过去块”可以指在第i行第j列块之前已经处理过的块。例如,所获得的MVP的数量可以很少。某些情况下,MVP中的一个可以为MV_left,MV_top,MV_topRight的中值。其中MV_left,MV_top,MV_topRight分别为为左相邻块(i,j-1),上相邻块(i-1,j)和右上相邻块(i-1,j+1)的运动矢量。
在每一个参考帧814中,以定义元件820定义一个搜索区域,以MVP为814为中心。通过分析元件822配合MVP814对当前块的所有可能的子块(或部分)进行运动估计。选择元件824被设计来选择在所有参考帧(或部分)中可能子块的最合适的运动矢量,从而选出对于每一个子块都最合适的运动矢量。
例如,系统800可以得到共有L+1个运动矢量,其中包括对于L个运动矢量指向L个参考帧,和一个最终选择的最优的运动矢量,所述L个运动矢量是L个参考帧的每一个中的M×N大小子块(原始块)的最适合的运动矢量。
某些情况下,系统800会包括(至少部分)一个由L+1个K互连移位寄存器链(一个链用于一个参考帧,每列K个寄存器,一个链用于以下使用的整体最适合的运动矢量)所组成的自适应移位寄存器阵列(ASRA)。在每一列中,第i个移位寄存器的输出是第i+1个移位寄存器的输入,并且是第i级的输出值。当一个宏块被处理后,一个时钟脉冲信号将发送至ASRA,使其内部的数据进行一次移动,移向下一级。在这时,可以从ASRA中得到过去K个块的最优MV,及过去K个块的对于每一个参考帧的最优MV。例如,MV_left在第一级。MV_topLeft在第P+1级;而MV_top在第P级。MV_topRight存储于P-1级。不同的P值可以由一个复用器来选择MV_topRight来实现。在复用器的输出处使用两个寄存器的链可以存储输出的MV_topRight及MV_top,第一寄存器中存储MV_topRight,第二寄存器中存储MV_top。可以使用更多的寄存器来储存其他的值,例如,第三个寄存器可以用来储存MV_topLeft,从而在某些情况下计算中值MVP。ASRA相关的其他信息将会在随后详细的讨论,如图10所示。
某些情况下,系统800被设计为使用过去块的运动矢量来计算MVP。例如,当具有P’块宽度(列)的新的视频需要被处理时,系统800可以被重新配置为改变复用器的选择来根据P’来选择MV_topRight。
图9示出了如当前帧900中所披露的MVP再利用方法的概念图。在图中使用脚标L,T和TR来表示某一宏块的左,上,右上相邻的块。例如,RTR表示宏块R的右上块。当处理宏块R时,可能需要周围三个宏块RL,RT,和RTR的最适当的MV(例如MV16×16)。同样的宏块G可能需要宏块GL,GT,和GTR的MV。注意,宏块是根据光栅扫描顺序来处理的(虽然某一MB的搜索窗口中的搜索点是使用智能蛇形扫描处理的)。当完成一行宏块(例如,包含宏块R的行)的运动估计后,下一行宏块将会被处理(例如,包含G的一行)。因此RL和GT是等价的,RL的MV可以在经过若干时延后被G所再利用。时延(以时钟周期的形式)是由当前帧的宽度来决定的。因此,某些情况下,只需要存储左边宏块(即RL)的MV16×16并传递给ASRA,便不需要在外部存储器上存储所有的MV16×16。同时,ASRA可以通过调整时延来适应不同的分辨率(帧宽度)。某些情况下,不同的时延可以提供可变架构的能力。
图10示出了一种多分辨率MVP再利用架构的系统1000。系统1000包括一个ASRA1002,及三个MVP寄存器:MVPR-L1004,MVPR-T1006,和MVPR-TR1008。MVPR-L1004用来存储左边当前宏块的MV(如MV16×16),MVPR-T1006储存上面当前宏块的MV(如MV16×16),MVPR-TR1008储存右上方当前宏块的MV(如MV16×16)。
ASRA1002包括移位寄存器,具有对应不同分辨率的多输出。一个MUX1010连接在ASRA1002之后,用来根据输入的分辨率选择对应的输出。MVPR-L1004,MVPR-T1006,和MVPR-TR1008的输出将输入一个中值生成器1012,用来生成最终的SMVP。
某些情况下,得到L+1个对于MxN大小子块(原始块)的最适合的运动矢量,其中包括对于L个运动矢量指向L个参考帧,和一个最终选择的最优的运动矢量。
某些情况下,ASRA由L+1个K互连移位寄存器链(一列用于一个参考帧,每列K个寄存器,一列用于以下使用的整体最优的运动矢量)所组成的自适应移位寄存器阵列(ASRA)。在每一链中,第i个移位寄存器的输出是第i+1个移位寄存器的输入,并且是第i级的输出值。当一个宏块被处理后,一个时钟脉冲信号将发送至ASRA,使其内部的数据进行一次移动,移向下一级。在这时,可以从ASRA中得到过去K个块的最优MV,及过去K个块的对于每一个参考帧的最优MV。例如,MV_left在第一级,MV_topLeft在第P+1级,而MV_top在第P级,MV_topRight存储于P-1级。不同的P值可以由一个复用器来选择MV_topRight来实现。例如,在复用器的输出处使用两个寄存器链可以存储输出的MV_topRight及MV_top,第一寄存器中存储MV_topRight,第二寄存器中存储MV_top。可以使用更多的寄存器来储存其他的值,例如,第三个寄存器可以用来储存MV_topLeft,从而在某些情况下计算中值MVP。ASRA将会在随后详细的讨论,如图10所示。
图11示出了所披露的视频编码的方法1100。在步骤1102,每一帧视频首先被分割为P列Q行的像素块。某些情况下,这些块可以不互相覆盖,而某些情况下,这些块可以互相覆盖。某些情况下,这些块可以为矩形,大小为NxM像素阵列。在步骤1104,这些块被进一步分解为一个或多个宽为M/a,高为N/b的子块,a和b为整数值。例如“a”和/或“b”可以为1,2,4,8,16,32或其他。某些情况下,块为NxN大小的正方形,N可能的取值为4,8,16,32,64或其他。
定义当前块为位于(i,j)的块,i=1,2,….,P为行坐标,j=1,2,…,Q为列坐标。在方法1100中,在步骤1106定义参考帧的数量L。基于参考帧的数量,在步骤1108基于过往的宏块(即,第i行第j列的块之前已处理的这些块)的运动矢量生成一系列的MVP。
某些情况下,MVP中的一个可以为MV_left,MV_top,MV_topRight的中值。其中MV_left,MV_top,MV_topRight分别为左相邻块(i,j-1),上相邻块(i-1,j)和右上相邻块(i-1,j+1)的运动矢量。
在步骤1110,在参考帧的每一个中以MVP为中心定义一个搜索区域。在步骤1112配合MVP对当前块的所有可能的子块(或部分)进行运动估计。在步骤1114,选择在所有参考帧(或部分)中所有可能子块的最合适的运动矢量,从而选出对于每一个子块都最合适的运动矢量。
某些情况下,L=1,所以L+1=2个寄存器链(每列有K个相连的移位寄存器组成)可以基本相同。也就是说ASRA是由一系列移位寄存器组成的。
某些情况下,只使用一个MVP。单一MVP(SMVP)是由MV_left,MV_top,和MV_topRight的中值得到的。某些情况下,会以SMVP为中心,进行局部的全搜索运动估计。某些情况下会以SMVP为中心,进行快速搜索。SMVP是通过ASRA来计算的。某些情况下,可以利用多个从ASRA计算出的MVP,包括(0,0),MV_left,MV_top,MV_topRight,MV_topLeft、SMVP等,来执行快速运动估计。
某些情况下,运动估计会依据代价方程进行选择。代价方程中包含了乘积项、可加项。代价方程中的第一项是误差项,第二项是lambda算子与编码MV所需要的比特速率(速率函数)的乘积。某些情况下,误差项可以为SAD。某些情况下,lambda算子可以用2的幂来近似。某些情况下,所需要的比特数可以由SMVP和候选MV之间的差来估计。
某些情况下,输入的视频可能从P列Q行块大小,变化为P’列Q’行块大小。披露的算法能够应对这种情况,例如,通过控制复用器来输出第P’-1级的结果,而不是第P-1级的结果,为MV_topRight。例如,针对不同P’值的大量MV_topRight选择被连接到复用器的输入,并且复用器的输出可以容易地设置为选择不同的输入值作为输出值。
下表显示了本发明提出的架构中在N=4和M=2的情况下的数据流。因为M=2,RRA包含两列,第一列和第二列。
参照上表,在初始化周期后,当前的像素可以存储在PE阵列中,并且参考像素可以传播到PE阵列。在这里,Rij是搜索窗口中的第ij个参考像素。在计算第一个搜索点的SAD后,一个新的参考像素列可载入PE阵列,三个参考像素可以传播到RRA的第一列,且新的搜索点的SAD也在步骤B1中计算。对步骤B2,除了RRA的第一列被传播到第二列,另处三个参考像素可以从PE阵列传播到RRA第一列,其它都与步骤B1一样。在步骤C,一行新的参考像素被装入PE阵列且RRA不变。在步骤D1和D2,每个周期只有一个参考像素装载,而不是装载一行或一列的像素,这样通过将数据从RRA中移除进入到PE阵列,就达到了数据重用的目的。
如前所述,在传统的H.264中,每帧被分成16x16的宏块。每一个宏块再细分为子块,大小可以为16x16,16x8,8x16,8x8,4x8,8x4,4x4。对每一个可能的子块都要做运动估计,模式决策方案计算所有子块的率失真(RD)代价函数,并找出最合适的子块。基于率失真优化的子块运动估计是帮助实现提高H.264的RD性能的工具之一。RD是两个项的总和:(1)失真及(2)lambda参数与编码运动矢量的码率的乘积。编码运动矢量的码率是当前运动矢量与预测运动矢量(MVP)之差的函数。不同子块大小的MVP不同。对于相同和相似大小的子块,如果位置不同,MVP也不同。lambda是一个实数,并使用浮点运算。正因为不同子块大小及不同位置的MVP的定义不同,使得传统的H.264难以实现,因为数据流是不规则。
根据已披露的方面,子块的运动估计可以达到与H.264标准类似的RD性能。已披露的方面包括在运动矢量预测周围的减少搜索范围的完全搜索,而不是在一个很大搜索范围内的完全搜索。这里披露的另一个内容是单一的(或统一)运动矢量预测,这个运动矢量预测对所有任意大小和任意位置的子块是共同的(或实质上相同的)。同时披露的是一个类似RD的成本函数,它可以近似其他RD代价函数。
此外,期望高效的运动估计,因为它会影响系统性能。一些运动估计技术有显著的冗余数据加载(例如,许多参考像素可能装载超过一次)和/或不规则的数据流,从而使得流水线的效率不高。本发明所披露的内容是扫描顺序,被称为智能蛇(SS)。采用所披露的扫描顺序,多余的数据装载可以大大减少或基本上消除。此外,本发明所披露的扫描顺序也可以实现不同的数据复用率,这可以用于满足终端用户的各种需求。例如,在SS中,在每一个搜索窗口,每个参考像素加载一次,且只加载一次。
在一个H.264的可变块大小的RDO运动估计的例子中,运动矢量预测(MVP)的中值被用于率失真代价函数的计算,可以作为局部完全搜索或快速搜索的起始点。然而,对不同的子块大小,MVP中值的定义是不同的,运动矢量不能重用。因此,为了计算出当前宏块中所有的子块的MVP,在过去宏块的一行中的所有位置的所有大小的所有子块的运动矢量都存储在片上或片外存储器,并重新加载以生成当前块中所有的子块MVP的中值。这可能会导致更高的片上内存大小,大量的延迟,和相当的功耗。
本发明披露的是一个基于单一运动矢量预测(SMVP)和类似于RD的代价函数的可重构多分辨率运动矢量重用硬件体系结构,该结构使用SMVP而不是通常的MVP中值。此外,通过利用所披露的方面,只有一小部分过去的运动矢量被传播,且这些方面可以很容易地对不同空间分辨率的视频重新配置。
详细描述的一些部分已经用算法和/或在计算机内存中数据位的操作的符号表示进行了呈现。这些算法描述和/或表现是在业界被广泛认知的可以最有效地向其他具有同等技术的人员传达工作本质的方式。一般来说,这里的算法被认为是一个可以得到理想结果的自洽行为序列(self-consistentsequence)。这些行为是对物理量的必要的物理操作。通常情况下,虽然不一定,这些物理量采取的电气和/或磁信号的形式,可以储存、转移、合并、比较、和/或其他操作。
用于指代比特、数值、元素、符号、文字、术语、数字、或类似的信号的通常的用法时,它已被证明是方便的。不过,人们还注意到,这些和类似的术语都必须与相应的物理量相联系,并且是只适用于这些物理量的方便的标签。除非特别说明,在本发明整个披露的内容中,对处理、计算、运算、确定和/或展示等等术语的讨论,指的是计算机系统的行动和进程,和/或类似于消费和/或工业的电子设备和/或机器,操纵和/或将计算机和/或机器的寄存器和存储器中的作为物理量(电气和/或电子的)表示的数据变换到其他类似表示的数据。
因为它用于说明书,术语“处理器”可以指任何计算处理单元或设备组成,包括但不限于,单核处理器;具有软件多线程执行能力的单处理器;多核心处理器;具有软件多线程执行能力的多核心处理器;具有硬件多线程技术的多核心处理器;并行平台;以及具有分布式共享存储的并行平台。此外,处理器可以指集成电路、专用集成电路(ASIC)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、可编程逻辑控制器(PLC)、复杂的可编程逻辑器件(CPLD)、分立的门级或晶体管级逻辑、分立的硬件组件、或可以执行所述功能的上述器件的任意组合。处理器可以利用纳米尺度的结构,包括但不限于分子和量子级的晶体管、开关和门级电路,以优化空间利用或提高用户设备的性能。一个处理器也可以实现为计算处理单元的组合。
在说明书和附图中,术语“存储”、“数据存储”、“数据库”、及任何其他与组件的运行和功能的相关的资料储存元件的术语,是指“记忆组件”,或“存储器”或部件组成的内存内的实体。这理解为,此处所述的记忆体元件可以是易失性存储器或非易失性内存,或者可以包括易失性和非易失性记忆体。
通过举例的方式,而不是限制,非易失性记忆休可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除只读光碟(EEPROM)中、或闪存记忆体。易失性记忆体包括随机存取存储器(RAM),它可以作为外部缓存存储器。举例的方式,而不是限制,RAM可以有多种形式,例如同步RAM(SRAM)、动态随机存储器(DRAM)、同步DRAM(SDRAM)、双倍数据速率SDRAM(DDRSDRAM)、增强SDRAM(ESDRAM)、同步链接(Synchlink)的DRAM(SLDRAM)、和Rambus的内存(DRRAM)。此外,此处披露的系统内存组件或方法是为了组成,而不限于组成,这些和任何其他合适类型的内存。
这里描述的各个方面或特点可以实现为方法、仪器、或使用标准编程和/或工程技术进行制造的产品。此外,说明书中披露的主题规范的各个方面也可以通过存储在内存并由处理器、其他硬件和软件的组合、或硬件和固件的组合执行的程序模块来实现。
计算设备通常包括各种媒体,它可以包括计算机可读存储媒体或通信媒体,这两个术语使用的不同方式如下。
计算机可读存储媒体可以是任何计算机可以访问的可用的存储媒体,包括易失性和非易失性媒体,可移动和不可移动媒体。通过举例,而不是限制的方法,计算机可读存储介质可通过与任何方法或信息存储技术,如计算机可读的指令、程序模块、结构化或非结构化数据,的结合而实现。计算机可读存储介质可以包括但不限于RAM、ROM、EEPROM、闪存或其他存储技术、光盘、数字多功能磁盘(DVD)或其他光盘存储、磁带、磁盘储存或其他磁性存储设备、或其他有形和/或其他非暂时性的、可用于存储所需信息的媒体。计算机可读存储介质可以被一个或多个本地或远程计算机设备访问,例如通过访问请求,查询或其他数据检索协议,各种针对介质中信息的操作。
通信媒体通常包含计算机可读的指令、数据结构、程序模块或其他结构化或非结构化数据中的数据信号,例如载波或其他传输机制、并包括任何信息传递或传输媒体。术语“调制的数据信号”或信号,是指这样一个信号,其有一个或多个特征被设置或改变,从而将一个或多个信号的信息调制在其中。通过举例,而不是限制的方式,传播媒体包括有线媒体,例如有线网络或直接有线连接,和无线媒体,如声学,射频,红外线和其它无线媒体。
上述的内容包括实现本发明的优势的系统和方法的实例。当然,不可能描述每一个方面可以想象到的组件或方法的组合,但所属领域的技术人员可以想到所要求保护的主题的一些其他组合和变换是可能的。此外,说明书、权利要求和附图中使用的术语“包括”、“有”、“拥有”等倾向于具有包容性,就像用在权利要求中的术语“包含”一样具有同样的解释。
在该申请中使用的术语“元件”、“系统”等倾向于表示与计算机相关的实体或者与具有一个或多个具体功能的操作设备相关的实体,其中所述实体可以是硬件、硬件和软件的组合、软件或执行的软件。而且,用在说明书和附图中的术语“一个”和“一种”通常解释为“一个或多个”以及“一种或多种”,除非另外指出或者从上下文可以确定为单数形式。

Claims (16)

1.一种视频处理方法,包括:
从多个视频帧中确定参考帧;
在该参考帧中确定包括多个搜索点的搜索区域;
将搜索区域划分成大小相同或不同的多个子窗口;以及
处理多个视频帧,处理多个视频帧包括在多个子窗口中确立扫描顺序,每一个子窗口至少被扫描一次,并且两个扫描顺序相邻的子窗口在空间上相近,
其中,对于每一个子窗口的扫描,首先以第一方向来扫描第一行或第一列,当到达第一行或第一列的最后位置时,从下一行或下一列中的相邻搜索点开始以与第一方向相反的第二方向继续对下一行或下一列进行扫描。
2.根据权利要求1所述的视频处理方法,其中扫描多个子窗口的步骤包括执行水平扫描、竖直扫描、或同时执行水平扫描和竖直扫描。
3.根据权利要求1所述的视频处理方法,还包括在参考帧中确定包括多个搜索点的搜索区域之前将视频帧分成包含NxN个像素的块;以及其中所述处理步骤包括在一个时钟周期内并行读取N个像素并且将这些像素一次性加载到子窗口内。
4.根据权利要求1所述的视频处理方法,其中扫描多个子窗口的步骤包括用从16种不同蛇形扫描中所选择的至少1种蛇型扫描来进行扫描,其中所述16种不同蛇形扫描包括从搜索区域的左上角、右上角、左下角、右下角开始的针对奇数列或偶数列的蛇形竖直扫描和从搜索区域的左上角、右上角、左下角、右下角开始的针对奇数行或偶数行的蛇形水平扫描。
5.根据权利要求1所述的视频处理方法,其中扫描多个子窗口的步骤还包括:
用第一种类型的蛇形扫描来扫描第一子窗口;
移动到第二子窗口中的相邻搜索点;以及
用第二种类型的蛇形扫描来扫描第二子窗口。
6.根据权利要求1所述的视频处理方法,其中将搜索区域划分成多个子窗口的步骤包括将搜索区域划分成一些不相互覆盖的矩形子窗口。
7.根据权利要求1所述的视频处理方法,其中扫描多个子窗口的步骤包括使用从搜索窗口的左上角、右上角、左下角、或右下角开始的扫描来定义扫描顺序,以及其中所述扫描是水平扫描或者竖直扫描。
8.根据权利要求1所述的视频处理方法,其中扫描多个子窗口的步骤包括将搜索区域划分为多个子区域,并且在多个子区域中局部地应用不同的蛇形扫描。
9.一种视频处理系统,包括:
选择元件,用来确定参考帧;
指定元件,用来在参考帧中定义搜索区域;
子分割元件,用来将搜索区域分割为大小相同或不同的多个子窗口;以及
扫描元件,用来选择多个子窗口之间的扫描顺序,每一个子窗口至少被扫描一次,并且扫描顺序相邻的两个子窗口在空间上是接近的,
其中,对于每一个子窗口的扫描,首先以第一方向来扫描第一行或第一列,当到达第一行或第一列的最后位置时,从下一行或下一列中的相邻搜索点开始以与第一方向相反的第二方向继续对下一行或下一列进行扫描。
10.根据权利要求9所述的视频处理系统,其中扫描元件构造为对多个子窗口执行水平扫描、竖直扫描、或同时执行水平扫描和竖直扫描。
11.根据权利要求9所述的视频处理系统,其中扫描元件被构造为选择扫描顺序,该扫描顺序包括从搜索区域的左上角、右上角、左下角、右下角开始的蛇形扫描,以及其中蛇形扫描使用水平扫描或竖直扫描。
12.根据权利要求9所述的视频处理系统,其中搜索区域中的多个点对应于当前块和参考帧中相同大小的候选参考块之间的候选运动矢量。
13.根据权利要求9所述的视频处理系统,其中子分割元件被构造为将搜索区域分割成多个矩形的子窗口,以及其中搜索区域中的多个搜索点属于多个子窗口。
14.根据权利要求9所述的视频处理系统,还包括:
数据总线,其配置为在一个时钟周期中并行读取N个像素,其中参考帧的块包括NxN个像素;以及
可重构寄存器阵列,用来存储一行的数据以用在下一行中,其中N个像素一次加载到多个子窗口中。
15.根据权利要求9所述的视频处理系统,其中扫描元件被构造为从16种不同的蛇形扫描中选择扫描顺序,
其中,第一组蛇形扫描针对竖直扫描,而第二组蛇形扫描针对水平扫描,
其中,第一组蛇形扫描包括从搜索区域的左上角、右上角、左下角、右下角开始的针对奇数列或偶数列的蛇形竖直扫描,以及第二组蛇形扫描包括从搜索区域的左上角、右上角、左下角、右下角开始的针对奇数行或偶数行的蛇形水平扫描。
16.根据权利要求9所述的视频处理系统,其中扫描元件被构造为选择一种扫描顺序,该扫描顺序将搜索区域分割成多个子区域,并在多个子区域中局部应用不同的蛇形扫描。
CN201110141693.2A 2010-05-27 2011-05-27 图像运动估计的方法及系统 Expired - Fee Related CN102263947B (zh)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US34412510P 2010-05-27 2010-05-27
US34412410P 2010-05-27 2010-05-27
US34412610P 2010-05-27 2010-05-27
US61/344,126 2010-05-27
US61/344,124 2010-05-27
US61/344,125 2010-05-27

Publications (2)

Publication Number Publication Date
CN102263947A CN102263947A (zh) 2011-11-30
CN102263947B true CN102263947B (zh) 2016-07-06

Family

ID=45010378

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110141693.2A Expired - Fee Related CN102263947B (zh) 2010-05-27 2011-05-27 图像运动估计的方法及系统

Country Status (2)

Country Link
US (1) US9357228B2 (zh)
CN (1) CN102263947B (zh)

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101479130B1 (ko) * 2010-10-18 2015-01-07 에스케이 텔레콤주식회사 차분 움직임벡터 부호화/복호화 장치 및 방법, 및 그것을 이용한 영상 부호화/복호화 장치 및 방법
US8755437B2 (en) * 2011-03-17 2014-06-17 Mediatek Inc. Method and apparatus for derivation of spatial motion vector candidate and motion vector prediction candidate
EP3139611A1 (en) * 2011-03-14 2017-03-08 HFI Innovation Inc. Method and apparatus for deriving temporal motion vector prediction
WO2012122927A1 (en) 2011-03-14 2012-09-20 Mediatek Inc. Method and apparatus for derivation of motion vector candidate and motion vector prediction candidate
US9143795B2 (en) 2011-04-11 2015-09-22 Texas Instruments Incorporated Parallel motion estimation in video coding
US11582479B2 (en) * 2011-07-05 2023-02-14 Texas Instruments Incorporated Method and apparatus for reference area transfer with pre-analysis
KR101323863B1 (ko) * 2011-11-01 2013-10-31 아주대학교산학협력단 움직임 추정 방법 및 움직임 추정 장치
US9674527B2 (en) 2012-01-31 2017-06-06 Qualcomm Incorporated Implicit derivation of parallel motion estimation range size
US9338451B2 (en) * 2012-04-12 2016-05-10 Qualcomm Incorporated Common spatial candidate blocks for parallel motion estimation
TW201409994A (zh) * 2012-08-30 2014-03-01 Novatek Microelectronics Corp 立體視訊的編碼方法與編碼裝置
CN103686188B (zh) * 2012-09-14 2017-02-22 扬智电子科技(上海)有限公司 一种运动估计搜索窗映射方法以及运动估计模块
CN102932643B (zh) * 2012-11-14 2016-02-10 上海交通大学 一种适用于hevc标准的扩展可变块运动估计电路
US9967559B1 (en) 2013-02-11 2018-05-08 Google Llc Motion vector dependent spatial transformation in video coding
US9544597B1 (en) 2013-02-11 2017-01-10 Google Inc. Hybrid transform in video encoding and decoding
US20140254659A1 (en) * 2013-03-11 2014-09-11 Mediatek Inc. Video coding method using at least evaluated visual quality and related video coding apparatus
US9674530B1 (en) 2013-04-30 2017-06-06 Google Inc. Hybrid transforms in video coding
CN103338377A (zh) * 2013-07-11 2013-10-02 青岛海信信芯科技有限公司 用于确定运动估计中最优运动矢量的方法
US20150063451A1 (en) * 2013-09-05 2015-03-05 Microsoft Corporation Universal Screen Content Codec
CN103561263B (zh) * 2013-11-06 2016-08-24 北京牡丹电子集团有限责任公司数字电视技术中心 基于运动矢量约束和加权运动矢量的运动补偿预测方法
US10477232B2 (en) * 2014-03-21 2019-11-12 Qualcomm Incorporated Search region determination for intra block copy in video coding
US9769494B2 (en) * 2014-08-01 2017-09-19 Ati Technologies Ulc Adaptive search window positioning for video encoding
CN104244003B (zh) * 2014-08-18 2017-08-15 北京君正集成电路股份有限公司 一种确定运动矢量代价的方法及装置
US9992512B2 (en) * 2014-10-06 2018-06-05 Mediatek Inc. Method and apparatus for motion vector predictor derivation
US9565451B1 (en) 2014-10-31 2017-02-07 Google Inc. Prediction dependent transform coding
US10271064B2 (en) * 2015-06-11 2019-04-23 Qualcomm Incorporated Sub-prediction unit motion vector prediction using spatial and/or temporal motion information
US9769499B2 (en) 2015-08-11 2017-09-19 Google Inc. Super-transform video coding
US10277905B2 (en) 2015-09-14 2019-04-30 Google Llc Transform selection for non-baseband signal coding
US10805627B2 (en) 2015-10-15 2020-10-13 Cisco Technology, Inc. Low-complexity method for generating synthetic reference frames in video coding
CN105430413B (zh) * 2015-11-17 2018-12-11 复旦大学 一种适用于hevc标准中整数运动估计的四分块硬件扫描方法
US9807423B1 (en) 2015-11-24 2017-10-31 Google Inc. Hybrid transform scheme for video coding
JP6495834B2 (ja) * 2016-01-05 2019-04-03 日本電信電話株式会社 映像符号化方法、映像符号化装置及び映像符号化プログラム
WO2017118409A1 (en) * 2016-01-07 2017-07-13 Mediatek Inc. Method and apparatus for affine merge mode prediction for video coding system
US10621731B1 (en) * 2016-05-31 2020-04-14 NGCodec Inc. Apparatus and method for efficient motion estimation for different block sizes
CN114501020A (zh) * 2016-08-21 2022-05-13 上海天荷电子信息有限公司 使用最近运动矢量和邻近运动矢量的图像压缩方法和装置
JP2019530299A (ja) * 2016-10-13 2019-10-17 富士通株式会社 画像コーディング/デコーディング方法、装置及び画像処理機器
CN115118988A (zh) 2017-06-30 2022-09-27 华为技术有限公司 用于运动向量细化的搜索区域
US10762691B2 (en) 2017-09-08 2020-09-01 Microsoft Technology Licensing, Llc Techniques for compensating variable display device latency in image display
WO2019072368A1 (en) 2017-10-09 2019-04-18 Huawei Technologies Co., Ltd. LIMITED MEMORY ACCESS WINDOW FOR MOTION VECTOR REFINEMENT
JP2021145157A (ja) * 2018-06-14 2021-09-24 ソニーグループ株式会社 画像処理装置および方法
CN115250350B (zh) 2018-09-03 2024-04-09 华为技术有限公司 运动矢量的获取方法、装置、计算机设备及存储介质
US10944987B2 (en) * 2019-03-05 2021-03-09 Intel Corporation Compound message for block motion estimation
JP2020150294A (ja) * 2019-03-11 2020-09-17 ルネサスエレクトロニクス株式会社 復号方法、復号装置及び符号化方法
US11122297B2 (en) 2019-05-03 2021-09-14 Google Llc Using border-aligned block functions for image compression
CN110139100B (zh) * 2019-05-16 2021-07-06 东莞职业技术学院 多图像运动估计的扩展块匹配及运动矢量估计算法
CN110163210B (zh) * 2019-05-24 2022-04-19 北京百度网讯科技有限公司 一种兴趣点poi信息采集方法、装置、设备和存储介质
US11558637B1 (en) * 2019-12-16 2023-01-17 Meta Platforms, Inc. Unified search window to support multiple video encoding standards
US11827216B2 (en) * 2020-12-08 2023-11-28 Deere & Company Optimal sensor reading for low latency object detection
CN116109471A (zh) * 2021-11-09 2023-05-12 哲库科技(上海)有限公司 一种图像处理方法、芯片、电子设备及存储介质
CN116055717B (zh) * 2023-03-31 2023-07-14 湖南国科微电子股份有限公司 视频压缩方法、装置、计算机设备及计算机可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1628465A (zh) * 2002-07-29 2005-06-15 松下电器产业株式会社 运动矢量检测装置和运动矢量检测方法
KR20070000702A (ko) * 2005-06-28 2007-01-03 연세대학교 산학협력단 탐색영역 재설정을 이용한 고속 움직임 예측 장치 및 방법
CN1997156A (zh) * 2006-12-01 2007-07-11 清华大学 视频编码器中一种快速的搜索块读取模块

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6925123B2 (en) * 2002-08-06 2005-08-02 Motorola, Inc. Method and apparatus for performing high quality fast predictive motion search
JP4317814B2 (ja) * 2004-12-06 2009-08-19 株式会社ルネサステクノロジ 動画像情報の符号化装置及び符号化方法
US7693219B2 (en) * 2006-01-04 2010-04-06 Freescale Semiconductor, Inc. System and method for fast motion estimation
US20080260033A1 (en) * 2007-04-17 2008-10-23 Horizon Semiconductors Ltd. Hybrid hierarchical motion estimation for video streams

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1628465A (zh) * 2002-07-29 2005-06-15 松下电器产业株式会社 运动矢量检测装置和运动矢量检测方法
KR20070000702A (ko) * 2005-06-28 2007-01-03 연세대학교 산학협력단 탐색영역 재설정을 이용한 고속 움직임 예측 장치 및 방법
CN1997156A (zh) * 2006-12-01 2007-07-11 清华大学 视频编码器中一种快速的搜索块读取模块

Also Published As

Publication number Publication date
US20110293012A1 (en) 2011-12-01
CN102263947A (zh) 2011-11-30
US9357228B2 (en) 2016-05-31

Similar Documents

Publication Publication Date Title
CN102263947B (zh) 图像运动估计的方法及系统
TWI669953B (zh) 用於視訊編解碼的基於模型的運動向量推導
KR100952340B1 (ko) 시공간적 복잡도를 이용한 부호화 모드 결정 방법 및 장치
US20120057631A1 (en) Method and device for motion estimation of video data coded according to a scalable coding structure
CN103039073A (zh) 编码/解码高分辨率图像的方法和执行该方法的装置
JP2011114572A (ja) 画像符号化装置、画像復号化装置、画像符号化方法、及び画像復号化方法
JP2004241918A (ja) 動画像の画像圧縮符号化方法及び装置
CN114339218A (zh) 图像编码方法、图像编码装置、电子设备和可读存储介质
CN103957414A (zh) 一种hevc帧内预测编码方法和系统
CN110365988B (zh) 一种h.265编码方法和装置
JP4786612B2 (ja) 動画像符号化装置の予測動きベクトル生成装置
Sanchez et al. Hardware-friendly HEVC motion estimation: new algorithms and efficient VLSI designs targeting high definition videos
WO2019217122A1 (en) Method and apparatus for blended intra prediction
Goel et al. High-speed motion estimation architecture for real-time video transmission
CN110971896B (zh) 一种h.265编码方法和装置
JP4957780B2 (ja) 動き補償予測符号化装置、動き補償予測符号化方法及びプログラム
Birman et al. Intra prediction with deep learning
JP2012129791A (ja) 画像符号化装置
Yang et al. Low complexity fractional motion estimation with adaptive mode selection for H. 264/AVC
López et al. Low cost efficient architecture for H. 264 motion estimation
Vidyalekshmi et al. Motion estimation block for HEVC encoder on FPGA
CN110049322A (zh) 模式选择的方法、装置、电子设备及存储介质
KR20130086901A (ko) 모션 파티션 모드 판정 방법 및 부호화기
Vani et al. Survey on H. 264 standard
Chen et al. Predictive patch matching for inter-frame coding

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160706