一种基于H.264标准的去块滤波边界强度计算装置及方法
技术领域
本发明涉及视频处理技术领域,尤其涉及一种基于H.264标准的去块滤波边界强度计算装置及方法。
背景技术
在过去的几十年里,视频领域的两大国际组织ISO-MPEG与ITU已经相继推出了一系列视频压缩标准如MPEG-1、MPEG-2和MPEG-4以及H.261、H.263、H.263+等,并于2003年由两大组织的联合视频专家组(JVT)推出了H.264/AVC标准,由于使用了帧内预测、整数变换、多种块大小的运动估计/补偿、多帧参考、1/4像素精度预测、环路去块滤波等新技术,使得它在编码效率,抗干扰能力等方面都优于之前的MPEG2、H.263等编码标准。
H.264中运动估计和整数变换都是以图像块为单位,由于变换系数的量化过程相对粗糙,因而反量化过程恢复的变换系数带有误差,会造成在图像块边界上的视觉不连续。同时,运动补偿块可能是从不同帧的不同位置上的内插样点数据中复制而来的,因为运动补偿块的匹配不可能是绝对准确的,所以就会在复制块的边界上产生数据不连续。这两个原因,会造成解码后的图像产生明显的块效应。H.264/AVC标准中使用了环路滤波来去除块效应。在H.264的解码算法中,环路滤波约占了解码器总计算量的1/3(H.264/AVC Baseline Profile Decoder Complexity Analysis,IEEE Transon CSVT,2003,Michael Horowitz,Anthony Joch etc.),而其中绝大部分都耗费在边界强度(Bs)的计算上,因此,对该环节进行优化非常必要。
在H.264标准中,计算每条边界上边界点的边界强度是以像素为单位,因此一个16×16大小的宏块需要循环计算128次才能得到所有边界点的边界强度。而同一条边界上的边界点甚至同一个宏块内部边界上的边界点都具有很强的相关性,充分利用这些边界像素点之间的相关性,能减少很多重复的计算,降低计算复杂度。同时,每个边界点边界强度的计算又需要对照判决表(附图1)按照从上到下的顺序进行比较,需要进行大量的条件判断,大大降低了处理器的执行效率。因此,基于上述分析,可利用像素之间的相关性提前进行预判,利用逻辑和算术运算替代条件比较,能有效降低边界强度的计算复杂度。
发明内容
(一)要解决的技术问题
有鉴于此,本发明的主要目的在于提供一种基于H.264标准的去块滤波边界强度计算装置及方法,在保证滤波图像质量不变的情况下,减少边界强度计算时间。
(二)技术方案
为达到上述目的,本发明采用技术方案如下:
一种基于H.264标准的去块滤波边界强度计算装置,该装置包括预判模块、赋值模块、第一边界强度计算模块和第二边界强度计算模块,该装置根据预判模块的结果,决定是采用直接赋值模块、第一边界强度计算模块或第二边界强度计算模块得到边界强度值,其中:
所述预判模块,用于根据当前宏块的编码模式和相邻宏块的编码模式,对Intra宏块的所有边界点、Inter-Skip模式的宏块内部边界点以及相邻宏块为Intra宏块的边界点调用直接赋值模块,对Inter16×16模式的宏块内部边界,调用第一边界强度计算模块,对其余宏块模式的边界点,调用第二边界强度计算模块;
所述赋值模块,用于对预判模块选择的边界,根据其类型,直接赋予边界强度值;
所述第一边界强度计算模块,用于计算宏块编码模式为Inter16×16模式的宏块6条内部边界的边界强度;
所述第二边界强度计算模块,用于计算宏块编码模式非帧间Skip模式或Inter16×16模式的宏块6条内部边界的边界强度,以及计算相邻宏块编码模式为Inter的宏块边界的边界强度。
上述方案中,所述预判模块对各个边界点进行预判,具体包括:
a)、如果当前宏块编码模式为Intra,则进入赋值模块;
b)、若不满足条件a),对于宏块内部边界,如果宏块为Inter-Skip模式,则进入赋值模块;如果宏块为Inter16×16模式,则进入第一边界强度计算模块;如果宏块为非Skip模式或Inter16×16模式,则进入第二边界强度计算模块;
c)、若不满足条件a),对于宏块边界,如果相邻宏块宏块编码模式为Intra,则进入赋值模块;否则,则进入第二边界强度计算模块。
上述方案中,所述赋值模块对预判模块选择的边界点赋予其边界强度值,具体包括:
a)、对Intra宏块,宏块边界的边界强度值BS=4;宏块内部边界的边界强度值BS=3;
b)、对Inter-Skip模式的宏块内部边界,边界强度值BS=0;
c)、对相邻宏块编码模式为Intra的宏块边界,边界强度值BS=4。
上述方案中,所述第一边界强度计算模块计算宏块编码模式为Inter16×16模式的宏块6条内部边界的边界强度时,该宏块内部每一条边界上属于同一个4×4块的4个边界点边界强度一致,这4个边界点只需要计算一次边界强度值;对于每个边界强度值的计算,如果边界点两旁的一个4×4块存在残差编码,令残差编码条件Ccbp=1,否则Ccbp=0,然后计算该边界点边界强度BS=2×Ccbp。
上述方案中,所述第二边界强度计算模块计算宏块编码模式非帧间Skip模式或Inter16×16模式的宏块6条内部边界的边界强度,以及计算相邻宏块编码模式为Inter的宏块边界的边界强度时,每一条边界上属于同一个4×4块的4个边界点边界强度一致,这4个边界点只需要计算一次边界强度值;对于每个边界强度值的计算,按照如下步骤计算:
a)、计算Ccbp(残差编码条件):如果该边界点两旁的一个4×4块存在残差编码,令Ccbp=1,否则Ccbp=0;计算Cmv(运动矢量条件):如果该边界点两旁的4×4块运动矢量之差不小于1个亮度图像点的距离,令Cmv=1,否则Cmv=0;计算Cref(参考帧条件):如果该边界点两旁的4×4块运动补偿的参考帧不同,令Cref=1,否则Cref=0;
b)、根据步骤a)中得到的残差编码条件、运动矢量条件以及参考帧条件计算该边界强度值为BS=2×Ccbp+(!Ccbp)×Cmv|Cref。
一种基于H.264标准的去块滤波边界强度计算方法,该方法根据当前宏块的编码模式和相邻宏块的编码模式,以及是否宏块边界,对边界强度进行预判,满足预判条件的边界点,直接赋予边界强度值;对不满足预判条件的宏块的边界点边界强度计算时,用逻辑运算和算术运算取代判断跳转。
该方法具体包括:
步骤1:判断当前宏块类型,如果当前宏块编码类型为帧内编码,则执行步骤2;如果当前宏块编码类型为帧间编码,则执行步骤3;
步骤2:当前宏块类型为帧内编码,宏块边界上所有边界点的边界强度为BS=4,宏块内部边界上所有边界点的边界强度为BS=3,结束本流程;
步骤3:当前宏块类型为帧间编码,对于宏块内部边界,则判断帧间宏块类型,如果宏块编码模式为帧间skip模式,则所有边界点的边界强度为BS=0,结束本流程;如果是帧间Inter16×16模式,则跳转到步骤4;如果为其余帧间编码模式,则跳转到步骤5;对于宏块边界,则判断相邻宏块的编码模式,如果相邻宏块为帧内编码,则宏块边界上所有边界点边界强度为BS=4,结束本流程;否则跳转到步骤5;
步骤4:对于帧间Inter16×16模式的宏块内部边界,如果该内部边两旁的一个4×4块存在残差编码Ccbp,令Ccbp=1,否则Ccbp=0,然后计算边界强度BS=2×Ccbp,该边界上每个4×4块的4个边界点边界强度值一致,该边界只需要计算4次不同4×4块上边界点的边界强度值;结束本流程;
步骤5:对于当前宏块为非帧间skip模式、Inter16×16模式的宏块内部边界和相邻宏块非帧内编码的宏块边界,需要考虑残差编码Ccbp、运动矢量Cmv和参考帧Cref三个条件,分别得到这三个条件的逻辑值后,计算边界强度为BS=2×Ccbp+(!Ccbp)×Cmv|Cref,该边界上每个4×4块的4个边界点边界强度值一致,该边界只需要计算4次不同4×4块上边界点的边界强度值,结束本流程。
上述方案中,步骤5中所述得到残差编码Ccbp、运动矢量Cmv和参考帧Cref这三个条件的逻辑值时,如果该边界点两旁的一个4×4块存在残差编码,令Ccbp=1,否则Ccbp=0;如果该边界点两旁的4×4块运动矢量之差不小于1个亮度图像点的距离,令Cmv=1,否则Cmv=0;如果该边界点两旁的4×4块运动补偿的参考帧不同,令Cref=1,否则Cref=0。
(三)有益效果
从上述技术方案可以看出,本发明具有以下有益效果:
1、由于H.264标准中的边界点边界强度值计算需要大量的条件判断,使得处理器执行效率较低,所以采用了提前预判模块,根据当前宏块的宏块编码模式和相邻宏块的宏块编码模式,对部分边界点的边界强度值直接赋值,有效减少了条件判断次数;
2、由于边界点的边界强度值计算是以像素为单位,而同一条边界上的边界点甚至同一个宏块内部边界上的边界点都具有很强的相关性,所以充分利用这种相关性,一条滤波边界只用计算一次或四次边界强度即可,能大量减少很多重复的计算过程,降低计算复杂度。
3、对于不能通过预判得到边界强度值的边界点,仍然需要按照H.264标准提出的方式计算边界强度值,而H.264标准给出的计算条件之间是互斥的,且每个条件只有0和1两种状态。因此,利用逻辑运算和算术运算取代条件判断是可行的,这样大大增强了处理器执行效率。
通过以上三个方面的改进,能够有效地提高H.264的去块滤波边界强度计算效率。
附图说明
图1是H.264去块滤波边界强度判断准则;
图2是去块滤波顺序及边界示意图;
图3是边界强度计算模块示意图;
图4是边界强度计算流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
在H.264标准中,由于块效应产生的两个主要因素是整数变换后的量化过程以及运动补偿的不完全准确性造成的,因此对于去块滤波中边界点的边界强度主要由边界两边的图像块的宏块类型、是否对残差编码、运动矢量和参考帧几个决定因素决定。整数变换的量化过程是产生块效应最主要的原因,而帧内编码时量化造成的影响最大,运动补偿造成的影响相对较小,所以,给不同的决定因素赋予了不同的边界强度值。并按照如图1所示,从上到下的顺序逐次判断,满足某一条件时,即确定当前边界点的边界强度值。因此需要进行大量的条件判断,使得处理器在执行时大大降低了效率。
在H.264标准中,计算每条边界上边界点的边界强度是以像素为单位,因此一个宏块需要计算16条滤波边界,每条边界上又有16个像素点,因此需要循环计算128次才能得到所有边界点的边界强度。而同一条边界上的边界点甚至同一个宏块内部边界上的边界点都具有很强的相关性,充分利用这些边界像素点之间的相关性,能减少很多重复的计算过程,降低计算复杂度。
根据图1所示,边界强度计算的几个决定因素中,在很多情况下,边界像素点的决定因素具有较强的一致性。如:在同一宏块内,编码模式的最小单位是4×4块,因此所有4×4块的宏块编码模式均一致。对于帧间编码宏块的skip模式宏块,所有4×4块均没有对残差进行编码,且4×4块的参考帧和运动矢量均一致。对于帧间编码宏块的Inter16×16模式宏块内,所有4×4块的参考帧和运动矢量均一致。对于所有的边界强度决定因素,同一个4×4块的边缘4个像素点的条件均一致。利用这些一致性对特殊宏块的边界点进行提前预判,一条滤波边界只用计算一次或四次边界强度即可,可以大量减少不必要的计算。
如果不能通过宏块编码模式进行预判,仍需要按照传统方法对边界两边的图像块进行逐次比较判断计算边界强度,但从图1的判断表我们可以发现,每个条件之间是互斥的,且每个条件只有0和1两种状态。因此,利用逻辑运算和算术运算取代条件判断是可行的,这样大大增强了处理器执行效率。
基于上述分析,本发明提出了一种基于H.264标准的去块滤波边界强度计算装置,该装置包括预判模块、赋值模块、第一边界强度计算模块和第二边界强度计算模块,该装置根据预判模块的结果,决定是采用直接赋值模块、第一边界强度计算模块或第二边界强度计算模块得到边界强度值,其中:
上述方案中,所述预判模块对各个边界点进行预判,具体包括:
a)、如果当前宏块编码模式为Intra,则进入赋值模块;
b)、若不满足条件a),对于宏块内部边界,如果宏块为Inter-Skip模式,则进入赋值模块;如果宏块为Inter16×16模式,则进入第一边界强度计算模块;如果宏块为非Skip模式或Inter16×16模式,则进入第二边界强度计算模块;
c)、若不满足条件a),对于宏块边界,如果相邻宏块宏块编码模式为Intra,则进入赋值模块;否则,则进入第二边界强度计算模块。
上述方案中,所述赋值模块对预判模块选择的边界点赋予其边界强度值,具体包括:
a)、对Intra宏块,宏块边界的边界强度值BS=4;宏块内部边界的边界强度值BS=3;
b)、对Inter-Skip模式的宏块内部边界,边界强度值BS=0;
c)、对相邻宏块编码模式为Intra的宏块边界,边界强度值BS=4。
上述方案中,所述第一边界强度计算模块计算宏块编码模式为Inter16×16模式的宏块6条内部边界的边界强度时,该宏块内部每一条边界上属于同一个4×4块的4个边界点边界强度一致,这4个边界点只需要计算一次边界强度值;对于每个边界强度值的计算,如果边界点两旁的一个4×4块存在残差编码,令残差编码条件Ccbp=1,否则Ccbp=0,然后计算该边界点边界强度BS=2×Ccbp。
上述方案中,所述第二边界强度计算模块计算宏块编码模式非帧间Skip模式或Inter16×16模式的宏块6条内部边界的边界强度,以及计算相邻宏块编码模式为Inter的宏块边界的边界强度时,每一条边界上属于同一个4×4块的4个边界点边界强度一致,这4个边界点只需要计算一次边界强度值;对于每个边界强度值的计算,按照如下步骤计算:
a)、计算Ccbp(残差编码条件):如果该边界点两旁的一个4×4块存在残差编码,令Ccbp=1,否则Ccbp=0;计算Cmv(运动矢量条件):如果该边界点两旁的4×4块运动矢量之差不小于1个亮度图像点的距离,令Cmv=1,否则Cmv=0;计算Cref(参考帧条件):如果该边界点两旁的4×4块运动补偿的参考帧不同,令Cref=1,否则Cref=0;
b)、根据步骤a)中得到的残差编码条件、运动矢量条件以及参考帧条件计算该边界强度值为BS=2×Ccbp+(!Ccbp)×Cmv|Cref。
本发明同时提供了一种基于H.264标准的去块滤波边界强度计算方法,该方法根据当前宏块的编码模式和相邻宏块的编码模式,以及是否宏块边界,对边界强度进行预判;对不满足预判条件的宏块的边界点边界强度计算时,用逻辑运算和算术运算取代判断跳转;该方法具体包括:
步骤一:判断当前宏块类型,如果当前宏块编码类型为帧内编码,则执行步骤二;如果当前宏块编码类型为帧间编码,则执行步骤三;
步骤二:当前宏块类型为帧内编码,宏块边界上所有边界点的边界强度为BS=4,宏块内部边界上所有边界点的边界强度为BS=3,结束本流程;
步骤三:当前宏块类型为帧间编码,对于宏块内部边界,则判断帧间宏块类型,如果宏块编码模式为帧间skip模式,则所有边界点的边界强度为BS=0,结束本流程;如果是帧间Inter16×16模式,则跳转到步骤四;如果为其余帧间编码模式,则跳转到步骤五;对于宏块边界,则判断相邻宏块的编码模式,如果相邻宏块为帧内编码,则宏块边界上所有边界点边界强度为BS=4,结束本流程;否则跳转到步骤五;
步骤四:对于帧间Inter16×16模式的宏块内部边界,如果该内部边两旁的一个4×4块存在残差编码Ccbp,令Ccbp=1,否则Ccbp=0,然后计算边界强度BS=2×Ccbp;结束本流程;
步骤五:对于当前宏块为非帧间skip模式、Inter16×16模式的宏块内部边界和相邻宏块非帧内编码的宏块边界,需要考虑残差编码Ccbp、运动矢量Cmv和参考帧Cref三个条件,分别得到这三个条件的逻辑值(如果该边界点两旁的一个4×4块存在残差编码,令Ccbp=1,否则Ccbp=0;如果该边界点两旁的4×4块运动矢量之差不小于1个亮度图像点的距离,令Cmv=1,否则Cmv=0;如果该边界点两旁的4×4块运动补偿的参考帧不同,令Cref=1,否则Cref=0)后,计算边界强度为BS=2×Ccbp+(!Ccbp)×Cmv|Cref,结束本流程。
上述步骤四和步骤五可以用公式(1)表示。每条边界需要计算四次边界强度值,每个边界强度值计算时需要按照步骤四或步骤五右边括号内的顺序从上到下执行。
步骤四:
步骤五:
在一般的编码序列中,帧间skip模式的宏块和帧间Inter16×16模式的宏块占有较大的比例,skip模式约占到37%~48%,Inter16×16模式约占到29%~32%。通过对这两种模式和帧内编码宏块的提前预测,能减少大量不必要的计算。下表是对几个编码序列中各种帧间宏块编码模式比例的统计(测试条件:CIF格式,300帧,IPPP……,运动矢量搜索范围:-16~+16,帧间编码模式:16×16~4×4):
表1帧间宏块各编码模式统计表
和H.264标准方法对比如表2可知,对于大部分的滤波边界来说,本发明的方法只需要极少的条件判断就可以得到整条边界上所有点的边界强度,而H.264标准方法需要大量的条件判断。对于需要执行步骤四或步骤五的滤波边界,本发明的方法只需要增加极少的算术运算和逻辑运算。而由表1可知,大部分的图像中,skip和Inter16×16编码模式的宏块所占比例较高,相应的滤波边界在所有滤波边界中所占比例也较高。对本发明的方法更为有效。
表2本发明和H.264标准方法计算复杂度比较
注:J表示一次条件判断,M表示一次乘法运算,A表示一次加法运算,L表示一次逻辑运算
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。