首页> 中国专利> 一种有效的运动矢量可伸缩编码方法

一种有效的运动矢量可伸缩编码方法

摘要

本发明公开了一种运动矢量的精细粒度可伸缩编码方法,该方法首先采用运动矢量量化方法形成运动矢量的基本层和增强层,然后以分数位平面编码的方法对运动矢量的量化残差进行分数位平面编码,形成运动矢量的子平面可行截断点,再通过运动矢量编码码率优化的方法,形成运动矢量的优化截断点;最后通过联合码率分配的方法,对运动矢量数据和运动估计残差数据进行联合码率分配,以得到符合用户码率、时空分辨率需求的码流。从而改善了低码率情况下视频的传输应用问题,增强了可伸缩视频码流适应不同终端用户需求的能力。

著录项

  • 公开/公告号CN101115200A

    专利类型发明专利

  • 公开/公告日2008-01-30

    原文格式PDF

  • 申请/专利权人 西安交通大学;

    申请/专利号CN200710017714.3

  • 申请日2007-04-20

  • 分类号H04N7/26(20060101);H04N7/30(20060101);H04N7/50(20060101);

  • 代理机构61200 西安通大专利代理有限责任公司;

  • 代理人李郑建

  • 地址 710049 陕西省西安市咸宁路28号

  • 入库时间 2023-12-17 19:41:21

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-06-11

    未缴年费专利权终止 IPC(主分类):H04N7/26 授权公告日:20100519 终止日期:20130420 申请日:20070420

    专利权的终止

  • 2010-05-19

    授权

    授权

  • 2008-03-19

    实质审查的生效

    实质审查的生效

  • 2008-01-30

    公开

    公开

说明书

技术领域

本发明属于视频编解码领域。具体涉及到可伸缩视频编解码体系结构中的运动矢量可伸缩性编码方法。

背景技术

相对于传统分块DCT技术以及运动补偿DPCM闭环架构的数字视频编解码体系(H.26x和MPEG系列),基于小波变换的视频编码体系结构因具有自适应的空域、时域以及码率(质量)可伸缩性,而能满足视频传输网络的异构性(Heterogeneous),网络带宽的波动性以及用户视频接收终端的多样性,从而满足现代信息社会的发展和用户的需求。由于网络或者终端的限制视频可能应用在较低码率或较低空间分辨率情况下,这就需要对视频的码流进行抽取(舍弃)。传统上的处理是通过舍弃象素运动估计残差的部分数据,而保留完整的运动矢量编码信息来满足带宽的限制。这样导致两方面的问题,首先,为使接收端能有效重建,可伸缩视频码流传输时有一个码率固定下界,即完全传输运动矢量信息所需要的带宽;其次,低码率和低空间分辨率的情况下,象素运动估计残差部分的数据已经是有损的,重构视频不需要完整、精确的运动矢量信息,传输完全的运动矢量存在信息冗余。

发明内容

根据上述背景技术中存在的缺陷或不足,本发明的目的在于,提供一种有效的运动矢量可伸缩编码方法,该方法对运动估计获得的运动矢量进行精细粒度的可伸缩编码,然后在运动矢量数据和象素运动估计残差部分的数据之间进行码率分配,从而提高视频重建的质量,同时实现了视频码流的更精细粒度可伸缩,降低了码流传输的下界,拓展了视频传输的应用环境.

为了实现上述任务。本发明采用如下的解决方案:

一种运动矢量的精细粒度可伸缩编码方法,其特征在于,该方法首先采用运动矢量量化方法形成运动矢量的基本层和增强层,然后以分数位平面编码的方法对运动矢量的量化残差进行分数位平面编码,形成运动矢量的子平面可行截断点,再通过运动矢量编码码率优化的方法,形成运动矢量的优化截断点;最后通过联合码率分配的方法,对运动矢量数据和运动估计残差数据进行联合码率分配,以得到符合用户码率、时空分辨率需求的码流。

本发明是一种运动矢量的精细粒度可伸缩编码方案,然后通过联合码率控制算法提高了视频在低码率、低空间分辨率情况下的视频质量,增强了可伸缩编码适应不同终端用户需求的能力。

附图说明

图1是本发明的MCTF示意图;

图2是本发明的运动矢量宏块分割图;

图3是本发明的运动矢量宏块分割量化示意图;

图4是本发明的整体实现框架图;

图5是本发明的嵌入式码流示意图。

下面结合附图和发明人实施例对本发明进一步详细说明,但本发明不限于这个实施例。

具体实施方式

为改善视频在波动的网络带宽以及多样的用户视频接收终端,特别是低码率情况下的应用,本发明给出了一种运动矢量的精细粒度可伸缩编码方法,具体包括下列步骤:

1)通过运动矢量量化方法形成运动矢量的基本层和增强层。

2)通过分数位平面编码的方法,对运动矢量的量化残差进行分数位平面编码,形成运动矢量的子平面可行截断点。

3)通过运动矢量编码码率优化的方法,形成运动矢量的优化截断点;

4)基于上下文的自适应二进制算术编码(CABAC)是运动矢量编码所用到的熵编码器。

5)通过联合码率分配的方法,对运动矢量数据和运动估计残差数据进行联合码率分配,以得到符合用户码率、时空分辨率需求的码流。

所述的运动矢量量化方法是,对运动矢量进行量化,具体如下。运动估计之后一般得到的是1/8精度的运动矢量。将运动矢量的估计值划分为3部分:m=m1+m2+m3其中运动矢量量化值m1是运动矢量的主要部分——半象素运动估计的结果,量化残差m2,和m3分别是1/4和1/8精度运动估计是在前一估计精度基础上的精细值。如m=-1.625,那么这里有m1=-1.5,m2=0,m3=-0.125。一般我们不需要编码m2,和m3的符号,因为已经编码了m1的符号。在上例中,已知m1=-1.5,就决定了运动矢量是负的,当然m2和m3也就是负值。例外的情况是当m∈[-0.375,0.375]时m1=0无法通过m1来确定m2和m3的符号,这就需要一个附加比特位来表示m2和m3的符号。这样最终的运动矢量将包括四个部分:半象素精度运动矢量值,1/4精度运动估计精细值,1/8精度运动估计精细值,附加符号位。当然运动矢量的主要部分也可以选用整象素运动估计的结果,这样最终的运动矢量就表示为5部分,具体选择可以根据实际应用而调整。

所述的分数位平面编码方法是:对运动矢量的量化残差进行分数位平面编码,形成运动矢量的子平面可行截断点。对于分级块大小运动估计的结果,每个N×N运动估计宏块可分裂为四个的子块,而这四个子块每个又可以根据情况分裂为四个更小的运动估计块。因此不同最终的运动估计块的尺寸大小可能是不同的。根据运动矢量残差所对应运动估计块的尺寸将运动矢量残差的位平面划分为不同的子平面,每个子平面采用CABAC单独编码,形成数个可行截断点。

所述运动矢量编码码率优化方法是,在组帧(GOP)范围内根据各个截断点对视频重建质量的不同影响进行优化,得到运动矢量码流的优化截断点,为其后“联合码率分配”做准备。

所述的基于上下文的自适应二进制算术编码(CABAC)是所用的熵编码器。具体算法描述请查阅H.264的相关文档。这里只是其具体情况的一次应用。

所述的联合码率分配的方法是,对运动矢量数据和象素运动估计残差数据进行联合码率分配,以得到符合用户码率、时空分辨率需求的码流。在高码率和全分辨率的情况下,运动矢量的所有部分都将得到传输。

在解码端,接收到的是无损的运动矢量。但是在低码率情况下,接收到的是有损的运动矢量数据。既然低码率下接收的是有损的象素运动估计残差数据,即使使用的是准确的运动矢量重建帧的重大失真也是不可避免的。然而可以将舍弃运动矢量码流的后面几个部分,节省的带宽可以用于象素运动估计残差编码数据。在运动矢量码流和象素运动估计残差数据码流之间进行折中,通过运动估计残差数据增加补偿运动矢量不精确带来的失真。在较低空间分辨率的情况下,由于运动矢量将按比例缩小,因此运动矢量的1/8精度或1/8和1/4精度部分可以舍弃,同样节省的带宽可以用于传输象素运动估计残差数据。

以下是发明人给出的一个具体实施例,以解决有可变块运动估计得到运动矢量的可伸缩编码问题。

参见附图,图1是MCTF(运动补偿与时域滤波)示意图,显示了一组帧(GOP)视频序列运动估计与时域滤波的框架,其中标注mv的部分代表运动估计的结果运动矢量场,一般而言运动矢量场的数目为组帧中视频帧的数目减1。

图2是运动估计的宏块分割示意图,运动估计的基本单位是宏块,在本示例中,宏块尺寸一般为64×64(视频边界会出现64×32,32×64等几种模式),一场运动矢量包含若干个宏块。而每个宏块可进一步的分裂为更小的子块,最小的子块大小为4×4。每个不再分裂的运动估计块都对应一个运动矢量值。

图3是一个具体运动估计宏块中运动矢量的量化示意图。经过量化后将生成一个运动矢量量化值组成的矢量场如图b,以及若干个为平面组成的运动矢量量化残差平面。量化步骤如下:

step1:将精度的运动矢量m转化为整数值M0

M0=m×N

然后设定n=1;

Step2:其中.代表下取整。

Step3:然后运动矢量在各个象素精度上的精细值(R0,R1,R2......分别对应八分之一精度,四分之一,半象素......)可以得到。

Rn=Mn-1Mn;Rn∈{0,1}

最终得到的数据为对应量化残差的{R0,R1,......RK-1}和运动矢量量化值MK如图3b和图3c所示。

图4是算法的整体实现框架。运动矢量经过量化后,运动矢量的量化值部分MK,经过进一步的预测编码后,预测残差连同运动估计宏块分割信息、宏块类型信息进入CABAC编码生成可伸缩运动矢量码流的基本层部分。而运动矢量的量化残差{R0,R1,......RK-1}形成K个位平面,然后根据运动矢量所属块尺寸划分子平面,进行位平面编码,形成可伸缩运动矢量码流的增强层部分。

分数位平面编码的实现,如图3c中的每个比特都是与一个一定大小的运动估计块相关联的,位平面中某位置A处的比特可能影响64×64个象素而另外B处的比特可能只与4×4个象素相关,这样当码率分配时两个不同比特的损失对视频重建质量的影响是不同的。为了其后码率分配的方便,根据需要编码符号所对应的运动估计块尺寸划分编码通道,对于宏块尺寸为64×64的情况划分如下4个编码通道(也就是将整个位平面划分为4个子平面):

编码通道1:32×32<size≤64×64

编码通道2:16×16<size≤32×32

编码通道3:8×8<size≤16×16

编码通道4:4×4≤size≤8×8

对这四个编码通道分别使用CABAC编码就生成了运动矢量码流的四个可行截断点。

图5是嵌入式码流示意图,对于图3所示的宏块,将得到与量化值对应的一个基本层和与量化残差位平面相对应的数个增强层,其中每个增强层又根据子平面的个数生成数个码流截断点(在这里演示了位平面只有两个编码通道的情况)。对于运动残差位平面个数为K,每个位平面又4个编码通道的情况,总共得到4K个可行截断点。组帧中i场运动矢量场(Mi)中的第k个位平面中l个编码通道的编码长度和舍弃该长度编码信息引起的失真表示为Rin和Din(n=k+l).

其中ni运动矢量场Mi的截断点。失真一般采用均方误差(MSE)或视觉加权来衡量。在选定所有运动矢量场的截断点后。

总的比特率为:<mrow><mi>L</mi><mo>=</mo><munder><mi>&Sigma;</mi><mi>i</mi></munder><msubsup><mi>L</mi><mi>i</mi><msub><mi>n</mi><mi>i</mi></msub></msubsup></mrow>

总的失真为:<mrow><mi>D</mi><mo>=</mo><munder><mi>&Sigma;</mi><mi>i</mi></munder><msubsup><mi>D</mi><mi>i</mi><msub><mi>n</mi><mi>i</mi></msub></msubsup></mrow>

率失真优化的目标是在L≤Lmax条件下,寻找合适的截断点集{ni},使得总失真率D最小,这一问题可以由拉格朗日乘数法求解,等价于使<mrow><mi>D</mi><mo>+</mo><mi>&lambda;L</mi><mo>=</mo><munder><mi>&Sigma;</mi><mi>i</mi></munder><mrow><mo>(</mo><msubsup><mi>D</mi><mi>i</mi><msub><mi>n</mi><mi>i</mi></msub></msubsup><mo>+</mo><mi>&lambda;</mi><msubsup><mi>L</mi><mi>i</mi><msub><mi>n</mi><mi>i</mi></msub></msubsup><mo>)</mo></mrow></mrow>最小,其中λ要经过选择直到L=Lmax。如果可以找到一个λ使得上式最小,并使得L=Lmax,这时候所得的截断点集合是最优的,不可能再找到其它任何截断点集合在不增加比特率的情况下获得更小的失真。通常这个全局最优的截断点集合是很难得到,若能找到最小的λ,使得该式最小且L≤Lmax,此时的截断点集合就是要求的最优解。对于每个运动矢量场,指定一个λ求其最优截断点集合{ni}算法如下:

<mrow><msubsup><mi>n</mi><mi>i</mi><mi>&lambda;</mi></msubsup><mo>&LeftArrow;</mo><mn>0</mn></mrow>

for j=0 to t do

<mrow><msubsup><mi>&Delta;L</mi><mi>i</mi><mi>j</mi></msubsup><mo>&LeftArrow;</mo><msubsup><mi>L</mi><mi>i</mi><mi>j</mi></msubsup><mo>-</mo><msubsup><mi>L</mi><mi>i</mi><msub><mi>n</mi><mi>i</mi></msub></msubsup><mo>;</mo></mrow><mrow><msubsup><mi>&Delta;D</mi><mi>i</mi><mi>j</mi></msubsup><mo>&LeftArrow;</mo><msubsup><mi>D</mi><mi>i</mi><msub><mi>n</mi><mi>i</mi></msub></msubsup><mo>-</mo><msubsup><mi>D</mi><mi>i</mi><mi>j</mi></msubsup></mrow>

<mrow><mi>if</mi><mrow><mo>(</mo><msubsup><mi>&Delta;D</mi><mi>i</mi><mi>j</mi></msubsup><mo>/</mo><msubsup><mi>&Delta;L</mi><mi>i</mi><mi>j</mi></msubsup><mo>)</mo></mrow><mo>></mo><mi>&lambda;</mi></mrow>

then<mrow><msubsup><mi>n</mi><mi>i</mi><mi>&lambda;</mi></msubsup><mo>&LeftArrow;</mo><mi>j</mi></mrow>

endif

endfor

上述算法中,t是运动矢量场中的编码通道总数,大小为4M-3(M是运动矢量场最高位平面),因为对于每个编码通道过程,产生一个相应的截断点。在优化过程中,算法要对不同λ迭代执行多次。为了提高效率,可以先对运动矢量场的截断点作预处理,根据率失真函数的下凸性,可以把<mrow><msubsup><mi>S</mi><mi>i</mi><mi>j</mi></msubsup><mrow><mo>(</mo><msubsup><mi>S</mi><mi>i</mi><mi>j</mi></msubsup><mo>=</mo><msubsup><mi>&Delta;D</mi><mi>i</mi><mi>j</mi></msubsup><mo>/</mo><msubsup><mi>&Delta;L</mi><mi>i</mi><mi>j</mi></msubsup><mo>)</mo></mrow></mrow>不是单调递减的截断点去掉,得到新的候选点集Ni。那么给定λ后只需要在Ni中找到满足<mrow><msubsup><mi>S</mi><mi>i</mi><mi>j</mi></msubsup><mo>></mo><mi>&lambda;</mi></mrow>的最小值j,就是该运动矢量场的截断点。显然λ的大小,影响着解压图像质量的好坏,小的λ对应着小的失真和大的码流。λ的选择还可以根据需要人为选定。

运动矢量场Mi编码完成后需要计算候选截断点集合Ni和每个截断点对应的Sij。在码流组织时,再根据不同的λ反复迭代从各运动矢量场截断点集合中选择合适的截断点使形成的总比特流满足要求。

联合码率分配方法是,对运动矢量数据和运动估计残差数据进行联合码率分配,以得到符合用户码率、时空分辨率需求的码流。在高码率和全分辨率的情况下,运动矢量的所有部分都将得到传输。

在解码端,接受到的是无损的运动矢量。但是在低码率情况下,接受到的是有损的运动矢量数据。既然低码率下接收的是有损的帧数据,即使使用的是准确的运动矢量重建帧的重大失真也是不可避免的。然而可以将舍弃运动矢量码流的后面几个部分,节省的带宽可以用于帧编码数据。在运动矢量码流和帧数据码流之间进行折中,通过运动估计残差数据增加补偿运动矢量不精确带来的失真。在较低空间分辨率的情况下,由于运动矢量将按比例缩小,因此运动矢量的1/8精度或1/8和1/4精度部分可以舍弃,同样节省的带宽可以用于传输帧数据。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号