发明内容
本发明实施例的目的在于提出一种P帧帧间预测块划分的方法方法,旨在解决现有技术在块划分和预测模式上的遍历操作计算量巨大的问题。
本发明实施例是这样实现的,一种P帧帧间预测块划分的方法,所述方法包括:
计算当前编码宏块水平方向像素第一跳变值、水平方向像素第二跳变值及当前编码宏块垂直方向像素第一跳变值、垂直方向像素第二跳变值,
其中,diffh_1表示当前编码宏块水平方向像素第一跳变值,
diffh_2表示当前编码宏块水平方向像素第二跳变值,
diffv_1表示当前编码宏块垂直方向像素第一跳变值,
diffv_2表示当前编码宏块垂直方向像素第二跳变值,
y(i,j)表示当前编码宏块第i行第j列的亮度值,
ref0(i,j)表示当前编码宏块的第一参考宏块第i行第j列的亮度值;
diffh_1<Thres1&&diffh_2<Thres1
&&
判断是否diffv_1<Thres1&&diffv_2<Thres1,是则跳过当前编码宏块的Skip模式预测中的亚像素搜素,仅利用整像素搜索进行Skip模式的预测,否则,用常规的Skip模式进行预测,
其中,&&表示并且,Thres1表示第一判定阈值,Thres1<10;
计算当前编码宏块水平方向像素第三跳变值及当前编码宏块垂直方向像素第三跳变值,
其中,diffh_3表示当前编码宏块水平方向像素第三跳变值,
diffv_3表示当前编码宏块垂直方向像素第三跳变值;
diffh_1+diffh_2+diffv_1+diffv_2<Thres2&&
((diffh_1>Thres3&&diffh_1>diffh_3/diffh_1*Thres4)||
(diffh_2>Thres3&&diffh_2>diffh_3/diffh_2*Thres4)||
(diffv_1>Thres3&&diffv_1>diffv_3/diffv_1*Thres4)||
判断是否(diffv_2>Thres3&&diffv_2>diffv_3/diffv_2*Thres4)),若是,则跳过16x16、16x8、8x16的帧间预测,进入8x8的帧间预测及子块(8x4、4x8、4x4)的帧间预测;否则,则判断是否diffv_1+diffv_2>diffh_1+diffh_2&&diffv_1>Thres3&&diffv_2>Thres3,若是,则跳过16x8、子块(8x4、4x8、4x4)的帧间预测,进入16x16、8x16、8x8的帧间预测;否则,则判断是否diffh_1+diffh_2>diffv_1+diffv_2&&diffh_1>Thres3&&diffh_2>Thres3,若是,则跳过8x16、子块(8x4、4x8、4x4)的帧间预测,进入16x16、16x8、8x8、的帧间预测;否则,进入16x16的帧间预测,
其中,&&表示并且;||表示或者,
Thres2表示第二判定阈值,Thres2>200,
Thres3表示第三判定阈值,Thres3<20,
Thres4表示第四判定阈值,Thres4=QP*k,QP表示当前编码宏块的量化参数;k表示调节参数,0<k<1;
对当前编码宏块进行率失真优化,获取当前编码宏块的划分和最佳帧间预测模式。
本发明实施例的另一目的在于提出一种P帧帧间预测块划分的装置,,所述装置包括,第一、第二跳变值计算模块、第一判断处理模块、第三跳变值计算模块、第二判断处理模块、率失真优化模块、宏块划分和最佳帧间预测模式获取模块,
第一、第二跳变值计算模块,用于计算当前编码宏块水平方向像素第一跳变值、水平方向像素第二跳变值及当前编码宏块垂直方向像素第一跳变值、垂直方向像素第二跳变值,
其中,diffh_1表示当前编码宏块水平方向像素第一跳变值,
diffh_2表示当前编码宏块水平方向像素第二跳变值,
diffv_1表示当前编码宏块垂直方向像素第一跳变值,
diffv_2表示当前编码宏块垂直方向像素第二跳变值,
y(i,j)表示当前编码宏块第i行第j列的亮度值,
ref0(i,j)表示当前编码宏块的第一参考宏块第i行第j列的亮度值;
diffh_1<Thres1&&diffh_2<Thres1
&&
第一判断处理模块,用于判断是否diffv_1<Thres1&&diffv_2<Thres1,是则跳过当前编码宏块的Skip模式预测中的亚像素搜素,仅利用整像素搜索进行Skip模式的预测,否则,用常规的Skip模式进行预测,
其中,&&表示并且,Thres1表示第一判定阈值,Thres1<10;
第三跳变值计算模块,用于计算当前编码宏块水平方向像素第三跳变值及当前编码宏块垂直方向像素第三跳变值,
其中,diffh_3表示当前编码宏块水平方向像素第三跳变值,
diffv_3表示当前编码宏块垂直方向像素第三跳变值;
第二判断处理模块,用于判断是否
diffh_1+diffh_2+diffv_1+diffv_2<Thres2&&
((diffh_1>Thres3&&diffh_1>diffh_3/diffh_1*Thres4)||
(diffh_2>Thres3&&diffh_2>diffh_3/diffh_2*Thres4)||
(diffv_1>Thres3&&diffv_1>diffv_3/diffv_1*Thres4)||
(diffv_2>Thres3&&diffv_2>diffv_3/diffv_2*Thres4)),若是,则跳过16x16、16x8、8x16的帧间预测,进入8x8的帧间预测及子块(8x4、4x8、4x4)的帧间预测;否则,则判断是否diffv_1+diffv_2>diffh_1+diffh_2&&diffv_1>Thres3&&diffv_2>Thres3,若是,则跳过16x8、子块(8x4、4x8、4x4)的帧间预测,进入16x16、8x16、8x8的帧间预测;否则,则判断是否diffh_1+diffh_2>diffv_1+diffv_2&&diffh_1>Thres3&&diffh_2>Thres3,若是,则跳过8x16、子块(8x4、4x8、4x4)的帧间预测,进入16x16、16x8、8x8、的帧间预测;否则,进入16x16的帧间预测,
其中,&&表示并且;||表示或者,
Thres2表示第二判定阈值,Thres2>200,
Thres3表示第三判定阈值,Thres3<20,
Thres4表示第四判定阈值,Thres4=QP*k,QP表示当前编码宏块的量化参数;k表示调节参数,0<k<1;
率失真优化模块,用于对当前编码宏块进行率失真优化;
宏块划分和最佳帧间预测模式获取模块,用于获取当前编码宏块的划分和最佳帧间预测模式。
本发明的有益效果
本发明提出一种P帧帧间预测块划分的方法及装置,所述方法通过分析宏块内子块边界像素的跳变规律,删除出现概率小的块划分及其对应的预测模式,实现帧间预测在块划分的快速计算。本发明可在减少计算量、提升编码速度的同时达到率失真性能的稳定性。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对本发明进行进一步详细说明,为了便于说明,仅示出了与本发明实施例相关的部分。应当理解,此处所描写的具体实施例,仅仅用于解释本发明,并不用以限制本发明。
本发明提出一种P帧帧间预测块划分的方法及装置,所述方法通过分析宏块内子块边界像素的跳变规律,删除出现概率小的块划分及其对应的预测模式,实现帧间预测在块划分的快速计算。本发明可在减少计算量、提升编码速度的同时达到率失真性能的稳定性。
实施例一
图1是本发明优选实施例一种P帧帧间预测块划分的方法流程图,所述方法包括以下步骤:
S101:计算当前编码宏块水平方向像素第一跳变值、水平方向像素第二跳变值及当前编码宏块垂直方向像素第一跳变值、垂直方向像素第二跳变值。
其中,diffh_1表示当前编码宏块水平方向像素第一跳变值;
diffh_2表示当前编码宏块水平方向像素第二跳变值;
diffv_1表示当前编码宏块垂直方向像素第一跳变值;
diffv_2表示当前编码宏块垂直方向像素第二跳变值;
y(i,j)表示当前编码宏块第i行第j列的亮度值;
ref0(i,j)表示当前编码宏块的第一参考宏块第i行第j列的亮度值;当前编码宏块的第一参考宏块表示以参考列表中第一个参考帧作为当前编码宏块参考帧时对应的参考宏块。
diffh_1<Thres1&&diffh_2<Thres1
&&
S102:判断是否diffv_1<Thres1&&diffv_2<Thres1,是则跳过当前编码宏块的Skip模式预测中的亚像素搜素,仅利用整像素搜索进行Skip模式的预测;否则,用常规的Skip模式进行预测;
其中,&&表示并且;Thres1表示第一判定阈值,一般Thres1<10。
现有技术P帧帧间预测方法的步骤一般包括:在对宏块进行所有块划分和预测模式进行遍历预测后,最后通过率失真优化RDO,获取最佳帧间预测模式;按照先后顺序所述预测模式包括Skip模式、宏块的帧间预测模式(16x16)、子宏块(16x8、8x16、8x8)的帧间预测模式、子块(8x4、4x8、4x4)的帧间预测模式;其中子宏块(16x8、8x16、8x8)之间预测无先后顺序,子块(8x4、4x8、4x4)之间的预测无先后顺序;
其中在各预测模式中进行运动搜索时先进行整像素搜索,然后进行亚像素搜索,例如所述Skip模式按照搜索的顺序为先进行整像素搜索,然后进行亚像素搜索;
所述常规的Skip模式为:利用先进行整像素搜索,然后进行亚像素搜索的Skip模式对当前编码宏块预测。
S103:计算当前编码宏块水平方向像素第三跳变值及当前编码宏块垂直方向像素第三跳变值。
其中,diffh_3表示当前编码宏块水平方向像素第三跳变值;
diffv_3表示当前编码宏块垂直方向像素第三跳变值;
y(i,j)表示当前编码宏块第i行第j列的亮度值。
diffh_1+diffh_2+diffv_1+diffv_2<Thres2&&
((diffh_1>Thres3&&diffh_1>diffh_3/diffh_1*Thres4)||
(diffh_2>Thres3&&diffh_2>diffh_3/diffh_2*Thres4)||
(diffv_1>Thres3&&diffv_1>diffv_3/diffv_1*Thres4)||
S104:判断是否(diffv_2>Thres3&&diffv_2>diffv_3/diffv_2*Thres4)),若是,则跳过16x16、16x8、8x16的帧间预测,进入8x8的帧间预测及子块(8x4、4x8、4x4)的帧间预测;否则,则判断是否diffv_1+diffv_2>diffh_1+diffh_2&&diffv_1>Thres3&&diffv_2>Thres3,若是,则跳过16x8、子块(8x4、4x8、4x4)的帧间预测,进入16x16、8x16、8x8的帧间预测;否则,则判断是否diffh_1+diffh_2>diffv_1+diffv_2&&diffh_1>Thres3&&diffh_2>Thres3,若是,则跳过8x16、子块(8x4、4x8、4x4)的帧间预测,进入16x16、16x8、8x8、的帧间预测;否则,进入16x16的帧间预测。
子块(8x4、4x8、4x4)之间的预测无先后顺序;
所述“进入16x16、8x16、8x8的帧间预测”步骤中,子宏块(8x16、8x8)之间的预测无先后顺序;
所述“进入16x16、16x8、8x8、的帧间预测”步骤中,子宏块(16x8、8x8)之间的预测无先后顺序;
其中,&&表示并且;||表示或者;
Thres2表示第二判定阈值,一般Thres2>200;
Thres3表示第三判定阈值,一般Thres3<20;
Thres4表示第四判定阈值,一般Thres4=QP*k;QP表示当前编码宏块的量化参数;k表示调节参数,一般0<k<1。
S105:进行率失真优化RDO(Rate-Distortion Optimization),获取当前编码宏块的划分和最佳帧间预测模式。
所述“进行率失真优化,获取当前编码宏块的划分和最佳帧间预测模式”为本领域内公知常识,即求取所有可能的块划分和预测模式组合下的率失真代价函数值,最小率失真代价函数值对应的块划分和预测模式就是当前编码宏块的划分和最佳帧间预测模式。
实施例二
图2是本发明优选实施例一种P帧帧间预测块划分的装置结构图,所述装置包括:第一、第二跳变值计算模块、第一判断处理模块、第三跳变值计算模块、第二判断处理模块、率失真优化模块、宏块划分和最佳帧间预测模式获取模块;
第一、第二跳变值计算模块,用于计算当前编码宏块水平方向像素第一跳变值、水平方向像素第二跳变值及当前编码宏块垂直方向像素第一跳变值、垂直方向像素第二跳变值,
其中,diffh_1表示当前编码宏块水平方向像素第一跳变值;
diffh_2表示当前编码宏块水平方向像素第二跳变值;
diffv_1表示当前编码宏块垂直方向像素第一跳变值;
diffv_2表示当前编码宏块垂直方向像素第二跳变值;
y(i,j)表示当前编码宏块第i行第j列的亮度值;
ref0(i,j)表示当前编码宏块的第一参考宏块第i行第j列的亮度值;当前编码宏块的第一参考宏块表示以参考列表中第一个参考帧作为当前编码宏块参考帧时对应的参考宏块。
diffh_1<Thres1&&diffh_2<Thres1
&&
第一判断处理模块,用于判断是否diffv_1<Thres1&&diffv_2<Thres1,是则跳过当前编码宏块的Skip模式预测中的亚像素搜素,仅利用整像素搜索进行Skip模式的预测;否则,用常规的Skip模式进行预测,
其中,&&表示并且;Thres1表示第一判定阈值,一般Thres1<10。
现有技术P帧帧间预测方法的步骤一般包括:在对宏块进行所有块划分和预测模式进行遍历预测后,最后通过率失真优化RDO,获取最佳帧间预测模式;按照先后顺序所述预测模式包括Skip模式、宏块的帧间预测模式(16x16)、子宏块(16x8、8x16、8x8)的帧间预测模式、子块(8x4、4x8、4x4)的帧间预测模式;其中子宏块(16x8、8x16、8x8)之间预测无先后顺序,子块(8x4、4x8、4x4)之间的预测无先后顺序;
其中在各预测模式中进行运动搜索时先进行整像素搜索,然后进行亚像素搜索,例如所述Skip模式按照搜索的顺序为先进行整像素搜索,然后进行亚像素搜索;
所述常规的Skip模式为:利用先进行整像素搜索,然后进行亚像素搜索的Skip模式对当前编码宏块预测。
第三跳变值计算模块,用于计算当前编码宏块水平方向像素第三跳变值及当前编码宏块垂直方向像素第三跳变值,
其中,diffh_3表示当前编码宏块水平方向像素第三跳变值;
diffv_3表示当前编码宏块垂直方向像素第三跳变值;
y(i,j)表示当前编码宏块第i行第j列的亮度值。
第二判断处理模块,用于判断是否
diffh_1+diffh_2+diffv_1+diffv_2<Thres2&&
((diffh_1>Thres3&&diffh_1>diffh_3/diffh_1*Thres4)||
(diffh_2>Thres3&&diffh_2>diffh_3/diffh_2*Thres4)||
(diffv_1>Thres3&&diffv_1>diffv_3/diffv_1*Thres4)||
(diffv_2>Thres3&&diffv_2>diffv_3/diffv_2*Thres4)),若是,则跳过16x16、16x8、8x16的帧间预测,进入8x8的帧间预测及子块(8x4、4x8、4x4)的帧间预测;否则,则判断是否diffv_1+diffv_2>diffh_1+diffh_2&&diffv_1>Thres3&&diffv_2>Thres3,若是,则跳过16x8、子块(8x4、4x8、4x4)的帧间预测,进入16x16、8x16、8x8的帧间预测;否则,则判断是否diffh_1+diffh_2>diffv_1+diffv_2&&diffh_1>Thres3&&diffh_2>Thres3,若是,则跳过8x16、子块(8x4、4x8、4x4)的帧间预测,进入16x16、16x8、8x8、的帧间预测;否则,进入16x16的帧间预测。
子块(8x4、4x8、4x4)之间的预测无先后顺序;
所述“进入16x16、8x16、8x8的帧间预测”步骤中,子宏块(8x16、8x8)之间的预测无先后顺序;
所述“进入16x16、16x8、8x8、的帧间预测”步骤中,子宏块(16x8、8x8)之间的预测无先后顺序;
其中,&&表示并且;||表示或者;
Thres2表示第二判定阈值,一般Thres2>200;
Thres3表示第三判定阈值,一般Thres3<20;
Thres4表示第四判定阈值,一般Thres4=QP*k;QP表示当前编码宏块的量化参数;k表示调节参数,一般0<k<1。
率失真优化模块,用于对当前编码宏块进行率失真优化;
宏块划分和最佳帧间预测模式获取模块,用于获取当前编码宏块的划分和最佳帧间预测模式。
本领域的普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序指令相关硬件来完成的,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质可以为ROM、RAM、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。