发明名称 一种基于残差频域复杂度的I帧码率控制方法
摘要 本发明公开了一种基于残差频域复杂度的I帧码率控制方法,该方法为:读入一个I帧图像,若是序列的第一帧,则置初始缓冲区水平为零,并设置I帧码率量化模型的两个参数为经验值;根据目标码率、帧率和缓冲区充满度计算当前I帧的目标比特数;计算亮度分量帧内预测残差的频域系数的平均绝对值作为编码复杂度;根据提出的I帧码率-量化-复杂度模型计算量化步长;用计算出的量化步长对当前I帧进行率失真优化编码,确定各宏块编码的最优模式;如果当前编码完成的是序列的第一帧,则不需更新码率模型参数,从序列的第二帧编码完成后,使用之前编码帧的实际编码结果用线性回归的方法更新参数;之后读入下一个I帧进行编码,直至序列所有帧编码完成。
申请公布号 CN103957410A 申请公布日期 2014.07.30
申请号 CN201410156286.2 申请日期 2014.04.17
申请人 南京邮电大学 发明人 崔子冠;干宗良;唐贵进;刘峰;朱秀昌
分类号 H04N19/124(2014.01)I;H04N19/147(2014.01)I 主分类号 H04N19/124(2014.01)I
代理机构 南京知识律师事务所 32207 代理人 汪旭东
主权项 一种基于残差频域复杂度的I帧码率控制方法,其特征在于,所述方法包括如下步骤:1)读入当前要编码的I帧图像,如果是序列的第一帧,则设置初始缓冲区水平为零,并设置I帧码率模型中的两个参数为经验值;2)根据目标码率、预定义帧率和当前缓冲区水平计算分配给当前I帧的目标比特数;<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>R</mi><mi>intra</mi></msub><mo>=</mo><mfrac><mrow><mi>bit</mi><mo>_</mo><mi>rate</mi></mrow><mrow><mi>frame</mi><mo>_</mo><mi>rate</mi></mrow></mfrac><mo>+</mo><mrow><mo>(</mo><mn>0.8</mn><mo>&times;</mo><mi>buffer</mi><mo>_</mo><mi>size</mi><mo>-</mo><mi>curr</mi><mo>_</mo><mi>buff</mi><mo>_</mo><mi>level</mi><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000492436580000011.GIF" wi="1389" he="140" /></maths>其中R<sub>intra</sub>为I帧目标比特数,bit_rate为目标码率,frame_rate为预定义帧率,buffer_size为缓冲区大小,curr_buff_level为当前缓冲区水平;3)计算待编码I帧基于预测残差频域信息的帧内编码复杂度MATPR;4)根据上述步骤2计算得到的当前I帧目标比特数R<sub>intra</sub>和步骤3计算得到I帧编码复杂度MATPR,是基于MATPR的I帧码率‑量化‑复杂度模型:<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>R</mi><mi>intra</mi></msub><mo>=</mo><mrow><mo>(</mo><mi>c</mi><mo>&times;</mo><mi>MATPR</mi><mo>+</mo><mi>d</mi><mo>)</mo></mrow><mo>&times;</mo><msubsup><mi>Q</mi><mi>step</mi><mrow><mo>-</mo><mi>&beta;</mi></mrow></msubsup><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000492436580000012.GIF" wi="740" he="86" /></maths>其中β为经验常数0.9,计算当前I帧编码的量化步长Q<sub>step</sub>:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>Q</mi><mi>step</mi></msub><mo>=</mo><mrow><mo>(</mo><mfrac><msub><mi>R</mi><mi>intra</mi></msub><mrow><mi>c</mi><mo>&times;</mo><mi>MATPR</mi><mo>+</mo><mi>d</mi></mrow></mfrac><msup><mo>)</mo><mrow><mo>-</mo><mfrac><mn>1</mn><mi>&beta;</mi></mfrac></mrow></msup></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000492436580000013.GIF" wi="711" he="173" /></maths>5)用上述步骤4计算出的量化步长Q<sub>step</sub>对当前I帧进行帧内编码;6)如果当前帧是序列的第一帧,则跳过此步,即I帧码率模型参数c和d不用更新;否则,使用之前帧的实际编码结果对参数c和d采用线性回归的方法进行更新,公式如下:<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><mfenced open='{' close=''><mtable><mtr><mtd><mfenced open='[' close=']'><mtable><mtr><mtd><mi>c</mi></mtd></mtr><mtr><mtd><mi>d</mi></mtd></mtr></mtable></mfenced><mo>=</mo><mrow><mo>(</mo><msup><mi>X</mi><mi>T</mi></msup><mo>&CenterDot;</mo><mi>X</mi><msup><mo>)</mo><mrow><mo>-</mo><mn>1</mn></mrow></msup><mo>&CenterDot;</mo><msup><mi>X</mi><mi>T</mi></msup><mo>&CenterDot;</mo><mi>Y</mi></mrow></mtd></mtr><mtr><mtd><msub><mi>X</mi><mrow><mi>n</mi><mo>&times;</mo><mn>2</mn></mrow></msub><mo>=</mo><mo>[</mo><msub><mi>MATPR</mi><mi>i</mi></msub><mo>,</mo><mn>1</mn><mo>]</mo></mtd></mtr><mtr><mtd><msub><mi>Y</mi><mrow><mi>n</mi><mo>&times;</mo><mn>1</mn></mrow></msub><mo>=</mo><mo>[</mo><mfrac><msub><mi>R</mi><mrow><mi>intra</mi><mo>,</mo><mi>i</mi></mrow></msub><msubsup><mi>Q</mi><mrow><mi>step</mi><mo>,</mo><mi>i</mi></mrow><mrow><mo>-</mo><mi>&beta;</mi></mrow></msubsup></mfrac><mo>]</mo></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000492436580000021.GIF" wi="677" he="439" /></maths>其中R<sub>intra,i</sub>是第i帧的实际编码比特数,MATPR<sub>i</sub>是第i帧的MATPR,Q<sub>step,i</sub>是第i帧的实际量化步长;n的最大值为5,即最多使用5个之前编码帧来更新参数c和d;7)如果序列未编码完,则返回上述步骤1读入新的I帧,继续编码直至序列所有帧编码完成。
地址 210003 江苏省南京市鼓楼区新模范马路66号