运动估计搜索范围和扩展的运动矢量范围的动态选择的制作方法

文档序号:7676267阅读:99来源:国知局

专利名称::运动估计搜索范围和扩展的运动矢量范围的动态选择的制作方法运动估计搜索范围和扩展的运动矢量范围的动态选择背景数字视频消耗了大量的存储和传输容量。典型的原始数字视频序列包括每秒15或30帧。每一帧可包括数万或数十万的像素(也称为pel),其中每一像素表示图像的一微小元素。在原始形式中,计算机通常将像素表示为总共24比特的一组三个样本。由此,原始数字视频序列的每秒的比特数,即比特率可以是5百万比特/秒或更多。许多计算机和计算机网络缺少处理原始数字视频的资源。为此,工程师使用压縮(也称为编码或译码)来降低数字视频的比特率。压縮通过将视频转换成较低比特率的形式来降低存储和传送视频的成本。解压(也被称为解码)从压縮的形式中重构一种版本的原始视频。"编解码器"是编码器/解码器系统。压縮可以是无损的,其中视频质量不受损害,但是比特率的降低受到视频数据的内在可变性数量(有时称为熵)的限制。或者,压縮可以是有损的,其中视频质量受到损害,但是可实现的比特率的降低更显著。有损压縮通常结合无损压縮来使用一有损压縮建立信息的近似,而无损压縮被用于表示该近似。有损压縮的基本目标是提供良好的码率-失真性能。因此,对于特定的比特率,编码器试图提供最高质量的视频。或者,对于原始视频的特定质量/保真度水平,编码器试图提供最低比特率编码的视频。在实践中,诸如编码时间、编码复杂度、编码资源、解码时间、解码复杂度、解码资源、总体延迟和/或质量/比特率改变中的平滑度等考虑事项也影响了在编解码设计中做出的判决以及在实际编码期间做出的判决。一般而言,视频压縮技术包括"图像内"压縮和"图像间"压縮。图像内压缩技术压縮个别图像,而图像间压縮技术参考一个或多个前导和/或后续图像(通常称为参考或锚图像)来压縮图像。图像间压缩技术通常使用运动估计和运动补偿,通过充分利用视频序列中的时间冗余性来降低比特率。运动估计是一种用于估计图像之间的运动的过程。在一种常见技术中,使用运动估计的编码器试图将当前图像中的当前样本块与另一图像,即参考图像的搜索区域中的相同大小的候选块进行匹配。当编码器在参考图像的搜索区域中找到精确或"足够接近"的匹配时,编码器将当前和候选块之间的位置改变参数化为运动数据(诸如运动矢量("MV"))。运动矢量常规上是二维值,其具有指示左或右空间漂移的水平分量和指示上或下空间漂移的垂直分量。一般而言,运动补偿是一种使用运动数据从参考图像重构图像的过程。图1示出了一个示例编码器中用于预测图像的部分的运动估计。对于8x8的样本块、16x16的块(通常称为"宏块")或当前图像的其它单元,.编码器找出参考图像中的相似单元以用作预测值。在图1中,编码器对当前的预测图像(110)中的16x16的宏块(115)计算运动矢量。编码器在参考图像(130)的搜索区域(135)中进行搜索。在搜索区域(135)中,编码器将来自预测图像(110)的宏块(115)与各种候选宏块进行比较,以找出作为良好匹配的候选宏块。编码器输出指定到预测值宏块的运动矢量的信息。编码器计算当前单元及其经运动补偿的预测之间的逐样本差别,以确定残差(也称为误差信号)。对该残差进行频率变换、量化和熵编码。作为一种线性熵压縮变换,频率变换往往产生能量集中在较低频率系数中的变换系数。预测图像的总体比特率很大一部分取决于残差的比特率。如果残差是简单的(即,由于找出精确或良好匹配的运动估计)或者有损压縮显著降低了残差的复杂度,则残差的比特率较低。采用成功的运动估计所节省的比特可用于改善别处的质量或降低总体比特率。另一方面,复杂残差的比特率可能较高,取决于用于降低残差的复杂度的有损压縮的程度。如果一预测图像被用作用于后续运动补偿的参考图像,则编码器重构该预测图像。当重构残差时,编码器用反量化来重构被量化的变换系数,并执行反频率变换。编码器执行运动补偿来计算经运动补偿的预测值,并将该预测值与重构的残差相组合。编码器通常花费很大一部分编码时间来执行运动估计,试图找出良好匹配并由此改进码率-失真性能。一般而言,使用参考图像中的大搜索范围提高了编码器找到良好匹配的机率。然而,编码器可能将当前块与大搜索范围中的所有可能空间上漂移的块进行比较。在大多数情形中,编码器缺少时间或资源来对要编码的每一块或宏块检查大搜索范围中的每一可能的运动矢量。特别地,当编解码器允许对于大漂移的运动矢量时,搜索大搜索范围以找到最佳运动矢量的计算成本可能是相当高的,尤其是在要编码的内容是高清视频的时候。各种技术帮助编码器加速运动估计。采用一种技术,用户设置、类(profile)设置或水平设置直接将运动矢量范围设为特定大小。运动矢量范围指示运动矢量的允许的大小。对于否则会执行参考图像上的完全搜索的编码器而言,运动矢量范围实际上通过排除在该运动矢量范围之外的运动矢量来约束搜索范围。用户用命令行参数、用户界面控件等来设置运动矢量范围,以覆盖默认值。例如,对于高质量的离线编码,使用大运动矢量范围(且因此是大搜索范围)。或者,对于较低质量的实时编码,使用较小的运动矢量范围(且因此是较小的搜索范围)。尽管这些设置解决了关于编码时间和资源的问题,但它们因其不能对所编码的视频内容的运动特性中的改变自适应运动矢量范围或搜索范围而是不灵活的。结果,在某些情形中,大运动矢量范围和搜索范围对于一系列低运动图像是不需要的。或者,小运动矢量范围和搜索范围对于一系列高运动图像是不恰当的。在分层运动估计中,编码器找出低分辨率下(例如,使用经4:1降采样的图像)的一个或多个运动矢量、将这些运动矢量放大到较高的分辨率(例如,整数像素)、找出放大的运动矢量周围的邻域中较高分辨率下的一个或多个运动矢量,依此类推。尽管这允许编码器跳过较高分辨率下的穷尽搜索,但是当只有极少或没有运动来证明这一搜索时它会导致低分辨率下的浪费的长搜索。这一分层运动估计也无法对所编码的视频内容中的运动特性的改变自适应运动矢量范围和搜索范围。其它编码器在对图像的当前块或宏块执行运动估计时通过考虑同一图像中空间上直接相邻的块的运动矢量来动态地调整搜索范围。这种编码器通过严密地集中于对当前块或宏块的运动矢量搜索过程来动态地加速运动估计。然而,在某些情形中(例如,强局部化运动、不连续运动或其它复杂运动),这一运动估计可能无法提供恰当的性能。一般而言,编码器在运动估计期间使用失真度量。失真度量帮助编码器评估与在运动估计选择中使用候选块相关联的质量和速率成本。一种常见的失真度量是绝对差的和("SAD")。为计算参考图像中的候选块的SAD,编码器计算当前和候选块之间的残差的绝对值的和,其中残差是当前块和候选块之间的逐样本差。低计算复杂度是SAD的优点。然而,在某些情况下,SAD是对总体码率-失真成本的较差的近似。特别低,当在当前块和候选块之间有较大但均匀的样本差时,SAD较差地近似实际失真。SAD无法解决对残差执行的频率变换的能量压縮效应。假定当前块的样本值具有与候选块相比显著但均匀的差别。最有可能的是,编码期间的频率变换将捕捉和隔离非零DC系数值的均匀样本差。(DC系数是最低频率变换系数。)由于能量压缩效应,选择候选块的总体码率-失真成本可能很小。然而,SAD可能会不正确地指示大成本。某些视频编码器因此使用绝对的经哈达玛(Hadamard)变换的差的和("SAHD")作为失真度量,或使用另一绝对的经变换的差的和("SATD")度量。为计算参考图像中的候选块的SAHD,编码器对当前块进行哈达玛变换,并对候选块进行哈达玛变换,然后计算经哈达玛变换的块之差的绝对值的和。或者,编码器计算残差,对该残差进行哈达玛变换,并计算经哈达玛变换的残差的绝对值的和。稍后在压縮中使用的频率变换通常不是哈达玛变换。相反,哈达玛变换近似了编码器稍后对残差使用的频率变换的能量压縮,但是哈达玛变换的计算更简单。在运动估计中使用SAHD通常导致比使用SAD更好的码率-失真性能,因为SAHD解决了均匀的总体样本值漂移,但是使用SAHD也增加了计算复杂度。单个哈达玛变换相对简单,但是在计算失真度量时执行哈达玛变换极大地增加了运动估计的累积计算复杂度,因为编码器通常花费如此大的一部分编码时间以在运动估计期间评估不同的候选块。平方误差和("SSE")、均方误差("MSE")以及均方差是其它失真度量。采用SSE,编码器对残差值求平方,然后对平方的值求和。采用MSE,编码器计算平方的值的平均值。均方差的一种定义为知<_《)2,其中《是残差<中的/个残差值的均值。均方差在某种程度上解决了当前块和候选块之间的总差别。SSE、MSE和均方差在某些情况下产生可接受的码率-失真性能,但是增加了测量失真的计算复杂度。某些编码器计算码率-失真成本作为运动估计期间的失真度量。码率-失真成本具有失真项和速率项,且具有相对于失真项来縮放速率项的因子(通常称为拉格朗日乘数)。速率项可以是关于运动矢量信息和/或残差信息的估计的或实际的比特率成本。失真项可以基于原始样本与重构的样本(在频率变换、量化、反量化和反频率变换之后重构的样本)的比较(例如,SAD)。或者,失真项可以是某一其它失真度量或估计。码率-失真成本通常提供对不同运动估计选择的码率-失真性能的最准确评估,但是也具有最高计算复杂度,尤其是对每一不同的运动估计选择评估不同的量化参数的时候。在大多数情况下,编码器在整个运动估计中使用相同的失真度量(例如,仅SAD、仅SAHD)。这是不灵活的,并且取决于所使用的度量,可能是计算上低效的或导致较差的码率-失真性能。另一种方法是使用SAD来找出运动估计中前x个候选运动矢量,然后使用码率-失真成本来评估前x个候选运动矢量中的每一个。例如,用码率-失真成本来评估前3个候选运动矢量。尽管这避免了从运动估计的开始使用码率-失真成本的计算成本,但是在某些情况下,编码器由于SAD的缺陷而错过良好的候选运动矢量,并且改为稳定在较差的候选运动矢量上。如果编码器在开始时使用SAHD,之后对前x个候选运动矢量使用码率-失真成本,则编码器更有可能找到良好的候选运动矢量,但是计算复杂度显著增加。在又一种方法中,编码器在分层运动估计的整数像素级使用SAD,而在分层运动估计的'/2像素和W像素级使用SAHD。再一次,尽管这避免了从运动估计的开始使用SAHD的计算成本,但是在许多情况下,编码器由于SAD的缺陷而错过良好的候选运动矢量。除了这些技术之外,许多编码器使用专门的运动矢量搜索模式或被认为有可能在可接受量的时间内找到良好匹配的其它策略。已经开发了用于加速或以其它方式改进运动估计的各种其它技术。给定视频压縮对于数字视频的关键重要性,运动估计是充分开发的领域并不令人惊奇。然而,不论早先的运动估计技术的好处如何,它们都没有以下技术和工具的优点。概述本申请针对用于在运动估计期间选择搜索范围和/或运动矢量范围的技术和工具。例如,一种视频编码器使用关于前一图像的运动矢量的运动矢量分布信息来对当前图像选择运动矢量范围。在许多情况下,该运动矢量范围实际上约束了对当前图像的运动估计的搜索范围。以此方式,该视频编码器用变化的运动级别改进了对视频序列的运动估计的性能。根据所描述的技术和工具的第一方面,一种视频编码器执行由第一搜索范围约束的运动估计,这得到多个运动矢量。该编码器计算关于该运动矢量的运动矢量分布信息。例如,该编码器在直方图中描绘运动矢量,并且对有多少落入该分布信息的多个区间的每一个中进行计数。该编码器然后选择第二搜索范围,并执行由第二搜索范围约束的运动估计。根据所描述的技术和工具的第二方面,一种视频编码器执行由第一运动矢量范围和第一搜索范围约束的运动估计。该编码器在视频比特流中用信号表示该第一运动矢量范围和运动估计的结果。在选择了第二运动矢量范围之后,该编码器执行由第二运动矢量范围和第二搜索范围约束的运动估计。该编码器在视频比特流中用信号表示该第二运动矢量范围和运动估计的结果。根据所描述的技术和工具的第三方面,一种编码器包括用于执行运动估计的运动估计器、频率变换器、量化器、熵编码器以及用于选择约束运动估计的搜索范围的运动估计控制器。对于当前图像,选择至少部分地基于关于多个先前的运动矢量的运动矢量分布信息。本概述以简化的形式介绍了一些概念。这些概念将在以下详细描述中进一步描述。本概述并不旨在标识要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。参考附图阅读以下详细描述,将更清楚前述和其它目的、特征和优点。附图简述图1是示出根据现有技术的运动估计的图示。图2是其中可实现所描述的若干实施例的合适的计算环境的框图。图3是可结合其实现所描述的若干实施例的视频编码器系统的框图。图4是示出运动估计中运动矢量范围和搜索范围之间的关系的图示。图5是用于基于运动矢量分布信息来动态地切换运动矢量范围和/或搜索范围的通用技术的流程图。图6是用于使用直方图的一个或多个特征来选择运动矢量范围和/或搜索范围的技术的流程图。图7是用于示例直方图计算例程的伪代码清单。图8是在图7、9和11的示例中使用的值的表。图9是用于示例直方图特征提取例程的伪代码清单。图10是示出用于图9的示例直方图特征提取例程的预定义运动区间的曲线图。图11是用于示例范围选择例程的伪代码清单。图12是用于从多个可用失真度量中选择一失真度量的通用技术的流程图。图13是用于根据失真度量选择准则和选择阈值来选择失真度量的技术的流程图。详细描述本申请涉及用于执行运动估计的技术和工具。在各个所描述的实施例中,视频编码器执行运动估计。对此处所描述的实现的各种替换是可能的。例如,参考流程图所描述的某些技术可以通过改变流程图中所示的阶段的排序,通过重复或省略某些阶段等来改变。此处描述的各种技术和工具可组合或单独使用。不同的实施例实现所描述的技术和工具的一个或多个。此处描述的各种技术和工具可用于例如图像合成或内插工具等除了视频编码器之外的工具中的运动估计。此处所描述的技术和工具中的某一些解决了背景中所指出的一个或多个问题。通常,所给出的技术/工具并不解决所有这些问题。相反,鉴于编码时间、资源和/或质量的约束和折衷,所给出的技术/工具改进了对于特定运动估计实现或情形的性能。I.计算环境图2示出了其中可实现几个所描述的实施例的合适的计算环境(200)的通用示例。计算环境(200)并非旨在对使用范围或功能提出任何限制,因为这些技术和工具可以在完全不同的通用或专用计算环境中实现。参考图2,计算环境(200)包括至少一个处理单元(210)和存储器(220)。在图2中,这一最基本的配置(230)被包括在虚线内。处理单元(210)执行计算机可执行指令,并且可以是真实或虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以提高处理能力。存储器(220)可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存等)或两者的某种组合。存储器(220)储存实现具有此处所描述的用于运动估计的一个或多个技术和工具的编码器的软件(280)。计算环境可具有额外的特征。例如,计算环境(200)包括存储(240)、一个或多个输入设备(250)、一个或多个输出设备(260)以及一个或多个通信连接(270)。诸如总线、控制器或网络等互连机制(未示出)将计算环境(200)的各组件互连。通常,操作系统软件(未示出)为在计算环境(200)中执行的其它软件提供操作环境,并协调计算环境(200)的各组件的活动。存储(240)可以是可移动或不可移动的,且包括磁盘、磁带或磁带盒、CD-ROM、DVD或可用于储存信息并可在计算环境(200)内访问的任何其它介质。存储(240)储存用于实现视频编码器的软件(280)的指令。输入设备(250)可以是诸如键盘、鼠标、笔或跟踪球等触摸输入设备、语音输入设备、扫描设备或向计算环境(200)提供输入的另一设备。对于音频或视频编码,输入设备(250)可以是声卡、显卡、TV调谐卡、或接受模拟或数字形式的音频或视频输入的类似的设备、或将音频或视频样值读入计算环境(200)的CD-ROM或CD-RW。输出设备(260)可以是显示器、打印机、扬声器、CD刻录机或提供来自计算环境(200)的输出的另一设备。通信连接(270)允许在通信介质上与另一计算实体的通信。通信介质传达诸如己调制数据信号形式的计算机可执行指令、音频或视频输入或输出、或其它数据等信息。己调制数据信号是其一个或多个特征以在信号中编码信息的方式设置或改变的信号。作为示例而非局限,通信介质包括以电、光、RF、红外、声学或其它载波实现的有线或无线技术。各种技术和工具可以在计算机可读介质的一般上下文中描述。计算机可读介质可以是可在计算环境内访问的任何可用介质。作为示例而非局限,对于计算环境(200),计算机可读介质可包括存储器(220)、存储(240)、通信介质和以上任一种的组合。该技术和工具可在诸如程序模块中所包括的在目标真实或虚拟处理器上的计算环境中执行的计算机可执行指令的一般上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、组件、数据结构等。程序模块的功能可以如各实施例中所需地组合或在程序模块之间分离。用于程序模块的计算机可执行指令可以在本地或分布式计算环境中执行。为了呈现,详细描述使用了如判定摂和分析摂等术语来描述计算环境中的计算机操作。这些术语是由计算机执行的操作的高级抽象,且不应与人类所执行的动作混淆。对应于这些术语的实际的计算机操作取决于实现而不同。II.通用视频编码器图3是可结合其实现所描述的某些实施例的通用视频编码器(300)的框图。编码器GOO)接收包括当前图像(305)的视频图像序列,并产生压縮的视频信息(395)作为对存储、缓冲区或通信连接的输出。输出比特流的格式可以是Windows媒体视频或VC-1格式、MPEG-x格式(例如,MPEG-1、MPEG-2或MPEG隱4)、H.26x格式(例如,H.261、H.262、H.263或H.264)或其它格式。编码器(300)处理视频图像。术语图像一般指的是源、已编码的或已重构的图像数据。对于逐行视频,图像是逐行视频帧。对于隔行视频,图像可以指的是隔行视频帧、帧的顶场、或帧的底场,取决于上下文。编码器(300)是基于块的并且对帧使用4:2:0的宏块格式,其中每一宏块包括四个8X8的亮度块(有时候作为一个16X16的宏块来对待)以及两个8X8的色度块。对于场,可使用相同或不同的宏块组织和格式。8X8的块还可在不同的阶段上细分,例如在频率变换和熵编码阶段。编码器(300)可以对除8x8的块和16x16的宏块之外的不同大小或配置的样本集执行运算。或者,编码器(300)是基于对象的,或使用不同的宏块或块格式。返回到图3,编码器系统(300)压縮预测图像和帧内编码的关键图像。为演示起见,图3示出了关键图像通过编码器系统(300)的路径以及用于预测图像的路径。编码器系统(300)的许多组件用于同时压縮关键图像和预测图像两者。由这些组件执行的确切操作可以取决于所压縮的信息类型而变化。预测图像(例如,逐行P帧或B帧、隔行P场或B场、或隔行P帧或B帧)按照来自一个或多个其它图像(通常被称为参考图像或锚)的预测来表示。预测残差是预测信息和相应的原始信息之差。相反,关键图像(例如,逐行I帧、隔行I场或隔行I帧)不参考其它图像来压縮。如果当前图像(305)是预测图像,则运动估计器(310)估计当前图像(305)的宏块或其它样本集相对于一个或多个参考图像的运动。图像存储(320)缓存重构的先前图像(325)以用作参考图像。当使用多个参考图像时,这多个参考图像可以来自不同的时间方向或相同的时间方向。编码器系统(300)可对多个参考图像使用单独的存储(320)和(322)。运动估计器(310)可按照全样本、'/2样本、%样本或其它增量来估计运动,并可在逐图像的基础或其它基础上切换运动估计的精度。运动估计器(310)(和补偿器(330))也可在每一图像或其它基础上在参考图像样本内插的类型之间切换(例如,在双三次内插和双线性内插之间)。运动估计的精度可以在水平和垂直上相同或不同。运动估计器(310)输出运动信息(315)作为辅助信息。编码器(300)通过例如为运动矢量计算一个或多个运动矢量预测值,计算运动矢量和运动矢量预测值之间的差分,以及对差分进行熵编码,来对运动信息(315)进行编码。为重构运动矢量,运动补偿器(330)将运动矢量预测值与差分运动矢量信息组合。运动补偿器(330)在形成经运动补偿的当前图像(335)时将重构的运动矢量应用于重构的(参考)图像(325)。经运动补偿的当前图像(335)的块和原始当前图像(305)的当前块之差(如果有)是该块的预测残差(345)。在稍后的当前图像重构期间,将重构的预测残差加到经运动补偿的当前图像(335),以获得更接近于原始的当前图像(305)的经重构的图像。然而,在有损压縮中,某些信息仍从原始当前图像(305)中丢失。或者,运动估计器和运动补偿器应用另一类型的运动估计/补偿。频率变换器(360)将空间域视频信息转换成频域(即,频谱)数据。对于基于块的视频图像,频率变换器(360)向样本数据或预测残差数据的块应用离散余弦变换("DCT")、DCT的变体或其它前向块变换,从而产生频率变换系数块。或者,频率变换器(360)应用诸如傅立叶变换等另一常规频率变换或使用小波或子带分析。频率变换器(360)可应用8X8、8X4、4X8、4X4或其它大小的频率变换。量化器(370)然后量化变换系数块。量化器(370)向频谱数据应用均匀的标量量化,其步长在逐图像的基础或其它基础上变化。量化器(370)还可向频谱数据系数应用另一类型的量化,例如非均匀、矢量或非自适应量化。除自适应量化之外,编码器(300)可使用帧丢弃、自适应滤波或其它技术用于速率控制。当需要重构的当前图像用于后续的运动估计/补偿时,反量化器(376)在量化的频谱数据系数上执行反量化。反频率变换器(366)执行反频率变换,从而产生重构的预测残差(对于预测图像)或样本(对于关键图像)。如果当前图像(305)是关键图像,则重构的关键图像用作重构的当前图像(未示出)。如果当前图像(305)是预测图像,则重构的预测残差被添加到经运动补偿的预测值(335),以形成重构的当前图像。图像存储(320、322)之一或两者缓存重构的当前图像,以在随后的经运动补偿的预测中使用。在某些实施例中,编码器向重构的图像应用分块滤波器,以自适应地平滑图像中的不连续性和其它伪像。熵编码器(380)压縮量化器(370)的输出以及某些辅助信息(例如,运动信息(315)、量化步长)。典型的熵编码技术包括算术编码、差分编码、哈夫曼编码、行程长度编码、LZ编码、字典式编码以及上述的组合。熵编码器(380)通常对不同种类的信息使用不同的编码技术,并且可从特定编码技术内的多个码表中选择。熵编码器(380)向多路复用器("MUX")(390)提供压縮的视频信息(395)。MUX(390)可包括缓冲区,并且一缓冲区等级指示符可被反馈给控制器。在MUX(3卯)之前或之后,压縮的视频信息(395)可被信道编码用于通过网络发送。信道编码可向压縮的视频信息(395)应用检错和纠错数据。控制器(未示出)接收来自诸如运动估计器(310)、频率变换器(360)、量化器(370)、反量化器(376)、熵编码器(380)和缓冲区(390)等各个模块的输入。控制器评估编码期间的中间结果,例如估计失真并执行其它码率-失真分析。控制器与诸如运动估计器(310)、频率变换器(360)、量化器(370)和熵编码器(380)—起工作以设置并改变编码期间的编码参数。当编码器评估编码期间的不同编码参数选择时,编码器可迭代地执行某些阶段(例如,量化和反量化)以评估不同的参数设置。编码器可以在前进到下一阶段之前设置一个阶段处的参数。或者,编码器可联合评估不同的编码参数,例如,对块联合地做出帧内/帧间块判决并选择运动矢量值(如果有)。要评估的编码参数判决的树以及相应编码的定时取决于实现。编码器(300)内的模块之间所示的关系指示了编码器中的一般信息流;为简明起见,未示出其它关系。具体地,图3—般不示出指示用于视频序列、图像、宏块、块等的编码器设置、模式、表等辅助信息。这一辅助信息一旦被最终化,通常在该辅助信息的熵编码之后在输出比特流中发送。视频编码器的具体实施例通常使用通用编码器(300)的变体或补充版本。取决于所需的实现和压縮类型,编码器或解码器的模块可被添加、省略、分成多个模块、与其它模块组合、和/或用相似的模块来替代。例如,控制器可被拆分成与编码器的不同模块相关联的多个控制器模块。在替换实施例中,具有不同模块和/或其它模块配置的编码器执行一个或多个所描述的技术。III.用于采用扩展的运动矢量的编码的动态运动搜索范围当编码预测的图像时,某些视频编码器允许使用"大"运动矢量,这意味着指定水平和/或垂直上的大漂移的运动矢量。大运动矢量帮助编码器捕捉极端的、复杂的或不连续的运动。然而,在大范围的可能性中搜索运动矢量的计算成本可能是相当高的,尤其是在要编码高清视频内容的时候。本节描述了允许编码器在编码视频内容时动态地选择运动矢量范围和/或搜索范围并在不同的运动矢量范围和/或搜索范围之间切换的技术。例如,编码器在高运动较为可能的时候使用大运动矢量范围,但在其它时间不使用。这可极大地降低与运动估计相关联的计算成本,同时产生可与其中对每一预测的图像恒定地应用大运动矢量范围的运动估计可比的结果。编码器在多个预定义的运动矢量范围之间切换。例如,编码器在以下范围之间切换。<table>tableseeoriginaldocumentpage17</column></row><table>表l:示例运动矢量范围或者,编码器在其它和/或附加的运动矢量范围之间切换。或者,编码器动态地计算并调整要在运动估计中使用的运动矢量范围。运动矢量范围会以若干方式影响在运动估计中使用的搜索范围。如果编码器在运动估计中默认地使用对参考图像的完全搜索,则运动矢量范围可限制哪些运动矢量值是可允许的(且因此,哪些运动矢量值可能在运动估计中评估)。图4示出了运动估计中的当前图像(400)和参考图像(410)。对于当前图像(400)的当前块(405),如果编码器默认地对参考图像(410)执行完全或未约束的搜索,则运动矢量范围(420)有效地将搜索范围限于运动矢量范围(420)内的运动矢量值,该范围的中心在与当前块(405)位于同处的参考图像块(415)周围。图像边界也可在搜索范围否则会延伸到参考图像边界之外(如果不使用边缘扩展)时限制搜索范围。即使编码器对参考图像(410)执行部分搜索,运动矢量范围(420)也可将搜索范围进一步限于部分搜索范围中将产生运动矢量范围(420)内的运动矢量的那些区域。假定编码器在中心位于参考图像(410)中的预测的运动矢量位置(435)周围的默认部分搜索范围(430)内搜索。如果默认部分搜索范围(430)的区域落在运动矢量范围(420)之外,则这些区域实际上被排除在运动估计中使用的搜索范围之外。然而,如果默认搜索范围(430)仅产生在运动矢量范围(420)内的运动矢量,则运动矢量范围(420)实际上没有进一步约束在运动估计中使用的搜索范围。在某些实现(诸如VC-1编码器实现)中,编码器用信号表示关于运动矢量的运动矢量范围信息。例如,编码器在比特流句法中的图像层上用信号表示运动矢量范围信息,如在Srinivasan的题为"ExtendedRangeMotionVectors"(扩展范围的运动矢量)的美国专利公开号2005/0013372,或Holcomb等人的题为"ExtendedRangeVariableLengthCoding/DecodingofDifferentialMotionVectorInformation"(差分运动矢量信息的扩展范围的可变长度编码/解码)的美国专利公开号2005/0058205中所描述的,或使用某一其它机制。用信号表示运动矢量范围信息在某些情形中通过自适应用于用信号表示经转义编码的运动矢量信息的比特数来提高熵编码的效率。用信号表示的运动矢量范围可以与所使用的搜索范围相同。或者,用信号表示的运动矢量范围可以比所使用的搜索范围宽。在其它实现中,运动矢量范围是预定义的,或者出于熵编码的目的实际上是不受限的(即使搜索范围变化),并且编码器不用信号表示运动矢量范围信息。在某些实现中,编码用于Windows媒体视频主类或高级类或VC-1类的视频的编码器在编码期间动态地选择适当的运动矢量范围和/或搜索范围。或者,编码用于另一格式或类的视频的编码器在编码期间执行对运动矢量范围和/或搜索范围的动态选择。在某些实现中,编码器在决定适当的运动矢量范围和/或搜索范围时使用直方图或其它表示中的运动矢量分布信息。该分布信息包括多个区间,并且某些区间是重叠的。编码器在决定范围时将区间内的运动矢量的计数认为是准则。这提供了确定适当范围的计算上简单但准确的方法。A.动态地切换MV范围和/或搜索范围图5示出了用于动态地切换运动矢量范围和/或搜索范围的通用技术(500)。诸如图3所示的编码器执行技术(500)。或者,另一编码器或运动估计工具执行技术(500)。编码器执行(510)由运动矢量范围和/或搜索范围约束的第一运动估计。运动矢量范围可以约束完全搜索或部分搜索,或者搜索范围可以完全在运动矢量范围内。例如,编码器使用当前运动矢量范围和搜索范围对第一P图像执行运动估计。或者,编码器使用当前运动矢量范围和搜索范围对预测图像的第一部分执行运动估计。最初,当前运动矢量范围可以具有根据一特定用户设置、类设置、水平设置或其它编码器设置定义的值,或者可以从诸如最大运动矢量范围等默认设置开始。搜索模式、失真度量、退出条件、子像素内插和运动估计的其它细节取决于实现而变化。在执行(510)了第一运动估计之后,编码器用信号表示该第一运动估计的结果。例如,编码器用信号表示关于从第一运动估计所得的运动矢量的运动矢量信息。在某些实现中,编码器在用信号表示关于运动矢量的运动矢量信息之前用信号表示运动矢量范围信息。编码器然后决定(520)它是否应对运动矢量范围和/或搜索范围执行更新检查。例如,编码器可能对每一新的P图像但不对介于P图像之间的B图像更新运动矢量范围。以此方式,运动矢量范围对各P图像之间的运动特性的改变进行自适应。考虑具有以下回放次序和编码次序的一系列帧内(I)、单预测(P)和双预测(B)图像,回放I!B!B2P,B3B4P2B5B6P3…编码IiP,BiB2P2B3B4P3BsB6...对于P2的运动矢量范围取决于来自P!的运动矢量的分布,且对于P2的运动矢量范围也用于B3和B4。对于P3的运动矢量范围取决于来自P2的运动矢量的分布,且对于P3的运动矢量范围也用于Bs和B6,依此类推。或者,编码器对每一新的预测图像(不论是P图像还是B图像)执行更新检査,从而适当地解决了预测方向的改变以及对时间漂移的縮放。对于B图像,编码器可以考虑来自最接近的P图像,或来自该B图像之前和之后的两个P图像的运动矢量分布信息,并取决于该B图像与(诸)P图像的相对时间漂移来縮放运动矢量信息。或者,编码器对于单个预测图像内的不同部分执行更新检查。当编码器执行更新检查时,编码器使用关于先前的运动矢量的运动矢量分布信息来更新(530)当前运动矢量范围和/或搜索范围。例如,当编码器对一新的P图像选择经更新的运动矢量范围时,该分布信息表征了来自前导的P图像的多个运动矢量。或者,当编码器对一预测图像的新的部分选择经更新的运动矢量范围时,该分布信息表征了来自同一图像的较早部分的多个运动矢量。或者,编码器使用运动矢量分布信息来选择新的搜索范围而不考虑运动矢量范围本身。经更新的搜索范围可以与在先前的运动估计中使用的搜索范围相同或不同,并且经更新的运动矢量范围可以与在先前的运动估计中使用的运动矢量范围相同或不同。图6示出了用于使用关于先前的运动矢量的运动矢量信息的直方图来选择经更新的运动矢量范围和/或搜索范围的示例技术(600)。或者,编码器使用另一机制来选择经更新的运动矢量范围和/或搜索范围,例如,使用关于先前的运动矢量的另一种形式的运动矢量分布信息。经更新的运动矢量范围和/或搜索范围然后被用作当前运动矢量范围和/或搜索范围。编码器执行(510)由当前(可能是经更新的)运动矢量范围和/或搜索范围约束的另一运动估计。例如,编码器使用新的运动矢量范围和相应的搜索范围对第二p图像执行运动估计。或者,编码器使用经更新的搜索范围对预测图像的第二部分执行运动估计。再一次,搜索模式、失真度量、退出条件、子像素内插和运动估计的其它细节取决于实现而变化。在执行(540)了该另一运动估计之后,编码器用信号表示该另一运动估计的结果。例如,编码器用信号表示关于从该另一运动估计所得的运动矢量的运动矢量信息。在某些实现中,编码器在用信号表示关于运动矢量的运动矢量信息之前用信号表示运动矢量范围信息。编码器确定(550)是否完成。如果否,则编码器决定(520)它是否应对运动矢量范围和/或搜索范围执行更新检查。例如,编码器继续下一预测图像或同一预测图像的下一部分。B.使用MV分布信息的范围选择图6示出了用于使用运动矢量分布信息来选择运动矢量范围和/或搜索范围的技术(600)。诸如图3所示的编码器执行该技术(600)作为图5的动态切换技术(500)的更新阶段(530)的一部分。.或者,编码器在某一其它时刻执行选择技术(600),或另一编码器或运动估计工具执行该技术(600)。图7、9和ll示出了一个示例实现中在该技术(600)中使用的伪代码,而图8示出了在该示例实现中使用的值的表。最初,编码器对先前的运动矢量计算(610)直方图。例如,编码器对前导P帧的部分或全部运动矢量计算直方图。图7是示出用于从先前计算的运动矢量的水平和垂直运动矢量分量计算直方图的示例例程的伪代码清单(700)。例程CalculateMVHistogram接受两个数组作为输入。数组MV一x和MV_y分别储存关于先前计算的运动矢量的有符号的水平和垂直运动矢量分量值。数组MV一x和MV_y在逐块的基础上储存值,并且编码器可以预处理数组中的值。例如,如果数组储存关于8x8的块的分量值,但是一特定的16x16宏块具有单个运动矢量,则该单个运动矢量的分量值对该宏块的四个构成的8x8的块重复。一般而言,先前对不同块大小(例如,16x16、8x8、16x8、8x16、8x4、4x8或4x4)和不同种类的预测图像(例如,逐行帧、隔行场或隔行帧)计算的运动矢量被转换成统一表示(例如,8x8的非隔行块)以便进行直方图计算。对于不同的块大小,这可涉及从大于该统一表示大小的块开始重复运动矢量分量值,或者它可涉及组合来自小于该统一表示大小的相邻块的运动矢量分量值。对于隔行内容,这可涉及调整隔行定时。图7示出MV—x和MV_y为一维数组,但是它们可以改为被组织成反映块组织的二维数组。MV—x和MV_y的大小取决于表示了多少运动矢量。输出数组MVHistogram储存输出直方图。在图7中,MVHistogram通过水平和垂直运动矢量分量的绝对值的和来描绘先前的运动矢量。具体地,该直方图包括对每一可能的运动矢量分量的绝对值的和的计数。对于表1所示的运动矢量范围中的每一个,图8的表(800)指示了最大和,并且因此指示了MVHistogram中对该运动矢量范围的计数器数字。在图8中,MVRangeX[i]指示了对于范围i的最大允许的水平运动矢量分量的绝对值,而MVRangeY[i]指示了对于范围i的最大允许的垂直运动矢量分量的绝对值。Max—MVSum[i]是对范围i的MVRangeX[i]和MVRangeY[i]之和。返回到图7,MVHistogram被初始化为零值。在逐块的基础上,编码器迭代通过MV一x和MVj数组。如果一个块是帧内编码的,则编码器对于无运动矢量(水平和垂直分量等于零)递增计数器。否则,编码器确定该块的水平和垂直运动矢量分量的绝对值,并对绝对值的和递增MVHistogram计数器。或者,编码器使用某一其它机制来使用先前的运动矢量计算直方图。例如,编码器使用用于运动矢量分量或直方图的不同数据结构,忽略帧内编码的块,使用除直方图的绝对值之和之外的度量,或使用用于水平和垂直分量的不同权重来对水平运动矢量分量给予更大权重或相反。返回到图6,编码器提取(620)该直方图的一个或多个特征。本质上,编码器总结直方图中的信息作为在稍后的判决制定中使用的一个或多个参数。图9是示出用于使用根据图7的伪代码(700)产生的直方图来提取直方图特征的示例例程的伪代码清单(900)。使用ExtractHistogramFeature,编码器对落入该直方图的不同区间内的运动矢量计数。ExtractHistogramFeature接受该直方图作为输入并产生总共四个运动区间计数作为输出低、中、溢出和咼。下表示出了对任何给定的MVRangelndexi作为运动矢量范围,四个预定的运动区间。区间定义低运动对i〉0,[2,max一MVSum[i-l]*2/3)对1=0,未定义。中运动对i>0,[max一MVSum[i-1〗*2/3,max—MVSum[i-1〗)对1=0,未定义。溢出对i>0,[max_MVSum[i-l],max—MVSum[i]]对i=0,[2,max一MVSum[i]]高运动对i>=0,[max—MVSum[i]*2/3,max一MVSum[i]]表2:用于直方图特征提取的预定义运动区间图10绘出了对于iX)的表2的四个运动区间。例如,对1=2,各区间分别是2到511、512到767、768到2560以及2048到2560。对于i=0,前两个运动区间未定义。如果i-0,则溢出区间延伸到2。对于i>0,溢出运动区间指示该运动矢量范围i的一部分具有在对先前的运动矢量使用了下一较小的范围的情况下将不会被捕捉到的运动。溢出运动区间与高运动区间重叠,这提供了供编码器将这一溢出运动与运动矢量范围中的高运动进行区分的简单方式。在ExtractHistogramFeature中,编码器计算其绝对值之和落入四个运动区间的先前的运动矢量的计数。编码器将对四个区间的计数器初始化为0。如果对先前的运动矢量的运动矢量范围i大于0,则编码器在低、中和高区间中循环通过直方图计数器,并对相应区间中的直方图计数器求和。编码器对于溢出区间中不与高区间重叠的部分循环通过直方图计数器,然后将高区间总计数加到溢出区间总计数。不两次循环通过高区间节省了直方图求和运算中的少量时间。如果运动矢量范围i是0,则编码器在高区间中循环通过直方图计数器,对延伸的溢出区间中不与高区间重叠的部分循环通过直方图计数器,然后将高区间总计数加到溢出区间总计数。或者,编码器使用某一其它机制来从直方图中提取特征。例如,编码器使用绝对值和的其它和/或另外的区间。或者,编码器使用其它参数值或诸如区间的平均绝对值和等统计量来总结直方图信息。或者,对于直方图中的不同度量,编码器使用不同的范围,例如多个维度中的范围。返回到图6,编码器接着选择(630)经更新的运动矢量范围和/或搜索范围。例如,使用直方图特征,编码器对当前P图像以及前一和当前P图像之间的任何B图像(按照回放次序)选择一新的运动矢量范围。经更新的运动矢量范围可以与前一运动矢量范围相同或不同,且经更新的搜索范围可以与前一搜索范围相同或不同。图11是示出用于使用根据图9的伪代码(900)提取的直方图特征来选择运动矢量范围的示例例程的伪代码清单(1100)。在例程DecideRange中,编码器将前一(以及默认的当前)运动矢量范围i调整+l或-l,或完全不改变i。DeddeRange接受直方图特征低、中、溢出和高作为输入,并产生新的运动矢量范围作为输出。一般而言,给定四个以上定义的区间中的运动矢量的数目,编码器基于以下准则来确定新的运动矢量范围1.具有非零运动矢量的块数应当满足第一阈值以使运动矢量范围递增1。(在图9-11的示例中,具有绝对值和为1的运动矢量像零值运动矢量一样来对待。)2.高运动区间中的运动矢量数应当满足第二阈值以使运动矢量范围递增1。3.溢出运动区间中的运动矢量数应当满足第三阈值以使运动矢量范围递增1。4.中运动区间中的运动矢量数应当满足第四阈值以使运动矢量范围递增1。参考图11,例程DecideRange以条件检査来实现这四个准则。首先,编码器计算非零运动矢量数NonZeroMotion。对于四个运动区间低、中、溢出和高,这是低、中和溢出区间总计数之和。编码器将经更新的运动矢量范围设为等于默认的当前范围,这将是最终的范围,除非它被递增或递减。编码器在以下情况下递增运动矢量范围i:(1)NonZeroMotion大于c^在其上收集先前的运动矢量的块数,和(2)高区间中的运动矢量数大于(3*NonZeroMotion。在检査(l)中,块数是从中收集先前的运动矢量的块的数目,不论是帧内编码还是帧间编码的。例如,如果先前的运动矢量是前一P图像的运动矢量,则该数目是前一P图像中的块数,并被调整到运动矢量表示的统一块大小。检查(1)背后的动机是仅当达到某一阈值量的总运动活动时而非紧紧在几个块中有高运动活动时递增运动矢量范围。检査(2)背后的动机是仅当达到某一阈值量的高运动活动时才递增运动矢量范围。a和(3的值取决于实现。编码器在以下情况下递减运动矢量范围i:(3)溢出区间中的运动矢量数小于y*NonZeroMotion,和(4)中区间中的运动矢量数小于卩*NonZeroMotion。检查(3)背后的动机是仅当达在溢出区间中到某一阈值量的运动活动时才递减运动矢量范围。Y的值取决于实现。检査(4)背后的动机是进一步验证中区间没有太多运动活动。编码器可在检査(2)和(4)中使用不同的权重。在DecideRange中,编码器对新范围限幅以确保它在0和3之间(包括两端)。或者,代替限幅,编码器可以验证在递增条件中i<3并验证在递减条件中i>0。a、(3和Y的示例值为o^0.1、禾卩y=0.02。在其中对每一P图像更新运动矢量范围且居间的B图像的数目是2或更少的各种编码情形中,这些设置提供了良好的性能。采用这些设置,编码器在递增范围大小时比在递减范围大小时略微具进取性,这往往以计算成本为代价来获得运动估计质量。或者,编码器使用某一其它机制来从直方图特征中选择运动矢量范围和/或搜索范围。例如,编码器使用不同的阈值和/或不同的选择条件。或者,对于不同的直方图特征,编码器使用不同的范围选择逻辑。或者,编码器使用直方图特征来选择新的搜索范围而不考虑运动矢量范围本身。IV.运动估计中的失真度量选择在基于块的运动估计中,编码器通常将来自当前图像的当前样本块与参考图像中相同大小的一个或多个候选块进行比较。编码器使用失真度量来评估当前块和候选块之间的匹配。SAD、SAHD和拉格朗日码率-失真成本是常见的失真度量。其它失真度量包括SSE、MSE和均方差。当决定在编码器中使用哪一失真度量时,一个目标是准确地解决对特定运动矢量估计选择招致的总码率-失真成本。对码率-失真成本的准确估计改进了码率-失真性能,因为标识了良好的运动估计选择。当在运动估计的早期标识良好的运动估计选择时,它也可改进编码器性能。另一目标是使失真度量为低复杂度。运动估计消耗了大部分编码时间,并且失真度量的计算复杂度的递增改变累积会显著影响编码器性能。低复杂度和高准确度的目标通常受到对方的牵制。与诸如SAD等低复杂度失真度量相比,诸如SAHD等高复杂度失真度量在大多数时间更准确地解决了总体码率-失真成本。本节描述了允许编码器或其它工具在执行运动估计时动态地在不同失真度量之间切换的技术。可用失真度量、选择准则和阈值、失真度量切换的定时以及其它编码细节取决于实现。在某些实现中,编码用于Windows媒体视频主或高级类或VC-1类的视频的编码器动态地选择失真度量以改进码率-失真性能,同时还降低了总体计算复杂度。或者,编码用于另一格式或类的视频的编码器执行对失真度量的动态选择。A.理论和解释失真度量切换允许编码器通过选择性地使用不同的失真度量来更准确地解决运动估计期间的码率-失真成本来改进码率-失真性能。同时,失真度量切换允许编码器通过在没有对使用更简单的失真度量的惩罚(或者仅有很小的、可接受的惩罚)的情况下使用更简单的失真度量来降低运动估计的总体计算复杂度。例如,编码器在SAD和SAHD之间切换。在量化之后有非零变换系数时,SAHD通常比SAD更准确地近似总体码率-失真成本。在这一情况下,SAHD解决了SAD所忽略的频率变换的能量压縮效应。由此,编码器在来自频率变换的能量压縮预期会影响残差的失真成本时使用SAHD。另一方面,由于SAHD中的哈达玛变换,SAHD在计算上比SAD更复杂。并且,在几个情形中,SAD比SAHD更准确地解决码率-失真性能。(当没有非零的量化变换系数时,由于频率变换的能量压縮效应变得没有实际重要性,因此SAD更好地近似了码率-失真成本。)因此,编码器在残差预期在量化之后的变换域中会缺少能量时使用SAD。选择性地使用SAD可以极大地降低运动估计的总体计算复杂度。例如,编码器计算当前块与参考图像的初始候选块之间的残差。初始候选块可以是在参考图像中预测运动矢量的位置处的候选块。用于计算预测运动矢量的一种常见的机制使用当前块的左、上和右上邻居的运动矢量的分量级中值,但是也可改为使用另一机制。编码器将残差值的绝对值相加,并将该S4Z),^w与一阈值进行比较。该阈值被设为低于其残差必定会产生仅有零值的量化变换系数的值。如果&4"^"。/小于该阈值,则编码器在对当前块的运动估计中使用SAD。否则,编码器在对当前块的运动估计中使用SAHD。选择性地在SAD和SAHD之间切换提供了优于在运动估计期间仅使用SAD或仅使用SAHD的码率-失真性能。在某些情况下,SAHD提供了比SAD更好的码率-失真性能。在其它情况下,SAD提供了比SAHD更好的码率-失真性能。另外,采用SAD-SAHD切换的运动估计的计算复杂度要低于始终使用SAHD的运动估计的计算复杂度。编码器在SAD提供了更好的码率-失真性能或以其它方式足够满足需求时使用低复杂度的SAD。特别地,在低比特率编码情形中,由于粗略量化,许多残差仅产生零值系数。结果,运动估计的计算复杂度可以通过选择性地使用SAD而非SAHD来显著降低。类似地,在低运动视频中,由于有效的运动估计,许多残差仅产生零值系数,并且运动估计的计算复杂度可以通过选择性地使用SAD而非SAHD来显著降低。B.示例阈值函数对于给定的量化参数g尸和量化器,某些变换系数值在编码期间被量化为零。对于^P和量化器,存在将被量化为零的最高幅度变换系数值。具有次高幅度的变换系数将被量化为最低的非零量化值。此外,对于给定频率变换,定义在变换中使用的矩阵值。这些值中的某一些是正的,其它是负的。具有最高幅度的矩阵值具有引起变换中的值的扩大的最大可能性。当变换具有给定SAD值的残差时,一个或多个变换系数将具有比其它系数高的幅度。某些模式的残差值导致具有大的最高幅度值的变换系数。其它模式的残差值(对于具有同一给定SAD的残差)导致具有小的最高幅度值的变换系数。特别地,当非零残差值分布在整个残差上时,所得的变换系数之中的最高幅度通常较小。另一方面,如果在残差的某一位置中有单个非零残差值时,由于隔离残差值上的最高幅度矩阵值的效应,所得的变换系数之中的最高幅度可能要大得多。考虑这些因素,阈值可被设为使得具有小于该阈值的SAD的任何残差块将具有仅为零值的量化变换系数。阈值取决于当前量化参数QP和量化器。阈值还取决于使用中的频率变换,因为最高幅度矩阵值在不同的变换中是不同的。在某些实现中,该阈值是当前量化参数2P的函数X2尸),其指示了当前量化步长。函数/(g/0取决于量化器死区,后者是被量化为O的O附近的值的范围。函数/(2。被设为使得如果&4D^窗〈/(2尸),则从中计算&4D,础。/的残差具有仅为零值的量化变换系数。函数/(2尸)依赖于量化死区、量化和重构规则、以及在编码期间使用的频率变换,并且对于VC-1、R264等是不同的。函数/(2尸)可以对给定频率变换和量化方案离线计算、储存在数组或其它数据结构中、然后在编码期间使用。取决于实现,量化参数2P可对图像、片、宏块、块或视频图像或序列的其它部分设置。例如,编码器对图像设置一量化步长,但是可能在片、宏块和/或块级修改它。量化参数gP可指示整数量化步长增量或分数(例如,K步长)量化步长增量。量化器死区与量化参数g尸有关。当gP较小时,死区实际上更小,而当2尸较大时,死区实际上更大。编码器可在具有不同死区比率的量化器,例如,具有宽度与当前量化步长范围相同的死区的"均匀"量化器,以及具有宽度大约是当前量化步长范围的两倍的死区的"非均匀"量化器之间切换。在实践中,编码器通常使用比相应的重构规则略微进取性一点的量化。例如,与重构之后的两个可能值之间的中点相比,编码器应用略微远离零的量化阈值。结果,在该中点周围的值被量化为两个量化值中的较低者,而非被映射到更接近的、更高的量化值。特别地,编码器通常略微增加死区的宽度以使更多值被量化为0。1.示例量化器死区在VC-1的某些类中,量化参数MQUANT具有1和31之间的值,指示整数增量的量化步长。MQUANT基于图像级量化参数PQUANT,但是可由用于特定宏块或图像区域的后续量化参数来修改(或甚至替换)。额外的信息位HALFQP可指示半步长增量。对于"均匀"量化器,用于非零AC系数的重构规则为dequant—ACcoeff=ACCoeffQ*double—quant,其中ACCoeffQ是量化的AC系数,而d叫uant—ACcoeff是反量化的AC系数。如果块是用PQUANT来编码的double一quant=2*MQUANT+HALFQP.如果块是用其它量化句法元素来编码的double—quant=2*MQUANT.对于"非均匀"量化器,用于非零AC系数的重构规则为dequant—ACcoeff=ACCoeffQ*double—quant+sign(ACCoeffQ)*Qscale,其中Q—scale=MQUANT。应用这些VC-l重构规则来确定在重构之后的可能的去量化的值之间的中点,并将死区阈值"z设在小于第一个非零的去量化的值的同一偏移量处,下表示出了采用均匀量化器和非均匀量化器的用于不同的MQUANT和HALFQP值的死区阈值DZ的示例。死区阈值DZ指示了低于其值将被量化为0的绝对值。'MQUANTHALFQP用于均匀量化器用于非均匀量化的Z)Z(QP)器的Z)Z(QP)<table>tableseeoriginaldocumentpage29</column></row><table>表3:用于VC-1编码器的示例死区阈值在实践中,VC-1编码器可使用不同的死区阈值,例如,更进取性地将值量化为0的死区阈值。在该情况下,死区阈值将略微高于表3所示的那些阈值。并且,DC系数可比AC系数较少进取性地量化,尤其是在较高量化步长下。记住了这一因素之后,VC-1编码器可以略微降低某些死区阇值,尤其是对于较高的^M直。根据H.263标准,图像层值QUANT具有1和31之间的值,且指示了半步长量化步长增量。QUANT的值可以由诸如DQUANT等稍后的句法元素来改变。用于非零AC系数的重构规则为-|REC|=QUANT■(2.|LEVEL|+1),如果QUANT为奇数,且|REC|=QUANT.(2.1LEVEL|+1)—1,如果QUANT为偶数,其中REC是重构的AC系数,而LEVEL是量化的AC系数。在计算了IREq之后,合并符号REC=sign(LEVEL)'|REC|.根据这些H.263重构规则,下表示出了H.263中用于不同QUANT值的死区阈值Z)Z的示例。<table>tableseeoriginaldocumentpage30</column></row><table>表4:用于H.263编码器的示例死区阈值在实践中,H.263编码器可使用不同的死区阈值,例如,更进取性地将值量化为O的死区阈值。其它编码器类似的具有与这些编码器中的量化器、量化和重构规则、以及允许的量化步长相一致的死区阈值。通常,死区阈值随着gP的增大而单调递增,但是死区阈值增大的步长以及死区阈值与g尸的比率取决于如何实现量化而变化。2.示例变换縮放因子死区阈值应用于变换系数,而&4D,^^是从样本域值计算的。由此,比例因子A被结合到阈值中-其中/(2尸)=DZ/fc.比例因子k取决于对给定SAD值的最大可能扩大。考虑以下来自VC-1的一维8点变换Ts和一维4点变换T4。<formula>formulaseeoriginaldocumentpage31</formula>差分归一化因子与因前向变换中的变换矩阵值而引起的不同扩大量有关。它们还通过在反变换中的右漂移设置了简单的归一化。当将一维8点VC-1变换应用于残差的列然后应用于结果的行时,第二变换行的第一个矩阵值(即,16)是有最大可能性引起扩大的值。考虑归一化,它导致按照162*(8/289)2=.198,或近似地16/81的因子的縮放。假定&4Z)滴。/对于给定初始候选块为25。以下两个块示出了对其&4马編为25的可能残差。<formula>formulaseeoriginaldocumentpage32</formula>在第一个块中,&4Z)^to/=25的能量在展示给水平和垂直变换中的高幅度变换矩阵值的单个残差值中隔离。当将8点变换垂直和水平地应用时,系数值25x.1985出现在力的第二行的第二个位置中。相反,对于第二个块,&4=25的能量分布在14个残差值上。结果,当将8点变换垂直和水平地应用时,没有一个系数值高达5。较低幅度矩阵值和负矩阵值的影响是变换系数的较低值。由此,如果问题是是否所有的变换系数都将被量化为0,则其中给定&4^^/。/的能量被隔离在展示给最高幅度变换矩阵系数^单个残#值中^模式提供了最坏的情况。该模式导致来自具有该&4Dwg值的残差的最高个别变换系数值。鉴于此原因,对于阈值函数/(QP),比例因子A取决于用于该频率变换的最高幅度变换矩阵值。通常,这是一维变换的第二行的第一个系数,这通常对应于最低AC基函数的第一个系数。对于VC-1中的4x8或8x4变换,比例因子々是16*(8/289)*22*(8/292)=.267。对于4x4变换,比例因子A:是222*(8/292".=.363。如果对给定QP和量化器的死区区间被表示为DZ(g尸),则用于VC-1中的前向变换的阈值函数/(2尸)为DZ(2尸)/;t其中A取决于变换大小。在H.263中,在归一化之后,用于一维DCT的最高幅度变换矩阵值是.49。再一次,这是最低AC基函数的第一个系数。对于二维DCT,比例因子A:是(.49)2=.24。用于H.263中的前向变换的阈值函数/(g尸)是DZ(2尸)/.24,或大致是4承/)z(2尸)。3.替换方案对给定量化器和频率变换确定阈值/(2尸)的一种替换的蛮力方法如下。对于函数/(2P)中可能的量化参数g尸,评估SAD的值m。特别地,对具有幅度为w的单个非零值的残差进行频率变换。(值m在残差的左上角位置,或者在测试中所示的产生最高单个变换系数值的某一其它位置。)变换系数用g尸来量化。如果存在任何非零的量化变换系数,则评估m的下一较低值。如果所有量化变换系数都具有零值,则评估m的下一较高值。该过程继续,直到对g尸找到产生所有零值量化变换系数的m的最高值。然后评估g尸的不同值。当评估了/(2尸)中的可能的g尸值时,可确定用于不同的频率变换或量化器的阈值函数/(2尸)。前述对阈值函数/(gP)的使用和定义在若干方面是保守的。假设对初始候选块(在预测的运动矢量或零值运动矢量的位置处)检査该阈值。初始候选块的残差预期要大于最终候选块的残差。然而,仅对初始候选块检查阈值无法解决向更好匹配的收敛。此外,在/(^)的保守定义下,许多具有大于/(2P)的&4化編的残差块仍产生仅有零值的量化变换系数。这通常例如在非零残差值分布在残差块周围时发生。或者,编码器使用不那么保守的阈值函数,从而正确地表征了"全零值"的情况,但是可能会错过几个"非零值"的情况。例如,在较不保守的阈值测试中,编码器考虑残差块的均值或DC分量。如果残差的DC分量/均值为0或接近0(例如,由于负残差值),则SAD的表现可能足够,因此满足该阈值。或者,编码器在较不保守的阈值测试中考虑对&4A^^有贡献的残差值的数目。如果有至少X个非零值(其中x是5、6等),则满足该阈值。或者,编码器考虑任何非零残差值的绝对值是否大于&41^,^//2。如果不是,则编码器认为满足了该阈值。C.动态地切换失真度量图12示出了用于在运动估计期间动态地切换失真度量的通用技术(1200)。诸如参考图3所描述的编码器执行技术(1200)。或者,另一编码器执行该技术(1200)。最初,编码器计算(1230)失真度量选择准则。例如,编码器在搜索模式的开始处对当前块和初始候选块之间的残差计算SAD。初始候选块可以是在零值运动矢量处的块、在预测的运动矢量位置处的块、或某一其它初始候选块。或者,失真度量选择准则结合了其它和/或另外的因素,诸如残差的均值或DC分量、非零残差值的计数和/或任何非零残差值是否超过用于该残差的SAD的某一特定比例(例如,K)。编码器然后评估(1240)失真度量选择准则。例如,编码器将该准则与一阈值进行比较(或者如果将多个因素结合到选择准则中,则与多个阈值比较)。或者,编码器以某一其它方式,例如使用取决于选择准则的各因素而导致不同判决的判决树,来评估该准则。编码器从多个可用失真度量中选择(1260)—失真度量。例如,编码器在SAD和SAHD之间选择。或者,编码器在其它和/或另外的失真度量之间选择,其可包括一个或多个码率-失真成本度量、SSE、MSE、均方差、和除SAHD之外的SATD。编码器然后在运动估计中使用(1270)所选的失真度量。具体地,编码器使用所选的失真度量来评估一个或多个运动估计选择的适合性。运动矢量范围、搜索范围、搜索模式、退出条件、子像素内插和运动估计的其它细节取决于实现而变化。例如,编码器在运动估计中使用完全搜索、部分搜索或其它搜索范围,使用块搜索模式(诸如3x3或5x5)、螺旋搜索模式或其它搜索模式,并且在预测运动矢量位置或零值运动矢量位置周围开始。运动估计可以是分层的,例如具有4:1二次采样的整数像素和Vi像素阶段,或各阶段的某一其它配置。在运动估计(1270)期间或之后的某一点,编码器确定(1290)是否继续。例如,编码器对当前块或宏块计算(1230)选择准则,作为对当前块/宏块的运动估计中的初始检査的一部分。这允许编码器从运动估计的开始选择性地降低计算复杂度。编码器使用所选的失真度量,直到对当前块/宏块完成了运动估计。编码器然后确定(1290)是否继续下一块或宏块,并且如果是,则对下一块/宏块确定(1230)选择准则。或者,编码器对当前块或宏块计算(1230)选择准则作为初始检查的一部分,在运动估计中选择(1260)并使用(1270)—失真度量,但是随后确定(1290)是否以用于当前块/宏块的同一失真度量继续。如果编码器以诸如SAHD等第一度量开始,但是残差值接近诸如SAD等第二度量将较佳的点,则编码器对当前块/宏块切换到第二度量。对于分层运动估计,编码器可以计算(1230)选择准则作为一阶段中的初始和/或中间检查。例如,对于第一个最低分辨率阶段,编码器计算(1230)选择准则并在对该阶段的运动估计中选择(1260)和使用(1270)失真度量。编码器然后以第二个较高分辨率阶段继续计算(1230)选择准则,并在对该阶段的运动估计中选择(1260)并使用(1270)—失真度量。在相应阶段处可用的失真度量可以在各阶段之间相同或不同。编码器可以在较高分辨率阶段绕过失真度量选择(仅使用例如码率-失真成本度量)。图13示出了用于使用失真度量选择准则和选择阈值来选择失真度量的技术(1300)。诸如参考图3所描述的编码器执行该技术(1300)。或者,另一工具执行该技术(1300)。最初,编码器确定(1310)是否更新失真度量选择阈值。例如,如果该阈值依赖于当前量化步长、量化死区区间和频率变换,则编码器检查这些中的任一个是否已改变。或者,如果该阈值仅依赖于当前量化步长,则编码器检査量化步长是否已改变。为更新阈值,编码器设置(1320)失真度量选择阈值。例如,使用将阈值与给定量化器和频率变换的量化参数值相关的数据结构,编码器在给定当前量化参数的情况下设置该阈值。该数据结构可以是数组或其它数据结构。该阈值可以来自如上所述的阈值函数/(gP)或来自另一阈值函数。编码器还计算(1330)失真度量选择准则。例如,编码器对当前块和初始候选块之间的残差计算&4D^窗。结合阈值,&41)涵。/给出了关于该残差是否将具有仅为零值的量化变换系数的简单的、低复杂度的指示。或者,编码器使用诸如参考图12所描述的某一其它选择准则。编码器然后将该准则与该阈值进行比较(1340)。例如,编码器检查^A"編是否小于阈值/(2尸)。对于结合了诸如平均残差值、残差的DC分量、非零残差值的计数和域&4Z^自的分数等因素的选择准则,编码器将这些因素与阈值的相应部分进行比较。编码器然后选择(1350)第一失真度量或选择(1360)第二失真度量。例如,在将"D^^与保守阈值/(2尸)比较之后,如果&4A",窗</(2尸),则编码器选择SAD,因为用于残差的量化变换系数将具有为零的量化值。否则,编码器选择SAHD,因为用于残差的一个或多个量化变换系数可能具有非零量化值。或者,编码器在其它和/或附加的失真度量之间选择。编码器使用(1370)所选的失真度量来评估一个或多个运动估计选择的适合性。如参考图12所描述的,运动估计的细节取决于实现而变化。在运动估计(1370)期间或之后的某一点,编码器确定(1390)是否继续。例如,编码器对图像中的每一新块或宏块计算(1330)选择准则作为对该块/宏块的运动估计中的初始检査的一部分,从而在必要时更新选择阈值,并且只要图像中有新的块/宏块就确定(1390)继续。或者,编码器对当前块或宏块计算(1330)失真度量选择准则作为初始检查的一部分,并在对当前块/宏块的运动估计期间确定(1390)是否选择性地更新选择准则和/或阈值。参考各实施例描述和示出了本发明的原理之后,可以认识到,可以在排列和细节上修改各实施例,而不脱离这些原理。应当理解,此处所描述的程序、过程或方法不相关于或不限于任何特定类型的计算环境,除非另外指明。可依照此处所描述的教导来使用各种类型的通用或专用计算环境或执行操作。以软件示出的实施例的元素可以用硬件来实现,反之亦然。鉴于可应用本发明的原理的许多可能的实施例,要求保护落入所附权利要求书及其等效技术方案的范围和精神之内的所有这样的实施例作为本发明。权利要求1.一种方法,包括在编码期间执行由第一搜索范围约束的第一运动估计,得到多个运动矢量;计算关于所述多个运动矢量的运动矢量分布信息;至少部分地基于所述运动矢量分布信息,选择第二搜索范围;执行由所述第二搜索范围约束的第二运动估计;以及输出所述第二运动估计的结果。2.如权利要求1所述的方法,其特征在于,所述运动矢量分布信息被组织为多个区间,并且所述多个区间中的至少两个重叠。3.如权利要求2所述的方法,其特征在于,所述计算包括在直方图中描绘所述多个运动矢量中的每一个;以及使用所述直方图,对所述多个运动矢量中有多少落入所述多个区间的每一个中进行计数。4.如权利要求1所述的方法,其特征在于,还包括用信号表示指示所述第一搜索范围的第一运动矢量范围;以及用信号表示指示所述第二搜索范围的第二运动矢量范围;由此所述信号表示提高了对来自所述第一运动估计和第二运动估计的运动矢量信息进行熵编码的效率。5.如权利要求4所述的方法,其特征在于,所述第一运动矢量范围与所述第二运动矢量范围相同。6.如权利要求1所述的方法,其特征在于,所述选择第二搜索范围包括选择一运动矢量范围,并且对所述运动矢量范围的选择实际上确定了所述第二搜索范围。7.如权利要求1所述的方法,其特征在于,所述选择第二搜索范围包括在大小递增地增加的多个可用搜索范围之间选取,并且其中所述第二搜索范围被约束为其大小比所述第一搜索范围的大小大一、比所述第一搜索范围的大小小一、或与所述第一搜索范围的大小相同。8.如权利要求1所述的方法,其特征在于,所述第一运动估计是对第一预测图像执行的,而所述第二运动估计是对不同于所述第一预测图像的第二预测图像执行的。9.如权利要求8所述的方法,其特征在于,所述第二运动估计进一步对按照回放次序在所述第一和第二预测图像之间的一个或多个另外的预测图像执行。10.—种方法,包括在编码期间执行由第一运动矢量范围和第一搜索范围约束的第一运动矢量估计;在视频比特流中用信号表示所述第一运动矢量范围;在所述视频比特流中用信号表示所述第一运动估计的结果;选择第二运动矢量范围;执行由所述第二运动矢量范围和第二搜索范围约束的第二运动估计;在所述视频比特流中用信号表示所述第二运动矢量范围;以及在所述视频比特流中用信号表示所述第二运动估计的结果。11.如权利要求IO所述的方法,其特征在于,还包括计算关于从所述第一运动估计所得的多个运动矢量的运动矢量分布信息,其中所述选择第二运动矢量范围至少部分地基于所述运动矢量分布信息。12.如权利要求11所述的方法,其特征在于,所述分布信息被组织为多个区间,并且所述多个区间中的至少两个重叠。13.如权利要求ll所述的方法,其特征在于,所述计算包括在直方图中描绘所述多个运动矢量中的每一个;以及使用所述直方图,对所述多个运动矢量中有多少落入运动矢量分布的多个区间的每一个中进行计数。14.如权利要求IO所述的方法,其特征在于,还包括在对来自所述第一运动估计的运动矢量信息进行熵编码时使用所述第一运动矢量范围;以及在对来自所述第二运动估计的运动矢量信息进行熵编码时使用所述第二运动矢量范围。15.如权利要求IO所述的方法,其特征在于,所述第一运动矢量范围与所述第二运动矢量范围相同,并且其中所述第一搜索范围与所述第二搜索范围相同或不同。16.—种编码器,包括用于执行运动估计的运动估计器;用于将预测残差变换成变换系数的频率变换器;用于量化所述变换系数的量化器;用于对运动矢量信息和所述量化的变换系数进行熵编码的熵编码器;以及用于选择约束所述运动估计的搜索范围的运动估计控制器,其中所述对当前图像进行选择至少部分地基于关于多个先前的运动矢量的运动矢量分布信阜yK、o17.如权利要求16所述的编码器,其特征在于,所述选择搜索范围包括选择运动矢量范围,并且其中对所述运动矢量范围的选择实际上确定了所述搜索范围。18.如权利要求16所述的编码器,其特征在于,所述运动估计控制器对所述多个先前的运动矢量中有多少落入运动矢量分布的多个区间的每一个中进行计数,并且其中所述多个区间中的至少两个重叠。19.如权利要求16所述的编码器,其特征在于,所述运动估计控制器基于水平和垂直分量的绝对值的和在直方图中描绘所述多个先前的运动矢量中的每一个;以及使用所述直方图,对所述多个先前的运动矢量中有多少落入运动矢量分布的多个区间的每一个中进行计数。20.如权利要求16所述的编码器,其特征在于,所述多个先前的运动矢量来自先前的图像。全文摘要描述了用于在运动估计期间选择搜索范围和/或运动矢量范围的技术和工具。例如,一视频编码器执行由第一搜索范围约束的运动估计,得到多个运动矢量。该编码器计算关于该运动矢量的运动矢量分布信息。为计算该分布信息,该编码器可以在直方图中描绘运动矢量,并对有多少运动矢量落入该分布信息的多个区间的每一个中进行计数。该编码器然后选择第二搜索范围,并执行由第二搜索范围约束的运动估计。选择第二搜索范围可包括选择运动矢量范围,这在某些情况下实际上确定了第二搜索范围。文档编号H04N7/32GK101416524SQ200780012309公开日2009年4月22日申请日期2007年4月9日优先权日2006年4月7日发明者C·张,C-L·林,T·W·赫尔科比申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1