一种视频编码中对残差矩阵的快速扫描方法

文档序号:7652225阅读:279来源:国知局
专利名称:一种视频编码中对残差矩阵的快速扫描方法
技术领域
本发明属于信号处理中的视频编码技术领域,涉及视频编码中一种对残差矩阵的快速扫描方法。
背景技术
视频是指由一系列时间上相关的图象组成的集合,其中每幅图象称为“帧”(本申请对帧模式和场模式的图象都统一适用,所以不再区分帧和场,统一称为帧),每帧图象又可以划分为若干个“图象块”,通常形状为矩形。视频编码中常用的图象块大小有16×16,16×8,8×16,8×8,4×4等。现有的视频编码标准中大都采用基于分块处理的混合编码方法,以图象块为基本单位进行处理;而每个图象块由一定数量的“象素”组成,它是构成图象的最小单元。
视频编码的目的在于对原始视频数据进行处理,在不显著降低观看质量的前提下实现数据量的压缩以方便存储和传输。视频编码器就是完成上述功能的器件。在大多数的视频压缩标准中,如MPEG-1,MPEG-2,MPEG-4,H.261,H.263,H.264/AVC,以及中国制定的高级音视频标准AVS,都采用了包括预测编码、变换编码和熵编码的混合编码方法,获得了很好的图象压缩效果。视频编解码的过程如图1所示。图1中,上边的实线表示编码过程,下边的虚线表示解码过程。在编码过程中,对图象块经过预测、变换、量化、扫描和熵编码后,得到编码后的码流。在解码时,首先对已编码码流进行熵解码,再经过反扫描、反量化和反变换,最后通过运动补偿得到解码的重建图象。
视频编码器由很多功能模块组成,其中“扫描模块(scan)”是一个较为重要的模块。扫描模块的输入数据以一个待扫描元素的二维矩阵形式存在,它可以是一个原始图象块,也可以是一个或多个原始图象块经过任何一种操作处理得到的矩阵,它可用如下公式表述C=f(A1,A2,…,Am)上式中C表示待扫描的二维矩阵,f表示任意一种操作,A1至Am表示参与操作的一个或多个原始图象块。由于在大多数视频编码标准中扫描模块的输入是各个图象块经过预测、变换和量化之后的残差块,因此在本文中如果不做特殊说明,则将待扫描矩阵称为“残差矩阵”,将待扫描矩阵的元素称为“残差矩阵的元素”或“残差元素”。扫描模块后面连接的是熵编码模块。按照目前大多数视频编码标准中的要求,扫描模块需要向熵编码模块输出run-level信息,也即残差矩阵按照预先定义的扫描顺序转化成一维序列后各个非零元素的值level(量化系数值,也即残差矩阵中非零元素的幅值),以及各非零元素前连续零元素的个数run(量化游程,也即在对残差矩阵的扫描中一个非零元素前连续零元素的个数)。而在国际视频编码标准H.264/AVC中,扫描模块需要向熵编码模块输出的数据则是非零元素值level、指示非零元素位置的信息map(表示一维序列中某元素是否为非零元素的信息,若是非零元素则对应位置的map值为第2个符号值,否则map值为第1个符号值,其中第1和第2个符号值用来表示取值的二值性,例如可以分别取为“1”和“0”,也可取为“0”和“1”)、以及标志最后一个非零元素位置的信息last(表示一维序列中某元素是否为最后一个非零元素的信息,若是最后一个非零元素则对应位置的last值为第2个符号值,否则为第1个符号值)。
综上所述,对残差矩阵的扫描所要实现的功能是将残差矩阵按照预先设定的扫描顺序转化成一维序列,从中提取出非零元素大小及位置分布等信息,输出给后续模块。图2示意了对残差矩阵的扫描过程。如图2所示,一个大小为N×M的待扫描残差矩阵(垂直方向有N个元素,水平方向有M个元素),按照虚线箭头所示的扫描顺序(残差矩阵转化为一维序列的过程中,矩阵中各元素在一维序列中的排列规则)转化为一个一维序列,再从中找出level信息和run信息(适用于H.264/AVC时需要找出的是level信息、map信息和last信息)。
一种传统的扫描方法其工作过程如下依照预先设定的扫描顺序每次读取残差矩阵中的一个元素,判断其是否为零元素。若是零元素则把当前run值加一,否则输出这个非零元素和当前记录下的run值,也就是此非零元素前连续零元素的个数,并将当前run值置零。这种做法的特点是每次存入和处理的元素都是一个。该方法在硬件实现时结构简单,复杂度比较低。但是由于在采用该方法的硬件电路中每个时钟周期只能处理一个残差元素,扫描一个图象块的残差矩阵至少需要N×M个时钟周期。因此传统扫描方法应用于硬件实现时的缺点在于需要的时钟周期数较长,扫描过程过于缓慢。
当前视频编解码系统的应用中对于高分辨率和实时性的要求越来越高,这种数据量大、处理时间有限的应用需求对视频编码器硬件的处理速度提出了很高的要求,在编码器硬件的时钟频率难以显著提高的情况下,则需要尽量减少处理每一个图象块所用的时钟周期数。显然,传统的扫描方法难以满足这种要求。

发明内容
本发明的目的是为了克服传统扫描方法的不足之处,提出一种对残差矩阵的快速扫描方法。本发明应用于硬件实现时可以充分利用并行性,大大减少扫描一个同样大小残差矩阵所需要的时钟周期数,提高编码器编码速度,有助于实现高分辨率下的实时编码。
本发明提出的一种视频编码中对残差矩阵的快速扫描方法,其特征在于,该方法包括将二维残差矩阵的元素按照预先设定的映射方式并行地存入一个一维序列;从该一维序列中每次顺序提取多个残差元素,并行地计算出该多个残差元素的level值、map值和run值,并分别存储。
本发明具体包括以下步骤1)每次读取二维残差矩阵中的P个元素,按照预先设定的扫描顺序以及残差矩阵的读取方式所共同决定的映射方式存入一个一维序列Seq[1N×M]中,直到所有残差元素将Seq[1N×M]填满为止,其中,P为同时读取的残差矩阵元素的个数,N为残差矩阵垂直方向元素的个数,M为残差矩阵水平方向元素的个数;2)每次从一维序列Seq[1N×M]中顺序提取出Q个残差元素,同时计算该Q个残差元素的level值、map值和run值,并分别存储,直到处理完所有Seq[1N×M]的残差元素,其中,Q为同时提取的残差矩阵元素的个数;所述步骤2)中的处理具体包括以下步骤21)用每个残差元素的值作为该元素对应的level值;22)若该残差元素其值为0,则对应的map值为第1个符号值,否则map值为第2个符号值;23)利用上次处理得到的lastrun并行计算每个残差元素对应的run值,其中,lastrun为同时处理的Q个残差元素中最后出现的连续零元素个数,若最后一个残差元素为非零元素,则lastrun为0;上次处理得到的lastrun即为上一组Q个残差元素中最后出现的连续零元素个数,计算第一组Q个残差元素时lastrun取0。所述步骤23)中的处理具体包括以下步骤231)若第1个残差元素为零,则其run值为“无效”,否则其run值为上次的lastrun;232)若第i个残差元素为零,i=2,3…,Q,则其run值为“无效”,否则若第i个残差元素前面有非零元素且与其距离最近的非零元素为第j个残差元素,j=1,2…,i-1,则其run值为i-j-1,否则其run值为i-1+lastrun;233)重新计算当前Q个残差元素中最后一个非零元素后面的连续零元素个数lastrun,如果Q个残差元素均为零元素,则当前的lastrun等于上次的lastrun与Q之和;24)将得出的level值、map值和run值分别存储。
上述预先设定的扫描顺序可以是各种视频编码标准中广泛采用的Zig-Zag扫描顺序,也可以是MPGE-2等标准中采用的Alternate-Horizontal、Alternate-Vertical扫描顺序,还可以是其他任何预先设定的扫描顺序;所述的残差矩阵的读取方式包括逐行读取、逐列读取、逐象素读取等各种读取方式。
上述从一维序列中提取非零元素大小及位置分布信息的过程中,一次同时提取的数据个数Q可以灵活配置,只要满足N×M为Q的整倍数即可。
本发明的特点及效果1)本发明为了减少扫描模块处理一个残差矩阵所需要的时钟周期数,充分利用硬件处理并行性的特点,从两个方面对传统的扫描方法进行改进一是实现对残差矩阵存储和扫描的并行化操作,即每个时钟周期对残差矩阵中多个元素进行一维序列的转化和存储;二是实现信息提取的并行化操作,即每个时钟周期同时完成对多个残差元素进行level、run等信息的提取。
2)本发明实现了将一个二维矩阵转化为一维序列的过程。其中,将二维残差矩阵中的元素映射到一维序列的映射方式,是由预先设定的扫描顺序以及残差矩阵的读取方式所共同决定的。也就是说,如果不同应用中采用不同的扫描顺序及不同的残差矩阵读取方式,则可以通过有针对性地设置不同映射方式的做法来加以适应。
3)本发明中只提取了level、run和map三种信息,当应用于H.264/AVC视频编码中时,所需要的last信息可由map信息得出。因此,本发明所述的扫描方法也可用于H.264/AVC编码器。
4)采用本发明所述方法的扫描电路,扫描一个残差矩阵所需的时钟周期数,与传统方法相比可以大大减少。由于上文所述的步骤1中P个残差元素可以同时存储,步骤2中Q个残差元素可以同时处理,因此扫描一个残差矩阵所需的时钟周期数为 与传统扫描方法所需的N×M个时钟周期相比,所用时钟周期数大大下降。因此,本发明提出的视频编码中对残差矩阵的快速扫描方法适合应用于VLSI(Very Large Scale IntegratedCircuits,超大规模集成电路)的设计,可集成在视频编码VLSI芯片之中。


图1为视频编解码过程的示意图。
图2为对残差矩阵的扫描所实现的功能示意图,包括将二维矩阵按预先设定的扫描顺序转化为一维序列,以及从中提取出非零元素大小和位置分布等信息。
图3为本发明方法的实施例中待扫描的残差矩阵。
图4为本发明方法的实施例中所采用的扫描顺序。
具体实施例方式
下面结合附图及实施例对本发明作进一步的详细描述。
本发明方法的一种实施例详细说明如下本实施例的图象块的大小为8×8,则残差矩阵的大小也为8×8,即N=M=8。本实施例的残差矩阵如图3所示。本实施例的扫描顺序采用被多个视频编码标准采用的帧模式Zig-Zag扫描表的扫描顺序,如图4中虚线和箭头指示方向所示(扫描顺序也可以是MPEG-2等标准中采用的Alternate-Horizontal、Alternate-Vertical扫描顺序,也可以是其他任何预先设定的扫描顺序)。本实施例中读取残差矩阵的方式为逐行读取,即P=8(读取方式也可采用逐列读取、逐象素读取等各种读取方式)。本实施例中同时对8个残差元素进行处理,即Q=8(也可以取其他任意值,只须满足8×8为Q的整倍数)。map值的第1个符号值取0,第2个符号值取1。
本实施例的具体工作流程如下1、将残差矩阵的元素逐行通过映射存入一个一维序列Seq[164]。第一次(即硬件电路中的第一个时钟周期)读取的8个元素为(10,0,0,0,0,0,0,0)分别存入Seq[164]的第1、2、6、7、15、16、28、29个位置。以此类推,经过8次上述步骤,残差矩阵的所有元素按照扫描顺序存入了一维序列Seq[164]中,Seq[164]中的数据为(10,0,8,0,-5,0,0,0,-4,2,0,0,1,0,0,0,0,-1,0,0,1,0,…,0)2、每次从Seq[164]中依次提取8个残差元素,计算它们的level值、map值和run值,并分别存入对应的一维序列level_Seq[164]、map_Seq[164]和run_Seq[164]的对应位置。第一次从Seq[164]中提取的8个残差元素为(10,0,8,0,-5,0,0,0)进行如下操作21)用每个残差元素的值作为该元素对应的level值,得到(10,0,8,0,-5,0,0,0)22)若该残差元素其值为0,则对应的map值为0,否则map值为1,得到(1,0,1,0,1,0,0,0)23)利用上次处理得到的lastrun并行计算每个残差元素对应的run值,其中元素1为非零元素10,lastrun的初始值为0,因此元素1的run值为0;元素2为零元素,因此元素2的run值为“无效”;元素3为非零元素8,前面距离最近非零元素为元素1,因此元素3的run值为1;元素4为零元素,因此元素4的run值为“无效”;元素5为非零元素-5,前面距离最近非零元素为元素3,因此元素5的run值为1;元素6、7、8为零元素,因此它们的run值为“无效”;由于元素5为本组的最后一个非零元素,后面有3个零元素,因此更新当前的lastrun为3;本次处理得到的run值(本实施例中用符号*表示“无效”)为(0,*,1,*,1,*,*,*)24)将本组8个残差元素的level值、map值和run值分别存入level_Seq[164]、map_Seq[164]和run_Seq[164]的第1至8个位置第二次从Seq[164]中提取的8个残差元素为(-4,2,0,0,1,0,0,0)其level值为(-4,2,0,0,1,0,0,0)
其map值为(1,1,0,0,1,0,0,0)由于此时上次的lastrun为3,因此其run值为(3,0,*,*,2,*,*,*)重新计算当前8个残差元素中最后一个非零元素后面的连续零元素个数lastrun,得到3;将算出的level值、map值和run值分别存入序列level_Seq[164]、map_Seq[164]和run_Seq[164]的第9至16个位置。
以次类推,经过8次上述步骤,所有残差元素的level值、map值和run值均已求出,并存入level_Seq[164]、map_Seq[164]和run_Seq[164],它们存储的数据分别为(10,0,8,0,-5,0,0,0,-4,2,0,0,1,0,0,0,0,-1,0,0,1,0,…,0)(1,0,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,1,0,…,0)(0,*,1,*,1,*,*,*, 3,0,*,*,2,*,*,*,*,4,*,*,2,*,…,*)至此,完成了本实施例对一个残差矩阵的扫描。用实际电路实现上述扫描方法,则扫描过程一共使用16个时钟周期。如果以增加硬件复杂度为代价增大Q的值,则可以进一步减少所用时钟周期数。与此对照,采用传统的扫描方式至少需要64个时钟周期完成扫描。
上述结果证明,本发明提出的视频编码中对残差矩阵的快速扫描方法可以极大的节省扫描过程所需要的时钟周期数。
本发明方法并不局限于上述的具体实施例,本领域的技术人员在本发明公开的技术方案内采取等同或相似的扫描方式,都应属于本发明的保护范围。
权利要求
1.一种视频编码中对残差矩阵的快速扫描方法,其特征在于,该方法包括将二维残差矩阵的元素按照预先设定的映射方式并行存入一个一维序列;从该一维序列中每次顺序提取多个残差元素,并行计算出该多个残差元素的level值、map值和run值,并分别存储。
2.如权利要求1所述的方法,其特征在于,具体包括以下步骤1)每次读取大小为N×M的待扫描残差矩阵中的P个元素,按照预先设定的扫描顺序以及残差矩阵的读取方式所共同决定的映射方式存入一个一维序列Seq[1N×M]中,直到所有残差元素将Seq[1N×M]填满为止,其中,P为同时读取的残差矩阵元素的个数,N为残差矩阵垂直方向元素的个数,M为残差矩阵水平方向元素的个数;2)每次从一维序列Seq[1N×M]中顺序提取Q个残差元素,同时计算这Q个残差元素各自的level值、map值和run值,并分别存储,直到处理完Seq[1N×M]中所有残差元素,其中,Q为同时提取的残差矩阵元素的个数;所述步骤2)中的处理具体包括以下步骤21)用每个残差元素的值作为该元素对应的level值;22)若该残差元素值为0,则对应的map值为第1个符号值,否则为第2个符号值;23)并行计算每个残差元素对应的run值;24)将得出的level值、map值和run值分别存储。
3.如权利要求2所述的方法,其特征在于,所述步骤23)中,利用上次处理得到的lastrun并行计算每个残差元素对应的run值,其中,lastrun为同时处理的Q个残差元素中最后出现的连续零元素个数,若最后一个残差元素为非零元素,则lastrun为0;该上次处理得到的lastrun为上一组Q个残差元素中最后出现的连续零元素个数,计算第一组Q个残差元素时lastrun取0;步骤23)的处理具体包括以下步骤231)若第1个残差元素为零,则其run值为“无效”,否则其run值为上次的lastrun;232)若第i个残差元素为零,i=2,3…,Q,则其run值为“无效”,否则若第i个残差元素前面有非零元素且与其距离最近的非零元素为第j个残差元素,j=1,2…,i-1,则其run值为i-j-1,否则其run值为i-1+lastrun;233)重新计算当前Q个残差元素中最后一个非零元素后面的连续零元素个数lastrun,如果Q个残差元素均为零元素,则当前的lastrun等于上次的lastrun与Q之和。
4.如权利要求1所述的方法,其特征在于,所述步骤中1)中,预先设定的扫描顺序包含但并不限于各种视频编码标准中采用的Zig-Zag扫描顺序,MPEG-2等标准中采用的Alternate-Horizontal、Alternate-Vertical扫描顺序;所述的残差矩阵的读取方式包括逐行读取、逐列读取以及逐象素读取方式。
5.如权利要求1所述的方法,其特征在于,所述步骤2)中,一次同时提取的数据个数Q满足N×M为Q的整倍数。
全文摘要
本发明涉及一种视频编码中对残差矩阵的快速扫描方法,属于信号处理中的视频编码领域。该方法包括将二维残差矩阵的元素按照预先设定的映射方式并行地存入一个一维序列;从该一维序列中逐次顺序提取多个残差元素,计算每个残差元素的level值、map值和run值,并分别存储。本发明在扫描残差矩阵的过程中,可并行高效读取残差矩阵元素,并行地完成数据的计算和信息的提取,快速得到所需的扫描结果,从而大大减少整个扫描过程的时间代价,提高编码器编码速度,有助于实现高分辨率下的实时编码。
文档编号H04N7/24GK101039430SQ20071009899
公开日2007年9月19日 申请日期2007年5月8日 优先权日2007年5月8日
发明者安达, 佟欣, 李宇, 何芸 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1