发明名称 一种基于运动矢量合成的视频转码方法
摘要 本发明属于视频编解码技术领域,涉及一种基于运动矢量合成的视频转码方法。包括解码和编码两部分,其特征在于,由原来的运动矢量合成新的运动矢量时,对各个运动矢量的权重进行动态调整,通过误差绝对和的比较,找到估计最准确的运动矢量。本发明可在矢量合成的过程中,动态的调整相关宏块运动矢量在合成时的权重,使合成的矢量尽可能准确的反映目标宏块的运动,找到最佳匹配的宏块,减小运动补偿的误差,从而能够改善转码后图像的质量,并且节省比特率。
申请公布号 CN1216497C 申请公布日期 2005.08.24
申请号 CN200310100473.0 申请日期 2003.10.17
申请人 清华大学 发明人 戴琼海;王辅中;丁嵘
分类号 H04N7/32 主分类号 H04N7/32
代理机构 北京清亦华知识产权代理事务所 代理人 廖元秋
主权项 1、一种基于运动矢量合成的视频转码方法,包括解码和编码两部分,其特征在于,由原来的运动矢量合成新的运动矢量时,对各个运动矢量的权重进行动态调整,通过误差绝对和的比较,找到估计最准确的运动矢量;具体包括如下步骤:1)对输入的码流进行解码,得到输入图像的图像格式、残差、运动矢量信息;2)从解码得到的信息中找到第n帧中目标宏块MB1在要删除的第n-1帧中对应的宏块MB1’,以及第n-1帧中与该MB1’宏块重叠的相关宏块;根据运动矢量合成方法来估计宏块MB1’在第n-2帧中的运动矢量,并进一步得到MB1相对于第n-2帧的运动矢量V1(n);采用所述的运动矢量合成方法得到V1(n)的步骤如下:(1)设定搜索步长L,L>0,起始迭代次数k=0;(2)用重叠面积最大的宏块的运动矢量来估计第n帧中的宏块MB1对应于n-1帧中的宏块MB1’的运动矢量V1(n-1),根据公式V1(n)=V1(n-1)+I1(n)算出V1(n)的值,并作为运动矢量的最佳估计值,其中I1(n)为目标宏块MB1的运动矢量;按此运动矢量找到n帧中的宏块MB1在n-2帧中对应的宏块MB1”,设:宏块MB1和宏块MB1”内所含的像素为M*N,计算这两个宏块的绝对误差和SAD,将此SAD值作为当前最小的SAD值;设:PC(x+k,y+l)和PR(x+i+k,y+j+l)为宏块MB1和宏块MB1”内对应的点,其中(i,j)为运动矢量,则有SAD的计算公式为:<math> <mrow> <mi>SAD</mi> <mo>=</mo> <munderover> <mi>&Sigma;</mi> <mrow> <mi>k</mi> <mo>=</mo> <mn>0</mn> </mrow> <mrow> <mi>M</mi> <mo>-</mo> <mn>1</mn> </mrow> </munderover> <munderover> <mi>&Sigma;</mi> <mrow> <mi>l</mi> <mo>=</mo> <mn>0</mn> </mrow> <mrow> <mi>N</mi> <mo>-</mo> <mn>1</mn> </mrow> </munderover> <mo>|</mo> <msub> <mi>P</mi> <mi>C</mi> </msub> <mrow> <mo>(</mo> <mi>x</mi> <mo>+</mo> <mi>k</mi> <mo>,</mo> <mi>y</mi> <mo>+</mo> <mi>l</mi> <mo>)</mo> </mrow> <mo>-</mo> <msub> <mi>P</mi> <mi>R</mi> </msub> <mrow> <mo>(</mo> <mi>x</mi> <mo>+</mo> <mi>i</mi> <mo>+</mo> <mi>k</mi> <mo>,</mo> <mi>y</mi> <mo>+</mo> <mi>j</mi> <mo>+</mo> <mi>l</mi> <mo>)</mo> </mrow> <mo>|</mo> </mrow> </math> (3)将重叠宏块的面积进行指数修正后,作为权重进行运动矢量合成;设:第n-1帧中与MB1’交叠的四个宏块对应的运动矢量为I1(n-1),I2(n-1),I3(n-1),I4(n-1),他们对应的重叠面积分别为B1,B2,B3,B4,指数因子a=2k,运动矢量V1(n-1)的计算公式为:<math> <mrow> <msubsup> <mi>V</mi> <mn>1</mn> <mrow> <mo>(</mo> <mi>n</mi> <mo>-</mo> <mn>1</mn> <mo>)</mo> </mrow> </msubsup> <mo>=</mo> <mfrac> <mrow> <munderover> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mn>4</mn> </munderover> <msubsup> <mi>B</mi> <mi>i</mi> <mi>a</mi> </msubsup> <mo>*</mo> <msubsup> <mi>I</mi> <mi>i</mi> <mrow> <mo>(</mo> <mi>n</mi> <mo>-</mo> <mn>1</mn> <mo>)</mo> </mrow> </msubsup> </mrow> <mrow> <munderover> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mn>4</mn> </munderover> <msubsup> <mi>B</mi> <mi>i</mi> <mi>a</mi> </msubsup> </mrow> </mfrac> <mo>,</mo> </mrow> </math> 算出V1(n-1)的值以后,进而计算出对应的V1(n)和SAD值;如果得到的SAD值小于已得到的最小值,则把此次得到的估计值V1(n)作为当前最佳估计值,将此SAD值作为当前最小的SAD值;否则继续进行下一步;(4)令k=k+1,如果新的k值小于搜索步长L,则转到步骤(3)继续进行运动矢量的合成,否则完成搜索,得到V1(n)的最佳估计值;3)得到MB1相对于n-2帧的运动矢量以后,计算按此运动矢量进行估计所还原的图像与实际图像的差值,并对其差值以及运动矢量都进行编码;4)对于第n帧中的所有宏块,对其运动矢量和估计差值都进行编码以后,转码后的第n帧的信息就保存完毕了;5)在每一个被删除的图像帧附近都做2)-4)步骤的处理,就可以得到输出码流,从而完成了降低帧率的视频转码。
地址 100084北京市海淀区清华园清华大学西院44号