图像、视频信号的编码/解码方法

文档序号:7612640阅读:154来源:国知局
专利名称:图像、视频信号的编码/解码方法
技术领域
本发明属于图像和视频信号的编码和解码,特别涉及到一种用于图像和视频变换编码的4×4整数变换和相应的变换和量化方法。
背景技术
随着数字技术的发展,数字影视成为大众娱乐生活的重要内容。数字影视以数字信号形式,或者说以bit的形式在各种介质上存储和传输。人们希望在容量有限的存储器内存放更多的电影数量,或者希望在网络点播中看到更流畅的电影作品。然而存储器的容量或者网络能提供的带宽总是不能满足人们不断增长的需要,这就推动了视频压缩编码技术的发展。
对于CIF格式的视频流,它的画面大小是352×288个象素,每个象素点用8个bit来表示,一幅黑白的画面需要352×288×8=811,008bit,彩色画面则需要1,216,512bit。为了欣赏到连续的画面,根据人类的视觉特性,每秒差不多要播放25个这样的画面(或者叫帧)。一部60分钟长的电影需要的存储量为1,216,512×25×60×60=109,486,080,000bit,约为13,685,760,000个字节,即13个G的存储空间。市场上目前流行的硬盘一般为150个G,一个硬盘里面只能放10部电影,这远远不能满足实际的需要。实际上,通过视频压缩手段能做到150G的硬盘至少存放100部高质量的电影。
通常把视频压缩编码简称为视频编码,它是图象编码的一种形式,图象是静止的视频,而视频又是活动的图象。如图a所示,一个编码的流程分成三个部分,即变换、量化和熵编码。变换通常采用正交变换,具体形式有离散余弦变换、小波变换、哈达码变换以及Walsh变换等,其中余弦变换是比较常用的变换工具,很多关于图象和视频编码的国际标准中都采用了离散余弦变换(Discrete cosine transform,简称DCT)。通过变换,信号中一些人眼睛不敏感的信号暴露出来,通过量化把这些人眼睛不敏感的信号去掉,从而达到压缩的效果,然后通过熵编码,做进一步的压缩。
对于视频,由于它是运动的静态图象,连续的帧在时间上具有一定的连贯性,所以通过一种如图b所示的运动预测手段,利用这种连贯性,以取得更好的编码效果。对于图象而言,变换是对原始的图象(即Intra帧,简称I帧)进行,而对于视频编码,变换则是对运动预测后得到的残差(即Prediction帧,简称P帧)进行,我们也可以把这些残差看成是静态的图象。
运动预测越准确,运动误差越小,越有利于提高变换和量化的效率,以降低编码需要的信息;但是,运动预测越准确,用来表达运动幅度的信息也随之增加。即提高运动预测准确度和和提高量化效率之间存在矛盾,这就需要采用率失真手段来调和它们之间的矛盾。运动预测误差用SAD表示,R表示运动幅度的信息,它们之间有如下关系J=SAD+λR(1)(1)式中的J,不是把SAD当作运动预测准确与否的准则,而是把SAD和R综合起来考虑,这就是率失真运动预测。其中,λ和量化密切相关,它的值受量化程度(即量化参数)的约束。设量化参数为Q,λ和Q的关系如下λ=78Q2---(2)]]>运动预测和量化会破坏原始信号的连续性,由此会产生块效应,就是在解码时画面上有很多块状的分割线,这对人的视觉感受带来负面影响,需要采用环路滤波器(Loop Filter)来消除这种影响。
DCT变换的工具是一个8×8或者4×4的矩阵,在变换之前,它把图象分成很多小块,小块的尺寸根据变换工具尺寸而变化,比如采用4×4的矩阵为变换工具,需要把图象分成很多4×4的小块。对于CIF格式的画面,一共有88×72个小块,对于标准清晰或者高清晰电视标准,小块的数量会更多。
为了方便说明,假设图象的大小只有一个4×4的块,即一共16个点,其中每个象素点都有一定的灰度值。对图象而言,灰度值为0~255之间的整数。假设一幅4×4的图象,它的灰度值如下1281658182345214200168486424362204---(3)]]>下面对这个4×4的图象做变换,变换矩阵选择T=12111111-1-11-1-111-11-1---(4)]]>一般希望它是正交矩阵,即变换矩阵和它的逆矩阵的乘积TT-1=I,I为单位矩阵I=1000010000100001---(5)]]>可以验证,(4)式中的T满足正交矩阵的条件。下面采用(4)式中的正交矩阵对(3)式中的图象灰度值做变换,有
12111111-1-11-1-111-11-11281658182345214200168486424362204=12370243318290-78-165-218154-66-139132-266286125-212-146---(6)]]>希望这个过程是可逆的,可以验证12111111-1-11-1-111-11-112370243318290-78-165-218154-66-139132-266286125-212-146=1281658182345214200168486424362204---(7)]]>即这个变换的过程是可逆的,把(6)叫做变换,(7)叫做反变换。它们分别相当于图a中的DCT和反DCT。通过变换的过程,可以把人眼睛感知不敏感的信号分量挑出来,如(6)式中等号右边的-78、-66,把这些分量通过量化操作,就能减除这部分人眼不敏感的信号,从而达到压缩编码的目的。
对于8×8输入矩阵X,2维8×8离散余弦(DCT)可以表示为Y=HXHT(8)其中变换矩阵(k,n)=ck2cos[(n+12)kπ8],]]>k,n为取值0到7范围类的整数,c0=1/2,]]>当k>0时ck=1,H是正交阵,其逆矩阵等于其转置,即H-1=HT。反变换后X′=HTYH=HTHXHTH=X,因为变换矩阵的元素是无理数,如果正变换和反变换在具有不同浮点计算精度的机器上进行计算,X′不可能精确的等于X,从而导致解码图象质量的下降。
采用正交整数变换对输入数据进行变换是解决数据不能完全重构的一个办法。该正交阵数变换矩阵应该尽可能接近离散余弦变换,以获得更好的压缩性能。在H.264视频压缩标准中,运动补偿的最小块为4×4,同时小尺寸的块相对于大尺寸的块来说其振铃噪声较小,因此H.264视频压缩标准采用了4×4变换。
对于4×4输入矩阵X,二维4×4 DCT正变换可以表示为Y=AXAT=aaaabc-c-ba-a-aac-bb-cXabacac-a-ba-c-aba-ba-c---(9)]]>式中Y为输出矩阵,a=12,b=12π8,c=12cos3π8,]]>上式又可写成Y=(CXCT)⊗E=]]>(1111d1-1-d1-1-111-dd-1X1d1111-1-d1-1-1d1-d1-1)⊗a2aca2acacc2acc2a2aca2acacc2acc2---(10)]]>这里_表示矩阵对应元素相乘,d=b/c。矩阵C为正交阵,其不同行或不同列的内积和为0,但相同行或列的内积和不为零,因此需要用矩阵E对变换后的系数进行修正。二维4×4 DCT变换中d=1/(2-1)=2.4142...,]]>d为无理数,这个d的取值是最优的,但是计算复杂度比较高。可以选取相应的d值,其值应该尽可能接近DCT变换,同时对于核变换的行或列放大一定倍数而能够进行整数运算。在H.264视频压缩标准中取d=2,H.264采用的正变换和逆变换分别如下
Y=(CfXCfT)⊗Ef=]]>(111121-1-21-1-111-22-1X121111-1-21-1-121-21-1)⊗a2ab2a2ab2ab2b24ab2b24a2ab2a2ab2ab2b24ab2b24---(11)]]>X=Ci(Y⊗Ei)CiT=]]>11112112-1-11-12-111-11-12(Y⊗a2aba2ababb2abb2a2aba2ababb2abb2)1111112-12-11-1-1112-11-12---(12)]]>传统的视频编码标准如ITU(国际电信联合会)制定的H.261,H.263,H.264标准以及ISO的MPEG组织制定的MEPG-1,MPEG-2,MPEG-4等都是基于混合编码(Hybrid Coding)框架之上的。所谓混合编码就是运动预测和DCT变换的混合,所以说混合编码框架是综合考虑预测,变换以及熵编码的方法的编码框架。它通过帧内预测消除空间域的相关性,帧间预测消除时间域的相关性,并对预测残差进行变换进一步去除空间域的冗余度,然后在变换域中对变换系数进行量化;最后进行熵编码,即Huffman编码或者算术编码等,以消除统计相关性。传统的图像编码标准,如JPEG(联合图象专家组)标准,与视频编码标准有着相近之处,对原始图像数据或图像内预测得到的残差块进行二维变换;然后在变换域中对变换系数进行量化;最后进行熵编码。由于视频数据和图像数据在空间域上较强的相关性,二维变换是提高编码增益的关键因素,因此二维变换是视频编码和图像编码的很重要的部分。
对于不同的输入信号,离散余弦变换(DCT)其去相关性和能量聚集性最接近统计最优的K-L变换,而且有相应的快速算法便于实现,因此在图像和视频压缩标准中获得了广范的采用。
在H.264视频编码标准中,帧间编码中使用树结构的运动补偿块技术,其最小的块为4×4,最大块为16×16,而帧内编码则采用4×4和16×16的两种块模式,因此采用4×4的块变换,这些都和采用8×8像素块变换的MPEG(运动图象专家组)和JPEG标准不同。采用更小的块作运动估计和帧内预测,就能获得更小的预测残差,因此有利于块变换对预测残差进行变换。量化器对变换系数进行量化后把量化系数送至解码端,经过去量化操作,反变换对反量化系数进行变换以重构预测残差。
然而,变换的工具有很多种,不同变换工具挑选人眼睛不敏感信号的能力不同。越是能够把这些信号挑出来的变换工具,就越能提高编码的效率。变换工具的好坏,直接影响到编码效率的高低。本发明正是围绕着构造满足上述目的变换矩阵展开。

发明内容
本发明提供一种图像、视频信号的编码/解码方法,目的在于提高编码质量的同时降低编码的计算量。该变换能够降低在编码器和解码器中的解码数据的精度问题,简化编码器和解码器对视频和图像计算的复杂性,同时保证图像和视频压缩的质量不降低和其他资源受到的影响可以忽略。
本发明的一种图像、视频信号的编码方法,对输入图像、视频信号顺序进行离散余弦正变换步骤、量化步骤和熵编码步骤;其特征在于对于4×4输入矩阵X,(1)所述离散余弦正变换步骤中,适合32位计算的表示为
Y=(CfXCfT)⊗Ef=]]>(111151-1-51-1-111-55-1X151111-1-51-1-151-51-1)⊗a2ac/2a2ac/2ac/2c2/4ac/2c2/4a2ac/2a2ac/2ac/2c2/4ac/2c2/4;]]>适合16位计算的表示为Y=(CfXCfT)⊗Ef=]]>(111151-1-51-1-111-55-1X15/21111-1-5/21-1-15/21-5/21-1)⊗a2ac/2a2ac/2acc2/2acc2/2a2ac/2a2ac/2acc2/2acc2/2.]]>其中,Y为输出矩阵,a=12,b=52229,c=229;]]>(2)所述量化步骤中,适合32位计算操作的表示为Y/Qstep=(CfXCfT)⊗Ef/Qstep=]]>(111151-1-51-1-111-55-1X151111-1-51-1-151-51-1)⊗1/41/2321/41/2321/2321/581/2321/581/41/2321/41/2321/2321/581/2321/58/Qstep]]>(CfXCfT)⊗Mf/(2qbits)=YQ]]>其中Mf=EfQStep2qbits]]>qbits=15+floor(Q/5),floor表示向负无穷方向取整,Q为量化参数,QStep为量化步长;取不同的Q时,Mf的取值如下
Mf(Q=5i,i=0,1,2...)=1310734421310734423442904344290413107344213107344234429043442904]]>Mf(Q=5i+1,i=0,1,2...)=1191631291191631293129822312982211916312911916312931298223129822]]>Mf(Q=5i+2,i=0,1,2...)=1008226531008226532653695265369510082265310082265326536952653695]]>Mf(Q=5i+3,i=0,1,2...)=936224599362245924596462459646936224599362245924596462459646]]>Mf(Q=5i+4,i=0,1,2...)=819221518192215121515652151565819221518192215121515652151565;]]>适合16位计算操作的表示为Y/Qstep=(CfXCfT)⊗Ef/Qstep=]]>(111151-1-51-1-111-55-1X15/21111-1-5/21-1-15/21-5/21-1)⊗1/41/581/41/581/2321/291/2321/291/41/581/41/581/2321/291/2321/29/Qstep]]>(CfXCfT)⊗Mf/(2qbits)=YQ]]>其中
Mf=EfQStep2qbits]]>qbits=15+floor(Q/5),floor表示向负无穷方向取整,Q为量化参数,Qstep为量化步长;取不同的Q时,Mf的取值如下Mf(Q=5i,i=0,1,2...)=13107688413107688468841808688418081310768841310768846884180868841808]]>Mf(Q=5i+1,i=0,1,2...)=11916628511916628562851644628516441191662851191662856285164462851644]]>Mf(Q=5i+2,i=0,1,2...)=10082530610082530653061390530613901008253061008253065306139053061390]]>Mf(Q=5i+3,i=0,1,2...)=9362491893624918491812924918129293624918936249184918129249181292]]>Mf(Q=5i+4,i=0,1,2...)=8192430281924302430211304302113081924302819243024302113043021130.]]>所述图像、视频信号的编码方法,其进一步特征在于,(1)适合32位的离散余弦正变换行变换计算公式为M0=x0+x3;M3=x0-x3;M1=x1+x2;M2=x1-x2;
Yh0=M0+M1;Yh2=M0-M1;Yh1=M2<<1+(M3<<2+M3);Yh3=M3<<1-(M2<<2+M2);把行变换的输出Yh0、Yh1、Yh2、Yh3看成x0、x1、x2、x3,相应的32位列变换为M0=x0+x3;M3=x0-x3;M1=x1+x2;M2=x1-x2;Yv0=M0+M1;Yv2=M0-M1;Yv1=M2<<1+(M3<<2+M3);Yv3=M3<<1-(M2<<2+M2);(2)适合16位的离散余弦正变换行变换计算公式为M0=x0+x3;M3=x0-x3;M1=x1+x2;M2=x1-x2;Yh0=M0+M1;Yh2=M0-M1;Yh1=M2<<1+(M3<<2+M3);Yh3=M3<<1-(M2<<2+M2);把行变换的输出Yh0、Yh1、Yh2、Yh3看成x0、x1、x2、x3,相应的16位列变换为M0=x0+x3;
M3=x0-x3;M1=x1+x2;M2=x1-x2;Yv0=M0+M1;Yv2=M0-M1;Yv1=M2+(M3<<2+M3)>>1;Yv3=M3-(M2<<2+M2)>>1;其中M0、M1、M2、M3为中间结果,[Yv0、Yv1、Yv2、Yv3]表示列变换后的输出结果。
相对上述图像、视频信号编码方法的解码方法,对于经过压缩的编码顺序进行熵解码步骤、去量化步骤和离散余弦逆变换步骤;其特征在于对于4×4输入矩阵YQ,去量化和逆变换的方程式为X=Ci(YantiQ⊗Ei)CiT=]]>1521111-1-521-1-1521-521-1(YantiQ⊗a2aca2acacc2acc2a2aca2acacc2acc2)1111521-1-521-1-111-5252-1]]>其中修正矩阵Ei的值1/41/581/41/581/582/291/582/291/41/581/41/581/582/291/582/29;]]>YantiQ=YQQstep;Qstep为量化步长。
所述图像、视频信号编码方法的解码方法,其进一步特征在于所述逆变换的方程中YantiQ⊗Ei=YQ⊗1/41/581/41/581/582/291/582/291/41/581/41/581/582/291/582/29QStep]]>为了防止后续除法操作中造成精度误差,对上式两边一起放大128倍128×YantiQ⊗Ei=128×YQ⊗1/41/581/41/581/582/291/582/291/41/581/41/581/582/291/582/29QStep=W]]>即W=YQ_Vf2floor(Q/5)=YQ_Vf2anti_qbits;其中Vf=128×EiQStep/2anti_qbits。
其中,anti_qbits=floor(Q/5),floor表示向负无穷方向取整,取不同的Q时,Vf的取值如下Vf(Q=5i,i=0,1,2...)=2010201010510520102010105105]]>
Vf(Q=5i+1,i=0,1,2...)=2212221212612622122212126126]]>Vf(Q=5i+2,i=0,1,2...)=2614261414714726142614147147]]>Vf(Q=5i+3,i=0,1,2...)=2815281515815828152815158158]]>Vf(Q=5i+4,i=0,1,2...)=3216321616916932163216169169.]]>所述图像、视频信号编码方法的解码方法,其更进一步特征在于所述离散余弦逆变换方程中,32位和16位的行离散余弦逆变换用下列算式计算M0=W0+W2;M1=W0-W2;M2=W1-(W3<<2+W3)>>1;M3=(W1<<2+W1)>>1+W3;X0=M0+M3;X3=M0-M3;X1=M1+M2;X2=M1-M2;把行变换的输出X0、X1、X2、X3看成W0、W1、W2、W3,32位和16位的列离散余弦逆变换用下列算式计算
M0=W0+W2;M1=W0-W2;M2=W1-(W3<<2+W3)>>1;M3=(W1<<2+W1)>>1+W3;X0=M0+M3;X3=M0-M3;X1=M1+M2;X2=M1-M2;其中M0、M1、M2、M3为中间结果,X0、X1、X2、X3为相应输出元素,一次完整的逆变换完成以后,所有的输出都除以128。
图像和视频的编码和解码需要大量的计算。编码和解码的计算复杂度是不对称的。即编码器的计算复杂度大大超过了解码的计算复杂度。解码器通常是在用户终端设备中提供,如DVD播放机、电视机机顶盒、个人数字处理(PDA)和更先进的移动式电话。考虑到这些终端设备的成本或低功耗的需要,保持解码的简单性是很必要的,但任何简化解码的方法都应该不会对图像和视频的压缩的质量和解码器需要的其他资源起到不利的影响。因此我们尽可能地采用整数DCT变换,以节省编码的运算量。
本发明主要是在图像或视频编码端,将图像数据或视频数据进行4×4 DCT变换处理,而且所有操作是整数运算,非常适合于硬件的实现;然后对这些数据进行修正和量化操作;在图像或视频解码端,对量化系数进行反量化操作得到,对反量化系数进行修正后,再做4×4整数反DCT变换进行处理,恢复得到接近原始的图像数据或视频数据。目的是为了和现有的DCT变换矩阵相比,能更有效地消除象素之间的相关性(即使人眼不敏感的信号和敏感的信号分离开来,分别加以处理),提高量化的效率,有利于对图像数据或视频数据的压缩,提高视频的存储和传输效率。
本发明提供一种对离散余弦(DCT)采用整数近似而得到的正交块变换和相应的反变换,以及可显著减少编码器和解码器计算复杂度的量化和快速算法。在实际执行时,在编码器和解码器,每个系数的变换操作次数为16位运算的5次加法和2次移位操作(而H.264标准中的变换为16位运算的4次加法和1次移位操作)。因为本发明正交变换不同行的放大系数不同,因此需要对变换后的系数进行修正。修正系数其具体值取决于在修正矩阵中的位置。这样,我们就能正确的变换输入信息(如预测残差)。同时,我们把修正过程集成到量化和反量化过程中。这样,正变换和反变换都避免了硬件中很难实现的乘法操作。本发明在压缩性能上的提高足以弥补轻微复杂度的提高,因为变换的计算复杂度加法和移位操作非常简单。
本发明的核心所采用的4×4变换矩阵系数取值简单,利于硬件实现。同时本发明的方法具有一定的可扩展性,可以与众多的信号处理方法相结合,并可以实现不同应用范围的信号处理。


图a编码流程的简单框图;图b视频编码的详细流程;图1表示本发明编码解码方法的方框图;图2表示本发明实现正变换矩阵的碟形结构;图3表示本发明实现逆变换矩阵的碟形结构。
具体实施例方式
以下对本发明进一步详细说明。
1.本发明提出并采用的DCT变换矩阵在本发明中d取5/2,相对于H.264中d=2更接近于最优的d=1/(2-1)=2.4142...,]]>因此有更好的压缩性能。此时,a=12,b=52229,c=229,]]>得到本发明变换矩阵的正变换为Y=(CfXCfT)⊗Ef=]]>(11115/21-1-5/21-1-111-5/25/2-1X15/21111-1-5/21-1-15/21-5/21-1)⊗a2aca2acacc2acc2a2aca2acacc2acc2---(13)]]>Ef叫做修正矩阵,它的作用是把一部分变换的操作和全部的量化操作作为一个整体来操作,从而降低变换的计算量。原理如下不同的压缩程度,产生不同视觉质量的视频流,而不同的压缩程度由量化步长QStep决定。对于每一个变换后的值Y,都要除以QStep。但是我们可以采用更简单的方法,就是,可以把修正矩阵变成Ef=Ef/QStep,从而节约了量化的操作。
对于32位的硬件计算,对(13)式中矩阵Cf的第2行和第4行,矩阵CfT的第2列和第4列分别乘2,我们得到以下整数变换矩阵111152-2-51-1-112-55-2---(14)]]>这样,适合32位计算的完整变换(包含行变换和列变换)则可以表示为
Y=(CfXCfT)⊗Ef=]]>(111151-1-51-1-111-55-1X151111-1-51-1-151-51-1)⊗a2ac/2a2ac/2ac/2c2/4ac/2c2/4a2ac/2a2ac/2ac/2c2/4ac/2c2/4---(15)]]>对于16位的硬件计算,对对(13)式中矩阵CfT的第2行和第4行不变,矩阵Cf的第2列和第4列分别乘2,CfT变为以下整数变换矩阵111152-2-51-1-112-55-2---(16)]]>这样,适合16位计算的完整变换(包含行变换和列变换)则可以表示为Y=(CfXCfT)⊗Ef=]]>(111151-1-51-1-111-55-1X15/21111-1-5/21-1-15/21-5/21-1)⊗a2ac/2a2ac/2acc2/2acc2/2a2ac/2a2ac/2acc2/2acc2/2---(17)]]>2.本发明提出的正变换方法在本发明中,适合于32位的行变换和列变换分别通过下列公式进行计算
Xh0=x0+x1+x2+x3Xv0=x0+x1+x2+x3Xh1=5x0+2x1-2x2-5x3Xv1=5x0+2x1-2x2-5x3Xh2=x0-x1-x2+x3; Xv2=x0-x1-x2+x3 (18)Xh3=2x0-5x1+5x2-2x3Xv3=2x0-5x1+5x2-2x3当需要16位运算时,行变换和列变换分别通过下列公式进行计算Xh0=x0+x1+x2+x3Xv0=x0+x1+x2+x3Xh1=5x0+2x1-2x2-5x3Xv1=5/2×x0+x1-x2-5/2×x3Xh2=x0-x1-x2+x3; Xv2=x0-x1-x2+x3 (19)Xh3=2x0-5x1+5x2-2x3Xv3=x0-5/2×x1+5/2×x2-x3在(18)和(19)式中,[Xh0,Xh1,Xh2,Xh3]表示行变换的输出,[Xv0,Xv1,Xv2,Xv3]表示列变换的输出。对于乘2和除2可以用左移和右移来代替操作以提高操作速度。对于乘5或者5/2,我们也可以用加法和移位运算来代替5×X=4×X+X=(X<<2)+X5/2×X=2×X+(X>>1)=(X<<1)+(X>>1)因此,本发明的正变换的运算无需乘法运算。适合32位的行变换计算公式可以简化为M0=x0+x3;M3=x0-x3;M1=x1+x2;M2=x1-x2;Yh0=M0+M1;Yh2=M0-M1;Yh1=M2<<1+(M3<<2+M3);Yh3=M3<<1-(M2<<2+M2);可以把行变换的输出Yh0、Yh1、Yh2、Yh3看成x0、x1、x2、x3,那么相应的32位列变换为
M0=x0+x3;M3=x0-x3;M1=x1+x2;M2=x1-x2;Yv0=M0+M1;Yv2=M0-M1;Yv1=M2<<1+(M3<<2+M3);Yv3=M3<<1-(M2<<2+M2);适合16位的行变换计算公式可以简化为M0=x0+x3;M3=x0-x3;M1=x1+x2;M2=x1-x2;Yh0=M0+M1;Yh2=M0-M1;Yh1=M2<<1+(M3<<2+M3);Yh3=M3<<1-(M2<<2+M2);可以把行变换的输出Yh0、Yh1、Yh2、Yh3看成x0、x1、X2、x3,那么相应的16位列变换为M0=x0+x3;M3=x0-x3;M1=x1+x2;M2=x1-x2;Yv0=M0+M1;Yv2=M0-M1;Yv1=M2+(M3<<2+M3)>>1;
Yv3=M3-(M2<<2+M2)>>1;其中M0、M1、M2、M3为中间结果。[Yv0、Yv1、Yv2、Yv3]表示列变换后的输出结果。
通过图2所示的碟形算法(线上数字,如5,5/2表示乘法因子),本发明对于每个给定的输入数据需要5次加法和2次移位操作,而H.264中变换只需4次加法和1次移位。但是变换在编码和解码中所占的计算比列非常小,并且本发明的变换矩阵因更接近DCT变换,因此带来的压缩性能的提高足以弥补计算复杂度些许的提高。
一旦得到变换后的系数,就可以对变换系数进行量化操作,前面已经提到因为不同行的范数不同而对变换后的系数进行修正的过程也可集成到量化的过程中。这由图1中的量化过程110表示。经量化过程后,量化值输入到熵编码器112,进一步降低数据的冗余度,从而减少编码所需的信息量。因为本发明基本与熵编码器无关,因此在这里不再详述。
熵编码的输出结果或者存储,或者通过传输信道114传送到解码端。当进行解码操作时,熵编码器112的结果作为熵解码器116的输入,因为熵解码器是已知的,因此可以正确解码输入数据。熵解码器解码所得数据其实就是量化值(考虑无损传输)。熵解码器116的输出结果作为去量化器118的输入,每个量化值通过去量化器118处理得到重构变换系数。通过将它们输入到逆变换的行变换122和列变换124,从而得到逆变换系数。
3.本发明提出的量化方法3.132位的量化方法对于9比特的预测误差数据做变换,变换矩阵每一行绝对值之和的最大值为14,因此对于变换后的矩阵元素需要9+log214×14=17位来表示。现在大多数处理装置(如CPU,DSP)为32位宽,用上述变换进行处理就没有数据溢出的危险。(15)式中适合32位计算操作的修正矩阵的元数值为3个常数,表示如下1/41/2321/41/2321/2321/581/2321/581/41/2321/41/2321/2321/581/2321/58---(20)]]>对于某个量化步长QStep,对应一个量化参数Q,量化参数Q的取值范围为0到44整数,量化就是把变换得到的结果都除以QStepY/Qstep=(CfXCfT)⊗Ef/Qstep=]]>(111151-1-51-1-111-55-1X151111-1-51-1-151-51-1)⊗1/41/2321/41/2321/2321/581/2321/581/41/2321/41/2321/2321/581/2321/58/Qstep]]>(CfXCfT)⊗Mf/(2qbits)=YQ---(21)]]>定义Mf=EfQStep2qbits---(22)]]>其中,qbits=15+floor(Q/5),floor表示向负无穷方向取整。量化参数Q与量化步长QStep的对应关系如表1。从表1中可以看出,量化参数Q每增加5时,量化步长QStep就随之翻倍增加。
表1量化参数Q与量化步长QStep的对应关系

当Q大于5时,(22)式中QStep每增加一定的整数倍,(21)式中2qbits也增加同样的整数倍,由于这种抵消作用,因此只需要计算Q=0,1,2,3,4时的Mf,这样,就把Mf固定下来,不用每次量化的时候都去计算,节省了计算量。取不同的Q时,Mf的取值如下Mf(Q=5i,i=0,1,2...)=1310734421310734423442904344290413107344213107344234429043442904]]>Mf(Q=5i+1,i=0,1,2...)=1191631291191631293129822312982211916312911916312931298223129822]]>Mf(Q=5i+2,i=0,1,2...)=1008226531008226532653695265369510082265310082265326536952653695]]>Mf(Q=5i+3,i=0,1,2...)=936224599362245924596462459646936224599362245924596462459646]]>Mf(Q=5i+4,i=0,1,2...)=819221518192215121515652151565819221518192215121515652151565]]>量化操作即(21)式左边由于是除以2qbits,因此可以采用右移操作来节省计算量。
3.2 16位的量化方法对于一些处理能力较低的硬件装置,其数据位宽为16位,为了把变换后的系数值范围限制在16比特内,可以采用(17)式中的方法。对于9比特的预测误差数据做变换,变换矩阵每一行绝对值之和的最大值为7,因此对于变换后的矩阵元素需要9+log214×7=16位来表示,(17)式中适合16位计算操作的修正矩阵的元数值为3个常数,表示如下1/41/581/41/581/2321/291/2321/291/41/581/41/581/2321/291/2321/29---(23)]]>对于某个量化步长QStep,对应一个量化参数Q,量化参数Q的取值范围为0到44整数,量化就是把变换得到的结果都除以QStepY/Qstep=(CfXCfT)_Ef/Qstep=(111151-1-51-1-111-55-1X15/21111-1-5/21-1-15/21-5/21-1)⊗1/41/581/41/581/2321/291/2321/291/41/581/41/581/2321/291/2321/29/Qstep]]>(CfXCfT)⊗Mf/(2qbits)=YQ---(24)]]>定义Mf=EfQStep2qbits---(25)]]>其中,qbits=15+floor(Q/5),floor表示向负无穷方向取整。量化参数Q与量化步长QStep的对应关系亦如表1。从表1中可以看出,量化参数Q每增加5时,量化步长QStep就随之翻倍增加。
当Q大于5时,(25)式中QStep每增加一定的整数倍,(24)式中2qbits也增加同样的整数倍,由于这种抵消作用,因此只需要计算Q=0,1,2,3,4时的Mf,这样,就把Mf固定下来,不用每次量化的时候都去计算,节省了计算量。取不同的Q时,Mf的取值如下
Mf(Q=5i,i=0,1,2...)=13107688413107688468841808688418081310768841310768846884180868841808]]>Mf(Q=5i+1,i=0,1,2...)=11916625811916625862581644625816441191662581191662586258164462581644]]>Mf(Q=5i+2,i=0,1,2...)=10082530610082530653061390530613901008253061008253065306139053061390]]>Mf(Q=5i+3,i=0,1,2...)=9362491893624918491812924918129293624918936249184918129249181292]]>Mf(Q=5i+4,i=0,1,2...)=8192430281924302430211304302113081924302819243024302113043021130]]>量化操作即(24)式左边由于是除以2qbits,因此可以采用右移操作来节省计算量。
3.3率失真运动预测只和量化参数Q有关编码器和解码器是不对称的,这主要体现在编码器需要做运动预测,而解码器不需要,因此率失真运动预测只在编码器里执行。
率失真运动预测是和量化密切相关的,而和反量化没有关系。定义率失真运动预测的准则J=SAD+λR,SAD为运动预测误差,R为运动幅度编码所需要的信息量。率失真运动预测就是找到满足最小的J的运动幅度,这个运动幅度在实际编码中用运动矢量(Motion vector)来表示。其中的λ和Q有一定的对应关系λ=0.875 Q2,也就是说量化参数决定了运动预测的程度。
在附图1中,块变换编码器100通过可分离的2维正变换104对每个N×N输入像素数据102进行块变换。具体地说,首先由行变换106来变换输入块中行数据,然后行变换的结果(图1中未特别示出)通过列变换处理108变换成变换输出系数。换言之,2维DCT首先对输入数据块各行执行1维DCT,接着,对由一维DCT在行上产生的各列输出数据块进行一维DCT。行和列的变换也可以以相反的次序进行,而获得的结果相同。
4.本发明提出的反量化方法对于编码器中的编码操作,先做变换再做量化,对于编码器中的解码操作,则需要先做反量化再做反变换。
由于正变换中修正矩阵对不同变换矩阵放大倍数的修正作用,适合16位的变换和量化和适合32位的变换和量化的最终输出结果是相同的,而解码端不用过多考虑硬件的计算能力(这主要是因为解码比编码复杂性低很多),因此,32位和16位的反变换,可以采用相同变换矩阵和修正矩阵来实现变换和量化。因此,反变换的方程式为X=Ci(YantiQ⊗Ei)CiT=]]>1521111-1-521-1-1521-521-1(YantiQ⊗a2aca2acacc2acc2a2aca2acacc2acc2)1111521-1-521-1-111-5252-1---(26)]]>修正矩阵Ei的值如下
1/41/581/41/581/582/291/582/291/41/581/41/581/582/291/582/29---(27)]]>反量化就是把(21)或者(24)式中的量化的结果乘以量化步长QStep,即YantiQ=YQQstep (28)为了降低计算复杂度,我们需要提出更好的实现方法,由于反变换的输入是YantiQ⊗Ei=YQ⊗1/41/581/41/581/582/291/582/291/41/581/41/581/582/291/582/29---(29)]]>因此,可以把反量化和修正矩阵结合起来实现,以节省计算量YantiQ⊗Ei=YQ⊗1/41/581/41/581/582/291/582/291/41/581/41/581/582/291/582/29QStep---(30)]]>为了防止在后续的操作中造成精度误差,对(30)式两边一起放大128倍,等式依然成立128×YantiQ⊗Ei=128×YQ⊗1/41/581/41/581/582/291/582/291/41/581/41/581/582/291/582/29QStep=W]]>
(31)如果把w写成W=YQ_Vf2floor(Q/5)=YQ_Vf2ant1_qbits(32)定义Vf=128×EiQStep/2anti_qbits(33)其中,anti_qbits=floor(Q/5),floor表示向负无穷方向取整。这样就把(28)式反量化操作中的乘法运算转换为了便于实现的移位操作。当Q大于5时,(33)式中QStep每增加一定的整数倍,(32)式中2anti_qbits也增加同样的整数倍,由于这种抵消作用,因此只需要计算Q=0,1,2,3,4时的Vf,这样,就把Vf固定下来,不用每次量化的时候都去计算,节省了计算量。量化操作即(32)式左边由于是乘以2anti_qbits,因此可以采用左移操作来节省计算量。取不同的Q时,Vf的取值如下Vf(Q=5i,i=0,1,2...)=2010201010510520102010105105]]>Vf(Q=5i+1,i=0,1,2...)=2212221212612622122212126126]]>Vf(Q=5i+2,i=0,1,2...)=2614261414714726142614147147]]>Vf(Q=5i+3,i=0,1,2...)=2815281515815828152815158158]]>
Vf(Q=5i+4,i=0,1,2...)=3216321616916932163216169169]]>5.本发明提出的反变换方法16位的变换和量化和适合32位的变换和量化的最终输出结果是相同的,而且反量化的结果也是相同得,因此,在本发明中,反变换中行变换和列变换通过以下矩阵(34)式计算,不用区分是32位还是16位的,这保证了解码器的兼容性,即不管是32位编码器产生的压缩视频流还是16位编码器产生的压缩视频流,可以采用统一的解码器去解码。
X=CiWCiT1521111-1-521-1-1521-521-1W1111521-1-521-1-111-5252-1---(34)]]>也就是说,反变换时,行变换和列变换都需要通过以下矩阵计算1521111-1-521-1-1521-521-1---(35)]]>并且,计算反变换时必须进行的唯一乘法是乘以5/2,但该运算可通过前述的加法和移位操作高效的完成。并且,采用本发明的逆变换式,其最大增益为6。适当设计去量化器,可以使逆变换在16位运算中计算,同时也适合于32位运算。
用图1所示的逆变换的行变换122和列变换124对输入重构变换系数进行计算,得到输出像素数据。由于正变换中修正矩阵对不同变换矩阵放大倍数的修正作用,适合16位的变换和量化和适合32位的变换和量化的最终输出结果是相同的,而解码端不用过多考虑硬件的计算能力(这主要是因为解码比编码复杂性低很多),因此,32位和16位的逆变换,可以采用相同变换矩阵和修正矩阵来实现变换和量化。因此,32位和16位的行逆变换都可用下列算式计算M0=W0+W2;M1=W0-W2;M2=W1-(W3<<2+W3)>>1;M3=(W1<<2+W1)>>1+W3;X0=M0+M3;X3=M0-M3;X1=M1+M2;X2=M1-M2;可以把行变换的输出X0、X1、X2、X3看成W0、W1、W2、W3,32位和16位的列逆变换都可用下列算式计算M0=W0+W2;M1=W0-W2;M2=W1-(W3<<2+W3)>>1;M3=(W1<<2+W1)>>1+W3;X0=M0+M3;X3=M0-M3;X1=M1+M2;
X2=M1-M2;其中M0、M1、M2、M3为中间结果,X0、X1、X2、X3为相应输出元素。一次完整的反变换完成以后,所有的输出都要除以128,以抵消(31)式中的放大倍数。
通过图3所示的碟形算法来实现反DCT变换,本发明对于每个给定的输入数据需要5次加法和2次移位操作。而且,运用本发明的变换矩阵和H.264的变换矩阵对许多测试序列进行了对比测试。编码增益结果一般用信噪比提高来表示。试验结果表明,使用本发明的变换矩阵的编码增益高于H.264变换,因此本发明的变换要好于H.264的变换。
通过上面的详述,本发明提供一种用于图像和视频编解码的正交整数变换为核心的编码方法,该变换相对于H.264变换更接近DCT变换,因此获得了更好的编码性能。同时,该变换只需加法和移位操作,无需乘法运算,因此可大大降低计算复杂度。同时,适当设计量化器,能保证编码时变换操作和解码时去量化和变换操作都能在16位内完成。
权利要求
1.一种图像、视频信号的编码方法,对输入图像、视频信号顺序进行离散余弦正变换步骤、量化步骤和熵编码步骤;其特征在于对于4×4输入矩阵X,(1)所述离散余弦正变换步骤中,适合32位计算的表示为Y=(CfXCfT)⊗Ef=]]>(111151-1-51-1-111-55-1×151111-1-51-1-151-51-1)⊗a2ac/2a2ac/2ac/2c2/4ac/2c2/4a2ac/2a2ac/2ac/2c2/4ac/2c2/4;]]>适合16位计算的表示为Y=(CfXCfT)⊗Ef=]]>(111151-1-51-1-111-55-1×15/21111-1-5/21-1-15/21-5/21-1)⊗a2ac/2a2ac/2acc2/2acc2/2a2ac/2a2ac/2acc2/2acc2/2.]]>其中,Y为输出矩阵,a=12,]]>b=52229,]]>c=229;]]>(2)所述量化步骤中,适合32位计算操作的表示为Y/Qstep=(CfXCfT)⊗Ef/Qstep=]]>(111151-1-51-1-111-55-1×151111-1-51-1-151-51-1)⊗1/41/2321/41/2321/2321/581/2321/581/41/2321/41/2321/2321/581/2321/58/Qstep]]>=(CfXCfT)⊗Mf/(2qbits)=YQ]]>其中Mf=EfQStep2qbits]]>qbits=15+floor(Q/5),floor表示向负无穷方向取整,Q为量化参数,QStep为量化步长;取不同的Q时,Mf的取值如下Mf(Q=5i,i=0,1,2...)=1310734421310734423442904344290413107344213107344234429043442904]]>Mf(Q=5i+1,i=0,1,2...)=1191631291191631293129822312982211916312911916312931298223129822]]>Mf(Q=5i+2,i=0,1,2...)=1008226531008226532653695265369510082265310082265326536952653695]]>Mf(Q=5i+3,i=0,1,2...)=936224599362245924596462459646936224599362245924596462459646]]>Mf(Q=5i+4,i=0,1,2...)=819221518192215121515652151565819221518192215121515652151565;]]>适合16位计算操作的表示为Y/Qstep=(CfXCfT)⊗Ef/Qstep=]]>(111151-1-51-1-111-55-1×15/21111-1-5/21-1-15/21-5/21-1)⊗1/41/581/41/581/2321/291/2321/291/41/581/41/581/2321/291/2321/29/Qstep]]>=(CfXCfT)⊗Mf/(2qbits)=YQ]]>其中Mf=EfQStep2qbits]]>qbits=15+floor(Q/5),floor表示向负无穷方向取整,Q为量化参数,Qstep为量化步长;取不同的Q时,Mf的取值如下Mf(Q=5i,i=0,1,2...)=13107688413107688468841808688418081310768841310768846884180868841808]]>Mf(Q=5i+1,i=0,1,2...)=11916625811916625862581644625816441191662581191662586258164462581644]]>Mf(Q=5i+2,i=0,1,2...)=10082530610082530653061390530613901008253061008253065306139053061390]]>Mf(Q=5i+3,i=0,1,2...)=9362491893624918491812924918129293624918936249184918129249181292]]>Mf(Q=5i+4,i=0,1,2...)=8192430281924302430211304302113081924302819243024302113043021130.]]>
2.如权利要求1所述图像、视频信号的编码方法,其进一步特征在于,(1)适合32位的离散余弦正变换行变换计算公式为M0=x0+x3;M3=x0-x3;M1=x1+x2;M2=x1-x2;Yh0=M0+M1;Yh2=M0-M1;Yh1=M2<<1+(M3<<2+M3);Yh3=M3<<1-(M2<<2+M2);把行变换的输出Yh0、Yh1、Yh2、Yh3看成x0、x1、x2、x3,相应的32位列变换为M0=x0+x3;M3=x0-x3;M1=x1+x2;M2=x1-x2;Yv0=M0+M1;Yv2=M0-M1;Yv1=M2<<1+(M3<<2+M3);Yv3=M3<<1-(M2<<2+M2);(2)适合16位的离散余弦正变换行变换计算公式为M0=x0+x3;M3=x0-x3;M1=x1+x2;M2=x1-x2;Yh0=M0+M1;Yh2=M0-M1;Yh1=M2<<1+(M3<<2+M3);Yh3=M3<<1-(M2<<2+M2);把行变换的输出Yh0、Yh1、Yh2、Yh3看成x0、x1、x2、x3,相应的16位列变换为M0=x0+x3;M3=x0-x3;M1=x1+x2;M2=x1-x2;Yv0=M0+M1;Yv2=M0-M1;Yv1=M2+(M3<<2+M3)>>1;Yv3=M3-(M2<<2+M2)>>1;其中M0、M1、M2、M3为中间结果,[Yv0、Yv1、Yv2、Yv3]表示列变换后的输出结果。
3.如权利要求1所述图像、视频信号编码方法的解码方法,对于经过压缩的编码顺序进行熵解码步骤、去量化步骤和离散余弦逆变换步骤;其特征在于对于4×4输入矩阵YQ,去量化和逆变换的方程式为X=Ci(YantiQ⊗Ei)CiT=]]>1521111-1-521-1-1521-521-1(YantiQ⊗a2aca2acacc2acc2a2aca2acacc2acc2)1111521-1-521-1-111-5252-1]]>其中修正矩阵Ei的值1/41/581/41/581/582/291/582/291/41/581/41/581/582/291/582/29;]]>YantiQ=YQQstep;Qstep为量化步长。
4.如权利要求3所述图像、视频信号编码方法的解码方法,其特征在于所述逆变换的方程中YantiQ⊗Ei=YQ⊗1/41/581/41/581/582/291/582/291/41/581/41/581/582/291/582/29QStep]]>为了防止后续除法操作中造成精度误差,对上式两边一起放大128倍128×YantiQ⊗Ei=128×YQ⊗1/41/581/41/581/582/291/582/291/41/581/41/581/582/291/582/29QStep=W]]>即W=YQ_Vf2floor(Q/5)=YQ_Vf2anti_qbits;其中Vf=128×EiQStep/2anti_qbits。其中,anti_qbits=floor(Q/5),floor表示向负无穷方向取整,取不同的Q时,Vf的取值如下Vf(Q=5i,i=0,1,2...)=2010201010510520102010105105]]>Vf(Q=5i+1,i=0,1,2...)=2212221212612622122212126126]]>Vf(Q=5i+2,i=0,1,2...)=2614261414714726142614147147]]>Vf(Q=5i+3,i=0,1,2...)=2815281515815828152815158158]]>Vf(Q=5i+4,i=0,1,2...)=3216321616916932163216169169.]]>
5.如权利要求3或4所述图像、视频信号编码方法的解码方法,其特征在于所述离散余弦逆变换方程中,32位和16位的行离散余弦逆变换用下列算式计算M0=W0+W2;M1=W0-W2;M2=W1-(W3<<2+W3)>>1;M3=(W1<<2+W1)>>1+W3;X0=M0+M3;X3=M0-M3;X1=M1+M2;X2=M1-M2;把行变换的输出X0、X1、X2、X3看成W0、W1、W2、W3,32位和16位的列离散余弦逆变换用下列算式计算M0=W0+W2;M1=W0-W2;M2=W1-(W3<<2+W3)>>1;M3=(W1<<2+W1)>>1+W3;X0=M0+M3;X3=M0-M3;X1=M1+M2;X2=M1-M2;其中M0、M1、M2、M3为中间结果,X0、X1、X2、X3为相应输出元素,一次完整的逆变换完成以后,所有的输出都除以128。
全文摘要
图像、视频信号的编码/解码方法,属于图像和视频信号的编码和解码,特别涉及到一种用于图像和视频变换编码的4×4整数变换和相应的变换和量化方法。本发明编码方法,对输入图像、视频信号顺序进行离散余弦步骤量化步骤和熵编码步骤,提出正变换和量化方程式;本发明解码方法,对于经过压缩的编码顺序进行熵解码步骤、去量化步骤和离散余弦逆变换步骤;提出去量化和逆变换的方程式。本发明目的在于提高编码质量的同时降低编码的计算量。该变换能够降低在编码器和解码器中的解码数据的精度问题,简化编码器和解码器对视频和图像计算的复杂性,同时保证图像和视频压缩的质量不降低和其他资源受到的影响可以忽略。
文档编号H04N7/50GK1662069SQ20051001813
公开日2005年8月31日 申请日期2005年1月12日 优先权日2005年1月12日
发明者周敬利, 陈加忠, 余胜生, 郭红星, 向东, 徐俊 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1