具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
为了实现本发明之目的,本发明公开了一种视频编码复杂度自适应调整方法,如图1所示,该方法包括如下步骤:
A1:对宏块编码模式进行预分类。
宏块编码模式预分类可以包括多种方法,以实现在视频进行编码模式搜索前对搜索的模式种类进行预先判定,将出现概率非常小的编码模式预先排除,缩小了模式搜索范围,降低了计算复杂度的目的。
本发明涉及的宏块编码模式预分类可以通过以下两种方式之一实现。
1)统计每个宏块在前n个参考帧对应位置宏块最终选择的运动矢量及编码模式,根据统计结果判断宏块适合的编码模式为SKIP模式或Inter16x16模式,对上述宏块编码模式进行预分类。
具体的说,首先采用ZMCS准则,统计零运动矢量一致性(ZMC),ZMCt (n,m;i,j)表示宏块内连续包含零运动矢量的大小,
其中,t为帧的标识号,ZMC0=0。
根据ZMCt (n,m;i,j),判断宏块适合的编码模式,
其中,TMOTION为零运动矢量一致性阈值。
根据上述计算得到的ZMCSt (i,j),当ZMCt (n,m;i,j)≥TMOTION时,判断宏块适合的编码模式为SKIP模式或Inter16x16模式。
在本实施例中,TMOTION=4,在该条件下,宏块编码模式采用Inter16x16的平均概率为94%。
当ZMCt (n,m;1,j)<TMOTION时,即ZMCSt (i,j)为低时,进一步采用LBCS准则,判断宏块适合的编码模式。具体的说,首先判断前n个参考帧的大块一致性,根据上述大块一致性,判断当前宏块的前n个参考帧的最终编码模式为SKIP或Inter16x16模式。
计算当前宏块的大块一致性LBCt (i,j),LBCt (i,j)=LBCt (i,j)+1。
根据上述判断结果,进一步判断当前宏块适合的编码模式。
其中,TMODE1和TMODE2为用于评估LBCt (i,j)的阈值。
如上述公式中所示,根据LBCt (i,j)<TMODE1,TMODE1≤LBCt (i,j)<TMODE2,TMODE2≤LBCt (i,j)的不同条件下,宏块适合编码模式为Inter16x16模式的概率依次降低。
在本实施例中,TMODE1=1、TMODE2=4,在此条件下,当LBCSt (i,j)为高时,宏块适合编码模式为Inter16x16的平均概率为90%;当LBCSt (i,j)为中时,宏块适合编码模式为Inter16x16的平均概率为69%;当LBCSt (i,j)为低时,宏块适合编码模式为Inter16x16的平均概率为47%。
综合利用ZMC准则和LBCS准则,根据宏块的零运动矢量的大小及前n个参考帧的适合编码模式,判断当前宏块适合编码模式为SKIP模式或Inter16x16模式,实现对宏块编码模式的预分类。
2)宏块编码模式进行预分类还可以通过以下方式实现,采用基于水平方向和垂直方向的方差计算方法来预判宏块纹理复杂度的算法。图4示出了宏块模式预分类的流程框图。
结合图2和图3所示,首先,计算宏块的水平方向方差Variance_hor和垂直方向方差Variance_ver。
具体的说,计算水平方向的宏块方差Variance_hor的方法包括如下步骤:首先求出宏块内一行象素的均值,再求出每个象素与均值的差值,其平方和即是该行象素的方差。宏块内所有行的方差相加即该宏块的水平方向方差。设宏块内每个象素的亮度值为F(xi,yj),
计算垂直方向的宏块方差Variance_ver的方法包括如下步骤:首先求出宏块内一列象素的均值,再求出每个象素与均值的差值,其平方和即是该列象素的方差。宏块内所有列的方差相加即该宏块的垂直方向方差。设宏块内某象素值为F(xi,yj),
根据本发明的实施例提供的方法,预判宏块的初始模式,以决定对于该宏块来说,哪些模式可以直接跳过而不必再做搜索。
根据计算得到的水平方向上的方差Variance_hor和垂直方向上的方差Variance_ver,判断Variance_hor同Variance_ver之和与设定阈值threshold的大小。
当Variance_hor+Variance_ver<=threshold时,表明该宏块的纹理极其简单,因此,只保留SKIP模式和Inter16×16模式,省略其他所有模式的搜索,可极大地降低计算复杂度。对上述宏块采用基于PSNR的强制性准则编码为SKIP模式。
当Variance_hor+Variance_ver>threshold时,进一步判断,当Variance_hor>Variance_ver时,该宏块适合的编码模式判定为Inter 16×16模式、Inter 8×16模式、Inter 8×8模式或Skip模式;
当Variance_hor<Variance_ver时,该宏块适合的编码模式判定为Inter16×16模式、Inter 16×8模式、Inter 8×8模式或Skip模式。
通过以上两种方式,均可实现对宏块编码模式进行预先判定,缩小模式搜索范围,降低计算复杂度的目的。
A2:调用视频编码复杂度控制模型P-R-D,对宏块按照预分类后的模式进行编码,计算帧的实际计算复杂度C_frame。
在步骤A1中,初步确定了宏块的初始模式,将此初始模式记录到该宏块的列表中。接下来进入帧一级控制步骤。
图6示出帧级复杂度控制的控制流程。如图6中所示,首先根据硬件及其他用户需求设定对该帧期望的目标复杂度C_target,根据初步确定的宏块模式调用P-R-D模型计算本宏块需要的计算复杂度C_MB。
上述P-R-D模型针对嵌入式平台特别是手持应用环境下电池供电能力受限的情况,提出了一种面向电源约束的H.264/AVC视频编码复杂度控制模型P-R-D模型,在电源供电能力不足甚至是严重不足时仍能保证视频编码的重建质量。该模型包括:选取整象素运动估计、亚象素运动估计、参考帧数目、帧内预测模式、帧间预测模式作为影响编码器计算复杂度的关键因子。对上述提到的不同算法进行交叉分组测试,得到每一组合对应的时间计算复杂度和编码效率。对这些交叉分组测试结果,在同等编码效率的前提下可能对应有多组不同的算法组合。如果只对应一组,则保留该组;如果对应有多个组,保留编码效率最高的一组,剔除其余编码效率较低的组合。如此得到一张由从高到低的计算复杂度对应于不同算法组合的C-R-D表。表1示出了上述C-R-D表。该C-R-D表与映射复杂度水平的拟合曲线一起,构成编码器算法复杂度控制模型的主要内容。
表1
计算复杂度水平 |
运动补偿块模式 |
亚象素运动估计水平 |
损失失真(dB) |
归一化复杂度值 |
0 |
SKIP |
|
|
0 |
1 |
1 |
1 |
-0.76 |
0.228 |
2 |
2 |
1 |
-0.59 |
0.246 |
3 |
3 |
1 |
-0.46 |
0.265 |
4 |
4 |
1 |
-0.44 |
0.283 |
5 |
6 |
1 |
-0.53 |
0.359 |
6 |
3 |
2 |
-0.3 |
0.397 |
7 |
4 |
2 |
-0.26 |
0.438 |
8 |
3 |
3 |
-0.2 |
0.491 |
9 |
3 |
4 |
-0.18 |
0.528 |
10 |
3 |
5 |
-0.16 |
0.544 |
11 |
4 |
3 |
-0.15 |
0.577 |
12 |
4 |
4 |
-0.13 |
0.614 |
13 |
4 |
5 |
-0.12 |
0.637 |
14 |
5 |
3 |
-0.12 |
0.707 |
15 |
5 |
4 |
-0.1 |
0.745 |
16 |
5 |
5 |
-0.08 |
0.775 |
17 |
6 |
3 |
-0.03 |
0.918 |
18 |
6 |
4 |
-0.02 |
0.955 |
19 |
6 |
5 |
0 |
1 |
控制编码器的计算复杂度,通常有几种备选方案:序列级,帧级,SLICE级直至宏块级。显然,控制粒度越小,控制精度也就越高。本发明对宏块编码模式预先判断初始模式,先按照此算法估计该帧的整体复杂度,比较此估计值是否与预先设定的目标复杂度一致,利用上述P-R-D控制模型,据此决定是否改变本宏块的复杂度水平并调整本宏块的计算复杂度。
其中,在本实施例中上述P-R-D模型为y=0.045x+0.1389,图5示出了P-R-D模型的示意图。如图中所示,横轴为计算复杂度水平,纵轴为归一化的复杂度,拟合曲线为y=0.045x+0.1389。
由于本发明做到了宏块级的复杂度控制,根据宏块所包含的信息量自适应分配计算复杂度,因此,控制准确度更高,而对整体编码效率的影响也降低到最小。
根据上述P-R-D模型,分别计算出各个宏块复杂度。将上述各个宏块复杂度叠加,进一步得到该帧的C_frame。
A3:将帧C_frame与帧的目标复杂度C_target进行比较。上述目标复杂度C_target可以通过以下两种方式之一获得。
1)人工获取:根据视频编码的需求,由用户设定目标复杂度C_target;
2)自动获取:根据设备的电源情况,由系统自动生成目标复杂度C_target。
当C_frame<=C_target时,进行运动估计和模式选择;当(3/2)*C_target>C_frame>C_target时,进行宏块级复杂度调整,根据宏块级复杂度调整的调整结果,重新计算帧的实际计算复杂度C_frame,直至满足C_frame<=C_target。
结合图6所示,对步骤A2中计算得到的实际计算复杂度C_frame与帧的目标复杂度C_target进行比较。
如果C_frame超出C_target倍数达到设定阈值的话,即,当C_frame>(3/2)*C_target时,表明该帧内需要强制增加帧内SKIP模式的宏块数量,以大幅降低计算复杂度。其中,帧内SKIP模式的宏块的增加数量,记为β,设定β的值。
若C_frame<=C_target,表明该帧的实际复杂度不超过设定值,则直接跳过,不做处理,即β=0。
若(3/2)*C_target>C_frame>C_target,进行宏块级复杂度调整,重新计算调整后的帧的实际计算复杂度计算复杂度C_frame。
图7示出了宏块级复杂度调整的流程图。如图7中所示,若实际计算的帧复杂度C_frame超出设定值C_target,即(3/2)*C_target>C_frame>C_target时,需要改变预先设定的宏块初始模式,同时改变其计算复杂度档次。具体包括如下步骤:
首先,将帧内复杂度档次处于最高水平的宏块的计算复杂度,在原有基础上降低一个计算复杂度档次。然后,计算当前宏块复杂度与宏块的初始复杂度C_MB的差值Cmb_diff,根据Cmb_diff,重新计算该帧调整后的帧级计算复杂度C_frame,更新并记录上述调整后的计算复杂度。根据上述调整后的计算复杂度,再判断是否满足条件要求,如此循环,直至满足C_frame<=C_target为止。
本发明实施例的另一方面还公开了一种视频编码复杂度自适应调整装置,结合图8所示,该装置100包括宏块预分类单元110、复杂度估计单元120和比较及调整单元130。
宏块预分类单元110对宏块编码模式进行预分类,宏块预分类单元110可以通过以下两种方式之一实现对宏块编码模式的预分类。
1)宏块预分类单元110统计每个宏块在前n个参考帧对应位置宏块最终选择的运动矢量及其编码模式,根据统计结果判断宏块适合的编码模式为SKIP模式或Inter16x16模式,对上述宏块编码模式进行预分类。
具体的说,首先采用ZMCS准则,统计零运动矢量一致性(ZMC),ZMCt (n,m;i,j)表示宏块内连续包含零运动矢量的大小,
其中,t为帧的标识号,ZMC0=0。
根据ZMCt (n,m;i,j),判断宏块适合的编码模式,
其中,TMOTION为零运动矢量一致性阈值。
根据上述计算得到的ZMCSt (i,j),当ZMCt (n,m;i,j)≥TMOTION时,判断宏块适合的编码模式为SKIP模式或Inter16x16模式。
在本实施例中,TMOTION=4,在该条件下,宏块编码模式采用Inter16x16的平均概率为94%。
当ZMCt (n,m;i,j)<TMOTION时,进一步采用LBCS准则,判断宏块适合的编码模式。具体的说,首先统计前n个参考帧的大块一致性,根据上述大块一致性,判断宏块前n个参考帧最终编码模式为SKIP或Inter16x16模式。
计算当前宏块的大块一致性LBCt (i,j),LBCt (i,j)=LBCt (i,j)+1。
宏块预分类单元110根据上述判断结果,进一步判断宏块适合的编码模式。
其中,TMODE1和TMODE2为用于评估LBCt (i,j)的阈值。
如上述公式中所示,根据LBCt (i,j)<TMODE1,TMODE1≤LBCt (i,j)<TMODE2,TMODE2≤LBCt (i,j)的不同条件下,宏块适合编码模式为Inter16x16模式的概率依次降低。
在本实施例中,TMODE1=1、TMODE2=4,在此条件下,当LBCSt (i,j)为高时,宏块适合编码模式为Inter16x16的平均概率为90%;当LBCSt (i,j)为中时,宏块适合编码模式为Inter16x16的平均概率为69%;当LBCSt (i,j)为低时,宏块适合编码模式为Inter16x16的平均概率为47%。
综合利用ZMC准则和LBCS准则,根据宏块的零运动矢量的大小及前n个参考帧的适合编码模式,判断当前宏块适合编码模式为SKIP模式或Inter16x16模式,实现对宏块编码模式的预分类。
2)通过采用基于水平方向和垂直方向的方差计算方法来预判宏块纹理复杂度的算法。结合图4所示,首先,宏块预分类单元110计算宏块的水平方向方差Variance_hor和垂直方向方差Variance_ver。
具体的说,计算水平方向的宏块方差Variance_hor包括:首先求出宏块内一行象素的均值,再求出每个象素与均值的差值,其平方和即是该行象素的方差。宏块内所有行的方差相加即该宏块的水平方向方差。设宏块内某象素值为F(xi,yj),
宏块预分类单元110计算垂直方向的宏块方差Variance_ver包括:首先求出宏块内一列象素的均值,再求出每个象素与均值的差值,其平方和即是该列象素的方差。宏块内所有列的方差相加即该宏块的垂直方向方差。设宏块内某象素值为F(xi,yj),
据此,宏块预分类单元110可以实现预判宏块的初始模式,以决定对于该宏块来说,哪些模式可以直接跳过而不必再做搜索。
根据上述水平方向上的方差Variance_hor和垂直方向上的方差Variance_ver,判断Variance_hor同Variance_ver之和与设定阈值threshold的大小。
当Variance_hor+Variance_ver<=threshold时,表明该宏块的纹理极其简单,因此,只保留SKIP模式和Inter16×16模式,省略其他所有模式的搜索,可极大地降低计算复杂度。对上述宏块采用基于PSNR的强制性准则编码为SKIP模式。
当Variance_hor+Variance_ver>threshold时,进一步判断,当Variance_hor>Variance_ver时,该宏块适合的编码模式判定为Inter 16×16模式、Inter 8×16模式、Inter 8×8模式或Skip模式;
当Variance_hor<Variance_ver时,该宏块适合的编码模式判定为Inter16×16模式、Inter 16×8模式、Inter 8×8模式或Skip模式。
视频编码复杂度自适应调整装置100还包括复杂度估计单元120。复杂度估计单元120用于调用视频编码复杂度控制模型P-R-D,对宏块按照预分类后的模式进行编码,计算帧的实际计算复杂度C_frame。在初步确定了宏块的初始模式后,将此初始模式记录到该宏块的列表中。
结合图6所示,复杂度估计单元120首先根据硬件及其他用户需求设定对该帧期望的目标复杂度C_target,根据初步确定的宏块模式调用P-R-D模型计算本宏块需要的计算复杂度。表1示出了与该P-R-D模型对应的C-R-D表。该C-R-D表与映射复杂度水平的拟合曲线一起,构成编码器算法复杂度控制模型的主要内容。
其中,在本实施例中,上述P-R-D模型为y=0.045x+0.1389,图5示出了P-R-D模型的示意图。如图中所示,横轴为计算复杂度水平,纵轴为归一化的复杂度,拟合曲线为y=0.045x+0.1389。
由于本发明做到了宏块级的复杂度控制,根据宏块所包含的信息量自适应分配计算复杂度,因此,控制准确度更高,而对整体编码效率的影响也降低到最小。
复杂度估计单元120根据上述P-R-D模型,分别计算出各个宏块复杂度。将上述各个宏块复杂度叠加,进一步得到该帧的实际计算复杂度C_frame。
编码复杂度控制单元130包括宏块编码模式调整单元131和宏块复杂度更新单元132。结合图6所示,编码复杂度控制单元130对将帧的实际计算复杂度C_frame与帧的目标复杂度C_target进行比较。宏块编码模式调整单元131根据比较结果,如果C_frame超出C_target倍数达到设定阈值的话,即,当C_frame>(3/2)*C_target时,表明宏块编码模式调整单元131需要强制增加该帧内SKIP模式的宏块数量,以大幅降低计算复杂度。其中,帧内SKIP模式的宏块的增加数量,记为β,设定β的值。
若C_frame<=C_target,表明该帧的实际复杂度不超过设定值,则直接跳过,不做处理,即β=0。
宏块复杂度更新单元132根据实际计算复杂度C_frame与帧的目标复杂度C_target的比较结果,若(3/2)*C_target>C_frame>C_target,则进行宏块级复杂度调整,重新计算调整后的帧的实际计算复杂度计算复杂度C_frame。
图7示出了宏块级复杂度调整的流程图。具体地说,若实际计算的帧复杂度C_frame超出设定值C_target,即(3/2)*C_target>C_frame>C_target时,宏块复杂度更新单元132需要改变预先设定的宏块初始模式,同时改变其计算复杂度档次。
首先,将帧内复杂度档次处于最高水平的宏块的计算复杂度,在原有基础上降低一个计算复杂度档次。然后,计算当前宏块复杂度与宏块的初始复杂度C_MB的差值Cmb_diff,根据Cmb_diff,重新计算该帧调整后的帧的实际计算复杂度C_frame,更新并记录上述调整后的计算复杂度。根据上述调整后的计算复杂度,再判断是否满足条件要求,如此循环,直至满足C_frame<=C_target为止。
综上所述,图3所示的视频编码复杂度自适应调整的框图中,左侧虚框包括的模块用于完成在对视频进行编码前的预处理,即首先进行宏块编码模式的预分类,利用P-R-D模型预估帧的计算复杂度,再由编码复杂度控制器将其余帧的目标计算复杂度进行比较,根据比较结果调整宏块编码模式并更新宏块复杂度记录表。右侧虚框包括的模块用于完成对视频的编码,即运动估计和模式选择。
本发明实施例涉及的方法和装置,在手持设备等存在电源约束的应用下,通过自定义的简单数学算子对宏块编码模式进行预分类,初步估计出帧一级的计算复杂度。判断此估计复杂度是否满足给定的目标计算复杂度,进一步决定是否需要重新调整该帧内SKIP模式宏块的占比及每一宏块的复杂度。通过调用P-R-D模型,调整宏块的计算复杂度档次,确定具体的编码模式。根据本发明实施提供的方法和装置可以准确控制视频编码器的整体计算复杂度,同时保持在同等编码复杂度下获得更佳的重建视频质量。
本领域普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。