基于行的视频码率控制和压缩的制作方法

文档序号:7680516阅读:247来源:国知局

专利名称::基于行的视频码率控制和压缩的制作方法
技术领域
:本发明一般涉及无线通信,并且更具体而言涉及用于无线视频数据传输的基于行的码率控制。
背景技术
:超宽带(UWB)无线通信允许以空前的高码率来进行数据传输。视频传输受益于这些高码率,因为如今可以以比从前所允许的压縮比更低的压縮比来传输高分辨率视频格式。现有技术的系统依赖于基于帧或基于块的压縮方案,这些压縮方案分成两大类。为了在具有指定容量的信道上传输视频,不可伸縮的码率控制法(non-scalablerate-controlmethod)采用复杂的方法来选择用于压縮视频帧的块的量化参数以使得平均比特率接近信道容量。然而,因为瞬时比特率可能大大超过信道容量,所以这些方法使用大的缓冲器来防止数据丢失。当用可縮放码率控制来传输视频时,将每个视频帧或块编码成可縮放的(或嵌入式的)比特流,可以在任意断点截取该比特流以保证瞬时比特率永远不超过信道容量。然而,这些方法使用足够的存储器来缓存整个帧或块,使得复杂、多通道、面向比特平面的处理可以生成可縮放的比特流。通常,视频码率控制方法应用码率失真理论,通过使给定码率的失真最小化来优化质量。在实践中,基于帧和基于块的视频编码器使用多通道方法或高价搜索来进行码率受限的失真最小化。与基于帧和基于块的系统不同,所提出的基于行的码率控制逐行地调整视频压縮以改变系统条件,例如缓冲器状态和信道容量。随着无线视频系统从基于帧和基于块的码率控制变成基于行的码率控制,在本领域中需要确定用于基于行的码率控制的最小量化参数,使得在变化的信道容量下无需缓冲器溢出就能获得最大的视频质量。当结合附图来阅读以下详细描述时可以最好地理解本发明的方案,其中图1是可以在其中实现本发明的实施例的典型的无线视频系统的方框图;图2根据本发明的实施例示出了视频帧的格式;图3根据本发明的实施例示出了用于描绘视频帧的每一行的RGB分量的数据流的方框图;图4是示出了用于定义与通过高通子带或低通子带预测残差得到的整数相关的指数Golomb码的过程的流程图;图5根据本发明的实施例示出了一对打包器;图6根据本发明的实施例示出了输入,视频码率控制(VideoRateControl)使用所述输入来生成控制输出以优化视频编码使得失真最小并且没有缓冲器溢出;图7示出了在水平消隐周期期间为了确定最优低通量化设置而执行的过程的流程图;图8示出了计算行的低通部分的编码后长度的流程图;图9示出了计算来自行的低通部分的方差的流程图;图10示出了在水平消隐周期期间为了确定最优高通量化设置而执行的过程的流程图;图11示出了计算行的高通部分的编码后长度的流程图;图12示出了计算来自行的高通部分的方差的流程图;图13示出了优化的低通子带码率计算的过程;图14描述了用于在所有量化等级下优化计算低通子带项X的残差码长的OptimizedLPrates过禾呈;图15描述了用于将来自当前行的低通子带项与来自当前低通子带行的x的非量化左侧邻居相加的过程;图16示出了用于量化输入估计的校正过程;图17示出了用于在像素量化后确定像素之间的距离的过程;图18示出了用于计算与指定的量化等级上的低通子带项x相对应的残差的过程;图19示出了如JPEG-2000图像压縮标准所定义的用于使用floor(x'+2)的LeGall-(5,3)小波变换的整数实现的舍入方法;图20根据本发明的实施例示出了用于使用fix(x'+2)的LeGall-(5,3)小波变换的整数实现的舍入方法;图21描述了用于视频码率控制信号的压縮比的曲线图;图22根据本发明的实施例示出了用于改进的视频码率控制的固件实现法的流程图;图23根据本发明的实施例示出了用于改进的视频码率控制的硬件实现法的流程图;图24描述了用于剪辑寄存器中的未使用比特的剪辑功能;图25示出了在水平消隐周期期间为了确定最优低通量化设置而执行的过程的流程图,作为图7所示的过程的替换;图26示出了在水平消隐周期期间为了确定最优高通量化设置而执行的过程的流程图,作为图io所示的过程的替换。具体实施例方式图像/视频编码器一般包括两个组件,压縮引擎和码率控制。码率控制从编码器所位于的系统接收输入,并且然后生成用于控制压縮引擎的操作的参数,使得可以由系统发送输出比特流。本发明的一个实施例提供了一种低复杂度低成本的码率控制方法。考虑从潜在系统接收以下反馈的图像/视频编码器(a)初始吞吐量估计,(b)分组大小,(c)分组重传反馈,6(d)对即将到来的视频禁用时隙的通知,以及(e)发送缓冲器满。本发明的另一个实施例提供了一种低成本的固件可实现的方法,用于通过使用上述反馈经由码率控制,逐个分组地、自适应地改变操作点,来改进解码后的图像/视频质在另一个变形中,图像/视频编码器从潜在系统接收以下反馈[OO43](a)初始吞吐量估计,(b)压縮后的行大小,(c)分组重传反馈,(d)对即将到来的视频禁用时隙的通知,以及(e)发送缓冲器满。该可替换的实施例提供了一种低成本的、硬件可实现(与固件相对)的方法,用于通过使用上述反馈经由码率控制,逐行地、自适应地改变操作点,来改进解码后的图像/视频质量。如上所述,图像/视频编码器一般包括两个组件,压縮引擎和码率控制。码率控制从编码器所位于的系统接收输入,并且然后生成用于控制压縮引擎的操作的参数,使得可以由系统发送输出比特流。对应于编码器的解码器包括解压縮引擎,其执行压縮引擎的操作的逆操作,使得从比特流重构原图像/视频数据。本发明的一个实施例提供了一种低复杂度、低成本、基于行的压縮引擎。通过执行压縮引擎的操作的逆操作,获得对应的解码器。本发明的进一步的实施例包括导致更高的无损或有损压縮比的舍入方法。通常使用小波变换来对图像/视频数据解相关,并且从而提高无损和有损压縮比。为了降低实现成本,使用舍入运算来实现小波变换的整数形式。在一种图像/视频编码器中使用多分辨率变换,多分辨率变换之后是熵编码,在熵编码中将较长的代码分配给与原始数据中的边缘相对应的大的高通系数。本发明的另一个实施例提供了一种用于提高压縮比的方法。本发明的进一步的实施例包含用于提高失真估计准确性的方法。在具有基于小波变换的压縮引擎的图像/视频编码器中,码率控制对来自小波域失真的像素域失真进行估计。不幸的是,由于舍入噪声,当使用低复杂度的整数小波变换时,降低了像素域失真估计的准确性。在压縮引擎用包含强垂直和/或水平相关的本地化的区域来对量化后的二维阵列进行编码的图像/视频编码器中,如果在每个阵列元素的最大相关方向上生成预测残差,则可以获得更高的压縮比。本发明的一个实施例提供了一种用于根据量化后的数据生成预测残差的经验驱动的方法。经验使得能够在最大相关的方向上进行预测,从而不必向解码器提供用于在每个阵列元素上指示该方向的额外数据。该编码器的码率控制对全部量化等级上的编码后阵列的比特消耗进行估计。本发明的进一步的实施例提供了一种用于对各个指定量化等级上的熵编码的残差的确切比特消耗进行预测的低复杂度的方法。在图像/视频编码器中,压縮引擎包括用于创建比特流的熵编码器。可以用Golomb码来实现有效、低复杂度、低成本的熵编码器。本发明的实施例提供了一种用于生成用于图像/视频编码器的Golomb码的成本降低的方法。该方法的逆转指明了用于对应的图像/视频解码器的熵解码过程。此外,可以使用算术编码器的基本元件来改进Golomb编码性能。图1是可以在其中实现本发明的实施例的典型的无线视频系统的方框图。视频数据流从视频源100无线地传递到视频宿110(例如,计算机监视器、电视等等)。无线视频输入设备101和输出设备111提供该无线连接。图2根据本发明的实施例示出了视频帧的格式。每个视频帧由有效(active)和消隐(blanking)行组成。每个有效行由有效和消隐像素组成。显示视频帧的有效视频部分期间的数据,并且该数据包括红绿蓝(RGB)或者YUV4:2:2格式的三个彩色分量。(在YUV彩色模型中,Y表示亮度信号,U和V表示色差信号)。图3根据本发明的实施例示出了用于描绘视频帧的每一行的RGB分量的数据流的方框图。RGB到YUV(RGB-to-YUV)块302使用色彩空间转换,将每个像素的红绿蓝分量映射成对应的4:4:4格式的YUV分量。如果断言了旁路控制(Bypasscontrol)301,则绕过RGB到YUV块302。选择YUV控制(SelectYUVcontrol)303确定是否绕过YUV格式转换(YUVFormatConversion)块304,或者低通滤波器和下采样器将YUV4:4:4格式转换成YUV4:2:2格式还是YUV4:1:1格式。将YUV格式转换块304所产生的YUV分量进行独立的小波变换306(Y)、307(U)和308(V)。SelectTfm控制305确定是使用Daubechies(7,9)还是LeGall(5,3)小波变换的二级整数形式来生成每个彩色分量的低通和高通子带。因为使用二级小波变换,所以对于给定行,低通(高优先级)小波系数的数量组成了该行中25%的像素,并且高通(低优先级)小波系数组成了该行中75%的像素。对于Y分量,低通子带被标记为LpY,高通子带被标记为HpY。类似地,U和V分量的对应子带分别被标记为LpU、HpU、LpV、HpV。将给定行的LpY、HpY、LpU、HpU、LpV、HpV子带存储在RAM309中,向给定行的全部子带提供视频码率控制接入以确定用于这些子带的最佳量化设置。—旦完成小波变换后,视频码率控制就确定各个子带LpY、HpY、LpU、HpU、LpV、HpV的最佳量化等级qLY、qHY、qLU、qHU、qLV、qHV(以下详细解释)。将各对子带系数和量化等级(例如LpY/qLY、HpY/qHY等)送入量化器310-315,其通过以下过程计算量化后的系数xq=X>>q,If(x<0)AND(x的q个LSB不全为0)AND(q<>0)xq=xq+l以上伪代码示出了量化器通过右移来估计x的q个最不重要比特以得到xq。为了获得更短的熵编码,增加负值的x,,使得该负数向零舍入。在量化后,调节该数据以符合指数分布,因为熵编码器对于大部分样本聚集在零附近的指数分布的数据最佳地输出短代码。量化后的高通子带HpY'、HpU'、HpV'已经是指数分布的,并且不需要调节。(见"NoiseRemovalviaBayesianWaveletCoring",E.P.Simoncelli,E.H.Adelson,Proceedingsof3^IEEEInternationalConferenceonImageProcessing,,,Vol.1,卯.379-382,S印tember1996,通过引用的方式将该内容并入本文。)对于量化后的低通子带LpY'、LpU'和LpV',本发明的一个实施例应用预测过程316、317、318来分别创建指数分布的预测残差ResY、ResU、ResV。该预测过程利用前一像素行的低通部分。以下的表1示出了量化后的低通子带的第n行和第n-1行。Col1Col2■■Colm-1Colm…Row1Row2Rown-1尺own表l对于以下输入,输出包括用于第n行的每个量化后的项xq的LP残差dx:1)量化后的LP子带的第n行(Rown)和第n_l行(Rown_l),2)Qn,Qn_l:分别用于第n行和第n_l行的量化等级,注意因为第1行是量化后的LP子带的首行,所以未定义并且以下未使用第0行和Q0。3)预测模式行间预测或者行内预测。注意相同的预测模式应用于第n行中的全部项。行间预测包括使用第n-1行来预测第n行。(显然,该预测模式对于n=1无效。)在该预测过程中,縮放第n-l行的项,使得它们与第n行的项具有相同的量化等级。考虑以下4种情况情况1:n>1,m>1,>=Q二=<<(Qn—「Qn),bq=bq<<(Qn—「Qn),情况2:n>1,m>1,<Q二=>>(Qn_Qn—》,bq=bq>>(Qn_Qn—》,情况3:n>1,m=1,>=Q二bq=bq<<(Qn—「Qn),情况4:n〉l,m=1,Q^〈Q二bq=bq>>(Qn_Qn—》在适当縮放第n-1行的项之后,使用以下预测过程来生成对应于xq的残差dx:对于情况1禾口2:If|aq_cq|<=|aq_bqdx=xq-bqElse9dx=xq_cq对于情况3和4,dx=xq-bq。对于行内预测,不使用第n-l行来预测第n行。当希望与第n_l行独立地编码第n行时,对于n=1该预测模式是强制的,并且对于n>1该预测模式是可选的。与行间预测不同,行内预测不需要縮放。根据以下两种情况得出对应于xq的残差dx:情况5:m>1:dx=xq_cq,情况6:m=1:dx=xq.在预测过程之后,现在残差ResY、ResU、ResV和高通子带HpY'、HpU'、HpV'是指数分布的。这允许本发明的实施例在熵编码器319-324中使用极其简单却有效的指数Golomb码。(指数Golomb码的描述见"ACompressionMethodforClusteredBit-Vectors",J.Teuhola,InformationProcessingLetters,Vol.7,pp.308-311,October1978,将其内容以引用方式并入本文。)现有技术的系统使用指数Golomb码来对小波系数游程进行编码。(见〃GeneralizedGolombCodesandAdaptiveCodingofWavelet-TransformedlmageSubbands〃,A.Kiely,andM.Klimesh,IPNPR42-154,Jet_PropulsionLaboratory,CaliforniaInstituteofTechnology,April-June2003,pp.1_14,August15,2003。)相反,本发明的一个实施例使用这些码来对高通子带和低通子带预测残差进行编码。用简单的预测残差来调节用于指数Golomb编码的数据能够获得用于视频码率控制的有效却精确的码率估计技术(将在下面说明)。图4示出了用于定义与根据高通子带或低通子带预测残差得到的整数X相关的指数Golomb码G的过程的流程图。第一步是确定整数X的符号(步骤401)。如果X=O,则将Golomb码设置为1(G=1)(步骤402)。对于正的X(>0),B是X左移1位的二进制表示(步骤403)。对于负的X(<0),该过程相同,除了X的绝对值生成B,并且设置B的最不重要比特(步骤404)。L是B之前的前导零的数量,并且其是由floor(log2B)定义的(步骤405)。L的比特长度比B小1。因此,对于正整数和负整数的X,Golomb码G包括L个前导零以及紧跟的B,其中B用最重要比特设置为1的二进制来表示(步骤406)。为了说明指数Golombb编码过程,以下列表显示了XG[-10,10]时的Golomb码G以及码长。X=-10,G==000010101,长度=9X=-9,G=000010011,长度=9X=-8,G=000010001,长度=9X=-7,G=0001111,长度=7X=-6,G=0001101,长度=7X=-5,G=0001011,长度=7X=-4,G=0001001,长度=7X=-3,G=00111,长度=5X=-2,G=00101,长度=5X=_1,GX=0,G=X=1,G=X=2,G=X=3,G=X=4,G=X=5,G=X=6,G=X=7,G=X=8,G=X=9,G=X=10,G本发明的-体地,虽然使用floor(log2B)来简便地定义上述实施例中的L,但是另一个实施例使用简单逻辑来找出最重要比特并且从而找出B的比特长度。最后,回到图3,本发明的一个实施例将熵编码后的ResY、ResU、ResV、HpY'、HpU'和HpV,标记为HiPriY、HiPriU、HiPriV、LoPriY、LoPriU、LoPriV。图5根据本发明的实施例示出了一对打包器。独立的打包器501、502分别将HiPriY、HiPriU、HiPriV汇聚成高优先级分组,将LoPriY、LoPriU、LoPriV汇集成低优先级分组。进行该优先化,使得与包含高通子带的分组相比,向包含残差数据的分组提供更多的保护。因为来自一个行的残差数据被用于下一行的行间预测,所以残差数据丢失可能导致错误传播到后面的行。相反地,因为给定行的高通数据独立于其它行,所以高通数据丢失不会影响后面的行。应该注意到,打包器一般将来自多个行的数据打包成一个分组。图3所示的基于行的编码器的操作的关键组成部分是视频码率控制(VideoRate-Control,VRC)方法,VRC方法确定在变化的信道容量下获得最大视频质量而不产生缓冲器溢出所需的每行的最小量化参数(qLY、qHY、qLU、qHU、qLV、qHV)。本发明的一个实施例使用小型缓冲器和单路扫描,其与使用大型缓冲器和包括复杂搜索的多路、面向比特平面的现有技术的基于帧或块的技术相比,复杂度低得多。图6根据本发明的实施例示出了输入,VRC使用所述输入来生成控制输出以优化视频编码使得失真最小并且没有缓冲器溢出。在本发明的优选实施例中,用硬件来实现VRC。从时序的角度来看,在给定行的有效像素可用之前不久,介质访问控制器(MAC)指定maximize601禾口maxHsize602,其中maximize601禾口maxHsize602分别指示当前行的低通和高通部分的最大编码后行大小。根据物理层(PHY)所提供的信道容量估计,可以容易地计算这些最大行大小。maxLsize和maxHsize索引到一个表格,该表格指定对指定的最大行大小提供好的压縮结果的Bypass603、SelectYUV604和SelectTfm605值。—旦给定行的有效像素变得可用,那么通过编码器使用所选择的Bypass603、SelectYUV604和SelectTfm605值来对它们进行时钟同步。VRC600对存储在RAM中的LpY、HpY、LpU、HpU、LpV和HpV子带进行采样(图3所示)。同时,VRC600使用所述子带11=011,长度=3=1,长度=1=010,长度=3=00100,长度=5=00110,长度=5=0001000,长度=7=0001010,长度=7=0001100,长度=7=0001110,长度=7=000010000,长度=9=000010010,长度=9=000010100,长度=9-个实施例中的Golomb码的实现极其有效,因为它不需要任何算术。具采样,对量化值的所有允许的组合的码率和失真信息进行编辑。在水平消隐周期紧接着该行的最后一个有效像素开始之后不久(见图2),码率和失真信息分别可用作为高优先级和低优先级的编码后行大小和量化值的所有允许的组合的方差。在一些时钟循环中,VRC600执行与所有qHY、qHU、qHV组合相对应的高优先级的编码后行大小的单路扫描。在该扫描期间,考虑与小于maxHsize的编码后行大小相关联的qHY、qHU、qHV组合。在完成该扫描之后,qHY、qHU、qHV被设置为具有最小方差的所考虑的组合。在水平消隐周期结束前类似地确定控制值qLY、qLU、qLV。量化器现在可以使用最佳量化设置qHY、qHU、qHV、qLY、qLU和qLV来开始量化RAM中的全部LpY、HpY、LpU、HpU、LpV和HpV子带。该定时调度确保在需要存储下一行的子带采样之前释放足够的RAM空间。为了简化以下对VCR的解释,将qHY、qHU、qHV限制为集合{0,2,4,6}并且将qLY、qLU、qLV限制为集合{0,1,2,3}。经验证据还表明qHU通常等于qHV并且qLU通常等于qLV。因此,为了本讨论的目的,可以通过从HpU、HpV确定qHUV并且然后设置qHU=qHV=qHUV,来简化VRC方法。类似地,从LpU、LpV获得qLUV。最后一步设置qLU=qLV=qLUV。这些限制产生极好的结果并且可以用优选实施例来实现。然而,根据本发明,可替换的实施例不需要以上要求。图7示出了在水平消隐周期期间为了确定最优低通量化设置而执行的过程的流程图。这些量化设置(qLY,qLUV)是从输入maxLsize、禾P得到的,其中i,j={0,1,2,3}。下标i表示Y的量化等级,j表示UV的量化等级。RL表示码率,D^表示失真。因此,R、.表示当分别用i个比特来量化LpY子带并且用j个比特来量化LpU、LpV子带时,行的低通部分的编码后长度。类似地,D、.表示当分别用i个比特来量化LpY子带并且用j个比特来量化LpU、LpV子带时,行的低通部分的方差。步骤701将最小失真初始化为一个较大值。在当前实例中,将量化等级qLY和qLUV设置为15。步骤702、703开始嵌套环,其在4个qLY量化等级和4个qLUV量化等级之间循环。因此,在嵌套环中检查qLY和qLUV的全部16个组合。对于16个组合中的每一个,步骤704确定当前行的低通部分的编码后长度是否小于量化等级的特定组合的maxLsize。如果不小于,则检查下一个组合。如果低通部分不小于maxLsize,则步骤705确定与该组合相关联的失真是否是至今遇到的最小失真。如果不是,则检查下一个组合。如果与该组合相关联的失真是至今遇到的最小失真,则步骤706存储qLY和qLUV的量化组合。更新可变的minD,以保持与当前量化组合相关联的D、.,因为其是目前为止遇到的最小失真。在完成该嵌套环后,qLY和qLUV保持该量化组合,其中该量化组合在maxLsize以下以最小失真来编码低通子带。然而,如果步骤707确定qLY仍然保留15,那么不执行步骤706,这意味着对于全部量化组合,步骤704决定编码后的低通子带长度大于可允许的最大值maxLsize。在这种情况下,这16个量化组合不足以在可允许的最大值之下对行进行编码。应该注意到,当进行预测过程时,不能保证组合qLY=qLUV=15以在maxLsize内对低通子带进行编码。因此,不发送当前行。改为在步骤708设置控制比特,以强制解码器用前一行替换当前行。12图25和26示出了可用来代替图7中用于确定水平消隐周期期间的最佳低通量化设置的流程图的可替换的流程图。该可替换的流程图改进了图7的过程,因为如下所述,它允许直接控制压縮后的行的视觉质量。步骤2501将meetsRateMaxAcc印tableMse初始化为最大负值,同时将meetsRateMinUnAcceptableMse、meetsRateMaxAcceptableMseQy、meetsRateMinAcc印tableMseQy中的每一个初始化为大的正值。步骤2502开始嵌套环,其在4个qLY量化等级和4个qLUV量化等级之间循环。因此,在嵌套环中检查qLY和qLUV的全部16个组合。对于16个组合中的每一个,步骤2503确定当前行的低通部分的编码后长度是否大于qLY和qLUV的特定量化等级组合(QLC)的maxLsize。如果大于,则检查下一个QLC,因为当前QLC超过了最大可允许值,或者换句话说当前QLC不满足希望的比特率要求。如果该低通部分不大于maxLsize,则步骤2504确定与该QLC相关联的失真是否大于acc印tab1eLpMse。如果大于,则我们知道当前QLC满足希望的比特率要求但是相关的失真太大而不能接受。在这种情况下,步骤2505测试当前QLC在已遇到的满足比特率要求但是导致不可接受的大的失真的全部QLC中是否具有最小失真。如果是,则步骤2508将当前QLC和相关失真存储在meetsRateMinUnAcc印tableMseQy、如果步骤2504确定与QLC相关联的失真很小可以接受,那么步骤2506测试当前QLC在满足比特率要求并且具有可接受的小失真的全部QLC中是否具有最大失真。如果是,那么步骤2507将当前QLC和相关失真存储在meetsRateMaxAcc印tableMseQy、meetsRateMaxAcc印tableMseQuv禾口meetsRateMaxAcc印tableMse中。观察到步骤2504、2505、2506、2507、2508确保在满足希望的比特率的全部QLC中,相关失真最接近acc印tableLpMse的QLC将被存储在meetsRateMinUnAcc印tableMseQy、meetsRateMinUnAcc印tableMseQuv中或存储在meetsRateMaxAcc印tableMseQy、meetsRateMaxAcc印tableMseQuv中。在完成步骤2502开始的嵌套环后,就对全部QLC进行了检测,并且控制走到图26中的步骤2601。该步骤确定是否任意QLC满足比特率并具有可接受的失真。如果是(meetsRateMaxAcc印tableMseQy不等于7F.F),那么在QLy和QLuv中,步骤2602返回满足比特率并且具有最接近acc印tableLpMse的失真的QLC。然而,如果步骤2601确定没有QLC满足比特率并且具有可接受的失真(meetsRateMaxAcc印tableMseQy等于7F...F),则步骤2603检查是否任意QLC满足比特率兵具有不可接受的大的失真。如果是(meetsRateMinUnAcc印tableMseQy不等于7F...F),那么在QLy和QLuv中,步骤2604返回满足比特率并且失真最接近acc印tableLpMse的QLC。最后,如果步骤2603确定没有QLC满足比特率并且具有不可接受的大MSE(meetsRateMinUnAcc印tableMseQy等于7F...F),那么我们知道全部QLC都超过比特率要求。在这种情况下,步骤2605设置控制比特,以强制解码器用前一行替换当前行,如步骤708中所做的那样。图8示出了用于计算行的低通部分的编码后长度(R^j)的流程图。在当前实例中,Y量化等级是i二{0,1,2,3},,量化等级是j={0,1,2,3}。由于有效像素是通过小波变换来时钟同步并且被写入RAM的,所以随着小波系数Wy、wu、wv分别在LpY、LpU和LpV子带13中变得可用,从小波系数Wy、wu、wv并行地汇聚R、.的16个值。在步骤801中,将全部16个寄存器初始化为零。步骤802表示随着低通子带LpY的每个小波系数wy被写入图3中的RAM309,码率计算考虑低通子带LpY的每个小波系数Wy。步骤803表明考虑全部4个Y量化等级,并且步骤804说明对于每个Y量化等级,根据应用于wy的量化、LP预测和Golomb编码处理,计算Golomb码长Ry。步骤805和806指明通过Ry来更新与不同的UV量化等级而与相同的Y量化等级相关联的4个码率寄存器。在硬件实现中,并行地执行步骤804的全部4个实例,如同步骤806的全部16个实例那样。步骤807到811与其对应的步骤802到806类似,并行地在LpU子带上执行。类似地,步骤812到816应用于LpV子带。图9示出了用于计算行的低通部分的方差的流程图。Y量化等级是i={0,1,2,3},UV量化等级是j={0,1,2,3}。随着小波系数wy、wu、wv分别在LpY、LpU和LpV子带中变得可用,从小波系数Wy、Wu、Wv并行地汇聚的16个值。在步骤901中,将全部16个D^寄存器初始化为零。步骤902、903表示随着低通子带LpY的每个小波系数wy被写入图3中的RAM309,失真估计考虑低通子带LpY的每个小波系数Wy的绝对值。步骤904表明考虑全部4个Y量化等级,并且步骤905说明对于每个Y量化等级,相关小波域失真等于在该Y量化等级上截断的比特的小数数值。然而因为目的是为了最小化像素域失真而不是小波域失真,所以步骤906将该失真乘方,因为对于近似正交的小波变换(见"WaveletsandFilterBanks"byG.StrangandT.Nguyen,WellesleyCambridgePress,1996)来说,乘方后的小波域失真约等于乘方后的像素域失真。接下来步骤907和908指明通过Dy来更新与不同的UV量化等级而与相同的Y量化等级相关联的4个失真寄存器。在硬件实现中,并行地执行步骤905、906的全部4个实例,如同步骤908的全部16个实例那样。步骤909到915与其对应的步骤902到908类似,并行地在LpU子带上执行。类似地,步骤916到922应用于LpV子带。图10示出了在水平消隐周期期间为了根据输入maxLsize、R1^、D1^(其中m,n={0,2,4,6})确定最优高通量化设置qHY、qHUV而执行的过程的流程图。下标m表示Y量化等级,n表示UV量化等级。RH表示码率,DH表示失真。因此R:表示当分别用m比特来量化HpY子带并且用n比特来量化HpU、HpV子带时,行的高通部分的编码后长度。类似地,DHmn表示当分别用m比特来量化HpY子带并且用n比特来量化HpU、HpV子带时,来自行的高通部分的方差。步骤1001到步骤1006分别类似于图7中的步骤701到706。然而,在该过程中,不需要与步骤707相似的步骤,因为如果没有满足maxHsize目标的量化组合,那么该过程使用默认的qHY=qHUV=15的设置,其在该情况中无疑满足maxHsize目标。与图7中的过程不同,高通编码不包括预测过程。因此,量化组合qHY=qHUV=1415将使所有高通子带项都强制变成0。因此,用该组合进行处理就足够了,因为编码器将通过用单个控制比特发送全零高通子带来满足maxHsize目标,这使得编码器生成对应于qHY=qHUV=15的全零高通子带。图27和28示出了可用来代替图10中用于确定水平消隐周期期间的最佳高通量化设置的流程图的可替换的流程图。该可替换的流程图改进了图10的过程,因为如下所述,它能够直接控制压縮后的行的视觉质量。注意,该可替换的流程图完全类似于图25和26的流程图,其中图25和26的流程图指定了用于确定最佳低通量化设置并可直接控制视频质量的可替换的过程。图27和28的可替换的流程图接受输入参数maxHsize和acc印tab1eHpMse,它们分别指定最大可允许大小和压縮后的行的高通部分的可接受失真。在进行完与图25和26中的步骤完全类似的步骤后,该过程返回qHY和qHUV以及量化等级组合,其中该量化等级组合满足希望的比特率要求并且具有最接近可接受的阈值acc印tableHpMse的失真。如果不存在这样的量化等级组合(meetsRateMaxAcc印tableMseQy等于7F…F并且meetsRateMinUnAcc印tableMseQy等于7F.F),那么,步骤2805如前面说明图10时所述的,设置qHY=qHUV=15。图25、26、27、28的可替换的过程允许直接控制视觉质量。在实践中,如果有必要则指定的阈值acc印tableLpMse和acc印tableHpMse致使量化等级升高,使得造成的失真逼近该指定的阈值。我们现在说明如何确定这些阈值,使得它们对应于公知的峰值信噪比(PSNR)质量度量。如下定义PSNR质量度量PSNR(dB)=101og102552/(MSEperPixel),(1)(见"VideoCoding-AnIntroductiontoStandardCodecs,,byM.Ghanbari,IEE1999,Pg.19),其中MSEperPixel是每个像素的均方差。因此,MSEperPixel=65025(PSNR/10)—10,(2)totMSEperLine=(誦PixelsPerLine)(MSEperPixel),(3)totMSEperLine=(誦PixelsPerLine)(65025)(PSNR/10)—10,(4)其中,皿mPixelsPerLine禾PtotMSEperLine分别是每行的像素数量和一行中全部像素的均方差。根据方程(4),我们可以计算与指定的PSNR质量相关的总均方差。现在,如果使用近似正交的小波变换将输入行分割成低通和高通子带,那么totMSEperLine=acc印tableLpMse+acc印tableHpMse,(5)其中,acc印tableLpMse禾Pacc印tableHpMse分别是低通和高通子带中的可接受均方差。经验结果显示,当acc印tableHpMse比acc印tableLpMse大100到1000倍时,能够获得好的质量。因此,我们组合方程(4)和(5)得到(誦PixelsPerLine)(65025)(PSNR/10)—10=acc印tableLpMse+R(acc印tableLpMse),(6)其中,IOO<R<1000。这样,指定的失真阈值如下直接与PSNR质量度量相关誦PixelsPerLine)(65025)(PSNR/10)—10(R+l)—1=acc印tableLpMse,(7)誦PixelsPerLine)(65025)(PSNR/10)—10R(R+l)—1=acc印tableHpMse.(8)最后,我们说明如何使用PSNR质量设置来进行不同的操作模式。如果预计信道条件良好并且预计视频内容易于压縮,那么我们可以得到PSNR=40dB的acc印tableLpMse和acc印tableHpMse,其中PSNR=40dB能产生极好的质量。可替换地,通过设置PSNR=无限大,我们可以获得acc印tableLpMse=acc印tableHpMse=0。在这种情况下,图25、26、27、28中的可替换的过程的操作与图7和10中的相同,因为总是选择具有最低失真的量化等级组合。但是,在实际操作中,信道条件通常恶化并且视频内容可能难以压縮。因此,要谨慎地使用略低的PSNR(比如35dB)来得到acc印tableLpMse和acc印tableHpMse。利用该设置,尽管量化设置将略高于可容易压縮的行但是视觉质量仍然很好,因为这些可容易压縮的行通常在低量化等级具有低均方差。因此,与PSNR=35dB相关的acc印tableLpMse和acc印tableHpMse的较大值将致使较高的量化将失真增大到与35dB相关的可接受阈值。当与用于图23中的改进的视频码率控制的硬件实现的方法结合时,该操作模式产生更高性能,原因如下。当遇到可容易压縮的行时,较高的量化等级导致较小的压縮后行大小。因此在步骤2306,向寄存器u皿secLbytes—accumulator分配更多的未使用比特。因此,难以压縮的后续行更有可能使用低量化等级并且具有良好视频质量,因为u皿secLbytes—accumulator更不可會嫌尽。图11示出了计算行的高通部分的编码后长度(RHJ的流程图。Y量化等级是m={0,2,4,6},UV量化等级是n={0,2,4,6}。由于通过小波变换来对有效像素进行时钟同步,所以随着小波系数wy、wu、wv分别在HpY、HpU和HpV子带中变得可用,从小波系数wy、Wu、wv并行地汇聚R:的16个值。步骤1101到步骤1116类似于图8中的各个步骤801到816。主要的区别在于步骤1104U109和1114不包括预测过程,因为如以上图3中所说明的,高通子带编码不使用预测。图12示出了计算行的高通部分的方差(DHmn)的流程图。Y量化等级是m二{0,2,4,6},UV量化等级是n={0,2,4,6}。在该实例中,随着Daubechies-(7,9)第一级小波系数Wy、wu、Wy和第二级小波系数丽y、WWu、丽,分别在HpY、HpU和HpV子带中变得可用,从这些小波系数并行地汇聚16个D^值。对于Daubechies-(7,9),第二级系数相对于第一级系数縮放到了3/4倍。使用该縮放使得Daubechies-(7,9)小波域平方失真近似于像素域平方失真。对于LeGall-(5,3)变换,该縮放是不必要的。图12中的详细过程类似于图9中的过程。步骤1201将全部16个高通失真寄存器初始化为0。步骤1202到1208在Daubechies-(7,9)第一级小波系数wy上进行操作,并且类似于步骤902到908,其中区别是在步骤1206中縮放到4倍。对于Daubechies-(7,9)第二级小波系数wwy,步骤1209到1215类似于步骤1202到1208,除了步骤1213将第二级小波域失真縮放到3倍。因此相对于第一级系数,步骤1206和1213将第二级系数縮放到了3/4倍。步骤1216到1229在LpU子带上进行操作,并且类似于步骤1202到步骤1215。类似地,步骤1230到1243在LpV子带上进行操作并且类似于步骤1216到1229。因为对于LeGall-(5,3)变换来说縮放是不必要的,所以图12还可以用于使用以下修改在这种小波变换下进行失真估计。将步骤1206和1213改为"^=(Dy)2"。将步骤1220禾P1227改为"DU(DU)2"。将步骤1234和1241改为"Dv=(Dv)2"。以下描述是用于一种降低了低通子带码率计算的复杂度的优化。低通码率计算比16高通码率计算更复杂,因为对于前者的计算,在每个量化等级都重复预测过程。为了理解该重复的影响,可以修改用于以上使用的预测过程的记号,使得an、bn、Cn和xn分别表示用n比特量化a、b、c禾Px。应该注意,a。、b。、c。和x。表示an、bn、cn和xn的原始未量化值。通过定义<formula>formulaseeoriginaldocumentpage17</formula>其中p,qG{a,b,c,x}来开始该过程。在量化等级(Quantization-Level,QL)n的预测过程期间,第一步是计算《(a,c),dn(a,b)并且然后定义minn=bn,如果<formula>formulaseeoriginaldocumentpage17</formula>,=,否则,其中,mirin是QLn上与a距离最近的邻居。最后将QLn残差定义为<formula>formulaseeoriginaldocumentpage17</formula>以前,通过评估全部QLn的dn(a,c)、dn(a,b)、minn和dxn来重新计算dxn的码长。这些评估包括an、bn、cn和xn之间的每个可以长达14比特的二个补码相加。以下优化演示了通常仅需要评估d。(a,c)、d。(a,b)、min。和dx。。据此可以推导出n>0时的dn(a,C)、dn(a,b)、mirin和dxn。该推导包括2比特数字的相力Q,并且因此降低了低通子带码率计算的复杂度。图13示出了优化的低通子带码率计算的过程。该过程是图8中所示的过程的修改,并且依赖于以下说明的OptimizedLPrates过程。图14中的流程图描述了在从0到N的所有量化等级之下,用于低通子带项x的残差码长的优化计算的OptimizedLPrates过程。该过程使用以下输入x,来自当前行的低通子带项,、1v来自前一低通子带行的x的量化后的左上方和上方邻居,c,来自当前低通子带行的x的量化后的左侧邻居,prevQL,前一低通子带行中用于量化an和bn的量化等级,row、col,低通子带中的x的坐标,N,用于当前行的最大量化等级。该过程的输出是向量codeLength,其包含从0到N的全部量化等级之下与x相对应的残差的码长。最初,步骤1401确定x是否是低通子带的第一行和第一列。如果是,那么在全部量化等级上,直接从量化后的值x获得残差而无需从任何邻居进行预测。因此,步骤1403、1404将QLn上的码长计算为将x右移QL的Golomb码长。注意该Golomb码长是由用于确定最重要比特的位置的简单逻辑而获得的。步骤1402使得重复步骤1403、1404以便获得在从0到N的全部量化等级之下的x的码长。如果步骤1401确定x不是在低通子带的第一行和第一列上,那么步骤1406检查x是否在低通子带的第一行上。如果是,那么在全部量化等级上,根据x的量化后的值及其量化后的左侧邻居来预测残差。步骤1407调用图15中所述的加法过程,以将-c与x相加并且获得d。(x,c)以及该计算的进位(carry),所述进位用于从d。(x,c)推导出dn(x,c)。接下来,步骤1408到1411的循环计算在从0到N的全部量化等级之下与x相对应的残差的码长。为了从d。(x,c)推导出dn(x,c),步骤1409将d。(x,c)右移QLn,并且步骤1410调用图16中的a卯lyCorrection过程,该过程通过增加校正项来校正dn(x,c)。图16中的a卯lyCorrection过程接受以下输入'p、q,整数,'QLn,量化等级,.dn(p,q),在QLn上从p到q的估计的距离。假设该估计是通过将d。(p,q)简单地右移QLn计算的,其中通过将加法过程(图15)应用于p和_q来获得d。(p,q)。进位(carries),从前述的计算d。(p,q)的加法过程得到的进位向量。即plyCorrection过程的输出是*dn(p,q),在QLn上从p到q的校正后的距离估计。可以通过从pn减去qn获得该校正后的距离估计。但是,该减法包括将两个14比特数相加并且因此比所建议的仅将2比特的校正项加到dn(p,q)的方法更复杂。codeLen,dn(p,q)的Golomb码长,校正(correction),加到输入dn(p,q)的校正项。最初,步骤1601将校正初始化为0。注意量化过程有区别地处理特定负数以获得更短的熵编码。为了校正输入估计,该过程通过检测该量化过程是否将有区别地处理P(步骤1602)和-q(步骤1604)来说明,并且因此步骤1603和1605更新该校正项。步骤1606确定输入估计dn(p,q)是否包含来自最不重要比特的进位,其中将在生成qn和Pn时丢弃该最不重要比特。如果是,那么应该将该进位合并入校正项(步骤1607),因为由于这些量化后的值将不具有会产生进位的最不重要比特,所以该进位将不会出现在从Pn减去q。的减法中。最后,步骤1608将2比特的校正项与输入估计dn(p,q)相加,以得到校正后的距离估计。还计算校正后的估计的Golomb码长。回到图14,步骤1412确定x。是否是在第一列上但不在第一行上。如果是,那么在全部量化等级上,根据x的量化后的值及其量化后的上方邻居bn来预测残差。在这种情况下,步骤1413首先左移、以得到全精度b,b用于计算与x的距离。然后步骤1413到1418执行类似于步骤1407到1410的动作除了用b来代替c。如果步骤1412确定x。既不在第一行也不在第一列上,那么在全部量化等级上根据x的量化后的值及其量化后的上方邻居bn或量化后的左侧邻居cn来预测残差。在这种情况下,步骤1419首先左移a。和bn,以得到全精度值,所述全精度值用于计算在QL。上与x的距离。接下来,步骤1420使用getUnquantData过程(见图17)来收集与根据未量化的项x、a、b、c计算的残差相关的数据。步骤1421、1423的循环重复derivePostQuantResidual过程(步骤1422和图18),以从getUnquantData过程所返回的数据推导出在QLn上的残差的码长。[O230]为了能够通过derivePostQuantResidual过程(以下说明)来有效地确定dxn的码长,图17中所示的getUnquantData过程接受未量化的子带项x以及x的各个左上方、上方和左侧邻居a、b、c,并输出以下数据d。(a,b)禾口d。(a,c):b禾口c与a的足巨离;以及abCarries禾口acCarriesJ人这些计算得出的各自的进位向量,d。(x,b)禾口d。(x,c):b禾口c与x的足巨离;以及xbCarries禾口xcCarriesJ人这些计算得出的各自的进位向量,min。,从{b,c}选择的最接近a的邻居。如果b和c与a等距离,那么选择c作为等距离情况下的选择(tie-breaker),tie。表示b和c是否与a等距离。如果是则将其置位为1。否则将其复位为0,oppSides表示b和c在数轴上是否是在a的相对侧。如果是则将其置位为1。否则oppSides=0,constMinC表示c是否在全部量化等级上都是最接近a的邻居。如果是则将其置位为1。否则将其复位为O。dif皿st0是d。(a,b)和d。(a,c)之间的差,而diffDistCarries是在计算diffDistO时产生的进位。首先,步骤1701调用图15的加法过程,以计算未量化的与a的距离d。(a,b)、d。(a,c)以及相关的进位abCarries禾口acCarries。该步马聚还将constMinC、oppSides禾口tie。初始化为o。步骤1702检查d。(a,b)和d。(a,c)的符号。如果这些符号不同,那么b和c在数轴的相对侧。步骤1703设置oppSides以存储该信息。接下来,步骤1704调用加法过程,以计算d。(a,b)和d。(a,c)之间的差以及在计算diffDistO时产生的进位diffDistCarries。步骤1705确定b、c是否在a的相对侧。如果是,那么步骤1706检查b和c与a是否等距离。如果是,那么步骤1707置位tie。并且将等距离情况下的选择c分配给min。。如果步骤1706确定b和c与a不是等距离,那么步骤1708检查diffDistO和d。(a,c)的符号。如果这些符号相同,那么c更接近a并且将min。设置为c(步骤1709)。否则b更接近a并且在步骤1710中将b分配给b。回到步骤1705,如果b、c在a的同侧,那么步骤1715到1719使用类似于步骤1706到1710的逻辑来设置tie。和min。。在该逻辑中的实质差别是步骤1708和1717中的符号测试。该测试是不同的,因为符号的极性取决于b、c是在a的同侧还是相对侧。在步骤1707、1709、1710、1716、1718或1719中的任意一个之后,恰当地设置变量tie。和min。,并且用步骤1711和1714来推断getUnquantData过程,其中步骤1711和1714调用图15的加法过程来计算d。(x,b)和d。(x,c)、b和c与x的距离以及从这些计算得出的各自的进位向量xbCarries禾口xcCarries。应该注意,如果步骤1712确定b、c在a的同侧并且量化前的最接近a的邻居是在等距离情况下进行的选择(tie-breakingchoice),那么无需计算d。(x,c)。这是保留顺序属性(order-preservationproperty)的结果,其中保留顺序属性指明右移量化是保留顺序映射。因此,对于任意整数x、y和自然数n,x《y=>(x>>n)《(y>>n)。具体而言,这意味着,在指明的条件下,在全部量化等级上,a、b、c的相对次序保持不变或者退化,使得b、c变得与a等距离。在任意情况下,因为c是等距离情况下的选择,所以最接近的a的邻居是c并且因此在全部量化等级上保持c。因此,步骤1713设置constMinC来指示该情况。图18示出了用于基于getUnquantData过程所提供的数据来计算与指定的QLn上的低通子带项x相对应的残差的derivePostQuantResidual过程。使用以下输入d。(a,b)禾口d。(a,c):b禾口c与a的足巨离;以及abCarries禾口acCarriesJ人这些计算得出的各自的进位向量,d。(x,b)禾口d。(x,c):b禾口c与x的足巨离;以及xbCarries禾口xcCarriesJ人这些计算得出的各自的进位向量,min。,从{b,c}选择的最接近a的邻居。如果b和c与a等距离,那么选择c作为等距离情况下的选择,tie。表示b和c是否与a等距离。如果是则将其置位为1。否则将其复位为0,oppSides表示b和c在数轴上是否是在a的相对侧。如果是则将其置位为1。否则oppSides=0,constMinC表示c是否在全部量化等级上都是最接近a的邻居。如果是则将其置位为1。否则将其复位为O。dif皿st0是d。(a,b)和d。(a,c)之间的差,而diffDistCarries是在计算diffDistO时产生的进位。QLn,指定的量化等级。这些输入用于生成以下输出dxn,在指定QLn上与低通子带项x相对应的残差,codeLength,dxn的Golomb码长。步骤1800首先检查constMinC以确定是否保证c在全部量化等级上都是最接近a的邻居。如果是,那么在QLn上将从bn预测残差。这在步骤1805中通过右移d。(x,b)并且调用图16中的即plyCorrection过程来完成而无需直接相减。如果步骤1800确定不保证c是最接近a的邻居,那么步骤1801将未量化的与a的距离右移并且校正该结果以获得量化后的与a的距离而无需对量化后的数据直接相减。根据这些量化后的与a的距离,该过程首先确定量化后的最接近a的邻居minn。如果步骤1802确定dn(a,b)和dn(a,C)的绝对值相等,那么bn和与an等距离。在这种情况下,步骤1803将等距离情况下的选择c分配给minn。否则,bn和cn与an不等距离如果步骤1802确定在量化后与a距离不相等,并且步骤1807确定b和c在a的同侧并且在量化之前在确定最接近a的邻居时没有出现等距离情况(tie),那么不改变量化后的最接近a的邻居并且因此将min。分配给minn(步骤1808)。这是前述保留顺序属性的另一个结果。然而,如果步骤1807中的测试失败,则存在两种可能性1)量化前所计算的与a的距离相等并且现在不相等,或者2)量化前b和c在a的相对侧。在第一种情况下,该过程必须明确地确定最接近a的邻居,因为它不能假设这是来自未量化数据的等距离情况下的选择c。在第二种情况下,保留顺序足以保证量化后不改变最接近a的邻居。因此在该情况下也明确地确定最接近a的邻居。在这两种情况下,都无需从dn(a,c)减去dn(a,b)就可以有效地确定最接近a的邻居。为了完成这一目的,步骤1809将diffDist。右移从未量化的像素所计算的与a的距离之间的差,并且获得dn(a,b)与dn(a,c)之间的差的估计。通过首次增加来自步骤1801的校正因子corrAc和corrAb,将该估计校正成确切的值diffDistn。然后如果从d。(a,c)-d。(a,b)丢弃的最不重要比特将会在全精度diffDist。计算中产生进位(步骤1810),则降低diffDistn(步骤1811)。在步骤1810之后,diffDistn包含量化后的与a的距离之间的差。如果步骤1812确定该差为0,那么lvcn与an等距离,并且步骤1813将等距离情况下的选择c分配给mi皿。否则因为bn、cn在an的相对侧,diffDistn和dn(a,b)的符号显示bn还是cn是最接近an的邻居(步骤1814)。因此步骤1815或1816将正确的值分配给mirv最后在步骤1803、1808、1813、1815或1816中的任意一个之后,结果是量化后的最接近an的邻居minn。该过程现在可以通过根据minn的预测而不使用直接相减来推导出与Xn相对应的残差。具体而言,如果步骤1804确定minn是c,那么步骤1805右移d。(x,b)并且调用即plyCorrection过程(图16)来得到dxn和codeLength中的Golomb码长。如果minn是b,那么步骤1806使用d。(x,c)代替d。(x,b)执行相同的动作。为了示出图14中的0ptimizedLPrates过程的优点,以下实例将其与未优化的预测过程进行比较,其中需要对每个QLn,其中n属于{0,...,N-lh来重复该未优化的预测过程。将输入比特宽度为m、n比特的加法器表示为(m+n)加法器((m+n)-adder),在QLn上,未优化的过程包括4个[(N-n)+(N-n)]加法器。因此对于n属于{0,...,N-1}的整个预测过程将包括以下每一个中的4个(1+1)加法器、(2+2)加法器.......(N+N)加法器。相反,在图14中,步骤1403、1404、1407、1413、1416和1417可以使用复用器来共享步骤1412和1420中所包括的逻辑。因此,其足以分析步骤1412和1420的硬件要求。图17中的getUnquantData过程包括4个(N+N)加法器(步骤1701、1702、1704、1711和1714)。图18的derivePostQuantResidual过程在QLn上包括4个[(N-n)+(N-n)]加法器(步骤1801、1809、1805和1806)。因此对于n属于{0,...,N-1}的全部QLn,优化后的过程包括5个(N+N)加法器和以下每一个中的4个(1+1)加法器、(2+2)加法器、(3+2)加法器.......((N-l)+2)加法器。假设对这两个实现都使用串行加法器,则(N+N)加法器比(N+2)加法器多4N-8个门。对于n=14,优化后的实现包括1320个门,而未优化的实现包括2296个门。因此,该优化至少节省了42.51%的逻辑门。以下描述了如图9和12中所述的用于改进行的低通和高通部分的失真估计的方法。注意这些失真实际上是小波域失真。小波变换的整数实现是近似正交的,使得小波域失真近似等于实际的像素域失真。(见"OptimalQuantizedLiftingCoefficientsforthe9/7Wavelet"_S.Barua,K.A.Kotteri,A.E.BellandJ.E.Carletta,Proceedingsofthe2004IEEEInternationalConferenceonAcoustics,SpeechandSignalProcessing。)但是,小波逆变换的整数实现所引入的舍入噪声降低了图9和12中所计算的小波域失真估计的准确性。为了减轻该问题,首先要观察到舍入噪声主要影响小波系数的最不重要比特(LSB),因为它们是在整数小波逆变换中舍入的比特。因此,在解码过程期间,本发明的实施例通过在小波逆变换前将逆量化后的小波系数左移N(N二1,2或3)比特,来统一地縮放所述逆量化后的小波系数。这将N个LSB设置为0并且在整数小波逆变换中抑制舍入噪声,从而提高了小波域失真估计的准确性。在小波逆变换后,应该将重构的像素右移N比特以对统一的縮放进行逆縮放。对于qHpY属于{3,4,5,6,7}的Daubechies-(7,9)和LeGall-(5,3)小波变换,通过测量具有和不具有縮放的标准移动视频序列的第一帧的每行上的Y分量失真估计百分比误差来确认改进的失真估计的准确性。接下来,计算全部行上的平均和最大百分比误差。表2显示了表格化的百分比误差降低。qHpY34D7925D7906D7907D7903L5394L5355L5316L5307L530表2从该表可以看出,该縮放降低了失真估计误差,尤其是在较低的在较低的量化等级上舍入噪声往往比量化噪声更大。使用以下方法来改进图3中所示的熵编码器319-334的性能。注意熵编码器是使用简单但有效的Golomb码来实现的,其中Golomb码假设数据是指数分布的。如果已知数据的真实分布,则算术编码器实现比Golomb编码更高的压縮比。(见"ElementsofInformationTheory,,_T.CoverandJ.Thomas,Wiley1991,Pg.104)在现有技术中,算术编码器和解码器采用数据分布的估计。通常将这些估计初始化为均匀分布并且逐渐地朝实际的总体分布会聚。因为该会聚很慢,所以所实现的平均压縮比不会比从Golomb编码器得到的压縮比好太多。事实上,为了获得最高性能,算术编码器一般采用计算复杂的上下文自适应方法(例如,见"StudyoffinalcommitteedraftofjointvideospecificationlTU—TRec.H.264|IS0/IEC14496—10AVC"_T.Wiegand,Dec.2002,AwajiMPEGMeeting)。然而,以下所述的方法显示了如何使用算术编码来改进基于Golomb码的熵编码器的性能。在第一行上,如上所述,编码器使用Golomb编码来对该行进行编码。因此,解码器使用Golomb解码来对该行进行解码。在第n行上,其中n〉l,编码器将第(n_l)行的直方图计算为第n行上的数据的分布的估计。使用该估计来对第n行进行算术编码,该算术编码使用Ba个比特。縮放后平均误差降低5%縮放后的最大误差降低<formula>formulaseeoriginaldocumentpage22</formula>t化等级上,其中同时,编码器还生成第n行的Golomb编码,该编码使用Bg个比特。如果Ba<Bg,那么解码器置位控制位,并发送第n行的算术编码。否则,复位控制位,并且发送该行的Golomb编码。因此,对于第n行来说,解码器检查编码器所发送的控制位。如果置位了控制位,则解码器使用第(n-1)行的直方图作为第n行的算术解码的估计分布。如果复位了控制位,那么解码器应用Golomb解码来恢复第n行。该方案所实现的压縮比通常大于或等于Golomb编码器的压縮比。实践中,第(n-1)行的直方图通常是对于第1行的分布的良好估计,因为视频数据沿垂直轴是高度相关的。该相关性在水平边缘上减少,但是在这些行上,编码器将自动切换到Golomb编码。以下的优化减少了图5中所述的低优先级分组中的比特数量。注意这些分组是通过对图3中的量化后的高通信道HpY、HpU、HpV进行熵编码所获得的。如果潜在数据是指数分布的,使得大部分小波系数聚集在零周围同时小部分小波系数具有较大值,那么Golomb编码器执行良好。这些大系数将具有长的Golomb码并且因此降低了压縮比。高通信道HpY、HpU、HpV中的大的小波系数对应于各个Y、U、V信道中在对应位置上的垂直边缘。这些垂直边缘还导致各个低通信道LpY、LpU、LpV中的不连续性。因此,通过用垂直边缘检测器来处理低通信道,可以对高通信道中的垂直边缘进行预测(见"DigitalImageProcessingusingMatlab"byR.Gonzalez,R.WoodsandS.Eddins,PrenticeHall2004)。从高通信道中减去所预测的垂直边缘将产生残差高通信道,在残差高通信道中垂直边缘被抑制。因此,残差高通信道具有更少的大值小波系数,并且所产生的低优先级分组耗费较少的比特数。为了对这些低优先级分组进行解码,解码器首先对LpY、LpU和LpV信道以及残差高通信道进行解码。接下来,用垂直边缘检测器来处理LpY、LpU和LpV信道,并且将所预测的垂直边缘与残差高通信道相加以获得高通信道HpY、HpU和HpV。该解码过程然后如前所述继续。以下描述了用于图3中的LeGall-(5,3)小波变换的整数实现的新的舍入方法。如JPEG-2000图像压縮标准中所定义的,LeGall-(5,3)小波变换的更新步骤使用floor(x+0.5)来舍入x,其中x是O.25的整数倍,并且floor(y)返回小于实数y的最大整数。(见"AnOverviewoftheJPEG_2000StillImageCompressionStandard,,byM.RabbaniandR.Joshi,SignalProcessing:ImageComm皿ication17(2002)3-48中的公式16.)。通过floor(x+0.5)将[-0.5,0.5)之间的x值映射为0。在硬件实现中,通过将x和0.5与4相乘来将它们转化成整数,得到x'=4x以及2=4*0.5。利用该表示,图19示出了如何实现JPEG-2000图像压縮标准中所定义的floor(x'+2)。现在考虑fix(x+0.5)所描述的舍入方法,其中fix(y)返回最接近y并且在y和0之间的整数。可以看出,利用fix(x+0.5)将(-1.5,0.5)之间的x值映射为0。在硬件实现中,通过将x禾P0.5与4相乘来将它们转化成整数,得到x'=4x以及2=4*0.5。利用该表示,图20示出了如何实现fix(x'+2)。在小波逆变换中,通过一般的逆提升过程,很容易对图20进行逆操作。图20还额外检查和的符号以及额外地加1。然而,如前所述,fix(x+0.5)将(-1.5,0.5)映射到0,而floor(x+0.5)将[-O.5,0.5)映射到零。因此,fix(x+0.5)23将值{-1.25,-1.0,-0.75,-0.5,-0.25,0,0.25}都映射到零,而floor(x+0.5)将值{-0.5,-0.25,0,0.25}都映射到零。注意图4中的熵编码器将最短长度为1的码分配给零值。因此,在更新步骤之后使用JPEG-2000floor(x+0.5)来进行舍入的小波变换将4个值映射到长度为1的码。与之不同的是,所建议的fix(x+0.5)舍入将7个值映射到长度为1的码。因为fix(x+0.5)舍入将更多的值映射到长度为1的最短的熵编码,所以使用利用fix(x+0.5)舍入的小波变换的无损编码比使用JPEG-2000floor(x+0.5)舍入的小波变换提供更大的压縮比。表3证实了该预期。第一列显示了用fix(x+0.5)舍入来无损压縮的38个不同图像的压縮比,第二列显示了使用floor(x+0.5)舍入时获得的压縮比。对于全部38个图像,fix(x+0.5)舍入比floor(x+0.5)舍入提供更大的压縮比。如以上所指出的,与floor(x+0.5)舍入相比,fix(x+0.5)的额外硬件成本非常小。应该强调的是,fix(x+0.5)舍入的好处不是由于死区量化(deadzonequantization)效果(见"VideoCoding-AnIntroductiontoStandardCodecs,,byM.Ghanbari,IEE1999,Pg.26)。具体而言,在有损编码中使用死区来增加量化器的零频带带宽。然而,fix(x+0.5)舍入发生在小波变换中并且即使对于不使用量化器的无损编码也具有好处。<table>tableseeoriginaldocumentpage24</column></row><table><table>tableseeoriginaldocumentpage25</column></row><table><table>tableseeoriginaldocumentpage26</column></row><table>表3最后的优化涉及用于提高视频码率控制性能的方法。以上图6的描述指出使用信道容量估计来获得maxLsize601、maxHsize602、ByPass603、SelectYuv604和SelectTfm605,以将它们索引到提供这些控制信号的值的表中。在实践中,信道容量估计有时候是不可靠的,并且可以通过不使用直接用于视频码率控制的信道容量估计来改进健壮性。从最坏情况CR设置#4开始需要获得大于初始CR的最小的最坏情况CR。然而,如果视频内容类似于gfx图像,那么设置#4将使得系统在图21的gfx曲线2120上的点2124进行操作。因此,平均CR将大于3.5,这比初始CR=2.16大得多。通过监测压縮后的视频分组的大小,本发明的一个实施例可以检测该条件并且知道由于内容相对易于压縮所以该压縮高于必要要求。检测到该条件时,将设置索引(settingindex)减为3,使得其在CR>3的gfx曲线2120上的点2123进行操作。本发明的一个实施例将重复检测过压縮条件并且继续减小设置索引直到到达CR>2.5的gfx曲线2120上的点2121为止。在gfx曲线2120上从点2124移动到点2121将PSNR从大约38dB增加到大约57dB,同时确保CR大于初始CR。前面的描述包含使用对实际的压縮后分组的大小的反馈来提高PSNR。在本发明的另一个实施例中可以使用其它反馈来改变信道条件,以防止发射缓冲器溢出,其中该缓冲器在无线传输之前保持分组。如果请求接收器对全部分组进行确认,那么可以对未确认的分组进行重传。在重传期间,可以增加设置索引以提高CR并且防止由于发射缓冲器在重传期间不会排出而导致的缓冲器溢出。WiMediaMAC规范允许具有协商的时隙,在该时隙期间禁止视频传输(见"WiMediaMAC0.99RC1"byMultibandOFDMAllianceSpecialInterestGroup,2005)。因为这些时隙是预先已知的,所以可以在这种时隙之前、期间和之后立即增加设置索引。并且,该动作也能防止缓冲器溢出,因为在禁止时隙期间发射缓冲器不会排出。最后,可以增加设置索引以防止当缓冲器填充度超过预定义的阈值(例如缓冲器容量的65%)时缓冲器溢出。当没有关于重传、禁止时隙和缓冲器填充度的反馈时,该码率控制方法回到前述操作,在该操作中检测过压縮并且减小设置索引以增加PSNR同时在大于初始CR进行操作。图22根据本发明的实施例示出了用于改进的视频码率控制的固件实现法的流程图。该方法使用对压縮后的分组大小的反馈,以通过检测过压縮来提高码率控制性能。可以通过传输XGA视频(1024X768@60Hz)的实例来说明图22中所述的过程。该视频格式要求1132Mbps的原始比特率。当传输开始时,系统从MAC获得525Mbps的吞吐量估计。因此,初始CR应该大于1132/525=2.16(步骤2201)。对于最坏情况CR,选择设置#4来获得最小的最坏情况CR,其大于初始CR(步骤2202)。利用以设置#4操作的码率控制来生成下一个视频分组(步骤2203)。如果视频内容类似于gfx图像,那么设置#4将使得系统在图21的gfx曲线2120上的点2124进行操作。因此,平均CR将大于3.5,这比初始CR=2.16大得多。通过监测27压縮后的视频分组的大小(步骤2204),可以检测到该条件(步骤2205)以证实由于该内容相对易于压縮所以压縮高于必要要求。检测到该条件时,将设置索引减为3,使得其在CR>3的gfx曲线2120上的点2123进行操作(步骤2206)。该过程将重复检测过压縮条件(步骤2207)并且继续减小设置索引直到其到达图21中CR>2.5的gfx曲线2120上的点2121为止。在gfx曲线2120上从点2124移动到2121将PSNR从大约38dB增加到大约57dB,同时确保CR大于初始CR。图23根据本发明的实施例示出了用于改进的视频码率控制的可替换的硬件实现法的流程图。该方法使用对压縮后的行大小的反馈来检测过压縮。与如上所述的固件实现相比,该硬件实现确保更快速的响应并且因此具有更好的性能。通过清除寄存器unused_bytes_accumulator来开始该过程(步骤2301)。再次参考XGA实例,为了在525Mbps信道上维持传输,目标CR应该是2.16(步骤2302)。因此,理想地,每一行应该最多占用1024*3/2.16=1423字节。当传输开始时,系统选择设置#4,设置#4保证最坏情况CR=2.4(步骤2303)。该设置以4:2:2数据、低通CR=1、高通CR=2来进行视频码率控制,这意味着maxLsize=1024*3*0.25/1.5=512字节maxHsize=1024*3*0.75*0.5/1.5=768字节使用指定的maxLsize和maxHsize码率控制参数对第一行进行编码(步骤2304),在该步骤之后Lsize和Hsize表示压縮后的行的低通和高通子带的实际大小(步骤2305)。在当前实例中,假设Lsize=300、Hsize=400字节:(maxLsize+maxHsize)-(Lsize+Hsize)=1280-700=580字节这表示,压縮后的行比最大可允许大小短580字节。换句话说,该行可以比实际再多使用580字节,而不会违反与设置#4相关的最大1280字节。因此,在步骤2306中,系统将580个未使用的字节分配给寄存器u皿secLbytes—accumulator,使得它们可以被后续行回收利用。步骤2307使用图24中定义的剪辑功能,将unused_bytes_accumulator剪辑成32K字节。接下来,系统设置Al=256字节(步骤2308)、AH=368字节(步骤2309)。因此,当在步骤2304中对下一行进行编码时,视频码率控制将允许其使用对于低通子带,maxLsize+AL=512+256=768字节,并且对于高通子带,maxHsize+AH=768+368=1136字节。因为通过回收利用前面行的部分未使用字节增加了用于该行的有效的最大行大小,所以视频码率控制可以对该行选择较不严格的量化设置。这产生更好的视频质量。不会随着时间而违反525Mbps的吞吐量限制,因为回收利用来自大于2.4的CR的行的未使用字节,使得瞬时带宽要求低于525Mbps。将这些未使用字节分配给将利用更低的CR来压縮的后续行,使得瞬时带宽要求大于525Mbps。然而,能够保证平均带宽要求低于525Mbps,因为系统回收利用未使用字节,使得行小于可允许的最大大小maxLsize+maxHsize=1280字节。(注意1280字节小于保证525Mbps吞吐量的1423字节限制)在实践中,在某些行上瞬间超过525Mbps的带宽限制并不是非常严重的问题,因为在传输之前高优先级和低优先级分组都放在发射缓冲器中。在525Mbps的恒定码率下将会排出足够大的缓冲器而不会溢出,只要分组到达的平均码率不超过525Mbps。前述说明显示,如果有足够大的发射缓冲器,那么瞬间大带宽要求将不会导致缓冲器溢出。为了降低与大缓冲器相关的成本,本发明的一个实施例使用以下技术,用成本低廉大小适中的缓冲器防止缓冲器溢出。1)设置#4在与吞吐量1132/2.4二472Mbps相对应的CR二2.4上进行操作。因此,回收利用的字节将使得平均带宽要求达到472Mbps,但是瞬时带宽要求可以超过472Mbps。然而,瞬时带宽要求不可能在一个持续时间段上超过525Mbps而导致缓冲器溢出。2)步骤2307使用图24中所定义的剪辑功能将unused_bytes_accumulator剪辑成32K字节。通过使该寄存器充满32K字节,本发明的一个实施例对可以回收利用未使用字节的连续行的数量设置了上限。因此,瞬时带宽要求超过525Mbps的连续行的数量也被设置了上限。这降低了缓冲器溢出的可能性。3)步骤2308和2309分别将和AH剪辑成256字节和768字节。这将最大压縮后行大小的上限设置为maxLsize+256+maxHsize+768=2304字节,其对应于瞬时带宽要求2304*8*768*60=849Mbps。因为当瞬时带宽要求超过525Mbps时其上限被限制为849Mbps,所以较不可能导致缓冲器溢出。以上所述的固件和硬件方法涉及基于关于压縮后的分组或行大小的反馈所进行的视频质量改进。然而,可以用其它反馈来对信道条件改变做出反应,以防止在无线传输之前保持分组的发射缓冲器溢出。如果请求接收器对全部分组进行确认,那么可以重传未确认的分组。在重传期间,可以增加设置索引以增加CR并且防止由于发射缓冲器在重传期间不排出而导致缓冲器溢出。WiMediaMAC规范(见"WiMediaMAC0.99RCl"byMultibandOFDMAllianceSpecialInterestGroup,2005)允许具有协商的时隙,在所述时隙期间禁止视频传输。因为这些时隙是预先已知的,所以可以在这种时隙之前、期间和之后立即减少设置索引。并且,这个动作将防止由于发射缓冲器在禁止时隙期间不排出而导致缓冲器溢出。最后,可以增加设置索引以防止当缓冲器填充度超过预定义的阈值(例如缓冲器容量的65%)时缓冲器溢出。当没有关于重传、禁止时隙和缓冲器填充度的反馈时,该码率控制方法回到前述操作,在该操作中检测过压縮并且减小设置索引以增加PSNR同时在大于初始CR进行操作。虽然详细描述了本公开的实施例,但是本领域技术人员应该理解,可以在不超出本发明的精神和范围的情况下对这些实施例进行各种修改、替换和改变。权利要求一种用于视频码率控制的方法,包括步骤接收视频帧的第一有效行;确定用于与所述第一有效行相关的有效视频数据的多个量化参数;向编码系统提供所述多个量化参数,其中,所述多个量化参数用于对所述第一有效行的至少一部分进行编码,以使得编码后的第一有效行的视频码率不超过最大视频码率;以及接收所述视频帧的第二有效行,其中,所述确定用于与所述第一有效行相关的有效视频数据的多个量化参数的步骤至少部分地在所述视频帧的所述第二有效行的水平消隐部分期间执行。2.如权利要求l所述的方法,其中,所述接收第一有效行的步骤包括接收所述第一有效行的低通部分以及接收所述第一有效行的高通部分。3.如权利要求2所述的方法,其中,所述确定用于与所述第一有效行相关的有效视频数据的多个量化参数的步骤包括确定用于所述第一有效行的所述低通部分的至少一个低通量化参数,以及确定用于所述第一有效行的所述高通部分的至少一个高通量化参数。4.如权利要求3所述的方法,还包括接收用于所述第一有效行的所述高通部分的高通最大编码后行大小,以及接收用于所述第一有效行的所述低通部分的低通最大编码后行大小,并且其中确定用于所述第一有效行的所述低通部分的所述低通量化参数的步骤包括比较所述第一有效行的所述低通部分的低通编码后长度是否小于所述低通最大编码后行大小,并且射确定用于所述第一有效行的所述高通部分的所述高通量化参数的步骤包括比较所述第一有效行的所述高通部分的高通编码后长度是否小于所述高通最大编码后行大小。5.如权利要求1所述的方法,其中确定所述多个最佳量化参数的步骤包括接收所述第一有效行的比特率要求;接收初始吞吐量估计;确定初始压縮比;确定大于所述初始压縮比的第二压縮比;以及检测过压縮。6.如权利要求5所述的方法,还包括接收压縮后的视频分组大小;其中所述检测过压縮的步骤包括监测所接收的压縮后的视频分组大小。7.如权利要求5所述的方法,还包括接收压縮后的行大小;其中所述检测过压縮的步骤包括监测所述压縮后的行大小。8.如权利要求5所述的方法,其中,检测过压縮的步骤包括确定实际编码后低通行大小;确定实际编码后高通行大小;将所述实际编码后低通行大小与之前的编码后低通行大小进行比较;以及将所述实际编码后高通行大小与之前的编码后高通行大小进行比较。9.如权利要求8所述的方法,其中,所述之前的编码后低通行大小包括最大编码后低通行大小,并且其中所述之前的编码后高通行大小包括最大编码后高通行大小。10.如权利要求2所述的方法,还包括估计与所述第一有效行的所述低通部分相关的低通像素域失真;以及估计与所述第一有效行的所述高通部分相关的高通像素域失真。11.如权利要求10所述的方法,还包括提供高通变换系数;以及提供低通变换系数,其中,估计所述低通像素域失真的步骤包括縮放所述低通变换系数,并且在执行低通逆变换后进行所述縮放的逆縮放;以及其中,估计所述高通像素域失真的步骤包括縮放所述高通变换系数,并且在执行高通逆变换后进行所述縮放的逆縮放。12.如权利要求2所述的方法,还包括通过预测用于至少一个量化等级的数据,来确定所述第一有效行的所述低通部分的低通编码后长度。13.如权利要求12所述的方法,其中,所述预测用于所述至少一个量化等级的数据的步骤包括基于所述第一有效行的所述低通部分的邻居来进行预测。14.一种基于行的视频压縮方法,包括基于视频帧的行来选择视频格式;基于所述视频帧的所述行来选择小波变换;基于所选择的小波变换来提供所述视频帧的所述行的低通部分和高通部分;接收用于所述视频帧的所述行的所述低通部分和所述高通部分的量化参数;将所述量化参数应用到所述视频帧的所述行的所述低通部分和所述高通部分。15.如权利要求14所述的方法,还包括调节所述低通部分以符合指数分布;以及对所生成的所述低通部分和所述高通部分进行编码。16.如权利要求14所述的方法,其中,所述视频帧包括RGB格式和YUV格式中的一种。17.如权利要求16所述的方法,其中,所述YUV格式包括4:4:4格式、4:2:2格式和4:1:1格式中的一种。18.如权利要求14所述的方法,其中,所述选择小波变换的步骤包括选择Daubechies-(7,9)小波变换和LeGal1-(5,3)小波变换中的一种。19.如权利要求14所述的方法,其中,所述选择小波变换的步骤包括所述小波变换使用预定的图像压縮标准。20.如权利要求19所述的方法,其中,所述选择小波变换的步骤包括使用舍入方法来选择所述小波变换,以提供比使用所述预定的图像压縮标准的所述小波变换更大的压縮比。21.如权利要求15所述的方法,其中,所述编码包括使用基于所述视频帧的所述行在算术编码和Golomb编码之间选择性地进行切换的编码器。22.如权利要求21所述的方法,其中,编码包括使用不利用算术编码所实现的Golomb编码器。23.如权利要求14所述的方法,还包括预测所述高通部分中的垂直边缘;以及通过抑制所述高通部分中的所述垂直边缘,来获得残差高通部分;其中,编码包括对所述残差高通部分进行编码。24.如权利要求23所述的方法,其中,预测所述高通部分中的所述垂直边缘的步骤包括用垂直边缘检测器处理所述低通部分,并且其中,抑制所述高通部分中的所述垂直边缘包括从所述高通部分中减去所预测的垂直边缘。25.如权利要求14所述的方法,还包括生成至少一个高通小波系数;以及生成至少一个低通小波残差。26.如权利要求25所述的方法,还包括对至少一个高通小波系数进行编码;以及对至少一个低通小波残差进行编码。27.如权利要求26所述的方法,其中对所述至少一个高通小波系数进行编码包括Golomb编码。28.如权利要求26所述的方法,其中对所述至少一个低通小波残差进行编码包括Golomb编码。全文摘要本文提供了一种基于行的视频压缩方法。该方法包括算术编码器的基本元件来改进Golomb编码性能。通过对基于行的压缩方法中的操作进行逆操作,可以获得对应的解码器。该方法还提供了一种用于根据量化后的数据生成预测残差的经验驱动的方法,其中预测是在最大相关方向上驱动的,从而不必向解码器提供用于在每个阵列元素上指示该方向的额外数据。还提供了一种基于行的视频码率控制方法。所述基于行的视频码率控制方法包括用于逐个分组地以及逐行地改变系统操作参数的系统反馈。文档编号H04N11/04GK101755464SQ200780045059公开日2010年6月23日申请日期2007年12月7日优先权日2006年12月7日发明者F·C·费尔南德斯申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1