一种h.264码率控制方法

文档序号:7698650阅读:125来源:国知局

专利名称::一种h.264码率控制方法
技术领域
:本发明涉及视频压缩技术,特别涉及视频压缩技术中的一种H.264码率控制方法。
背景技术
:码率控制在视频压缩技术中起着至关重要的作用,它的最终目的是在给定的目标比特率及緩存容量的条件下,能够有效地抑制视频序列的质量波动并减少跳帧次数,从而使得传输的视频质量最优化。H.264是由联合视频组(JVT)近年来致力开发研究的最新视频压缩国际标准,在采用H.264的^L频压缩标准进行码率控制的时候,由于压缩过程中产生的量化参数(QP)既用于码率控制过程,又用于率失真优化过程,因此会产生"蛋鸡悖论"的问题为了计算当前宏块的率失真优化(RDO),需要利用当前宏块的QP,而当前宏块的QP需要通过计算该宏块的平均绝对差(MAD)来揭示其编码复杂度,每个当前宏块的MAD只有在得知其RDO后才能计算出。因此,如何解决"蛋鸡悖论"成了H.264码率控制过程中的当务之急。目前,H.264采用了JVT-G012码率控制算法,该算法通过使用MPEG-2中的二次码率一量化步长(R-Q)模型来计算量化步长(Q),从而得到最后的QP。在计算Q之前,还需要计算二次R-Q模型中的各个参数,算法的具体实现过程如下1、采用线性MAD预测^^莫型对当前宏块的MAD进行线性预测,得到当前宏块的MAD预测值。2、采用光栅扫描的方式来选择二次R-Q模型系数更新时的历史数据点,在选取好历史数据点之后,即可采用线性回归方法对二次R-Q模型的系数进行更新,从而得到新的二次R-Q模型。3、将前一帧的平均头信息比特数和当前帧中已编码宏块的平均头信息比特数进行加权平均,并将加权平均后的结果作为当前宏块的头信息比特数预测值。4、采用如下公式对当前宏块的预分配码率进行预测,其中,i为当前宏块在当前帧中的序号;Num为当前帧中总的宏块数;《为当前宏块的预分配码率预测值;R为当前帧的预分配码率;似JZ^(/)为当前宏块的MAD预测值;M」Z^(A:)为当前帧中第k个宏块的MAD预测4直。5、将通过上述4个步骤中得到的各参数代入如下所示的二次R-Q模型中,即可得到当前宏块的Q,其中,W^D,为当前宏块的MAD预测值;al和a2为由线性回归方法得到的更新后的系数,在每次完成对一个宏块的编码后,都需要通过线性回归方法对它们的值进行更新;H,为对当前宏块的头信息比特数预测值;《为对当前宏块的预分配码率预测值;g,.为由计算得到的当前宏块的Q。将计算得到的g,.转化为gf,即得到了当前宏块的QP。为了进一步减少编码过程中的出现的块效应,还需要对2f进行调整,并将调整后的QP作为当前宏块的QP。由上述分析看出,应用JVT-GO12码率控制算法可以解决H.264码率控制过程中产生的"蛋鸡悖论"问题,但该算法又存在着不足对于MAD预测模型来说,MAD预测时所使用的线性预测才莫型只利用了时域相关性,空域相关性没有得到利用;同时,MAD预测模型的系数在7=7x7更新时历史数据点选取采用的是光栅扫描的方式,也没能充分并且正确地使用空时域相关性;对于二次R-Q模型的系数来说,系数更新时历史数据点的选取采用的是光栅扫描的方式,不仅没有应用时域相关性,空域相关性也应用得不准确;对于当前宏块头信息比特数来说,头信息比特数预测值采用的是前一帧的平均头信息比特数和当前帧已编码宏块的平均头信息比特数的加权平均,对于H.264来说,由于编码的结构变得更复杂,头信息比特数增多,并且不同宏块之间的头信息比特数波动很大,所以原有的头信息比特殊预测方法并不适用于H.264;对当前宏块预分配码率来说,由于MAD预测的局限性,导致了在对预分配码率进行预测时,也不能很好地利用空域相关性。由于目前的JVT-G012码率控制算法在上述方面的不足,因而导致了计算得到的QP不合理,使得最终码率控制不准确以及编码视频质量的下降。为了提高JVT-G012码率控制算法的性能,采用的改进的算法有对于MAD预测模型,可以在MAD预测才莫型的系数更新时更好地利用空域关系,但由于MAD预测模型本身并没有很好地利用空域相关性,因此,算法性能提高不大;也可以在MAD预测时采用时域和空域上的已编码相邻宏块,但由于已编码相邻宏块的选取不能很好地反映视频内容,算法性能受到很大的限制;还可以在使用JVT-G012线性MAD预测模型的同时引入空域线性MAD预测才莫型,虽然空^4线性MAD预测才莫型的引入充分利用了空域的相关性,但两种模型的更新过程使得计算复杂度更高。对于R-Q模型系数,可以根据距离远近选取系数更新时所需的历史数据点,但仅仅根据距离判断相关性的大小并不能很好地反映视频内容特性,所以算法性能还有提高的空间。对于当前宏块头信息比特数,可以对头信息比特数采用前一帧相同位置上的宏块的头信息比特数来预测,但由于空域相关性没有得到很好的利用,所以准确性有待提高。因此,目前的JVT-G012码率控制算法及其改进算法在性能或计算复杂度上都存在缺陷,以至于算法性能不佳或者实际应用困难。
发明内容有鉴于此,本发明的主要目的在于提供一种H.264码率控制方法,能够克服JVT-G012码率控制算法及其改进算法在性能或计算复杂度上存在的缺陷,实现最有效的码率控制。为达到上述目的,本发明的技术方案具体是这样实现的一种H.264码率控制方法,用于依次对当前P帧中的每个当前宏块进行码率控制,包括A、判断当前宏块是否是当前P帧中的第一个宏块,如果是,将前一帧的平均QP作为当前宏块的QP,并执行步骤D,否则,执行步骤B;B、计算当前宏块的边缘方向,并利用所述边缘方向预测当前宏块的平均绝对误差MAD、根据已编码宏块的历史信息更新二次码率一量化步长R-Q模型系数、确定当前宏块的头信息比特数预测值和预分配码率;C、根据所述当前宏块的MAD预测值、头信息比特数预测值和预分配码率,利用更新系数后的二次R-Q模型,确定当前宏块的QP;D、纟艮据当前宏块的QP对当前宏块进行编码,并更新所述编码后的当前宏块的历史信息,用于当前宏块之后的其它宏块的二次R-Q模型系数更新,所述历史信息包括码率R、头信息比特数H、实际MAD值和量化步长Q。由上述的技术方案可见,本发明码率控制方法在对当前宏块进行码率控制时首先计算当前宏块的边缘方向,再利用计算出的边缘方向对当前宏块的MAD值进行预测,相对于现有的MAD预测;漠型,可以更有效地利用时域和空域上的相关性,克服了JVT-G012码率控制算法及其改进算法在性能上存在的缺陷,实现了更有效的码率控制。图1为本发明所采用的码率控制方法的流程图。图2为本实施例二次R-Q模型系数更新时历史数据点的选择示意图。.图3为本实施例当前宏块及根据其边缘方向所选择的相邻宏块示意图。图4为对"akiyo"序列采用本实施例方法与JVT-G012算法仿真后的逐帧PSNR比较示意图。图5为对"Mot&Dau"序列采用本实施例方法与JVT-G012算法仿真后的逐帧PSNR比较示意图。图6为对"akiyo"序列采用本实施例方法与JVT-G012算法仿真后的逐帧緩冲区状态比较示意图。图7为对"Mot&Dau"序列采用本实施例方法与JVT-G012算法仿真后的逐帧緩冲区状态比较示意图。具体实施例方式为解决现有技术中存在的问题,本发明提出一种全新的H.264码率控制方法,即利用当前宏块的边缘方向来对当前宏块进行码率控制的方法。在视频图像的处理中,可以确定当前宏块的边缘方向,并且与当前宏块相邻的宏块中,相同边缘方向上的宏块在空域上有较强的相关性,通过确定当前宏块的边缘方向就可以确定与当前宏块空域相关性较强的宏块,利用这些相关性较强的宏块对当前宏块进行预测,从而相对于现有JVT-G012算法,使得对当前宏块的预测更加准确、码率控制更加有效。基于上述介绍,本发明所述方案的具体实现包括A、判断当前宏块是否是当前P帧中的第一个宏块,如果是,将前一帧的平均QP作为当前宏块的QP,并执行步骤D,否则,执行步骤B;B、计算当前宏块的边缘方向,并利用所述边缘方向预测当前宏块的平均绝对误差MAD、根据已编码宏块的历史信息更新二次码率一量化步长R-Q模型系数、确定当前宏块的头信息比特数预测值和预分配码率;C、根据所述当前宏块的MAD预测值、头信息比特数预测值和预分配码率,利用更新系数后的二次R-Q模型,确定当前宏块的QP;D、根据当前宏块的QP对当前宏块进行编码,并更新所述编码后的当前宏块的历史信息,用于当前宏块之后的其它宏块的二次R-Q模型系数更新,所述历史信息包括码率R、头信息比特数H、实际MAD值和量化步长Q。为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细il明。需要说明的是本发明所提供的码率控制方法适用于宏块层的码率控制,且除第一个图像组(GOP)层的第一个P帧外的其他P帧,均可以采用本发明的码率控制方法进行处理。其中,对于第一个GOP层的第一个P帧,可以采用现有的码率控制方法(如JVT-G012算法中关于该帧的码率控制方法)进行处理。图1为本发明所采用的码率控制方法的流程图。在图l所示的码率控制方法中,对除第一个GOP层的第一个P帧外的其他所有P帧,每帧的码率控制过程均相同,在下面的实施例中,仅以其中任一当前帧为例,对本发明的码率控制方法进行描述。如图l所示,该方法包括以下步骤步骤100:将当前帧的第一个宏块作为当前宏块。步骤101:判断当前宏块是否是当前帧中的第一个宏块,如果是,则执行步骤102;否则,执行步骤103。对于当前帧中的第一个宏块,由于本帧中不存在已编码完成的其他宏块,因此如果采用与其他宏块相同的确定QP的方法,则在更新R-Q模型系数时所利用的历史数据点仅为时域相关的历史数据点,而不存在空域相关的历史数据点,这样对于R-Q模型系数的更新是不准确的,从而依据该模型系数确定的QP也是不准确的。因此,本发明中,对于当前帧中的第一个宏块和其他宏块,计算QP的方式有所不同。步骤102:将前一帧的平均QP作为当前宏块的QP,并执行步骤109。在当前宏块为当前帧中的第一个宏块时,将前一帧的平均QP作为当前宏块的QP,利用该平均QP对当前宏块进行步骤109中的宏块编码。步骤103:使用Sobel算子计算当前宏块的边缘方向。由于空域距离上相近的宏块中,相同边缘方向上的宏块在空域上具有较强的相关性,因此可以通过确定当前宏块的边缘方向,较为准确地确定与当前宏块相关性4交强的宏块,从而准确地应用空域相关性,可以解决JVT-G012算法及其改进算法中存在的不足。通过本步骤计算当前宏块的边缘方向,进而在后续步骤中可以利用该确定的边缘方向确定与当前宏块相关性较强的其他宏块位置。在视频图像处理中,可以利用多种方式计算当前宏块的边缘方向,本实施例中,以利用苏泊尔Sobel算子计算边缘方向为例进行说明,其具体计算过程如下(一)计算当前宏块中指定像素的亮度分量;^.对应的边缘向量、以及该边缘向量对应的幅度值爿m」D(。,.y)和方向);其中,指定像素是指当前宏块中除去边缘一圈像素之外的其他像素,假定当前宏块尺寸为N*M,则指定像素为水平方向上的第二个到第M-l个、且垂直方向上第二个到第N-l个像素,共(N-2"(M-2)个像素。具体地,将当前宏块中任一指定像素的亮度分量p。.对应的边缘向量A,—0兀」定义为<=+2xp,.J+I+_一2x_p叫w少w=+2x+A化川-A-,."_2xP,.—,j_'其中,i=l,......,N-2,......,M-2,iVxM是宏块的尺寸,所述^c,乂表示边缘向量Aj的水平分量,所述办".表示边缘向量力".的垂直分量。则任一指定像素的边缘向量对应的幅度值爿wp(A」和方向Jwg(A」分别为(二)根据当前宏块指定像素的边缘向量对应的幅度值和方向,计算当前宏块的边缘方向;具体地,当前宏块的边缘方向直方图公式为在本实施例中,当宏块中像素的边缘向量对应的方向在a。范围内时,定义该像素的边缘方向为90。;当宏块中像素的边缘向量对应的方向在^范围内时,定义该像素的边缘方向为0。;当宏块中像素的边缘向量对应的方向在cv范围内时,定义该像素的边缘方向为45。;当宏块中像素的边缘向量对应的方向在"3范围内时,定义该像素的边缘方向为-45°。由边缘方向直方图公式即可得到当前宏块中相同边缘方向上的像素的边缘向量对应的幅度值之和,则直方图中具有最大幅度值的边缘方向即为当前宏块的边多彖方向。本实施例中,采用的当前宏块大小为16x16。这里所提到的直方图,是指以二维图形的形式表示出当前宏块中具有不同边缘方向的像素点的边缘向量的幅度和在不同取值上的分布情况。筒单说,直方图中的横轴用于表示各像素点的边缘方向可能的取值90。、0°、45°和-45。,纵轴用于表示不同的取值分别对应的像素点的边缘向量的幅度之和。如何建立直方图为现有技术,这里不再赘述。至此,即可以得到当前宏块的边缘方向。需要说明的是,本发明在确定边缘方向时,并不仅限于采用Sobel来计釘(A)e{fc小"g(A,,)"p"0,1,2,3},<(—90。,—67.5。]U(67.5。,90(-22.5。,22.5。](22.50,67.5。](-67.50,-22.5。]算当前宏块的边缘方向,也可采用其它的方式来计算当前宏块的边缘方向,同样能够实现本发明提高码率控制准确性的目的。步骤104:对二次R-Q模型的系数进行更新。本实施例采用了与现有技术相同的二次R-Q模型,且二次R-Q模型的系数默认值是O和l,在对二次R-Q模型系数进行更新时,需要选取合适的历史数据点,进而采用线性回归方法对系数进行更新。这里历史数据点的信息包括了已编码宏块的码率,已编码宏块的头信息比特数,已编码宏块的实际MAD值以及已编码宏块实际的Q。具体对二次R-Q模型系数进行更新时,可以采用JVT-G012算法中按照光栅扫描顺序来选择更新时所需的历史数据点。进一步地,为了能获得更精确的R-Q模型系数,优选地,在选取用于更新R-Q模型系数的历史数据点时,也可以考虑宏块间的相关性,即根据当前宏块的边缘方向对历史数据点进行选择,具体地,沿步骤103确定的当前宏块的边缘方向,确定与当前宏块相关性最强的多个已编码宏块,将这些已编码宏块作为历史数据点,将这些已编码宏块的实际码率R、头信息比特数H和实际MAD值以及量化步长Q代入R-Q模型,从而确定R-Q模型的系数。在具体按照边缘方向选择相关性最强的多个历史数据点(即已编码宏块)时,选择的历史数据点的个数,一方面要考虑对于R-Q模型系数更新的准确性,另一方面要考虑计算复杂度,从而折衷确定一个合适的历史数据点个数,既保证R-Q模型系数的准确性,又将计算复杂度控制在系统可接受的范围内。本实施例中,给出一个优选的历史数据点的选择方案。在该历史数据点的选择中,优选地选择15个历史数据点,具体地假设在当前帧已编码宏块以及前一帧中始于当前宏块相同位置的宏块,止于光栅扫描顺序最后一个宏块间的所有宏块组成一个平面,以当前宏块为原点,一个宏块为基本单位,则当边缘方向为边缘方向为90。时,所选取的历史数据点为x轴坐标属于集合义={-2,-1,0,1,2},y轴坐标属于集合14少={-1,0,1}内的所有宏块;当边缘方向为0。时,所选取的历史数据点为x轴坐标属于集合义={-1,0,1},y轴坐标属于集合_y={-2,-1,0,1,2}内的所有宏块;当边缘方向为45。时,所选取的历史数据点为x轴坐标属于集合x={-1,0,1},y轴坐标属于集合>;={-1,0,1}内的所有宏块,以及坐标集合(xj)"(-2,-l),(-2,-2),(-l,-2),(l,2),(2,2),(2,l》内的所有宏块;当边缘方向为-45°时,所选取的历史数据点为x轴坐标属于集合义={-1,0,1},y轴坐标属于集合少={-1,0,1}内的所有宏块,以及坐标集合{(—2,1),(-2,2),(_1,2),(1,—2),(2,—2),(2,—1)}内的所有宏块。图2为本实施例二次R-Q模型系数更新时历史数椐点的选择示意图。如图2所示,空白的方格代表了当前帧中的宏块,画斜线的方格代表了前一帧中的宏块,历史数据点的个数为15,数字0-14代表了历史数据点的选择顺序,且数字0所在的宏块为当前宏块,其中a0、al、a2和a3分别示出了当前宏块的边缘方向是90°、0°、45°和-45°时历史数据点的选择。在根据边缘方向选取好历史数据点之后,即可采用线性回归方法对二次R-Q模型的系数进行更新,如何应用线性回归方法进行更新为现有技术,这里不再赘述。需要说明的是,在图像的边界区域,可供选择的历史数据点的个数会减少,由此,历史数据点的选取个数也相应地减少,为了保证二次R-Q模型有足够用于更新的历史数据点,本实施例中历史数据点选择方案的最小值为12个,当依据上述选择方案选择出的历史数据点个数不能满足所需的最小值时,还需选取空域上与当前宏块距离最近的宏块,所选取的宏块个数以满足经验最小值为准。相比于现有的光栅扫描选择历史数据点的方式,上述根据边缘方向选择历史数据点的方式,很好地考虑了由边缘方向确定的宏块在空域上的相关性以及在不同时域上的不同位置间的宏块之间的相关性,因此,能够获得更准确的R-Q模型系数,继而,使得最终的码率控制结果也更加准确。步骤105:根据步骤103确定的当前宏块的边缘方向,对当前宏块的MAD进行预测,并保存当前宏块的空域预测MAD值、时域预测MAD值和最终的预测MAD值。本实施例中采用了基于当前宏块的边缘方向来分别对当前宏块的时域MAD和空域MAD进行预测,进而将时域预测MAD值和空域预测MAD值进行加权平均的方法,由于边缘方向反映了相邻宏块间的相关性,因此,相对于目前的MAD预测模型,本实施例中通过边缘方向来选取宏块的预测才莫型能更好地对当前宏块的MAD值进行预测。图3为本实施例当前宏块及根据其边缘方向所选择的相邻宏块示意图。如图3所示,(a)为当前宏块及根据其边缘方向所选择的空域相邻宏块示意图。其中,sO是当前帧中当前宏块,sl,s2,s3和s4为由当前宏块根据当前宏块的边缘方向所选择的空域相邻宏块,根据当前宏块的边缘方向不同,又有aO,al,a2和a3四种不同的情况,当边缘方向为90。时,当前宏块sO所选择的是a0中的空域相邻宏块sl,s2,s3和s4,同样地,当边缘方向分别为0°,45°或-45°时,当前宏块分别选"l爭al,a2或a3中的空域相邻宏块sl,s2,s3和s4。通过边缘方向得到了当前宏块的空域相邻宏块之后,即可以在空域中对当前宏块的MAD值进行预测。i殳在图3(a)中所选择的空域相邻宏块sl,s2,s3和s4的实际MAD值分别为MAD^,^WI\i2,M4L^和M4D^,则当前宏块的空域预测MAD值M^D:,.为M^D二.=(尸1M4化h+尸2^4/^2+尸3M4D^+尸4M4i^i4)/(尸1+尸2+尸3+7M),其中,Pl、P2、P3、P4为大于零的实数,它们的大小反映了当前宏块与所选择的空域相邻宏块相关性的大小,值越大,表示与该空域相邻宏块的相关性越大,反之,则相关性越小。根据大量仿真结果,得到了一组较佳的P值,即当P^3,P2=l,P3=l,P4-l时,可以使对MAD值进行预测后得到更精确的码率控制结果。图3(b)为本实施例当前宏块及根据其边缘方向所选择的时域相邻宏块示意图。在图3(b)中,t0是前一帧中与当前帧中当前宏块同一空域位置上的宏块,tl和t2是当前宏块根据所述边缘方向在前一帧中所选择的时域相邻宏块,同空域相邻宏块的选择一样,纟艮据当前宏块的边缘方向不同,也有a0,al,a2和a3四种不同的情况,即当边缘方向为90。,0°,45。或-45。时,分别选择了a0,al,a2或a3中的tl和t2作为当前宏块所选择的时域相邻宏块。通过边缘方向得到了当前宏块的时域相邻宏块之后,即可以在时域中对当前宏块的MAD值进行预测。设M^4ZVi,。,A^A,和^4"卜^分别是前一帧图像中t0,tl和t2的实际MAD值,则当前帧中与前一帧中的t0相同位置的当前宏块的时域预测MAD值A"",为M4《=fel羅w。+22磨h"+,L,2)/fel+22+0),同空域预测时一样,Ql、Q2、Q3为大于零的实数,它们的大小反映了当前宏块与所选择的时域相邻宏块相关性的大小,值越大,表示与该时域相邻宏块的相关性越大,反之,则相关性越小。根据大量仿真结果,得到了一组较佳的Q值,即当Ql=4,Q2=l,Q3=l时,可以使对MAD值进行预测后得到更精确的码率控制结果。由此,当前宏块的预测MAD值M4i)/"即为空域预测MAD值和时域预测MAD值M4Z):,.的加权平均,计算公式为M4《=rxM4Z)〔,.+(1-a)xM4Z),.,其中,a是自适应权重,它用于比较当前宏块在空蜂预测MAD值和时域预测MAD值相关性的大小,若a大,则代表了空域相关性大,反之,时域相关性大,它的详细计算流程如下设bl、b2、b3和b4分别为当前帧中当前宏块的左边,左上,上方以及17右上的相邻宏块,它们的实际MAD值分别为MJZ^M、^^i\ft2、A^Z\M和M4Z\M,空域预测MAD值分别为MAD:、M^D:i2、M4Z):,m和A"""4,时域预测MAD值分别为M^D:61、Af^D"2、71"£>"3和71""力4,时域_空域比重参数分别为KJw、X^和X^,则有如下形式的伪代码M4A力,—歸"M4A"—細L>2MIfThen^w=1Elseif|雄A,w-I-—A,w-雄《wI<_Then=-lE1se1=0其中,i=l,2,3,4;Thd的经验值为1.5,是通过多次仿真得到的结果。进一步地,自适应权重"由;i^,.决定,公式为1/3,当HU2时a^2/3,当Z:,;^,.<—2时,其中,"的初始值为1.5。1/2,其它需要说明的是,本实施例中,给出了一种计算a的方法,也可采用其它的计算方法,以能反映出空时域相关性大小为准。另外,在上述计算当前宏块的空域预测MAD值和时域预测MAD值时,分别采用了4个空域相邻宏块和3个时域相邻宏块的实际MAD值进4亍计算。这是在均衡考虑实现复杂度和MAD值预测准确性后,折衷得到的相邻宏块数目。当然,根据不同的系统设计要求,还可以采用其他数量的相关牲最强的空域或时域相邻宏块,对这些空i或或时域相邻宏块的实际MAD值耳又加一又平均,得到空域或时域预测MAD值。具体根据边缘方向选择不同数目的相关性最强的空域相邻或时域相邻宏块的方式,可以参考上述介绍的方式进行扩展,本领域技术人员均可以实现,这里就不再赘述。上述即为本发明中进行MAD预测的具体方式,其中,对MAD预测模型进行了修订,利用空域预测MAD值和时域预测MAD值的加权平均作为最终的预测mad值,其中空域预测mad值和时域预测mad值分别为才艮据边缘方向选择的空域和时域相关性最强的多个相邻宏块的实际mad值的加权平均。可见,上述mad预测模型简单,同时也充分准确地利用了空域和时域上的相关性,相对于
背景技术
中描述的jvt-g012码率控制算法的改进算法中引入的新空域mad预测模型,大大降低了计算复杂度,并且同样保证了码率控制性能的提高。步骤106:对当前宏块的头信息比特数进行预测。对当前宏块进行码率控制时,需要知道当前宏块的头信息比特数,本实施例中采用了由当前宏块的边缘方向对宏块的头信息比特数进行预测的方法,公式计算如下其中,i是当前宏块在当前帧中的宏块序号,//,是当前宏块的头信息比特数预测值,//厂是前一帧中与当前宏块相同位置上的宏块的实际头信息比特数,///是根据当前宏块的边缘方向所选取的相关性最强的空域相邻宏块的实际头信息比特数,a是自适应权重,它的意义在前面已进行了详细介绍,在此不再赘述。在本实施例中,也可釆用与jvt-g012算法相同的头信息比特数预测方法。同样地,由于jvt-g012算法中并没有考虑宏块间的相关性,因此,码率控制的效果不如根据边缘方向进行头信息比特数预测时准确。步骤107:计算当前宏块的预分配码率。为了对宏块进行码率控制,同样需要知道当前宏块的预分配码率,它的计算公式为w,其中,Num是当前帧中总的宏块个数;所述^,.是当前帧中第i个宏块的预分配码率;所述71£41^7/是当前帧中第i个宏块的mad预测值;所述197l"£>4—^是前一帧中第j个宏块的MAD实际值;所述T是当前帧中第i-l个宏块编码后剩余的可供分配码率;所述7^。""'是当前帧中第i个宏块按照边缘方向选取的相关性最强的已编码空域相邻宏块的实际码率;所述a是自适应权重,它的定义同上。同样,本实施例中也可采用与JVT-G012算法相同的预分配码率预测方法。由于在JVT-G012算法中预测码率时并没有考虑空域上的预分配码率,也没有考虑宏块间的空时域相关性,因此,码率控制的效果不如根据边缘方向进行预分配码率预测时准确。步骤108:计算当前宏块的QP并对其进行调整。将步骤104、105、106、107中的结果代入二次R-Q模型中,得到量化步长2,并进一步地将G转化为Q《,即为当前宏块的QP。同现有技术一样,为了减少编码过程中的块效应,也需要对gf进行调整,调整后的值即为当前宏块的QP。步骤109:对得到QP的当前宏块进行编码。在得到了当前宏块的QP后,即可以根据所述QP对当前宏块进行率失真优化,从而使得当前宏块在众多编码方式中选择一种进行编码,可以使得代价函数计算结果最小。需要说明的是,率失真优化为现有技术,在此不再赘述。步骤110:对当前宏块的历史信息进行更新。在完成对一个宏块的编码后,保存该宏块的Q,利用该宏块的实际头信息比特数更新步骤106中预测得到的头信息比特数,利用该宏块的实际码率更新步骤107中预测得到的码率,利用该宏块实际的MAD值更新步骤105中预测得到的最终的MAD预测值,其余的该宏块的空域预测MAD值和时域预测MAD值等信息不变。在本实施例中,对编码后宏块的历史信息进行更新的目的是为了在对二次R-Q模型系数进行更新时选取合适的历史数据点,从而使得对每个宏块进行码率控制时所采用的R-Q模型是不同的,进一步地可以得到更精确的码率控制结果。步骤lll:判断本帧编码是否结束。在对编码后宏块的历史信息进行更新后,还需要进一步判断该帧是否编码结束,也即该帧中的宏块是否都被编码,如果是,则结束本流程;否则,将当前宏块的下一个宏块作为当前宏块,返回步骤101。至此,即完成了本发明所述的宏块层码率控制方法的过程。需要进一步说明的是,本实施例中所述的码率控制方法只适用于H.264编码标准中宏块层的码率控制,GOP层与帧层的码率控制方法与JVT-G012算法一致,这里不再赘述。以H,264相关软件JM9.4作为平台,分别采用本实施例中的宏块层码率控制方法与JVT-G012算法对序列进行仿真,表1示出了本发明码率控制方法与JVT-G012算法的仿真结果。其中,测试序列为QCTF格式,只有第一帧设为I帧,且不考虑跳帧,运动估计的精度为l/4像素,参考帧的数目为1,搜索范围为16,开启RDO和CABAC,每个序列测试150帧,帧率为15&s,表l中的测试序列"Akiyo"、"Mot&Dau"、"Container"、"Carphone"、"News"、"Claire"^乂及"Foreman"分别代表了内容不同的图像。从表l中可以看出,采用本实施例方法时所有测试序列的平均PSNR都比采用JVT-G012算法时高,并且码率控制的结杲也更力口准确。图4为对"akiyo"序列采用本实施例方法与JVT-G012算法仿真后的逐帧PSNR比较示意图。图5为对"Mot&Dau"序列采用本实施例方法与JVT-G012算法仿真后的逐帧PSNR比较示意图。从图4及图5中可以得出与表l同样的结论,即采用本实施例方法时的PSNR要明显高于采用JVT-G012算法时的PSNR。图6为对"akiyo"序列采用本实施例方法与JVT-G012算法仿真后的逐表1本发明码率控制方法与JVT-G012算法的仿真结果<table>tableseeoriginaldocumentpage22</column></row><table>帧缓冲区状态比较示意图。图7为对"Mot&Dau"序列釆用本实施例方法与JVT-G012算法仿真后的逐帧缓冲区状态比较示意图。从图6与图7中可以看出,采用本实施例方法时的緩沖区占用量要比采用JVT-G012算法时更接近目标占用量,从而采用本实施例方法可以更精确地控制码率。总之,本发明码率控制方法在对不是当前帧中第一个宏块的当前宏块进行码率控制时,首先应用Sobel边缘算子计算当前宏块的边缘方向,再根据所述边缘方向对当前宏块的MAD进行预测,将预测后的MAD值与对当前宏块采用的二次码率—量化步长R-Q模型的进行更新后的系数、对当前宏块进行预测后的头信息比特数以及对当前宏块进行计算后的预分配码率一并代入二次R-Q模型,得到当前宏块的QP。采用本发明所述的方法,相对于现有的码率控制方法,可以更有效地利用时域和空域上的相关性,克服了JVT-G012码率控制算法在性能上存在的缺陷,实现最有效的码率控制。同时,在利用边缘方向进行当前宏块的MAD预测时,该预测才莫型简单,使得整个MAD预测过程,相对于JVT-G012码率控制算法的改进算法,计算复杂度大为降低,并同样准确地利用了空域相关性,保证性能上的提高。更进一步地,在进行R-Q模型系数更新中历史数据点的选择、当前宏块头信息的预测和码率的预分配,同样可以根据边缘方向进行,从而提高了R-Q模型系数、头信息预测和码率预分配的准确性,进一步提高了码率控制的准确性。综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。权利要求1、一种H.264码率控制方法,用于依次对当前P帧中的每个当前宏块进行码率控制,其特征在于,该方法包括A、判断当前宏块是否是当前P帧中的第一个宏块,如果是,将前一帧的平均QP作为当前宏块的QP,并执行步骤D,否则,执行步骤B;B、计算当前宏块的边缘方向,并利用所述边缘方向预测当前宏块的平均绝对误差MAD、根据已编码宏块的历史信息更新二次码率-量化步长R-Q模型系数、确定当前宏块的头信息比特数预测值和预分配码率;C、根据所述当前宏块的MAD预测值、头信息比特数预测值和预分配码率,利用更新系数后的二次R-Q模型,确定当前宏块的QP;D、根据当前宏块的QP对当前宏块进行编码,并更新所述编码后的当前宏块的历史信息,用于当前宏块之后的其它宏块的二次R-Q模型系数更新,所述历史信息包括码率R、头信息比特数H、实际MAD值和量化步长Q。2、如权利要求1所述的方法,其特征在于,步骤B中所述当前宏块的边缘方向是通过苏泊尔Sobel算子来进行计算的。3、如权利要求2所述的方法,其特征在于,所述利用所述边缘方向预测当前宏块的MAD包括根据所述当前宏块的边缘方向选择与当前宏块相关性最强的Nl个已编码的空域相邻宏块Sl,S2,S3…,Sn"将所述N1个已编码的空域相邻宏块的实际MAD值的加权平均作为当前宏块的空域预测MAD值M^D二;根据所述当前宏块的边缘方向选择与当前宏块的相关性最强的N2个已编码的时域相邻宏块tG,、,...,tNw,将所述N2个已编码的时域相邻宏块的实际MAD值的加权平均作为当前宏块的时域预测MAD值MJ",.;将当前宏块的空域预测MAD值MviD:,.和时域预测MAD值MJ",.进行加权平均,得到当前宏块的预测MAD值M4Df,M4《=axM4Z):,.+(1-a)xM4Z)二,,其中,所述i表示当前宏块在当前帧中的序号;所述a是自适应权重,用于表示当前宏块的空域预测MAD值和时域预测MAD值在MAD预测中所占比例的大小。4、才艮据权利要求3所述的方法,其特征在于,Nl=4,N2=3;M4D"=(尸lil^Z)^+尸2M^4Z^2+P3M^DM3+尸4^^^0^4)/(尸1+尸2+i33+尸4),其中,M^C^,A£4i^2,M^C^和M^D^分别为sl,s2,s3和s4的实际MAD值,Pl、P2、P3、P4分别为sl,s2,s3和s4的加权系数、且为大于零的实数;阔i=++,码—U2)/fel+22+23)'其中,M4"M,。,M^A力,和^4A一,"分别为t0,tl和t2的实际MAD值,Ql、Q2、Q3分别为t0,tl和t2的加权系数、且为大于零的实数。5、如权利要求2所述的方法,其特征在于,所述根据已编码宏块的历史信息更新二次R-Q模型系数包括根据所述当前宏块的边缘方向选择与当前宏块相关性最强的N个已编码宏块,利用所述N个宏块的历史信息更新二次R-Q模型系数,所述N为预设的历史数据点选择个数。6、如权利要求5所述的方法,其特征在于,所述根据所述当前宏块的边缘方向选择与当前宏块相关性最强的N个已编码宏块包括在当前帧已编码宏块以及前一帧中始于当前宏块相同位置的宏块、止于光栅扫描顺序最后一个宏块间的所有宏块组成一个平面,以当前宏块为原点,一个宏块为基本单位,在当前宏块的边缘方向为90°时,选择x轴坐标属于集合;c={-2,-1,0,1,2},y轴坐标属于集合少={-1,0,1}内的所有宏块;在当前宏块的边缘方向为0。时,选择x轴坐标属于集合^={-1,0,1},y轴坐标属于集合y={-2,-1,0,1,2}内的所有宏块;在当前宏块的边缘方向为45。时,选择乂轴坐标属于集合:\:={-1,0,1},y轴坐标属于集合_y={-l,0,l}内的所有宏块,以及坐标集合{(-2广1),(-2,-2),(—1厂2),(1,2),(2,2),(2,1)}内的所有宏块;在当前宏块的边缘方向为-45°时,选择x轴坐标属于集合1={-1,0,1},y轴坐标属于集合_y={-1,0,1}内的所有宏块,以及坐标集合(x,_y)={(—2,1),(—2,2),(-1,2),(1,-2),(2,-2),(2,—1)}内的所有宏块。7、如权利要求6所述的方法,其特征在于,当选择的所有宏块数目N'<12时,进一步选择空域上与当前宏块距离最近的(12-N')个已编码宏块。8、如权利要求2所述的方法,其特征在于,所述确定当前宏块的头信息比特数预测值//,.包括=ax//frev+(l-a)x/i7,其中,i是当前宏块在当前帧中的宏块序号;//;"是前一帧中与当前宏块相同位置上的宏块的实际头信息比特数;巧是根据当前宏块的边缘方向所选取的相关性最强的空域相邻宏块的实际头信息比特数;a是自适应权重,用于表示当前宏块的空域预测MAD值和时域预测MAD值在MAD预测中所占比例的大小。9、如权利要求2所述的方法,其特征在于,所述确定当前宏块的预分配码其中,i是当前宏块在当前帧中的宏块序号;Num是当前帧中总的宏块个数;M^Df;"是所述当前宏块的MAD预测值;MvlC^y是前一帧中第j个宏块的MAD实际值;T是当前帧中第i-l个宏块编码后剩余的可供分配码率;《,"'是按照所述当前宏块的边缘方向选择的与当前宏块相关性最强的已编码空域相邻宏块的实际码率;a是自适应权重,用于表示当前宏块的空域预测MAD值和时域预测MAD值在MAD预测中所占比例的大小。10、根据权利要求3、8或9所述的方法,其特征在于,所述a的确定方式包括■/v"m,、确定当前宏块的左边,左上,上方以及右上的相邻宏块,得到它们的实际MAD值分别为M^DW1、M^i\62、M^i\M和Mv4Z\M,空域预测MAD值分别为M^D〖M、M^D"2、MJZ)"3和M^D:M以及时域预测MAD值分别为MJ化M、M4Z)"2、M4D"和M4Z)^,对于它们的时域一空域比重参数;^、、AM和AM有如下形式的伪代码<formula>formulaseeoriginaldocumentpage5</formula>其中,i=l,2,3,4,Thd的经验值为1.5;由得到的7^确定当前宏块的",公式为、/3,当HU2时"^2/3,当Hu-2时'1/2,其它所述"的初始值为1.5。全文摘要本发明公开了一种H.264码率控制方法,用于依次对当前P帧中每个当前宏块进行码率控制在当前宏块为当前P帧中第一个宏块时,将前一帧的平均量化参数QP作为当前宏块的QP,反之,计算当前宏块的边缘方向,并利用所述边缘方向预测当前宏块的平均绝对误差MAD、根据已编码宏块的历史信息更新二次码率-量化步长R-Q模型系数、确定当前宏块的头信息比特数预测值和预分配码率,再根据所述当前宏块的MAD预测值、头信息比特数预测值和预分配码率,利用更新系数后的二次R-Q模型,确定当前宏块的QP。采用本发明所述的方法,可以更有效地利用时域和空域上的相关性,克服了JVT-G012码率控制算法及其改进算法在性能或计算复杂度上存在的缺陷,实现最有效的码率控制。文档编号H04N7/24GK101494776SQ20091007773公开日2009年7月29日申请日期2009年2月13日优先权日2009年2月13日发明者全子一,宗晓飞,侃常,张文豪,波杨,门爱东,钰韩申请人:北京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1