用于视频编码的低复杂度帧内预测的制作方法

文档序号:14660050发布日期:2018-06-12 17:35阅读:205来源:国知局
用于视频编码的低复杂度帧内预测的制作方法

技术领域
本发明涉及视频编码,并且具体地涉及使用来自相同视频帧的先前编码并且重建的像素的、其中预测采样块的帧内预测。
背景技术
:数字视频需要大量数据来以未压缩的方式代表数字视频序列(例如系列帧)的每一帧。对于多数应用而言跨越计算机网络发送未压缩的数字视频由于带宽限制而不可行。此外,未压缩的数字视频需要大量存储空间。通常以某一方式对数字视频编码以减少存储要求并且减少带宽要求。一种用于对数字视频编码的技术是帧间预测。帧间预测利用在不同帧之间的时间冗余度。在时间上相邻的视频帧通常包括保持基本上相同的像素块。在编码过程期间,运动矢量将一帧中的像素块的移动与另一帧中的相似像素的块相关联。因而无需系统对像素块编码两次,而是对像素块编码一次并且提供用于预测其它像素块的运动矢量。另一种用于对数字视频编码的技术是帧内预测。帧内预测对帧或者其部分编码而未参考其它帧中的像素。帧内预测利用在帧内的像素块之间的空间冗余度。由于在空间上相邻的像素块一般具有相似属性,所以通过参考在相邻块之间的空间相关性来提高编码过程的效率。通过基于在相邻块中使用的预测模式预测目标块可以利用这一相关性。技术实现要素:本发明提供一种提高视频编码效率的独特帧内预测过程。H.264/AVC使用位于紧接待预测的目标块上方的水平边界中的参考像素和位于紧接该目标块的左侧的竖直边界中的参考像素。在本发明中,取出水平边界像素阵列或者竖直边界像素阵列的至少一些像素。然后向其它边界像素添加取出的像素以扩展其阵列。仅基于扩展的边界像素阵列执行帧内预测。在本发明的一个实施方式中,取出竖直边界像素中的至少一些像素并且向水平边界像素添加以扩展其阵列。本发明消除选择从其取出参考像素的水平边界或者竖直边界的判决过程。本发明也消除计算与预测方向相交的竖直边界的位置的重复出现过程,其中重复出现计算过程通常包括除法操作。消除这些过程使帧内预测过程能够实施于单指令多数据(SIMD)架构上,由此提高视频编码的计算效率。在根据本发明的一个实施方式中,使用由下式表达的竖直像素标识符来取出竖直边界像素中的至少一些像素:其中size代表待预测的目标块的大小,angle代表预测方向,并且col是从-1至angle递减1的计数器。向在水平像素标识符[col]标识的位置处的水平像素添加取出的像素。在另一实施方式中,在取出竖直边界像素中的至少一些像素时根据下式计算InvAngle:其中N是2的整数幂。然后使用由[col×InvAngle>>log2N]表达的竖直像素标识符来取出竖直边界像素之中的至少一些像素。向在水平像素标识符[col]标识的位置处的水平像素添加取出的像素。在另一实施方式中,从查找表获得InvAngle,查找表相对于angle的值列出了InvAngle的值。在另一实施方式中,使用竖直像素标识符[row]来标识竖直边界像素之中的像素,其中row是从0至size递增1的计数器。向在水平像素标识符[int+1]标识的位置处的水平边界像素添加取出的像素,其中int是与预测方向相交的像素的位置的整数表示。本发明也提供一种实施帧内预测操作的编码器和解码器,在该帧内预测操作中,取出水平边界像素阵列或者竖直边界像素阵列的至少一些像素。然后向其它边界像素添加取出的像素以扩展其阵列。仅基于扩展的边界像素阵列执行帧内预测。附图说明图1是示出了本发明可以实施于其上的示例硬件架构的框图。图2是示出了本发明可以被应用于的视频编码器的总体视图的框图。图3是示出了本发明可以被应用于的视频解码器的总体视图的框图。图4是示出了根据本发明一个实施方式的编码器的功能模块的框图。图5是示出了本发明实施方式的帧内预测模块执行的帧内预测过程的流程图。图6是示出了根据本发明一个实施方式的解码器的功能模块的框图。图7是示出了预测方向的图,这些预测方向图示了在H.264/AVC中支持的Intra_4×4预测模式。图8是示出了在第JCT-VCA119号文档中提出的预测方向的图。图9是示出了在JCT-VCA119中提出的沿着图7中所示预测方向之一生成预测的块的过程的流程图。图10是示出了根据本发明一个实施方式执行的低复杂度帧内预测过程的流程图。图11A是示出了预测块以及水平和竖直边界像素阵列的示意视图。图11B是示出了用竖直边界像素扩展的水平边界像素阵列的示意图。图12是示出了根据本发明一个实施方式执行的扩展水平边界像素阵列的过程的流程图。图13是示出了扩展水平边界像素阵列的另一实施方式的流程图。图14是示出了根据本发明另一实施方式执行的低复杂度帧内预测过程的流程图。具体实施方式图1示出了本发明可以实施于其上的计算机100的示例硬件架构。请注意图1中所示硬件架构可以在实施本发明实施方式的视频编码器和视频解码器中共用。计算机100包括经由本地接口107通信地耦合的处理器101、存储器102、存储设备105和一个或者多个输入和/或输出(I/O)设备106(或者外设)。本地接口105可以例如是但不限于如在本领域中已知的一个或者多个总线或者其它有线或者无线连接。处理器101是用于执行软件、具体为存储于存储器102中的软件的硬件设备。处理器101可以是任何定制或者商用处理器、中央处理单元(CPU)、在与计算机100关联的若干处理器之中的辅助处理器、基于半导体的微处理器(形式为微芯片或者芯片组)或者一般为任何用于执行软件指令的设备。存储器102包括计算机可读介质,该计算机可读介质可以包括易失性存储器元件(例如随机存取存储器(RAM,比如DRAM、SRAM、SDRAM等))和非易失性存储器元件(例如ROM、硬驱动、磁带、CDROM等)中的任何存储器元件或者组合。另外,存储器102可以并入电子、磁、光学和/或其它类型的存储介质。计算机可读介质可以是任何可以存储、传达、传播或者传送用于由指令执行系统、装置或者设备使用或者与指令执行系统、装置或者设备结合使用的程序的装置。请注意存储器102可以具有分布式结构,其中各种部件处于相互远离处、但是可以由处理器101访问。存储器102中的软件103可以包括一个或者多个单独程序,每个程序包含用于实施计算机100的如下文描述的逻辑功能的可执行指令有序列表。在图1的例子中,存储器102中的软件103限定计算机100的根据本发明的视频编码或者视频解码功能。此外,虽然非必需,但是存储器102有可能包含操作系统(O/S)104。操作系统104实质上控制计算机程序的执行并且提供调度、输入-输出控制、文件和数据管理、存储器管理以及通信控制和有关服务。计算机100的存储设备105可以是许多不同存储设备类型之一,这些存储设备类型包括静止存储设备或者便携式存储设备。作为例子,存储设备105可以是磁带、磁盘、闪存、易失性存储器或者不同存储设备。此外,存储设备105可以是安全数字记忆卡或者任何其它可拆卸存储设备105。I/O设备106可以包括输入设备、例如但不限于触屏、键盘、鼠标、扫描仪、麦克风或者其它输入设备。另外,I/O设备106也可以包括输出设备、例如但不限于显示器或者其它输出设备。I/O设备106还可以包括经由输入和输出二者通信的设备、例如但不限于调制器/解调器(调制解调器;用于访问另一设备、系统或者网络)、射频(RF)、无线或者其它收发器、电话接口、桥接器、路由器或者作为输入和输出二者工作的其它设备。如本领域普通技术人员公知的那样,通过去除视频序列中的冗余信息来实现视频压缩。存在许多不同视频编码标准,这些视频编码标准的例子包括MPEG-1、MPEG-2、MPEG-4、H.261、H.263和H.264/AVC。应当注意本发明未旨在限于任何具体视频编码标准的应用。然而使用通过引用而结合于此的H.264/AVC标准例子来提供本发明的以下描述。H.264/AVC是最新的视频编码标准并且实现较先前编码标准、比如MPEG-1、MPEG-2、H.261和H.263而言的显著性能提高。在H.264/AVC中,视频的每个帧或者画面能分解成若干分片。分片然后划分成称为宏块的16×16个像素的块,这些块然后可以进一步划分成8×16、16×8、8×8、4×8、8×4下至4×4个像素的块。H.264/AVC支持五个类型的分片。在I分片中,使用帧内预测对所有宏块编码。在P分片中,可以使用帧内或者帧间预测对宏块编码。P分片允许使用每个宏块仅一个运动补偿预测(MCP)信号。在B分片中,可以使用帧内或者帧间预测对宏块编码。可以每个预测使用两个MCP信号。SP分片允许在不同视频流之间高效切换P分片。SI分片是在仅使用帧内预测之时用于随机访问或者错误恢复的SP分片的确切匹配。图2示出了本发明可以被应用于的视频编码器的总体视图。图中所示块代表处理器101执行存储器102中的软件103而实现的功能模块。向视频编码器201馈送视频帧画面200。视频编码器以宏块200A为单位对待画面200。每个宏块包含画面200的若干像素。对每个宏块执行变换成变换系数、继而量化成变换系数级。另外,使用帧内预测或者帧间预测,以不直接对像素数据执行编码步骤,而是对像素数据与预测的像素值的差执行编码步骤,由此实现更容易压缩的小值。对于每个分片,编码器201生成多个语法元素,这些语法元素形成相应分片的宏块的编码版本。语法元素中的与变换系数的编码有关的所有残余数据元素称为残余数据语法元素,这些残余数据元素比如是变换系数级或者指示略去的变换系数级的重要图。除了这些残余数据语法元素之外,编码器201生成的语法元素还包含控制信息语法元素,这些控制信息语法元素分别包含关于已经如何对每个宏块编码并且必须如何对每个宏块解码的控制信息。换言之,语法元素可划分成两个类别。控制信息语法元素这第一类别例如包含与宏块类型、子宏块类型和关于空间和时间类型二者的预测模式的信息以及基于分片和基于宏块的控制信息有关的元素。在第二类别中,所有残余数据元素、比如重要图被组合并且变成残余数据语法元素,该重要图指示量化的变换系数的块内部的所有重要系数的位置和重要系数的以与量化步进对应的级为单位指示的值。编码器201包括对语法元素编码并且为每个分片生成算术码字的熵编码器。当为分片生成算术码字时,熵编码器利用在视频信号位流中的语法元素的数据值之间的统计依赖性。编码器201向图3中所示视频解码器301输出用于画面200的分片的、编码的视频信号。图3示出了本发明可以被应用于的视频解码器的总体视图。类似地,图中所示块代表处理器101执行存储器102中的软件103而实现的功能模块。视频解码器301接收编码的视频信号并且先将信号熵解码恢复成语法元素。解码器301使用语法元素以便逐个宏块、然后按分片重建画面300中的像素的画面采样300A。图4示出了视频编码器201的功能模块。处理器101执行存储器102中的软件103来实现这些功能模块。输入视频画面是采样点限定的自然(未压缩)视频图像的帧或者场,这些采样点代表原有颜色的分量、比如色度(“chroma”)和亮度(“luma”)(其它分量是可能的、例如色调、饱和度和值)。输入视频画面划分成宏块400,每个宏块代表由画面颜色的亮度分量的16×16个像素构成的方形画面区域。输入视频画面也分割成宏块,每个宏块代表画面颜色的两个色度分量中的每个色度分量的8×8个像素。在一般编码器操作中,可以使用帧间或者帧内预测来在时间上或者在空间上预测输入的宏块。然而出于讨论的目的而假设宏块400都是I分片型宏块并且仅经受帧内预测。在帧内预测模块401处实现帧内预测,下文将具体讨论该帧内预测模块的操作。帧内预测模块401根据先前已经编码、重建并且存储于帧存储器403中的邻近块的水平和竖直边界像素生成预测块402。使用视频编码领域中的技术人员已知的方法和技术在变换/量化模块405处来变换、缩放并且量化预测块402的残差404,该残差是目标块400与预测块402之间的差。然后在熵编码模块407处对量化的变换系数406熵编码并且(与其它与帧内预测有关的信息一起)发送作为编码的视频信号408。视频编码器201包含用于对目标块执行帧内预测的解码功能。解码功能包括逆量化/变换模块409,该逆量化/变换模块对量化的变换系数406执行逆量化和逆变换以产生与预测块402相加的解码的预测残差410。解码的预测残差410与预测块402之和是重建的块411,该重建的块存储于帧存储器403中,并且帧内预测模块401将从该帧存储器读取该重建的块并且使用该重建的块以生成用于对下一目标块400解码的预测块402。图5是示出了帧内预测模块401执行的过程的流程图。根据H.264/AVC标准,帧内预测涉及到使用先前编码并且重建的邻近块的边界像素(“参考像素”)的插值在多个预测模式之下预测目标块400的每个像素。预测模式由正整数0、1、2…标识,每个预测模式与用于预测目标块400中的具体像素的不同指令或者算法关联。帧内预测模块401在相应预测模式之下运行帧内预测并且生成不同预测块。在全搜索(“FS”)算法之下,比较每个生成的预测块与目标块400以发现预测模式之中的最优预测模式,该最优预测模式最小化预测残差404或者产生更少预测残差404。压缩最优预测模式的标识并且与其它控制信息语法元素一起发送到解码器301。每个预测模式可以由如口头描述的一般预测方向(即水平向上、竖直和对角左下)描述。预测方向可以在图形上由通过如图7中所示具有箭头的图表达的角方向描述。在这一类型的图中,每个箭头可以视为代表预测方向或者预测模式。与预测模式对应的角度与从用来预测目标像素的参考像素的加权平均位置到目标像素位置的方向具有一般关系。请注意像素模式包括未与任何预测方向关联、因此与其它预测模式不同不能在图中用图形来描述的DC预测模式。在DC预测模式中,生成预测块402,从而统一地设置预测块402中的每个像素为参考像素的均值。回顾图5,在步骤501中初始化预测模式。然后在步骤502中确定预测模式是否指示DC预测。如果它指示DC预测,则流程前进到步骤503,其中在步骤503中用参考像素的均值生成DC预测块402。如果预测模式未指示DC预测,则在步骤504中根据与预测模式关联的指令或者算法生成预测块402,下文将具体讨论该步骤的过程。在步骤503或者504之后,流程前进到步骤505,其中确定是否为所有预测模式生成预测块。如果在所有预测模式之下运行了帧内预测,则流程前进到步骤506。否则,在步骤507中递增预测模式,并且流程返回到步骤502。在步骤506中,比较每个生成的预测块与目标块400以确定最小化预测残差404的最优预测模式。图6示出了视频解码器301的功能模块。处理器101执行存储器102中的软件103来实现这些功能模块。熵解码器600先接收来自编码器201的编码的视频信号并且熵解码恢复成量化的变换系数601。逆量化/变换模块602逆量化并且变换量化的变换系数601以生成预测残差603。向帧内预测模块604通知编码器201选择的预测模式。根据所选预测模式,帧内预测模块604使用先前重建并且存储于帧存储器606中的邻近块的边界像素来执行与在图5的步骤502、503和504中执行的过程相似的帧内预测过程以生成预测块605。预测块605与预测残差603相加以重建解码的视频信号的块607。重建的块607存储于帧存储器606中用于在预测下一块时使用。将关于帧内预测模块401和604执行的用于在除了DC预测模式之外的预测模式之一之下生成预测块的步骤504的过程给出具体描述如下。H.264/AVC支持Intra_4×4预测、Intra_8×8预测和Intra_16×16预测。当在画面中有重要细节时通常使用Intra_4×4预测。Intra_4×4预测对一个宏块内的十六个4×4亮度块分别预测。在包括一个DC预测模式的九个预测模式之下执行Intra_4×4预测。在图7中示出了空间预测方向,沿着这些空间预测方向执行Intra_4×4预测。在包括一个DC预测模式的九个预测模式之下执行Intra_8×8预测。在包括一个DC预测模式的四个预测模式之下执行Intra_16×16预测。最近研究表明预测方向数目的增加或者预测模式数目的增加一般有助于提高视频编码中的压缩效率。例如参见通过引用而均结合于此、向视频编码联合小组(JCT-VC)提交的第JCT-VCA119号(“AngularIntraPredication”)和第JCT-VCA124(“ArbitraryDirectionIntra”)号文档。预测方向数目的增加造成可用预测方向的角度间隔数目的增加、因此造成预测块候选数目的增加。预测块候选的数目增加简单地增加了具有与待编码的目标块几乎相同的预测块的机会。图8是示出了在第JCT-VCA119号文档中提出的预测方向的图。在图8中,参考像素由十七(17)个水平像素和十七(17)个竖直像素构成,其中左上像素为水平和竖直边界二者所共用。因此,33个不同预测方向可用于生成8×8块的预测像素。JCT-VCA124提出任意方向帧内预测,其中根据待预测的块的大小调整预测方向数目。图9是示出了在JCT-VCA119中提出的沿着图8中所示预测方向之一生成预测块的过程的流程图。在对过程的以下描述中,为了易于说明而简化一些算法。而且,描述的过程限于沿着基本上竖直的预测方向的帧内预测。如在JCT-VCA119提供的软件中示范的那样,可以与图9中所示过程对称地实施沿着基本上水平的预测方向的帧内预测。虽然图8示出了待预测的8×8块,但是图9中所示过程可扩展成应用于在不同配置中的各种数目的像素。例如,待预测的块可以包括4×4像素阵列。预测块也可以包括8×8像素阵列、16×16像素阵列或者更大像素阵列。包括方形和矩形阵列二者的其它像素配置也可以组成预测块。在图9中的步骤900中,从先前已经编码、重建并且存储于帧存储器(比如图4中所示存储器403)中的邻近块读取分别位于紧接目标块的上方和左侧的水平和竖直边界中的参考像素。来自水平边界的像素存储于称为“refH”的存储器区域中。来自竖直边界的像素存储于称为“refV”的另一存储器区域中。回顾图8,参考像素由它们在坐标系中的坐标标识,该坐标系在8×8块中的左上像素位置具有原点。因此,水平边界像素具有由x=0,1…16而y=0的p[x,y]表达的坐标。竖直边界像素具有由x=0、y=0,-1,-2…-16的p[x,y]表达的坐标。假设存储于存储器区域refH中的水平边界像素由x=0,1…16的逻辑地址(x)标识,并且存储于存储器区域refV中的竖直边界像素类似地由y=0,-1,-2…-16的逻辑地址(y)标识,其中每个像素存储于具有从其中读取该像素的坐标中的数的地址中。因此,在图8中用图形代表水平和竖直像素时,存储器区域refH和refV可以视为线性地并且相互正交地延伸而且各自具有2×size+1的长度,其中“size”是代表目标块的大小的参数。假设size具有与2的整数幂、比如4、8、16…相等的值。如在H.264/AVC中的第8.3.2.2.1节中描述的低通滤波器可以可选地应用于refH和refV中的像素。在步骤901中,将称为“row”的计数器设置成零(“0”)。计数器row取从0至size的值并且指示预测块中的预测像素的行位置。在步骤902中,按照angle×(row+1)计算称为“pos”的参数。angle是具有定点表示的分数的参数。这样,用整数部分和分数部分形成angle,并且分数部分由固定数目的二进制数位构成。angle代表图8中所示预测方向之一。例如“angle=-size”标识图8中的穿过坐标[x=0,y=0]的预测方向。具有正值的angle标识仅与水平边界交叉的预测方向,而具有负值的angle标识与水平和竖直边界二者交叉的预测方向。angle在希望使用的预测方向的数目所确定的范围内变化。如在JCT-VCA124中提出的那样,可以根据待预测的块的大小来确定待使用的预测方向的数目。在以下描述中,假设angle取在从“-size”至“size”的范围内变化的分数。请注意可以用其它值限定angle的范围限制。如同angle,参数pos由整数部分和分数部分构成,并且其分数部分由固定数目的二进制数位构成,该数目等于angle的范围限制的以2为底的对数,该对数根据将angle的范围限制设置成size这样的上述假设可以由log2_size表达。pos标识水平边界与angle代表的预测方向之间的交点的位置。回顾步骤902,运算“pos>>log2_size”标识存储于参数“int”中的在pos中的整数,并且运算“pos&(size-1)”标识存储于参数“frac”中的在pos中的分数。运算符“>>”调用二进制数位的算术右移。运算符“&”调用逐位“与”运算。在步骤903中,确定angle是否具有等于或者大于零(“0”)的值。如果angle具有等于或者大于零的值,则流程继续步骤904。否则,流程继续步骤913。angle等于或者大于零表示仅可以依赖于位于水平边界中或者存储于refH中的参考像素以推导预测块中的预测像素。另一方面,angle小于零表示需要位于竖直边界中或者存储于refV中的参考像素以推导预测块中的预测像素。在步骤904中,确定frac是否不为零。如果frac不为零,则流程继续步骤905。如果frac为零,则流程继续步骤906。frac等于零表示可以从水平边界中的参考像素直接复制预测块中的预测像素。非零frac表示预测方向在非整数位置与水平边界相交并且需要多于一个参考像素的插值以推导预测块中的预测像素。在步骤905中,将称为“col”的计数器设置成零(“0”)。计数器col用来对refH中的参考像素寻址。在步骤907中,从refH取出“int+col+1”和“int+col+2”标识的两个参考像素。加权平均或者用frac插值这两个参考像素以推导预测像素v。具体而言,refH中的由“int+col+1”标识的参考像素乘以“size-frac”并且存储于参数a中。refH中的由“int+col+2”标识的参考像素乘以“frac”并且存储于参数b中。参数a和b然后相加并且除以size、即(size-frac)+frac。除以size可以替换为按照log2_size右移。推导的预测像素v存储于称为“pred”的存储器区域阵列中,该存储器区域阵列代表在特定预测方向之下用于目标块的预测块。pred中的每个存储器区域由参数row和col标识。然后,在步骤908中将col递增1并且在步骤909中与size比较。只要col小于size,重复步骤907和908。当col变成等于size时,流程继续步骤920。如果在步骤904中确定frac为零,则在步骤906中将计数器col设置成零。在步骤910中,从refH(int+col+1)直接复制预测像素v、然后存储于pred中的对应存储器区域中。然后在步骤911中将col递增1并且在步骤912中与size做比较。只要col小于size,重复步骤910和911。当col变成等于size时,流程继续步骤920。回顾步骤903,angle小于零需要来自refV的参考像素以推导预测块中的预测像素。在步骤913中将计数器col设置成零。然后在步骤914中确定“int+col+1”是否低于零。“int+col+1”等于或者大于零表示仅可以依赖于存储于refH中的参考像素以推导预测块中的预测像素,并且流程继续步骤915。在步骤915中执行的过程与步骤907的过程相似,并且这里将不重复其描述。然后在步骤916中将col递增1并且在步骤917中与size做比较。只要col小于size,重复步骤914、915和916。当col变成等于size时,流程继续步骤920。如果在步骤914中确定“int+col+1”小于零,则需要存储于refV中的参考像素以推导预测块中的预测像素。在步骤918中,先确定在竖直边界与预测方向之间的交点的位置。在步骤918中,pos2代表位置。请注意在步骤902中,由“angle×(row+1)”确定pos、即在水平边界与预测方向之间的交点的位置。假如angle代表水平与竖直差值的比值,计算“angle-1×(col+1)”而不是“angle×(row+1)”以确定在竖直边界与预测方向之间的交点的位置。如上文假设的那样,angle在-size至size的范围内(-size≤angle≤size)。因此,angle与size之间的比值α由下式限定:然后,angle-1由下式限定:这样,在步骤918中用size的平方乘以col+1、然后除以angle的绝对值确定pos2如下:如同pos,pos2具有由整数部分和分数部分形成的、定点表示的分数。分数部分由数目取决于log2_size的二进制数位构成。pos2的整数部分存储于参数int2中,并且pos2的分数部分存储于参数frac2中。在步骤919中,从refV取出由“int2+row+1”和“int2+row+2”标识的两个参考像素。加权平均或者用frac2插值这两个参考像素以推导预测像素v。具体而言,来自refV(int2+row+1)的参考像素乘以“size-frac2”并且存储于参数a中。来自refV(int2+row+2)的参考像素乘以“frac2”并且存储于参数b中。参数a和b然后相加并且除以size或者按照log2_size右移。推导的预测像素v存储于pred的对应存储器区域中。重复步骤914、918、919和916直至col在步骤917中变成等于size。在步骤920中,将row递增1。然后在步骤921中确定row是否小于size。只要row小于size,重复从步骤902起的步骤以推导预测块中的预测像素。流程在步骤921中row变成等于size时结束。如上文提到的那样,预测块候选数目的增加有助于提高编码效率,而预测块候选数目的增加造成计算机工作量的增加。因此,为了增加预测块候选数目以由此提高编码效率,需要回顾生成预测块候选的过程以进一步实现该过程的效率。在回顾图9中所示过程时,可以标识两个计算瓶颈。第一计算瓶颈是在循环内重复的步骤914的比较和分支操作。第二计算瓶颈是也在循环内重复的步骤918的除法操作。如今,单指令多数据(SIMD)可用于高效计算。SIMD使具有多个处理元件的计算机能够同时对多个数据执行相同操作。然而典型SIMD架构未支持在循环中实施除法和计算/分支、因此由于在循环中包括步骤914和918而不能用来实施图9中所示过程,尽管从步骤907和910开始的循环稳健得足以用SIMD来实施。因此本发明的目的是从图9中所示过程去除计算瓶颈并且提供低复杂度帧内预测,这使典型SIMD架构能够沿着图8中所示所有预测方向实施并行处理。图10是示出了根据本发明一个实施方式的低复杂度帧内预测过程的流程图,该过程被设计成在实施图5的步骤504中的过程时替换图9的过程。在图10中,与图9中执行的相同过程步骤由与图9中使用的相同步骤编号标识、比如步骤900、901、902、904、905、906、907、908、909、910、911、912、920和921。这里未重复对这些共同步骤的描述。步骤1000和1001是图10的过程特有的步骤。如从与图9中的所示过程的比较中显见的,图10的过程消除步骤903的比较步骤和从步骤903向左分支的在angle小于零时执行的所有步骤、由此消除步骤914和918的计算瓶颈。在添加的步骤1000和1001中,确定angle是否等于或者大于-1。当angle等于或者大于-1时,位于水平边界中的参考像素足以生成预测块中的预测像素,并且无需竖直边界中的参考像素。另一方面,angle小于-1,需要竖直边界中的参考像素以生成预测块中的预测像素。在步骤1001中,使用存储于refV中的像素中的至少一些像素在负方向上扩展存储于refH中的参考像素。图11A和11B是示出了在步骤1001中执行的refH扩展的示意表示。在图11A中,存储于refH中的参考像素1102来自位于目标块1101上方的水平边界。存储于refV中的参考像素1103来自于位于目标块1101左侧的竖直边界。如图11B中所示,在图10的步骤1001之后,向refH中复制refV中的参考像素中的一些参考像素,并且refH具有在负方向上扩展的扩展部分1104。图12是示出了在步骤1001中执行的过程的细节的流程图。在步骤1201中,将计数器col设置成-1。col用来标识refH的扩展部分的地址。在步骤1202中,refV中的将向refH的扩展部分中复制的参考像素由下式标识:上式中的除法是整数除法,并且该式产生整数。该式与图9中所示步骤918的过程相似地作用。在步骤918中,按照下式计算pos2的整数值:请注意按照log2_size的右移等效于除以size。在步骤1203中,将col递减1。然后在步骤1204中确定col是否等于angle。如果col未等于angle,则流程返回到步骤1202。重复步骤1202和1203直至col变成等于angle。因此,按照升序或者从竖直边界的顶部至底部从refV读取参考像素并且还按照降序或者从水平边界的右侧至左侧向refH中复制参考像素。而且,未向refH中复制refV中的所有参考像素。从refV向refH中仅复制位于从顶部至预测方向的交点的范围内的参考像素。回顾图10,从图9复制从步骤902开始的过程步骤,并且这些过程步骤包括从图9中的步骤903的比较步骤向右分支的、用于生成预测像素的步骤。然而请注意图10中的用于生成预测像素的步骤使用扩展的refH(图11B中的部分1102+1104的和),而图9中的对应步骤使用原有refH(图11A中的部分1102)。由于在负方向上扩展refH,所以无论angle的符号如何都无需被具体设计成使用存储于refV中的参考像素、比如从图9中的步骤903向左分支的单独帧内预测操作。图13是示出了用于使用refV中的参考像素来扩展refH的过程的另一实施方式的流程图。图11和图12中所示过程消除了图9中所示步骤914和918的瓶颈步骤、因此有望提高帧内预测过程的效率。图13中所示过程从用于从refV向refH中复制参考像素的循环消除了图12的步骤1202中执行的除法操作。通过从循环消除除法操作,图13中所示过程有望进一步提高帧内预测过程的效率。图13中所示过程用步骤1301和1302替换图12的步骤1202。步骤1302在用于从refV向refH中复制参考像素的循环内,而步骤1301在循环以外。步骤1301引入称为“InvAngle”的新参数。InvAngle由下式限定:乘以256等效于按照8左移并且保证运算“size/angle”所产生的每位解决对refV中的参考像素进行标识的计算。在步骤1302中,refV中的将向refH的扩展部分中复制的参考像素的地址由下式标识:col×InvAngle>>8。“col×InvAngle”的结果按照8右移以撤消在步骤1301中执行的左移运算。请注意步骤1302中的右移运算起对“col×InvAngle”的结果向下取整的作用。为了朝着最接近整数取整,取整偏移128可以在执行右移运算之前与“col×InvAngle”的结果相加。应当注意数“256”仅为例子,并且步骤1301可以采用另一偏移数、优选为2的整数幂,只要该数大到足以保留操作“size/angle”所产生的所有位。例如,该数可以在步骤1301中是64而不是256,并且右移次数在步骤1302中是6而不是8。如果采用64,则取整偏移应当是32。可以用查找操作替换在步骤1301中执行的计算以进一步减少计算工作量。换言之,预备查找表,该查找表相对于angle的值存储InvAngle的值。下文提供的表1是用于在步骤1301中查找的示例表:表1angle45678InvAngle512410341293256假设在上表中,size是8,并且angle取从4至8的整数值。然而应当注意size不限于8并且可以取另一个值、比如4和16。angle也可以是如上文限定的定点表示的分数。当在图12的步骤1202或者图13的步骤1302中从refV向refH中复制参考像素时,参考像素可以通过低通滤波器以减少预测块中的可能混叠。低通滤波器的强度可以根据angle的值变化。例如当angle等于-size时,可以应用弱低通滤波,并且当angle等于-2时,可以应用强低通滤波。如上文说明的那样,未向refH中复制refV中的所有参考像素。由于未复制refV中的所有参考像素,所以当复制像素时丢失一些信息。为了减轻信息丢失,可以倍增refH和refV中的参考像素的分辨率,从而refH和refV不仅包含来自先前编码并且重建的块的像素且包含在两个相邻的重建的像素之间的通过插值两个相邻像素而生成的一个像素。可以简单地平均两个相邻像素以生成插值像素。可以当在图9的步骤900中读取参考像素时执行插值过程。当在refH和refV中倍增像素分辨率时,需要缩放比如在图9中的步骤907、910、915和919以及图10中的步骤1001中执行的、存储于refH和refV中的参考像素的地址的标识。例如在步骤907、910和915中执行的“int+col+1”需要改变成“int+2×col+2”。在步骤907、910和915中执行的“int+col+2”需要改变成“int+2×col+3”。在步骤919中执行的“int2+row+1”和“int2+row+2”需要分别改变成“int2+2×row+2”和“int2+2×row+3”。在另一实施方式中,图12中的步骤1202的过程可以简单地改变成“refH[col]←refV[-col]”以进一步简化复制过程。虽然降低预测准确度,但是这一实施方式向帧内预测操作提供最低复杂度。图11B示出了向refH添加的扩展部分1104。无需用来自refV的参考像素形成扩展部分1104。可以用来自先前重建的块的区域中的像素形成扩展部分1104,该区域在空间上对应于扩展部分1104的位置。在图11B中,由于在负方向上扩展,所以扩展的refH(部分1102和1104)范围从-size+1至2×size。可以通过在对扩展的refH中的参考像素寻址时添加适当偏移来重新缩放扩展的refH的范围以使范围从0至3×size-1。这对于重新缩放refV的范围同样成立。在另一实施方式中,可以自由选择angle的范围限制。在上述实施方式中,假设angle取在从-size至size的范围内的值(-size≤angle≤size)。换言之,在上述实施方式中,用目标块的大小限定angle的范围限制。请注意可以与目标块的大小独立地限定angle的范围限制,尽管仍然可优选的是用2的整数幂限定范围限制,从而log2_rangelimit是正整数并且等式“rangelimit=1<<log2_rangelimit”成立。通过为rangelimit选择适当大数,可以建立大量预测方向并且由角度间隔充分宽的angle值代表。如果与目标块的大小独立地限定angle的范围限制,则除了步骤909、912、917和921之外,需要用rangelimit替换图9和图10中出现的size,并且需要用log2_rangelimit替换log2_size。也需要用或者“angle×size/rangelimit≥-1”或者“angle×size≥-rangelimit”替换图10的步骤1000中执行的比较“angle≥-1”。另外,需要用rangelimit替换图12和图13中的步骤1202和1301中出现的size,并且需要用“col=angle×size/rangelimit?”替换步骤1204中执行的比较“col=angle?”。如果引入rangelimit作为angle的范围限制,则可以改变(上文提供的)表1如下:表2Angle*1317212632InvAngle630482390315256在表2中,将rangelimit设置成32。Angle*等于“rangelimit×tan(π/4×angle/8)”的整数近似,其中angle=4、5、6、7和8。InvAngle等于256×rangelimit/angle*。表2中的值都是通过向上取整而推导的整数。可以向下取整而不是向上取整这些数。在下文提供的表3中,InvAngle等于32×rangelimit/angle*。由于使用“32”而不是“256”,所以预测准确度必然低于表2的预测准确度。表3Angle*1317212632InvAngle7860483932图14是示出了另一实施方式的流程图,该实施方式进一步简化图10中所示过程。在流程进入主预测循环之前执行图10中所示的从refV向refH中复制参考像素的过程,而在主预测循环内执行图14中所示复制过程。图14中所示过程也消除变量InvAngle。图14中所示步骤900、902和921来自图10中的对应步骤。在步骤1401,将计数器lastInt初始化成-1。lastInt代表向refH添加的最后像素的索引。在步骤902中,按照angle×(row+1)计算pos。如上文说明的那样,pos标识边界与angle代表的预测方向之间的交点的位置。在图9的背景中,步骤902产生pos,该pos标识水平边界与angle代表的预测方向之间的交点的位置。进一步在步骤902中,pos中的整数部分存储于int中,并且pos中的分数部分存储于参数“frac”中。在步骤1402中,确定int是否小于lastInt。如果int小于lastInt,则在“int+1”标识的地址向refH中复制refV中的由row标识的参考像素。步骤1404由图9和图10中所示步骤904、905、906、907、908、909、910、911和912构成,这里未重复这些步骤的描述。在步骤1405中,向lastInt复制int。可以在步骤1403而不是步骤1405中执行向lastInt复制int的操作。在步骤1403中的复制操作造成复制如在步骤1202和1302中复制的相同像素,其中在这些步骤中使用向下取整。可以修改步骤1403以当在步骤902中计算的分数位置frac大于由ranglimit+(angle>>1)限定的offset时通过在步骤1403中有条件地使用“row+1”而不是“row”来向最接近整数取整。请注意angle是-ve并且frac是+ve。使用“row+1”造成向上取整。为了实现将row有条件递增1,在步骤1403中执行的过程改变成refH[int+1]←refV[row–((offset-frac)>>31)],其中假设在32位算术中,“offset-frac”的右移在frac大于offset时产生-1而在别的情况下产生0。因此,地址标识符“row–((offset-frac)>>31”在frac大于offset时变成“row+1”而在别的情况下变成“row”。如果offset设置成rangelimit,则“offset-frac”将总是为正,因此将无取整出现。下文列举实施图14中所示过程的、用C++编程语言开发的源代码。根据在TComPrediction.cpp文件中发现的TComPrediction::xPredIntraAng函数修改源代码,该文件是JCT-VC开发的、在http://hevc.kw.bbc.co.uk/svn/jctvc.a124/tags/0.7可获得的TMuC0.7软件的部分。尽管本发明的许多变更和修改将在已经阅读前文描述之后无疑地变成为本领域普通技术人员所清楚,但是应当理解通过示例而示出并且描述的任何具体实施方式绝非旨在视为限制。因此,引用各种实施方式的细节并非旨在于限制权利要求的范围,权利要求本身仅记载视为本发明所必需的那些特征。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1