发明名称 一种容错性视频转码中的率失真优化方法
摘要 本发明公开了一种容错性视频转码中的率失真优化方法,包括在帧层对片长度的优化和在宏块层对宏块模式的优化,本发明在帧层对片长度的选择进行率失真优化时,充分考虑片间预测的影响,并推导出具体的拉格朗日乘子公式,从而提高帧层算法的精确性;在宏块层对模式的选择进行率失真优化时,充分利用转码输入视频流的当前帧信息和转码输出视频流的前一帧信息,预测最优模式,从而降低宏块层算法的复杂度。
申请公布号 CN101340593B 申请公布日期 2010.07.28
申请号 CN200810048801.X 申请日期 2008.08.13
申请人 武汉大学 发明人 胡瑞敏;韩镇;陈皓;曾书婧;李明
分类号 H04N7/64(2006.01)I;H04N7/68(2006.01)I 主分类号 H04N7/64(2006.01)I
代理机构 武汉华旭知识产权事务所 42214 代理人 刘荣
主权项 一种容错性视频转码中的率失真优化方法,其特征在于包括以下步骤:(1)在对当前帧进行转码前,根据当前帧中宏块转码前的量化步长,计算当前帧转码前的信源失真,具体根据下式计算当前帧转码前的信源失真DFR,s,1: <mrow> <msub> <mi>D</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>1</mn> </mrow> </msub> <mo>=</mo> <munderover> <mi>&Sigma;</mi> <mrow> <mi>MB</mi> <mo>=</mo> <mn>0</mn> </mrow> <mi>n</mi> </munderover> <mrow> <mo>(</mo> <mfrac> <msubsup> <mi>Q</mi> <mrow> <mi>MB</mi> <mo>,</mo> <mn>1</mn> </mrow> <mn>2</mn> </msubsup> <mn>12</mn> </mfrac> <mo>)</mo> </mrow> </mrow>其中QMB,1为当前帧中宏块MB转码前的量化步长,由转码输入流解码得到,n为当前帧的宏块数目;(2)根据当前帧转码前的信源失真、方差、码率和转码后的码率,计算当前帧转码后的信源失真,具体根据下式计算当前帧转码后的信源失真DFR,s,2: <mrow> <msub> <mi>D</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mo>=</mo> <mfrac> <mi>b</mi> <mrow> <mfrac> <mi>b</mi> <msub> <mi>D</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>1</mn> </mrow> </msub> </mfrac> <mo>-</mo> <msup> <mn>2</mn> <mfrac> <msub> <mi>R</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mn>1</mn> </mrow> </msub> <msub> <mi>R</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> </mfrac> </msup> </mrow> </mfrac> </mrow>其中b为当前帧转码前的方差,RFR,1为当前帧转码前的码率,均由转码输入流解码得到,RFR,2为当前帧转码后的比特数,由转码后的目标码率决定;(3)根据转码输入流中的运动矢量计算当前帧的掩盖失真DFR,c和扩散失真DFR,p;(4)根据当前帧转码前的方差和转码后的信源失真、码率,计算拉格朗日乘子,具体根据下式计算当前帧的拉格朗日乘子λFR,0: <mrow> <msub> <mi>&lambda;</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mn>0</mn> </mrow> </msub> <mo>=</mo> <mfrac> <mrow> <mi>ln</mi> <mn>2</mn> <mo>&CenterDot;</mo> <msub> <mi>D</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> </mrow> <msub> <mi>R</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> </mfrac> <mo>&CenterDot;</mo> <msub> <mi>log</mi> <mn>2</mn> </msub> <mrow> <mo>(</mo> <mfrac> <mi>b</mi> <msub> <mi>D</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> </mfrac> <mo>)</mo> </mrow> </mrow>其中b为当前帧转码前的方差,RFR,2为当前帧转码后的比特数,DFR,s,1为当前帧转码前的信源失真,DFR,s,2为当前帧转码后的信源失真;(5)根据当前帧转码后的信源失真和码率,当前帧的掩盖失真DFR,c、扩散失真DFR,p和帧长度,前一帧转码后实际码率与目标码率之间的差值和帧长度,片头的比特数,以及信道的突发错误长度和误码率,计算当前帧的最优片长度,具体根据下式计算当前帧的最优片长度s: <mrow> <mi>s</mi> <mo>=</mo> <msqrt> <mfrac> <mrow> <mi>L</mi> <mo>&CenterDot;</mo> <msub> <mi>&lambda;</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mn>0</mn> </mrow> </msub> <mo>&CenterDot;</mo> <mrow> <mo>(</mo> <msub> <mi>s</mi> <mn>0</mn> </msub> <mo>&CenterDot;</mo> <msub> <mi>R</mi> <mi>head</mi> </msub> <mo>+</mo> <msup> <mi>s</mi> <mo>&prime;</mo> </msup> <mo>&CenterDot;</mo> <mi>&Delta;</mi> <msubsup> <mi>R</mi> <mi>FR</mi> <mo>&prime;</mo> </msubsup> <mo>)</mo> </mrow> </mrow> <mrow> <mi>BER</mi> <mo>&CenterDot;</mo> <mrow> <mo>(</mo> <msub> <mi>D</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mi>c</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>D</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mo>-</mo> <msub> <mi>D</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mi>p</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>&lambda;</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mn>0</mn> </mrow> </msub> <mo>&CenterDot;</mo> <msub> <mi>R</mi> <mrow> <mi>FR</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mo>)</mo> </mrow> </mrow> </mfrac> </msqrt> </mrow>其中Rhead为视频编码标准定义的片头的比特数,s0为当前帧的帧长度,ΔR′FR为前一帧转码后片间预测导致的码率增益,s′为前一帧的帧长度,L为信道的突发错误长度,BER为信道的误码率;(6)在对当前宏块进行转码前,根据其转码前的模式进行如下判断:如果转码前的模式为帧内模式,那么转码后的最优模式仍然为帧内模式;如果转码前的模式为帧间模式,那么转码后的最优模式需要进一步选择;(7)根据当前宏块转码前的码率、方差和当前宏块信源率失真模型参数,计算当前宏块转码前的信源失真,具体根据下式计算当前宏块转码前的信源失真DMB,s,1(minter): <mrow> <msub> <mi>D</mi> <mrow> <mi>MB</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>1</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>inter</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <msub> <mi>b</mi> <mrow> <mi>MB</mi> <mo>,</mo> <mi>inter</mi> </mrow> </msub> <msup> <mn>2</mn> <mfrac> <mrow> <msub> <mi>R</mi> <mrow> <mi>MB</mi> <mo>,</mo> <mn>1</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>inter</mi> </msub> <mo>)</mo> </mrow> </mrow> <msub> <mi>a</mi> <mi>MB</mi> </msub> </mfrac> </msup> </mfrac> </mrow>其中RMB,1(minter)和bMB,inter分别为当前宏块转码前的码率和方差,均由从转码输入流中解码得到,aMB为当前宏块信源率失真模型参数,基于已实际编码宏块的数据根据H.264参考模型中的线性衰退模型预测得到;(8)根据当前宏块转码前后的量化步长,当前宏块转码前的信源失真、方差,当前宏块信源率失真模型参数,计算当前宏块转码后为帧间模式时的信源失真和码率,具体根据下式分别计算当前宏块转码后为帧间模式时的信源失真DMB,s,2(minter)和码率RMB,2(minter): <mrow> <msub> <mi>D</mi> <mrow> <mi>MB</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>inter</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <msub> <mi>D</mi> <mrow> <mi>MB</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>1</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>inter</mi> </msub> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <mfrac> <msubsup> <mi>Q</mi> <mrow> <mi>MB</mi> <mo>,</mo> <mn>2</mn> </mrow> <mn>2</mn> </msubsup> <msubsup> <mi>Q</mi> <mrow> <mi>MB</mi> <mo>,</mo> <mn>1</mn> </mrow> <mn>2</mn> </msubsup> </mfrac> </mrow> <mrow> <msub> <mi>R</mi> <mrow> <mi>MB</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>inter</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <msub> <mi>a</mi> <mi>MB</mi> </msub> <msub> <mi>log</mi> <mn>2</mn> </msub> <mrow> <mo>(</mo> <mfrac> <msub> <mi>b</mi> <mrow> <mi>MB</mi> <mo>,</mo> <mi>inter</mi> </mrow> </msub> <mrow> <msub> <mi>D</mi> <mrow> <mi>MB</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>inter</mi> </msub> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>)</mo> </mrow> </mrow>其中QMB,1和QMB,2分别为当前宏块转码前后的量化步长;(9)根据转码输入流中的运动矢量计算当前宏块转码后为帧间模式时的扩散失真DMB,p,2(minter);(10)根据当前宏块量化步长计算得到当前宏块的拉格朗日乘子λMB,0;(11)根据当前宏块转码后为帧间模式时的信源失真、扩散失真、码率和当前宏块的拉格朗日乘子,计算当前宏块转码后为帧间模式时的率失真函数值,具体根据下式计算当前宏块转码后为帧间模式时的率失真函数值Jinter:Jinter=DMB,s,2(minter)+DMB,p,2(minter)+λMB,0RMB,2(minter);(12)根据当前宏块中子块的非零系数比,子块及其在前一帧中对应子块的量化步长,对应子块在帧内模式时的信源失真、方差,计算当前宏块转码后为帧内模式时的信源失真和码率的最大值以及最小值,具体根据下式分别计算当前宏块转码后为帧内模式时的信源失真的最大值DMB,s,2(mintra)和码率的最大值RM,2(mintra),以及信源失真的最小值DMB,s,2(mintra)和码率的最小值RMB,2(mintra): <mrow> <msub> <mover> <mi>D</mi> <mo>&OverBar;</mo> </mover> <mrow> <mi>MB</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>intra</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mi>&Sigma;</mi> <mrow> <mi>B</mi> <mo>=</mo> <mn>0</mn> </mrow> <mn>16</mn> </munderover> <mrow> <mo>(</mo> <msubsup> <mi>D</mi> <mrow> <mi>B</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> <mo>&prime;</mo> </msubsup> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>intra</mi> </msub> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <mfrac> <msubsup> <mi>Q</mi> <mrow> <mi>B</mi> <mo>,</mo> <mn>2</mn> </mrow> <mn>2</mn> </msubsup> <msubsup> <mi>Q</mi> <mrow> <mi>B</mi> <mo>,</mo> <mn>2</mn> </mrow> <mrow> <mo>&prime;</mo> <mn>2</mn> </mrow> </msubsup> </mfrac> <mo>&CenterDot;</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>+</mo> <msub> <mi>&rho;</mi> <mi>B</mi> </msub> <mo>)</mo> </mrow> <mo>)</mo> </mrow> </mrow> <mrow> <msub> <mover> <mi>R</mi> <mo>&OverBar;</mo> </mover> <mrow> <mi>MB</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>intra</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <msub> <mi>a</mi> <mi>MB</mi> </msub> <msub> <mi>log</mi> <mn>2</mn> </msub> <mrow> <mo>(</mo> <mfrac> <mrow> <munderover> <mi>&Sigma;</mi> <mrow> <mi>B</mi> <mo>=</mo> <mn>0</mn> </mrow> <mn>16</mn> </munderover> <mrow> <mo>(</mo> <msubsup> <mi>b</mi> <mrow> <mi>B</mi> <mo>,</mo> <mi>intra</mi> </mrow> <mo>&prime;</mo> </msubsup> <mo>&CenterDot;</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>+</mo> <msub> <mi>&rho;</mi> <mi>B</mi> </msub> <mo>)</mo> </mrow> <mo>)</mo> </mrow> </mrow> <mrow> <msub> <mover> <mi>D</mi> <mo>&OverBar;</mo> </mover> <mrow> <mi>MB</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>intra</mi> </msub> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>)</mo> </mrow> </mrow> <mrow> <msub> <munder> <mi>D</mi> <mo>&OverBar;</mo> </munder> <mrow> <mi>MB</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>intra</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mi>&Sigma;</mi> <mrow> <mi>B</mi> <mo>=</mo> <mn>0</mn> </mrow> <mn>16</mn> </munderover> <mrow> <mo>(</mo> <msubsup> <mi>D</mi> <mrow> <mi>B</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> <mo>&prime;</mo> </msubsup> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>intra</mi> </msub> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <mfrac> <msubsup> <mi>Q</mi> <mrow> <mi>B</mi> <mo>,</mo> <mn>2</mn> </mrow> <mn>2</mn> </msubsup> <msubsup> <mi>Q</mi> <mrow> <mi>B</mi> <mo>,</mo> <mn>2</mn> </mrow> <mrow> <mo>&prime;</mo> <mn>2</mn> </mrow> </msubsup> </mfrac> <mo>&CenterDot;</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <msub> <mi>&rho;</mi> <mi>B</mi> </msub> <mo>)</mo> </mrow> <mo>)</mo> </mrow> </mrow> <mrow> <msub> <munder> <mi>R</mi> <mo>&OverBar;</mo> </munder> <mrow> <mi>MB</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>intra</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <msub> <mi>a</mi> <mi>MB</mi> </msub> <msub> <mi>log</mi> <mn>2</mn> </msub> <mrow> <mo>(</mo> <mfrac> <mrow> <munderover> <mi>&Sigma;</mi> <mrow> <mi>B</mi> <mo>=</mo> <mn>0</mn> </mrow> <mn>16</mn> </munderover> <mrow> <mo>(</mo> <msubsup> <mi>b</mi> <mrow> <mi>B</mi> <mo>,</mo> <mi>intra</mi> </mrow> <mo>&prime;</mo> </msubsup> <mo>&CenterDot;</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <msub> <mi>&rho;</mi> <mi>B</mi> </msub> <mo>)</mo> </mrow> <mo>)</mo> </mrow> </mrow> <mrow> <msub> <munder> <mi>D</mi> <mo>&OverBar;</mo> </munder> <mrow> <mi>MB</mi> <mo>,</mo> <mi>s</mi> <mo>,</mo> <mn>2</mn> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>m</mi> <mi>intra</mi> </msub> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>)</mo> </mrow> </mrow>其中ρB为当前宏块中子块B的非零系数比,QB,2和Q′B,2分别为子块B及其在前一帧中对应子块的量化步长,D′B,s,2(mintra)、b′B,intra分别为对应子块在帧内模式时的信源失真、方差;(13)根据当前宏块转码后为帧内模式时的信源失真和码率的最大值以及最小值,计算当前宏块转码后为帧内模式时的率失真函数值的最大值和最小值,具体根据下式分别计算当前宏块转码后为帧内模式时率失真函数值的最大值Jintra和率失真函数值的最小值Jintra:Jintra=DMB,s,2(mintra)+λMB,0RMB,2(mintra)Jintra=DMB,s,2(mintra)+λMB,0RMB,2(mintra);(14)如果当前宏块转码后为帧间模式时的率失真函数值大于为帧内模式时率失真函数值的最大值,则当前宏块转码后的最优模式为帧内模式;如果当前宏块转码后为帧间模式时的率失真函数值小于为帧内模式时率失真函数值的最小值,则当前宏块转码后的最优模式为帧间模式;否则,转入步骤(15);(15)对当前宏块进行帧内模式编码,得到帧内模式时信源失真和码率的实际值,然后根据信源失真和码率的实际值,计算帧内模式时率失真函数值的实际值,根据下式计算帧内模式时率失真函数值的实际值Jintra:Jintra=DMB,s,2(mintra)+DMB,p,2(mintra)+λMB,0RMB,2(mintra)其中DMB,s,2(mintra)和RMB,2(mintra)为帧内模式时信源失真和码率的实际值,DMB,p,2(mintra)为帧内模式时的扩散失真;(16)如果当前宏块转码后为帧间模式时的率失真函数值大于为帧内模式时率失真函数值的实际值,则当前宏块转码后的最优模式为帧内模式;否则,当前宏块转码后的最优模式为帧间模式。
地址 430072 湖北省武汉市武昌珞珈山