本发明涉及视频编解码技术领域,特别涉及一种滤波方法及装置。
背景技术:
HEVC(High Efficiency Video Coding,高效视频编码标准)视频解码最消耗时间的模块是负责帧间预测的运动补偿插值计算模块。因为运动补偿经常指向子像素点(即非整像素像素点),所以需要使用插值滤波器计算子像素点的像素值,即进行像素插值滤波。
目前,HEVC视频编解码设备对于和整像素像素点既不在同一行又不在同一列的像素点进行插值滤波分为两步,第一步先水平滤波,即计算和当前像素点在同一列且和整像素在同一行的子像素点的未缩放版本,第二步用第一步的计算结果做垂直滤波。在第一步水平滤波中,因为整像素点的取值范围为0-255,所以经过水平滤波后,因为没有缩放,对于半像素点,其动态范围最小值就是(-1,4,-11,40,40,-11,4,-1)*(255,0,255,0,0,255,0,255)=-24*255=-6120,最大值为(-1,4,-11,40,40,-11,4,-1)*(0,255,0,255,255,0,255,255)=88*255=22440。对于四分之一或四分之三像素点,其动态范围最小值就是(-1,4,-10,58,17,-5,1,0)*(255,0,255,0,0,255,0,255)=-16*255=-4080,最大值为(-1,4,-10,58,17,-5,1,0)*(0,255,0,255,255,0,255,255)=80*255=20400。可见,第一步水平滤波的计算结果超过了16位有符号整数的范围。并且对于第二步垂直滤波,其选用插值滤波器和未缩放版本卷积,中间值范围也超过了16位有符号整数范围,需要32位精度计算,导致插值滤波的计算速度较慢。
技术实现要素:
本发明实施例的目的在于提供一种滤波方法及装置,以提高插值滤波的计算速度。
为达到上述目的,本发明实施例公开了一种滤波方法,应用于HEVC视频编解码设备,方法包括:
针对与整像素像素点既不在同一行也不在同一列的像素点,调用插值滤波器计算与所述像素点在同一列、且和整像素像素点在同一行的每一像素点的像素值;
将计算得到的每一像素点的像素值分别与预设调整值做差运算;
确定所述像素点的垂直滤波插值;
根据做差运算得到的每一结果值,利用与所述垂直滤波插值对应的基于将整数运算限制在十六位有符号整数范围内的滤波算法进行插值滤波。
较佳的,所述HEVC视频编解码设备为:
包含插值滤波器的HEVC视频编解码设备。
较佳的,所述插值滤波器包含:
四分之一插值滤波器、四分之二插值滤波器和四分之三插值滤波器。
较佳的,所述预设调整值属于[95*64,192*64],且为64的整倍数。
较佳的,所述滤波算法中包含:
平均指令、移位指令、饱和指令、算术加指令、算术减指令。
为达到上述目的,本发明实施例公开了一种滤波装置,应用于HEVC视频编解码设备,装置包括:
计算模块,用于针对与整像素像素点既不在同一行也不在同一列的像素点,调用插值滤波器计算与所述像素点在同一列、且和整像素像素点在同一行的每一像素点的像素值;
调整模块,用于将计算得到的每一像素点的像素值分别与预设调整值做差运算;
确定模块,用于确定所述像素点的垂直滤波插值;
滤波模块,用于根据做差运算得到的每一结果值,利用与所述垂直滤波插值对应的基于将整数运算限制在十六位有符号整数范围内的滤波算法进行插值滤波。
较佳的,所述HEVC视频编解码设备为:
包含插值滤波器的HEVC视频编解码设备。
较佳的,所述插值滤波器包含:
四分之一插值滤波器、四分之二插值滤波器和四分之三插值滤波器。
较佳的,所述预设调整值属于[95*64,192*64],且为64的整倍数。
较佳的,所述滤波算法中包含:
平均指令、移位指令、饱和指令、算术加指令、算术减指令。
由上述的技术方案可见,本发明实施例提供了一种滤波方法及装置,应用于HEVC视频编解码设备,针对与整像素像素点既不在同一行也不在同一列的像素点,调用插值滤波器计算与所述像素点在同一列、且和整像素像素点在同一行的每一像素点的像素值;将计算得到的每一像素点的像素值分别与预设调整值做差运算;确定所述像素点的垂直滤波插值;根据做差运算得到的每一结果值,利用与所述垂直滤波插值对应的基于将整数运算限制在十六位有符号整数范围内的滤波算法进行插值滤波。
可见,针对与整像素像素点既不在同一行也不在同一列的像素点,利用与预设调整值的差运算和与所述垂直滤波插值对应的基于将整数运算限制在十六位有符号整数范围内的滤波算法,进行插值滤波,可以将HEVC的插值计算的中间值范围限制在16位有符号整数范围,不需要32位精度计算,从而提高了插值滤波的计算速度,进一步也节省了插值滤波的计算时间。
当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的滤波方法的一种流程示意图;
图2为本发明实施例提供的包含待滤波像素点的示意图;
图3为本发明实施例提供的滤波装置的一种结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本发明实施例提供的一种滤波方法及装置优选适用于HEVC视频编解码设备。
具体的,在实际应用中,HEVC视频编解码设备可以为:包含插值滤波器的HEVC视频编解码设备。
下面首先对本发明实施例提供的一种滤波方法进行详细说明。
参见图1,图1为本发明实施例提供的滤波方法的一种流程示意图,可以包括如下步骤:
S101,针对与整像素像素点既不在同一行也不在同一列的像素点,调用插值滤波器计算与所述像素点在同一列、且和整像素像素点在同一行的每一像素点的像素值;
具体的,在实际应用中,插值滤波器可以包含:四分之一插值滤波器、四分之二插值滤波器和四分之三插值滤波器。
示例性的,如图2所示,图2为本发明实施例提供的包含待滤波像素点的示意图。其中,菱形像素点为整像素像素点,正方形像素点为二分之一像素点,圆形像素点为四分之一像素点。对于与整像素像素点既不在同一行也不在同一列的像素点a,与a点在同一列、且和整像素像素点在同一行的每一像素点为h、i、j、e、k、m、n和q,分别调用四分之一插值滤波器(因为h、i、j、e、k、m、n和q均在四分之一像素位置),计算得到h、i、j、e、k、m、n和q的子像素值的未缩放版本h′、i′、j′、e′、k′、m′、n′和q′。
S102,将计算得到的每一像素点的像素值分别与预设调整值做差运算;
具体的,在实际应用中,预设调整值thresV可以属于[95*64,192*64],且为64的整倍数。例如,将计算得到的每一像素点h、i、j、e、k、m、n和q的像素值的未缩放版本h′、i′、j′、e′、k′、m′、n′和q′分别与thresV做差运算,即分别减去thresV。
S103,确定所述像素点的垂直滤波插值;
具体的,所述像素点的垂直滤波插值可以为1/4,1/2,3/4。例如对于a点,其相对于整像素像素点K的坐标可以为(1/4,1/2),所以在垂直插值滤波时,a为二分之一像素。
S104,根据做差运算得到的每一结果值,利用与所述垂直滤波插值对应的基于将整数运算限制在十六位有符号整数范围内的滤波算法进行插值滤波。
具体的,在实际应用中,滤波算法中可以包含:平均指令、移位指令、饱和指令、算术加指令、算术减指令。
示例性的,h′、i′、j′、e′、k′、m′、n′和q′分别与thresV做差运算得到的结果值为d0、d1、d2、d3、d4、d5、d6和d7。当垂直滤波插值为1/4、1/2或3/4时,则分别利用与1/4、1/2或3/4对应的基于将整数运算限制在十六位有符号整数范围内的滤波算法进行插值滤波。
示例性的,本发明实施例提供的与1/4对应的基于将整数运算限制在十六位有符号整数范围内的滤波算法的主要逻辑代码如下:
d17=d4+d6
d14=d0+d5
d17=(d17-d14)>>1
d13=d3-d2
d8=(d17+d13)>>1
d12=d1-d5
d9=(d8+d12)>>1
d10=(d9+d13)>>1
d11=d4+d3
d11=(d10+d11)>>1
d11=(d11+d3)>>1
d11=d11+thresV
其中,现代cpu上的SIMD指令集里都有平均指令,所以如第三行即使中间结果d17-d14的值超过16位,但d17=(d17-d14)>>1可以用一条指令完成且其结果在16位有符号整数范围内。所以上面每一行计算的结果都在16位有符号整数的范围内,而最终得到的d11就是最终结果即与整像素像素点既不在同一行也不在同一列的像素点a的像素值,它等于d0、d1、d2、d3、d4、d5、d6、d7和四分之一像素插值滤波器的卷积右移6。
示例性的,本发明实施例提供的与1/2对应的基于将整数运算限制在十六位有符号整数范围内的滤波算法的主要逻辑代码如下:
d15=d1+d6
d14=d0+d7
d13=d2+d5
d12=d3+d4
d14=-d14
d14=(d14-d13)>>1
d14=(d14-d13)>>1
d15=(d15+d14)>>1
d14=d15&1
d14=d12+d14
d14=(d14-d13)>>1
d15=d15>>1
d15=(d15+d14)>>1
d15=(d15+d12)>>1
d15=d15+thresV
其中,上面每一行计算的结果都在16位有符号整数的范围内,而最终得到的d15就是最终结果即与整像素像素点既不在同一行也不在同一列的像素点a的像素值,它等于d0、d1、d2、d3、d4、d5、d6、d7和二分之一像素插值滤波器的卷积右移6。在实际应用中,四分之三像素插值滤波因为和四分之一像素插值滤波是左右对称的关系,故可由与1/4对应的基于将整数运算限制在十六位有符号整数范围内的插值滤波直接推导出来,本发明实施例在此不对其进行赘述。
可见,针对与整像素像素点既不在同一行也不在同一列的像素点,利用与预设调整值的差运算和与所述垂直滤波插值对应的基于将整数运算限制在十六位有符号整数范围内的滤波算法,进行插值滤波,可以将HEVC的插值计算的中间值范围限制在16位有符号整数范围,不需要32位精度计算,从而提高了插值滤波的计算速度,进一步也节省了插值滤波的计算时间。
参见图3,图3为本发明实施例提供的滤波装置的一种结构示意图,与图1所示的流程相对应,该滤波装置可以包括:计算模块301、调整模块302、确定模块303、滤波模块304。
计算模块301,用于针对与整像素像素点既不在同一行也不在同一列的像素点,调用插值滤波器计算与所述像素点在同一列、且和整像素像素点在同一行的每一像素点的像素值;
具体的,在实际应用中,插值滤波器可以包含:四分之一插值滤波器、四分之二插值滤波器和四分之三插值滤波器。
调整模块302,用于将计算得到的每一像素点的像素值分别与预设调整值做差运算;
具体的,在实际应用中,预设调整值可以属于[95*64,192*64],且为64的整倍数。
确定模块303,用于确定所述像素点的垂直滤波插值;
滤波模块304,用于根据做差运算得到的每一结果值,利用与所述垂直滤波插值对应的基于将整数运算限制在十六位有符号整数范围内的滤波算法进行插值滤波。
具体的,在实际应用中,滤波算法中可以包含:平均指令、移位指令、饱和指令、算术加指令、算术减指令。
可见,针对与整像素像素点既不在同一行也不在同一列的像素点,利用与预设调整值的差运算和与所述垂直滤波插值对应的基于将整数运算限制在十六位有符号整数范围内的滤波算法,进行插值滤波,可以将HEVC的插值计算的中间值范围限制在16位有符号整数范围,不需要32位精度计算,从而提高了插值滤波的计算速度,进一步也节省了插值滤波的计算时间。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。