发明名称 一种多视点视频编码码率控制方法
摘要 本发明公开了一种多视点视频编码码率控制方法,涉及视频编码技术领域,所述方法包括以下步骤:基于MVC编码器结构,依据视频帧的位置和类型,选择采用固定量化参数或通过计算帧复杂度计算分配给当前帧的目标比特;通过基于层间比例关系的头比特预测模型预测当前帧头比特;通过双向MAD预测模型预测当前帧MAD;根据二次率失真模型、当前帧头比特和当前帧MAD计算当前要编码帧的QP值;通过当前要编码帧的QP值对视频序列进行编码。通过基于层间比例关系的头比特预测模型和/或双向MAD预测模型实现了更准确的码率控制,减少了比特率误差;并且通过实验验证了本方法的可行性。
申请公布号 CN102892004B 申请公布日期 2015.04.15
申请号 CN201210392604.6 申请日期 2012.10.16
申请人 天津大学 发明人 雷建军;冯坤;侯春萍;吴媺民;李帅;李贞贞
分类号 H04N19/597(2014.01)I;H04N19/147(2014.01)I;H04N19/149(2014.01)I 主分类号 H04N19/597(2014.01)I
代理机构 天津市北洋有限责任专利代理事务所 12201 代理人 温国林
主权项 一种多视点视频编码码率控制方法,其特征在于,所述方法包括以下步骤:(1)基于MVC编码器结构,依据视频帧的位置和类型,选择采用固定量化参数或通过计算帧复杂度计算分配给当前帧的目标比特;(2)通过基于层间比例关系的头比特预测模型预测当前帧头比特;(3)通过双向MAD预测模型预测当前帧MAD;(4)根据二次率失真模型、当前帧头比特和当前帧MAD计算当前要编码帧的QP值;(5)通过当前要编码帧的QP值对视频序列进行编码;所述基于层间比例关系的头比特预测模型具体为:<maths num="0001" id="cmaths0001"><math><![CDATA[<mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>H</mi><mrow><msub><mi>k</mi><mi>e</mi></msub><mi>s</mi></mrow></msub><mo>=</mo><munder><mi>&Sigma;</mi><mrow><mi>p</mi><mo>&Element;</mo><mo>{</mo><mi>Dis</mi><mo>}</mo></mrow></munder><msub><mi>H</mi><mrow><msub><mi>k</mi><mi>e</mi></msub><mi>p</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>H</mi><mi>c</mi></msub><mo>=</mo><mfrac><mrow><munderover><mi>&Sigma;</mi><mrow><msub><mi>k</mi><mi>e</mi></msub><mo>=</mo><mn>1</mn></mrow><msub><mi>k</mi><mi>l</mi></msub></munderover><mrow><mo>(</mo><msub><mi>H</mi><mrow><msub><mi>k</mi><mi>e</mi></msub><mi>s</mi></mrow></msub><munderover><mi>&Pi;</mi><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><mrow><msub><mi>k</mi><mi>c</mi></msub><mo>-</mo><msub><mi>k</mi><mi>e</mi></msub></mrow></munderover><msub><mi>a</mi><mrow><msub><mi>k</mi><mi>c</mi></msub><mo>-</mo><msub><mi>k</mi><mi>e</mi></msub><mo>-</mo><mi>n</mi></mrow></msub><mo>)</mo></mrow></mrow><mrow><munderover><mi>&Sigma;</mi><mrow><msub><mi>k</mi><mi>e</mi></msub><mo>=</mo><mn>1</mn></mrow><msub><mi>k</mi><mi>l</mi></msub></munderover><msub><mi>s</mi><msub><mi>k</mi><mi>e</mi></msub></msub></mrow></mfrac></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000609262950000011.GIF" wi="485" he="394" /></maths>其中<img file="FDA0000609262950000013.GIF" wi="81" he="74" />为第k<sub>e</sub>时间层已经编码帧所产生的总头比特数;<img file="FDA0000609262950000014.GIF" wi="99" he="73" />为第k<sub>e</sub>时间层显示顺序标号为p的帧所产生的比特数;{Dis}为所有显示顺序标号所组成的集合;H<sub>c</sub>为当前要编码帧预测的头比特数;k<sub>c</sub>为当前编码帧所处的时间层标号;k<sub>l</sub>为已经编码的时间层;<img file="FDA0000609262950000015.GIF" wi="77" he="84" />为第k<sub>e</sub>时间层中已经编码的帧的数目;<img file="FDA0000609262950000016.GIF" wi="120" he="82" />为时间层间头比特的比例关系;k<sub>c</sub>‑k<sub>e</sub>表示当前编码帧所处的时间层k<sub>c</sub>与已经编码的时间层k<sub>e</sub>之间的差值,初始值a<sub>0</sub>(k<sub>c</sub>‑k<sub>e</sub>‑n=0)为1;所述双向MAD预测模型具体为:MAD<sub>c</sub>=C<sub>1</sub>MAD<sub>p1</sub>+C<sub>2</sub>MAD<sub>p2</sub>+C<sub>3</sub>MAD<sub>p1</sub>和MAD<sub>p2</sub>分别为已编码的前向预测参考帧F<sub>p1</sub>和后向预测参考帧F<sub>p2</sub>的MAD值,<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>MAD</mi><mi>p</mi></msub><mo>=</mo><mfrac><mn>1</mn><mrow><msub><mi>X</mi><mi>co</mi></msub><msub><mi>Y</mi><mi>co</mi></msub></mrow></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>jj</mi><mo>=</mo><mn>0</mn></mrow><mrow><msub><mi>y</mi><mi>num</mi></msub><mo>-</mo><mn>1</mn></mrow></munderover><munderover><mi>&Sigma;</mi><mrow><mi>ii</mi><mo>=</mo><mn>0</mn></mrow><mrow><msub><mi>x</mi><mi>num</mi></msub><mo>-</mo><mn>1</mn></mrow></munderover><msub><mi>MAD</mi><mi>pb</mi></msub><mrow><mo>(</mo><mi>ii</mi><mo>,</mo><mi>jj</mi><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000609262950000012.GIF" wi="670" he="134" /></maths>ii,jj为宏块的横纵坐标;X<sub>co</sub>和Y<sub>co</sub>为当前帧中水平方向和垂直方向上像素的个数;x<sub>num</sub>和y<sub>num</sub>为当前帧中水平方向和垂直方向上宏块的个数,MAD<sub>pb</sub>(ii,jj)表示位置为(ii,jj)宏块的MAD值,计算公式如下:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>MAD</mi><mi>pb</mi></msub><mrow><mo>(</mo><mi>ii</mi><mo>,</mo><mi>jj</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mn>15</mn></munderover><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>0</mn></mrow><mn>15</mn></munderover><mo>|</mo><msub><mi>I</mi><mi>p</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>-</mo><msub><msup><mi>I</mi><mo>&prime;</mo></msup><mi>p</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>|</mo></mrow>]]></math><img file="FDA0000609262950000021.GIF" wi="645" he="128" /></maths>i,j表示宏块的横纵坐标;I<sub>p</sub>(i,j)表示位置坐标为i,j的已编码宏块像素值;I'<sub>p</sub>(i,j)为预测像素值;C<sub>1</sub>、C<sub>2</sub>和C<sub>3</sub>为参数通过线性回归模型进行更新;F<sub>p1</sub>和F<sub>p2</sub>的MAD值表示成矩阵M<sub>p</sub>;当前要编码帧F<sub>c</sub>的MAD值表示成矩阵M<sub>c</sub>;线性回归更新过程如下:M<sub>p</sub>C=M<sub>c</sub><maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><mi>C</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>C</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd><msub><mi>C</mi><mn>2</mn></msub></mtd></mtr><mtr><mtd><msub><mi>C</mi><mn>3</mn></msub></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000609262950000022.GIF" wi="199" he="205" /></maths>所述基于MVC编码器结构,依据视频帧的位置和类型,选择采用固定量化参数或通过计算帧复杂度计算分配给当前帧的目标比特具体为:1)判断当前视频帧是否是视频序列的第一个GOP,如果是,固定量化参数QP;如果否,执行步骤2);2)判断当前视频帧是否为I、P帧或第一个时间层上的B帧,如果是,固定量化参数QP;如果否,执行步骤3);3)判断是否属于第二个GOP第二个时间层的第一个B帧,如果是,根据第一个GOP中各帧编码结果计算分层B帧预测结构中各帧复杂度及分配给当前帧的目标比特;如果否,根据已经获得的各帧复杂度计算分配给当前帧的目标比特;帧复杂度计算公式如下:<maths num="0005" id="cmaths0005"><math><![CDATA[<mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>X</mi><mi>tot</mi></msub><mo>=</mo><msub><mi>N</mi><mi>I</mi></msub><msub><mi>X</mi><mi>I</mi></msub><mo>+</mo><msub><mi>N</mi><mi>P</mi></msub><msub><mi>X</mi><mi>p</mi></msub><mo>+</mo><munder><mi>&Sigma;</mi><mi>k</mi></munder><msub><mi>N</mi><mi>B</mi></msub><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow><msub><mi>X</mi><mi>B</mi></msub><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow></mtd></mtr><mtr><mtd><msub><mi>w</mi><mi>k</mi></msub><mo>=</mo><mfrac><mrow><msub><mi>X</mi><mi>B</mi></msub><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow></mrow><msub><mi>X</mi><mi>tot</mi></msub></mfrac></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000609262950000023.GIF" wi="736" he="236" /></maths>其中w<sub>k</sub>表示B帧的权重因子;k表示所处的时间层数,变化范围从0‑D,D表示最大时间层标号;X<sub>I</sub>、X<sub>P</sub>和X<sub>B</sub>分别表示一个GOP中I帧、P帧以及B帧的复杂度;X<sub>B</sub>(k)表示第k个时间层上B帧的复杂度;X<sub>tot</sub>表示一个GOP内所有帧总的复杂度之和;N<sub>I</sub>和N<sub>P</sub>分别表示一个GOP中I帧和P帧的数目;N<sub>B</sub>(k)表示一个GOP中第k个时间层中B帧的数目;上述复杂度定义为量化步长与所产生的比特数的乘积;分配给当前帧的目标比特计算公式如下:<maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><msubsup><mi>R</mi><mrow><mi>l</mi><mo>,</mo><mi>i</mi></mrow><mi>B</mi></msubsup><mo>=</mo><mfrac><mrow><msub><mi>w</mi><mi>l</mi></msub><msub><mi>B</mi><mi>l</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow></mrow><mrow><munderover><mi>&Sigma;</mi><mrow><mi>k</mi><mo>=</mo><mi>l</mi></mrow><mi>D</mi></munderover><msub><mi>w</mi><mi>k</mi></msub><msubsup><mi>N</mi><mi>B</mi><mi>i</mi></msubsup><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow></mrow></mfrac></mrow>]]></math><img file="FDA0000609262950000031.GIF" wi="313" he="174" /></maths>其中<img file="FDA0000609262950000032.GIF" wi="75" he="77" />为当前帧为B帧时分配的目标比特数,l表示剩余的未编码时间层标号,变化范围从0‑D;w<sub>l</sub>表示第l时间层上B帧的复杂度;<img file="FDA0000609262950000033.GIF" wi="113" he="69" />为第k个时间层未编码的B帧的数目;B<sub>l</sub>(i)为编码第l时间层第i帧所剩余的比特数;B<sub>tot</sub>为当前GOP分配的总比特数;根据二次率失真模型、当前帧头比特和当前帧MAD计算当前要编码帧的QP值具体为;假设信源变换后的数据符合拉普拉斯分布,则目标比特和QP之间的关系即二次率失真模型表示成:<maths num="0007" id="cmaths0007"><math><![CDATA[<mrow><mfrac><mrow><msub><mi>R</mi><mi>c</mi></msub><mo>-</mo><msub><mi>H</mi><mi>c</mi></msub></mrow><msub><mi>MAD</mi><mi>c</mi></msub></mfrac><mo>=</mo><mfrac><msub><mi>x</mi><mn>1</mn></msub><msub><mi>Qstep</mi><mi>c</mi></msub></mfrac><mo>+</mo><mfrac><msub><mi>x</mi><mn>2</mn></msub><msup><msub><mi>Qstep</mi><mi>c</mi></msub><mn>2</mn></msup></mfrac></mrow>]]></math><img file="FDA0000609262950000034.GIF" wi="484" he="126" /></maths>其中R<sub>c</sub>为编码当前帧分配的总比特数,当编码帧为B帧时采用的计算公式同<img file="FDA0000609262950000035.GIF" wi="87" he="65" />当编码帧为I帧或P帧时计算公式同R<sub>I/P</sub>;H<sub>c</sub>为当前要编码帧预测的头比特数,包括头以及运动矢量等信息;Qstep<sub>c</sub>为当前帧的量化步长,QP与Qstep<sub>c</sub>的关系为:Qstep<sub>c</sub>=2<sup>(QP‑4)/6</sup>x<sub>1</sub>,x<sub>2</sub>分别为二次率失真模型的一次以及二次系数,初始值设为目标比特率以及0,并且通过最小二乘法以及线性回归模型进行更新,更新过程如下:QstepX=Y<maths num="0008" id="cmaths0008"><math><![CDATA[<mrow><mi>Qstep</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msup><msub><mi>Qstep</mi><mi>c</mi></msub><mrow><mo>-</mo><mn>1</mn></mrow></msup><mo>[</mo><mn>1</mn><mo>]</mo></mtd><mtd><msup><msub><mi>Qstep</mi><mi>c</mi></msub><mrow><mo>-</mo><mn>2</mn></mrow></msup><mo>[</mo><mn>1</mn><mo>]</mo></mtd></mtr><mtr><mtd><msup><msub><mi>Qstep</mi><mi>c</mi></msub><mrow><mo>-</mo><mn>1</mn></mrow></msup><mo>[</mo><mn>2</mn><mo>]</mo></mtd><mtd><msup><msub><mi>Qstep</mi><mi>c</mi></msub><mrow><mo>-</mo><mn>2</mn></mrow></msup><mo>[</mo><mn>2</mn><mo>]</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><msup><msub><mi>Qstep</mi><mi>c</mi></msub><mrow><mo>-</mo><mn>1</mn></mrow></msup><mo>[</mo><mi>n</mi><mo>]</mo></mtd><mtd><msup><msub><mi>Qstep</mi><mi>c</mi></msub><mrow><mo>-</mo><mn>2</mn></mrow></msup><mo>[</mo><mi>n</mi><mo>]</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><msup><msub><mi>Qstep</mi><mi>c</mi></msub><mrow><mo>-</mo><mn>1</mn></mrow></msup><mo>[</mo><mi>N</mi><mo>]</mo></mtd><mtd><msup><msub><mi>Qstep</mi><mi>c</mi></msub><mrow><mo>-</mo><mn>2</mn></mrow></msup><mo>[</mo><mi>N</mi><mo>]</mo></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000609262950000036.GIF" wi="704" he="432" /></maths><maths num="0009" id="cmaths0009"><math><![CDATA[<mrow><mi>Y</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><mi>y</mi><mo>[</mo><mn>1</mn><mo>]</mo></mtd></mtr><mtr><mtd><mi>y</mi><mo>[</mo><mn>2</mn><mo>]</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mi>y</mi><mo>[</mo><mi>n</mi><mo>]</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mi>y</mi><mo>[</mo><mi>N</mi><mo>]</mo></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000609262950000037.GIF" wi="217" he="408" /></maths><maths num="0010" id="cmaths0010"><math><![CDATA[<mrow><mi>X</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>x</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd><msub><mi>x</mi><mn>2</mn></msub></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000609262950000041.GIF" wi="183" he="145" /></maths>其中Qstep<sub>c</sub>[n]为滑动窗口中第n帧量化步长;y[n]为纹理比特与MAD的比值;n表示在滑动窗口中的位置,并且变化范围为从0—N,N为窗口大小;x<sub>1</sub>,x<sub>2</sub>通过X=(Qstep<sup>T</sup> Qstep)<sup>‑1</sup>Qstep<sup>T</sup>Y获得。
地址 300072 天津市南开区卫津路92号