一种用于视频编码的整数离散余弦变换方法

文档序号:7953226阅读:132来源:国知局
专利名称:一种用于视频编码的整数离散余弦变换方法
技术领域
本发明涉及一种用于视频编码的整数离散余弦变换方法,属于视频传输技术领域。
背景技术
在已有技术中,名称为“Development of integer cosine transforms by theprinciple of dyadic symmetry”(Proc.Inst.Elect.Eng.,Part1,vol.136,Aug.1989,pp.276-282.)的论文公开了可以用于视频编码的用于视频编码的整数离散余弦变换方法,其原理是离散余弦变换的数学式为F=DXDT,其中D,X为N×N的矩阵,DT为D的转置,D称为该变换的变换核。对于整数离散余弦变换而言,D的元素全部为整数,D的大小和数值不唯一,比如应用在H.264视频编解码标准的基准档次当中的变换核为111121-1-21-1-111-22-1,]]>而在数字音视频编解码标准(以下简称AVS)当中的变换核为8888888810962-2-6-9-10104-4-10-10-44109-2-10-66102-98-8-888-8-886-1029-9-210-64-1010-4-410-1042-69-1010-96-2.]]>传统的快速实现上述整数离散余弦变换的方法,是采用一种流图形式的蝶形计算结构来计算1维的整数离散余弦变换(以下简称DCT),然后通过两个这样结构相同的处理单元(以下简称PU)的串连来实现整个二维整数DCT变换,称之为行列分解的方法,其流程框图如图1所示,用数学式描述为F=DXDT=D(DXT)T,一个PU所完成的计算就是DXT,也就是一维的整数DCT变换,那么整个变换可以通过两个PU串联连接来实现。因此整数离散余弦变换的核心计算就是PU,PU所完成的数学运算包括矩阵转置和矩阵相乘,对于第一个PU,可以通过将输入矩阵按照转置后的矩阵输入,而对于第二个PU,需要一个专门计算转置的运算单元。
上述传统的DCT算法中,以AVS所采用的变换核为例,基于蝶形结构的实现流图如图2所示
x0~x7为XT的一列数据,整个流图实现了X的一列数据与变换核相乘的结果X0~X7,,分别将XT的8列数据经过上面的流图计算,可以得到一个PU的计算结果DXT。这种结构利于用硬件实现,因为乘法操作转化为小整数的乘法,小整数的乘法可以用移位操作来实现。
已有传统蝶形结构的缺点是,由于整数变换核元素全部为整数,而标准的离散余弦变换核为正交矩阵,元素的绝对值全部小于1,因此与整数核相乘会有较大的数据增益,为了抵消这一增益需要额外的截断操作,由于数据采用二进制表示,截断操作具体指将数据二进制表示的地若干位直接舍弃,这样的操作等效为对数据进行2的某次幂的除法。截断操作带来的结果是数据二进制表示的低若干位被舍弃,如图1所示,每个PU后面都有一个右移的操作。第一个PU右移a比特,第二个PU右移b比特,以AVS所采用的变换核为例,a和b的数值满足a+b=9,因为该整数变换核和标准的浮点数变换核相比,增益为2的9次幂,这个数值因为不同的变换核而不同。由于右移操作导致计算结果的低若干位的数据被舍弃,因此PU当中凡是有关这些低位比特的计算都是冗余的,这些冗余的计算导致硬件资源的浪费,但是由于传统蝶形结构所固有的特性,这些冗余无法很好地单独抽取出来,对硬件资源的有效利用不利。

发明内容
本发明的目的是提出一种用于视频编码的整数离散余弦变换方法,针对已有技术的缺点,在PU的计算过程当中直接去除部分计算冗余,以便节约硬件资源。
本发明提出的用于视频编码的整数离散余弦变换方法,包括以下步骤(1)将整数离散余弦变换核中的每个元素进行等效拆分,得到N个矩阵,D0,D1,……DN-1,则原整数离散余弦变换核D的表达式D=(D0+D1+…+DM-1);(2)将上述N个矩阵分组相加得到M个子变换核H0,H1,HM-1,其中每个子变换核为一组N矩阵的和;(3)根据上述M个子变换核,计算M个子变换H0XT,H1XT,H2XT…HM-1XT,并按照下标由低到高的顺序对M个子变换结果进行合并,得到第一个处理单元的变换结果,即DXT=(H0XT+H1XT+…+HM-1XT)T,其中X为视频帧亮度块矩阵,XT是X的转置;(4)将上述第一个处理单元的变换结果DXT矩阵作为第二个处理单元的Y矩阵,重复步骤(1)~(3),得到DYT,则整数离散余弦变换系数为F=DXDT=(H0+H1+…HM-1)X(H0+H1+…+HM-1)T=(H0+H1+…+HM-1)(H0XT+H1XT+…+HM-1XT)T。
上述方法中,对整数离散余弦变换核中的每个元素进行等效拆分的方法包括以下步骤(1)按照变换核中整数元素的二进制表示,拆分为多个2的幂的和;(2)按照从低次幂到高次幂的顺序,将整数离散余弦变换核中各元素的i次幂的拆分项组合成矩阵Di,其中0≤i≤N-1。
上述方法中,对M个子变换进行合并的方法为
(1)对M个子变换中的每个子变换,分别提出2的j(0≤j≤N-1)次幂的公因子;(2)对H0XT和H1XT进行合并,设从H1XT中提出的公因子为2j1,若j1≤a,则只对矩阵元素二进制表示中高于j1位的部分合并,若j1>a,则只对矩阵元素二进制表示中高于a位的部分合并,合并的结果记为XTemp,其中a由待进行整数离散余弦变换核决定;(3)将上述合并结果XTemp与H2XT按上述步骤(2)的方法进行合并,合并的结果记为XTemp;(4)重复步骤(2)和(3),依次逐个合并所有子变换,完成M个子变换的合并。
本发明提出的用于视频编码的整数离散余弦变换方法,其特点和优点是,采用一种和传统快速算法完全不同的方法,从整数变换核入手,将元素为小整数的变换核拆分为若干个子变换核,由于各个子变换核能够提出一个2的幂的公因子,因此可以利用整数DCT变换的截断操作,减小PU当中的加法器的整体位宽,节省硬件资源。与传统的蝶形结构相比,本发明方法能够单独分离出整数离散余弦变换当中的一部分计算冗余,在截断操作进行之前去除掉这些计算冗余,从而降低了PU的加法器的整体位宽,节省了硬件资源,与已有的蝶形结构相比,本发明方法采用可编程门阵列(FPGA)或者可定制集成电路(ASIC)实现,硬件资源可以节省10%以上。


图1是已有的采用行列分解的结构实现整数DCT的流程框图。
图2是传统的实现AVS所采用的DCT的流图结构图。
图3是已有的实现转置运算所采用的寄存器堆结构框图。
图4是采用本发明方法实现DCT的部分流图结构图。
图5是图2所示的流图结构图中的一部分。
图6是用于实现本发明DCT的硬件结构图。
图7和图8是本发明方法与已有方法所采用的加法器资源的效果比较图。
具体实施例方式
本发明提出的用于视频编码的整数离散余弦变换方法,首先将整数离散余弦变换核中的每个元素进行等效拆分,得到N个矩阵,D0,D1,……DN-1,则原整数离散余弦变换核D的表达式D=(D0+D1+…+DM-1);将上述N个矩阵分组相加得到M个子变换核H0,H1,HM-1,其中每个子变换核为一组N矩阵的和;根据上述M个子变换核,计算M个子变换H0XT,H1XT,H2XT…HM-1XT,并按照下标由低到高的顺序对M个子变换结果进行合并,得到第一个处理单元的变换结果,即DXT=(H0XT+H1XT+…+HM-1XT)T,其中X为视频帧亮度块矩阵,XT是X的转置;将上述第一个处理单元的变换结果DXT矩阵作为第二个处理单元的Y矩阵,重复上述步骤,得到DYT,则整数离散余弦变换系数为F=DXDT=(H0+H1+…HM-1)X(H0+H1+…+HM-1)T=(H0+H1+…+HM-1)(H0XT+H1XT+…+HM-1XT)T。
上述方法中,对整数离散余弦变换核中的每个元素进行等效拆分的方法可以包括以下步骤(1)按照变换核中整数元素的二进制表示,拆分为多个2的幂的和;(2)按照从低次幂到高次幂的顺序,将整数离散余弦变换核中各元素的i次幂的拆分项组合成矩阵Di,其中0≤i≤N-1。
上述方法中,对M个子变换进行合并的方法可以为(1)对M个子变换中的每个子变换,分别提出2的j(0≤j≤N-1)次幂的公因子;(2)对H0XT和H1XT进行合并,设从H1XT中提出的公因子为2j1,若j1≤a,则只对矩阵元素二进制表示中高于j1位的部分合并,若j1>a,则只对矩阵元素二进制表示中高于a位的部分合并,合并的结果记为XTemp,其中a由待进行整数离散余弦变换核决定;(3)将上述合并结果XTemp与H2XT按上述步骤(2)的方法进行合并,合并的结果记为XTemp;(4)重复步骤(2)和(3),依次逐个合并所有子变换,完成M个子变换的合并。
本发明属于图像编码和图像处理领域,特别应用于整数离散余弦变换的快速实现。
本发明中DCT变换以8点一维DCT变换为基本单元,采用行列分解的结构实现二维DCT变换。行列分解的数学表示为F=DXDT=D(DXT)T,即以DXT为一个PU,一个PU完成的功能是,对将输入的矩阵转置,并左乘矩阵D,通过两个PU的串行即可通过一维DCT变换实现二维DCT变换,如图1所示。虽然两个PU的数学运算的内容相同,但是它们的转置操作有所不同,第一个PU的转置操作可以通过将输入按照转置后的矩阵输入,而第二个PU必须有专门的转置运算单元,本发明所采用的转置运算单元是通过已有技术中如图3所示的寄存器堆来实现的。
本发明所针对的是整数DCT变换,整数DCT变换的变换核是由整数构成,便于使用加法器和移位器来硬件实现。
对于任何一个整数变换核,特别是小整数变换核,本发明将其中的每个元素进行等效的拆分,拆分的方法是按照该整数元素的二进制表示,拆分为若干2的某次幂的加法和,比如元素6可以拆分为21+22。按照从低次幂到高次幂的顺序,将变换核的元素的i次幂的拆分项组合成矩阵Di,则Di仅含有21和0元素。按照上面的操作得到N个矩阵D0,D1,……DN-1,将这N个矩阵再次分组相加得到M个新的子变换核H0,H1,Hm-1,其中每个变换核的元素为组合成该组的矩阵的对应位置的元素的和。
得到的这M个子变换核H0,H1,HM-1,在本发明称为子变换核。则整个变换的结果为这M个子变换的结果之和,即F=DXDT=(H0+H1+…+HM-1)X(H0+H1+…+HM-1)T=(H0+H1+…+HM-1)(H0XT+H1XT+…+HM-1XT)T其中对于H0XT,H1XT…HM-1XT,本发明定义为子变换。
对于每个子变换可以提出一个2的j(0≤j≤N-1)次幂的公因子,提出这个公因子,可以降低变换核元素的绝对值大小,使得子变换核的元素都在一个小的范围内,这样可以大大简化子变换的计算,而且可以利用截断操作对加法器的输入位宽作一定程度的减小。减小输入位宽的方法如下描述假设截断操作为对结果二进制表示的最低a位进行截断。
采用行列分解的结构实现本发明所提出的整数DCT算法,在各个子变换的结果计算出来之后需要对结果进行合并,首先合并H0XT和H1XT,合并的结果再继续与H2XT合并,重复这个过程,直到全部的子变换被合并完毕。
由于H1XT可以提出公因子2j1,那么在对两个子变换结果的对应元素相加的时候,元素的二进制表示的低j1位的相加不会出现溢出,如果j1≤a,那么可以直接将H0XT的结果的低j1位舍弃不进行相加操作,如果j1>a,那么可以直接将H0XT的结果的低a位舍弃不进行相加,合并的结果记为XTemp。
如上描述对前两个子变换进行合并,合并的结果记为XTemp,。之后再将XTemp与子变换H2XT进行合并,子变换H2XT可以提出公因子2j2,按照和上面同样的过程,得到合并结果,仍然记为XTemp。
之后再将XTemp与剩余的子变换依次合并,直到全部的子变换被合并完毕得到最终的结果为H0XT+H1XT+…+HM-1XT,即DXT,记为Y矩阵。采用行列分解的结构进行正变换,那么需要将上面第一个PU的计算结果DXT作为Y矩阵再次输入到结构相同的第二个PU上,计算DYT,经过第二个PU的计算,才能完成一个完整的整数DCT变换。
图4所示,为本发明所提出的方法的流图描述的部分实现结构,图5所示为传统蝶形运算相同部分的实现形式,将两者作比较可以看出,本发明所提出的算法数据流动的方向上位宽的增加比传统蝶形算法要小。图4和图5仅给出了一部分变换系数的流图形式作为比较,是因为本发明所提出的算法和传统蝶形算法结构上有较大差异,不便于用流图的形式描述,否则会比较杂乱,不利于说明算法的差异。
以下介绍本发明方法的一个实施例以AVS视频编码标准所采用的整数变换核为例来说明本发明所提出的基于变换核位平面分解的快速整数DCT实现算法。
8.888888810962-2-6-9-10104-4-10-10-44109-2-10-66102-98-8-888-8-886-1029-9-210-64-1010-4-410-1042-69-1010-96-2]]>该整数变换核的元素全部为绝对值小于16的整数,二进制表示的第4位以上全部为零,因此可以将该变换核拆分为四个矩阵(其中元素6和-6较为特殊,它们各自可以有两种不同的拆分方法6=4+2=8-2,-6=-4-2=-8+2,经过实践的比较发现6=8-2,-6=-8+2这种拆分形式较为有利)
00000000010000-10000000001000000-1000000000001-10000000000000100-100,0000000020-22-220-20-2-22-222000000000-2-2200-222-2-2200-2220-22002-20220-220-2-2]]>0000000000400-40004-400-440000-44000000000004000000-4400-4-40040-40-00040,8888888888800-8-8-8800-8-800880-8-8880-88-8-888-8-8-88-808-808-80-88008-800-88-88-880]]>其中,上面两个矩阵可以合并为H0=0000000021-22-22-1-2200-2-20021-2-22-222-100000000-2-221-1-2220-22002-20221-22-1-2-2,]]>下两个矩阵可以合并为H1=8888888888800-8-8-884-4-8-8-44880-8-8880-88-8-888-8-888-808-808-84-88-4-48-840-88-88-880]]>这样一个PU被分解为DXT=H0XT+H1XT,其中H1亦可以写作
H1=4×2222222222200-2-2-221-1-2-2-11220-2-2220-22-2-222-2-222-202-202-21-22-1-12-210-22-22-220,]]>这样一个PU的两个子变换核就仅含-2,-1,1,2四个整数,由于系数之间的相近,运算的重复性就会加大,加法器的复用度可以充分地利用。
根据整数DCT变换核的左右对称性,可以将两个子变换H0XT和H1XT的变换核简化为H0=000021-22200-21-2-220000-2-2210-220221-2,H1=4×2222222021-1-220-2-22-2-222-2021-22-10-22-2]]>那么两个子变换的偶数行输入相同,奇数行输入相同,因此两个子变换的偶数行之间和奇数行之间也可以实现加法器复用,以H0XT和H1XT的奇数行为例,H0XT可以分解为奇数行变换H0eXpT和偶数行变换H0oXmT,其中H0eXpT的变换核对应着H0的奇数行元素,H0oXmT的变换核对应着H0的偶数行元素,两个变换的结果对应为H0XT的奇数行结果和偶数行结果,对于H1XT也有同样的结论。如上面的描述,H0eXpT和H1eXpT由于输入相同,因此可以加法器复用。
H0e=0000200-200000-220,H1e=4×222221-1-22-2-221-22-1,XpT=Xi0+Xi7Xi1+Xi6Xi2+Xi5Xi3+Xi4,]]>观察H0e和H1e可以发现,这两个变换核的计算冗余度很大,可以先计算XpT
±XpT[3]和XpT[1]±XpT[2],通过这四个计算结果的组合加减就可以得到H0eXpT和H1eXpT计算结果。
同样对于H0o=21-221-2-22-2-221221-2,H1o=4×222020-2-22-2020-22-2=8×111010-1-11-1010-11-1,]]>XmT=Xi0-Xi7Xi1-Xi6Xi2-Xi5Xi3-Xi4,]]>同样可以利用这两个变换核的计算冗余度来压缩加法器的使用数量,而且由于H1e可以提出公因子4,H1o可以提出公因子8,这对于利用视频编码当中的截断处理来减少加法器输入位宽非常有用,因为在视频编码的DCT变换,如果是基于行列分解,第一个PU之后,会对变换结果的最低3bit进行截断,而由于H1e可以提出公因子4,H1o可以提出公因子8,因此在进行子变换计算结果合并的时候,可以把3bit截断一起考虑,H0eXpT+H1eXpT的低2位加法不会出现溢出,因此可以直接忽略这两位,减小加法器的输入位宽,H0oXmT+H1oXmT的低3位加法不会出现溢出,因此可以直接忽略这三位,减小加法器的输入位宽。另外注意到H0e的第一行和第三行元素全部为零,因此在子变换合并的时候对于这两行的合并,不需要额外的加法器。
经过上面描述的两个PU的串联,可以完成本发明的方法,实现快速无损的整数DCT变换。
采用本发明中提到的基于变换核位平面分解的算法,来实现符合AVS标准的整数DCT变换,可以统计得到本发明所提出的算法消耗的主要硬件资源

以及传统的蝶形运算所消耗的主要硬件资源


以下通过图7和图8说明本发明方法与已有技术相比,所具有的优点和效果图7是蝶形算法,图8是本发明的方法,横轴代表加法器的输入位宽,纵轴代表使用到的数目,符合AVS标准的整数DCT变换的第一个PU有3比特的截断,而对于第二个PU有7比特的截断。可以比较看出,两种算法所采用的加法器的数目是相同的(38个),但是基于位平面分解的算法所采用的加法器集中在8,9,10,11输入,而蝶形运算从8到15不等,从而基于位平面分解的算法输入位宽整体偏低,因此如果DCT模块采用FPGA或者ASIC实现时,基于位平面分解的算法会更加节省资源。采用FPGA实现,以Xilinx VirtexIV为例,基于位平面分解的算法会节省10%以上的资源。
对于不同的整数变换核,都可以采用位平面分解的算法,但是对于不同的整数变换核,分解得到的位平面矩阵和具有最大加法器复用度的位平面分组可能会不同,但都是尽量提取大系数,降低子变换核的元素的范围,利用截断减小加法器位宽,以及调整位平面系数,使加法器的复用度尽量大,从这两个方面着手来减小对资源的开销。
权利要求
1.一种用于视频编码的整数离散余弦变换方法,其特征在于该方法包括以下步骤(1)将整数离散余弦变换核中的每个元素进行等效拆分,得到N个矩阵,D0,D1,……DN+1,则原整数离散余弦变换核D的表达式D=(D0+D1+…+DM-1);(2)将上述N个矩阵分组相加得到M个子变换核H0,H1,HM-1,其中每个子变换核为一组N矩阵的和;(3)根据上述M个子变换核,计算M个子变换H0XT,H1XT,H2XT…HM-1XT,并按照下标由低到高的顺序对M个子变换结果进行合并,得到第一个处理单元的变换结果,即DXT=(H0XT+H1XT+…+HM-1XT)T,其中X为视频帧亮度块矩阵,XT是X的转置;(4)将上述第一个处理单元的变换结果DXT矩阵作为第二个处理单元的Y矩阵,重复步骤(1)~(3),得到DYT,则整数离散余弦变换系数为F=DXDT=(H0+H1+…HM-1)X(H0+H1+…+HM-1)T=(H0+H1+…+HM-1)(H0XT+H1XT+…+HM-1XT)T。
2.如权利要求1所述的方法,其特征在于其中所述的对整数离散余弦变换核中的每个元素进行等效拆分的方法包括以下步骤(1)按照变换核中整数元素的二进制表示,拆分为多个2的幂的和;(2)按照从低次幂到高次幂的顺序,将整数离散余弦变换核中各元素的i次幂的拆分项组合成矩阵Di,其中0≤i≤N-1。
3.如权利要求1所述的方法,其特征在于其中所述的对M个子变换进行合并的方法为(1)对M个子变换中的每个子变换,分别提出2的j(0≤j≤N-1)次幂的公因子;(2)对H0XT和H1XT进行合并,设从H1XT中提出的公因子为2j1,若j1≤a,则只对矩阵元素二进制表示中高于j1位的部分合并,若j1>a,则只对矩阵元素二进制表示中高于a位的部分合并,合并的结果记为XTemp,其中a由待进行整数离散余弦变换核决定;(3)将上述合并结果XTemp与H2XT按上述步骤(2)的方法进行合并,合并的结果记为XTemp;(4)重复步骤(2)和(3),依次逐个合并所有子变换,完成M个子变换的合并。
全文摘要
本发明提出的用于视频编码的整数离散余弦变换方法,属于视频传输技术领域。该方法首先将整数离散余弦变换核中的每个元素进行等效拆分,得到N个矩阵,将N个矩阵分组相加得到M个子变换核,根据M个子变换核,计算M个子变换,并按照下标由低到高的顺序对M个子变换结果进行合并,将第一个处理单元的变换结果DX
文档编号H04N7/26GK1874510SQ20061001216
公开日2006年12月6日 申请日期2006年6月9日 优先权日2006年6月9日
发明者赵欣, 王宇, 李凤亭 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1