发明名称 一种码率控制方法
摘要 本发明提供的一种码率控制方法,根据当前帧的图像类型,采用帧级码率控制和宏块级码率控制来对图像进行编码。本发明提供的一种码率控制方法,控制精度高,主观图像质量好,同时计算复杂度很低,不仅适合各种软件应用,而且也适合硬件的实时工作。
申请公布号 CN1767653A 申请公布日期 2006.05.03
申请号 CN200510110106.8 申请日期 2005.11.08
申请人 上海广电(集团)有限公司中央研究院 发明人 李国平;赵海武;陈勇;李萍;侯钢;王国中
分类号 H04N7/32(2006.01) 主分类号 H04N7/32(2006.01)
代理机构 上海新天专利代理有限公司 代理人 衷诚宣
主权项 1.一种码率控制方法,其特征在于,包含以下步骤:步骤1、在帧级码率控制中,以每个图像组GOP为单位,计算每个图像组的比特Bgop:步骤1.1、根据信道目标码率R和帧率F,计算每个图像组的比特Bgop:<math> <mrow> <msub> <mi>B</mi> <mi>gop</mi> </msub> <mo>=</mo> <msub> <mi>B</mi> <mrow> <mi>ful</mi> <mi>ln</mi> <mi>ess</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mi>gop</mi> </msub> <mo>&times;</mo> <mrow> <mo>(</mo> <mfrac> <mi>R</mi> <mi>F</mi> </mfrac> <mo>)</mo> </mrow> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow> </math> 在上式中,Bfullness是缓存中剩余的比特数,Sgop为每个图像组GOP中的图像帧数;步骤1.2、对缓存中剩余的比特数Bfullness初始化为0;步骤2、根据当前帧的图像类型可为I图像(帧内图像),P图像(前向预测图像)或B图像(双向预测图像),计算当前图像帧所分配的比特Bcur_frame:Bcur_frame=Pcur×(Bgop-Bcur_gop_used)/(Pip×Ppb×Fi+Ppb×Fp+Fb)(2)在上式中Fi,Fp,Fb分别为I图像和P图像以及B图像的帧数,Pip为I图像相对于P图像的比特分配权重参数,Ppb为P图像相对于B图像的比特分配权重参数,Pcur为当前帧的权重参数;初始化Bcur_gop_used,,Fi,Fp,Fb,并且设定Pip,Ppb的值;步骤3、计算当前图像帧的目标平均量化系数Qcur_ave:如果前一帧图像已经使用的比特数为Bprev_frame,前一帧图像非零离散余弦变换系数的个数为Nprev_frame,则当前帧中非零离散余弦变换系数的个数为:Ncur_frame=Bcur_frame×Nprev_frame/Bprev_frame (3)如果一帧离散余弦变换系数的个数为Ntotal_frame,前一帧图像的平均量化系数为Qprev_ave,则当前图像帧的目标平均量化系数为:Qcur_ave=Qprev_ave+W×(Nprev_frame-Ncur_frame)/(Ntotal_frame-Nprev_frame)(4)在上式中W为权重系数,其值由用户根据不同情况定义;步骤4、宏块级码率控制:步骤4.1、如果当前图像中已经编码宏块使用的比特为Bcur_frame_used,则剩余宏块所分配的比特为:Bcur_frame_rest=Bcur_frame-Bcur_frame_used (5)如果已编码宏块中的非零离散余弦变换系数的个数为Ncur_frame_used,则未编码宏块的非零离散余弦变换系数的个数为:Ncur_frame_rest=Bcur_frame_rest×Ncur_frame_used/Bcur_frame_used (6)步骤4.2、如果剩余宏块的离散余弦变换系数的个数为Ntotal_frame_rest,当前宏块的非零离散余弦变换系数的平均数为:Ncur_mb_ave=Ncur_frame_rest/Ntotal_frame_rest (7)步骤4.3、计算当前宏块的非零离散余弦变换系数的个数Npred_mb:在编码宏块中,宏块之间存在相关性,根据已经编码宏块的非零离散余弦变换系数的个数,或者根据当前宏块离散余弦变换系数的总数和当前宏块零离散余弦变换系数的预测数,来预测出当前宏块的非零离散余弦变换系数的个数,即:<math> <mrow> <msub> <mi>N</mi> <mrow> <mi>pred</mi> <mo>_</mo> <mi>mb</mi> </mrow> </msub> <mo>=</mo> <munderover> <mi>Pr ed</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>N</mi> </munderover> <mrow> <mo>(</mo> <msub> <msup> <mi>N</mi> <mi>i</mi> </msup> <mrow> <mi>prev</mi> <mo>_</mo> <mi>mb</mi> </mrow> </msub> <mo>)</mo> </mrow> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>8</mn> <mo>)</mo> </mrow> </mrow> </math> Niprev_mb表示在当前宏块之前编码宏块的非零离散余弦变换系数的个数;<math> <mrow> <mi>n</mi> <msub> <mi>Z</mi> <mrow> <mi>pred</mi> <mo>_</mo> <mi>mb</mi> </mrow> </msub> <mo>=</mo> <munderover> <mi>Pr ed</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>N</mi> </munderover> <mrow> <mo>(</mo> <msub> <msup> <mi>nZ</mi> <mi>i</mi> </msup> <mrow> <mi>prev</mi> <mo>_</mo> <mi>mb</mi> </mrow> </msub> <mo>)</mo> </mrow> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>9</mn> <mo>)</mo> </mrow> </mrow> </math> nZiprev_mb表示在当前宏块之前编码宏块的零离散余弦变换系数的个数,nZpred_mb为当前宏块的零离散余弦变换系数的预测数;Npred_mb=Nmb-nZpred_mb (10)在上式中,Nmb表示当前宏块的离散余弦变换系数的总数,Pred代表预测方法,N代表这种预测方法所需要的以前编码宏块的个数;步骤4.4、如果当前编码宏块的前一个宏块的量化系数为Qprev_mb,则当前编码宏块的量化系数为:<math> <mrow> <msub> <mi>Q</mi> <mrow> <mi>cur</mi> <mo>_</mo> <mi>mb</mi> </mrow> </msub> <mo>=</mo> <msub> <mi>Q</mi> <mrow> <mi>prev</mi> <mo>_</mo> <mi>mb</mi> </mrow> </msub> <mo>+</mo> <mfrac> <mrow> <mi>W</mi> <mo>&times;</mo> <mrow> <mo>(</mo> <msub> <mi>N</mi> <mrow> <mi>pred</mi> <mo>_</mo> <mi>mb</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>N</mi> <mrow> <mi>cur</mi> <mo>_</mo> <mi>mb</mi> <mo>_</mo> <mi>ave</mi> </mrow> </msub> <mo>)</mo> </mrow> </mrow> <mrow> <mi>Max</mi> <mrow> <mo>(</mo> <msub> <mi>N</mi> <mrow> <mi>total</mi> <mo>_</mo> <mi>frame</mi> <mo>_</mo> <mi>rest</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>N</mi> <mrow> <mi>pred</mi> <mo>_</mo> <mi>mb</mi> </mrow> </msub> <mo>,</mo> <msub> <mi>N</mi> <mrow> <mi>total</mi> <mo>_</mo> <mi>frame</mi> <mo>_</mo> <mi>rest</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>N</mi> <mrow> <mi>cur</mi> <mo>_</mo> <mi>mb</mi> <mo>_</mo> <mi>ave</mi> </mrow> </msub> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>11</mn> <mo>)</mo> </mrow> </mrow> </math> 在上式中Max为两者取最大值算子,W为权重系数,其值由用户根据情况定义;将Qcur_mb限制在[Qcur_ave-step,Qcur_ave+step]范围内,其中step是量化系数的跳跃系数,由用户根据需要定义;步骤4.5、宏块编码;步骤4.6、当前宏块编码完成后,更新已经编码宏块所使用的比特Bcur_frame_used,和已经编码宏块的非零离散余弦变换系数的个数Ncur_frame_used,如果当前图像所有宏块编码完成,则到步骤5,否则到步骤4.1;步骤5、当前图像帧编码已完成,更新Bcur_gop_used,Bprev_frame,Nprev_frame,Qprev_ave,判断当前图像组GOP中所有的帧图像的帧编码是否完成,是,则到步骤6,否则到步骤2;步骤6、将当前缓存中剩余的比特数赋值给当前图像组GOP的参数Bfullness,如果所有图像组的编码均完成,则结束,否则到步骤1。
地址 200233上海市宜山路757号2楼