一种基于运动强度检测的量化调整方法及系统
技术领域
本发明涉及视频编解码领域,尤其涉及一种基于运动强度检测的量化调整方法及系统。
背景技术
视频编码中由于量化会引起失真,使得量化的构建及量化参数的选择尤为重要。同时,先编码的帧重构后将作为后续编码帧的参考帧,这也使后续编码帧的质量与参考帧的质量息息相关。而常用的编码技术其I帧的量化参数一般仅仅由上一个GOP(画面组,Group of Pictures)中存储图像的平均量化参数来确定。该算法简单,却无法根据片源的特点输出合理的量化参数,从而制约编码器性能的最优化实现。尤其当前后GOP复杂度变化较大时,这种量化参数的算法就会失去有效性。另一方面,常用的码率控制中,其当前帧间预测编码帧的复杂度,由已编码帧的比特与量化参数的乘积的线性加权来表示。这种复杂度计算方法不能稳定表示编码片源的复杂度,其性能的优劣制约于量化参数的准确性。从而使得基于该复杂度计算方法的码率控制在已编码帧量化参数不合理时,无法输出当前帧间预测编码帧的合理化量化参数,从而降低编码性能。
发明内容
本发明实施例的目的在于提出一种基于运动强度检测的量化调整方法,旨在解决现有技术编码技术无法根据片源的特点输出合理的量化参数,从而制约编码器性能的最优化实现以及常用的码率控制中,无法输出当前帧间预测编码帧的合理化量化参数,从而降低编码性能的问题。
本发明实施例是这样实现的,一种基于运动强度检测的量化调整方法,所述方法包括
Step1:判断是否满足“framet是I帧且下一个编码帧存在”,若是则进入Step2;否则,首先对framet编码,然后进入Step5;
Step2:计算framet所在GOP的运动强度TI_framet;
Step3:首先,计算framet量化参数的第一修正值,然后利用采用所述第一修正值调整后的量化参数对framet进行编码;
Step4:将下一个编码帧设置为当前编码帧,并计算framet量化参数的第二修正值,然后利用采用所述第二修正值调整后的量化参数对framet进行编码;
Step5:判断下一个编码帧是否存在,若是则将下一个编码帧设置为当前编码帧,再重新回到Step1,若否,则结束;
其中,framet为当前编码帧,t表示framet在当前编码序列中的编码序号。
本发明实施例的另一目的在于提出一种基于运动强度检测的量化调整系统,所述系统包括第一判断模块、第一编码处理模块、运动强度计算模块、第一修正值计算模块、第二编码处理模块、第二修正值计算模块、第三编码处理模块、第四编码处理模块,
第一判断模块,用于判断是否满足“framet是I帧且下一个编码帧存在”,若是,则进入运动强度计算模块,若否则进入第一编码处理模块;
其中,framet为第t帧编码帧,也称为当前编码帧;t表示framet在当前编码序列中的编码序号。
第一编码处理模块,用于对framet编码,然后进入第四编码处理模块;
运动强度计算模块,用于计算framet所在GOP的运动强度TI_framet;
第一修正值计算模块,计算framet量化参数的第一修正值;
第二编码处理模块,用于利用采用所述第一修正值调整后的量化参数对framet进行编码;
第二修正值计算模块,用于将下一个编码帧设置为当前编码帧,并计算framet量化参数的第二修正值;
第三编码处理模块,用于利用采用所述第二修正值调整后的量化参数对framet进行编码;
第四编码处理模块,用于判断下一个编码帧是否存在,若是则将下一个编码帧设置为当前编码帧,再重新回到第一判断模块;若否,则结束。
本发明的有益效果
本发明实施例提出一种基于运动强度检测的量化调整方法,通过用编码帧所在GOP的当前运动强度来稳定表示其复杂度,然后利用运动强度来调整码率控制输出的量化参数,使编码器能够根据编码片源的复杂度来进一步调整量化参数,从而达到编码性能的优化。此外,还通过设置加速判断变量,使得本发明方法能适应不同应用环境对计算量控制的需求。
附图说明
图1是本发明优选实施例一种基于运动强度检测的量化调整方法流程图;
图2是图1方法流程中Step2的方法流程图;
图3是本发明优选实施例一种基于运动强度检测的量化调整系统结构图;
图4是图3结构中运动强度计算模块的结构图;
图5是图4结构中运动强度计算子模块的结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对本发明进行进一步详细说明,为了便于说明,仅示出了与本发明实施例相关的部分。应当理解,此处所描写的具体实施例,仅仅用于解释本发明,并不用以限制本发明。
本发明实施例提出一种基于运动强度检测的量化调整方法及系统,本发明实施例方法通过用编码帧所在GOP的当前运动强度来稳定表示其复杂度,然后利用运动强度来调整码率控制输出的量化参数,使编码器能够根据编码片源的复杂度来进一步调整量化参数,从而达到编码性能的优化。此外,还通过设置加速判断变量,使得本发明方法能适应不同应用环境对计算量控制的需求。
实施例一
图1是本发明优选实施例一种基于运动强度检测的量化调整方法流程图;所述方法包括以下步骤:
Step1:判断是否满足“framet是I帧且下一个编码帧存在”,若是则进入Step2;否则,首先对framet编码,然后进入Step5。
其中,framet为第t帧编码帧,也称为当前编码帧;t表示framet在当前编码序列中的编码序号。
Step2:计算framet所在GOP的运动强度,具体包括以下步骤(如图2所示):
Step21:判断加速判断变量是否为0,若是则令 然后进入Step22;否则进入Step211。
Step211:对framet的亮度信息帧framey,t进行下采样处理,获取
Step212:对framet+1的亮度信息帧framey,t+1进行下采样处理,获取
Step213:令
其中,加速判断变量由用户确定,如果要使用加速处理方法,则设置加速判断变量的值为1;否则,则设置加速判断变量的值为0。称为当前处理帧;称为下一个处理帧。
framey,t称为framet的亮度信息帧;为framey,t进行下采样处理后的亮度信息帧,下采样方法可采用公知的最邻近法、双线性插值、三次卷积等。framet+1称为第t+1帧编码帧,也称为下一个编码帧;framey,t+1称为framet+1的亮度信息帧;为framey,t+1进行下采样处理后的亮度信息帧;与应具有相同的分辨率。
Step22:利用当前处理帧和下一个处理帧计算framet所在GOP的运动强度TI_framet。具体包括以下步骤(包括Step221和Step222):
Step221:计算块统计变量。具体包括以下步骤(包括Step2211和Step2212):
Step2211:将当前处理帧划分成块;再将下一个处理帧划分成块。
Step2212:根据块划分计算每一个块的块统计变量。
其中,块的大小可以根据需要确定,常用的如16x16、8x8等;当块的大小为16x16,则称为宏块;当宏块进一步划分为大小为n1×n2的块时,则划分的尺寸小一些的块称为子块(n1≤16或者n2≤16,但两者不能同时等于16);将当前处理帧的第n个块记为将下一个处理帧的第n个块记为与大小一致。
其中,ft deal(i,j)为第i行第j列的像素值;为第i行第j列的像素值; 表示对ft deal(i,j)与进行减法运算,其中要求ft deal(i,j)属于并且属于然后对所有求取的求均方差。
Step222:计算framet所在GOP的运动强度TI_framet。
其中,
Thres1表示第一判定阈值,其是fps的递减函数,一般可取Thres1=8*(1+24/fps);fps表示编码片源的帧率;表示对满足条件的所有变量求和;numberblock表示一帧图像包含的块总数。
Step3:首先,计算framet量化参数的第一修正值,然后利用采用所述第一修正值调整后的量化参数对framet进行编码。
QPt m1=clip(QPt-clip(const-(TI_framet>>bit),△QPmin,△QPmax),QPmin,QPmax)
其中, QPmin表示编码器设定最小量化参数;QPmax表示编码器设定的最大量化参数;QPt表示RC输出的framet初始量化参数;QPt m1表示framet量化参数的第一修正值;>>表示右位移运算;△QPmin表示量化参数调整下限,一般-10<△QPmin<△QPmax;△QPmax表示表示量化参数调整上限,一般0<△QPmax<10;const表示量化参数调整常量,一般const=(ceil(numberblock*weight)>>bit)+1,weight表示权重调整因子,一般0.6≤weight<1;ceil(x)表示大于x的最小整数;bit表示位移常量,一般1<bit≤log2numberblock-1。
Step4:将下一个编码帧设置为当前编码帧,并计算framet量化参数的第二修正值,然后利用采用所述第二修正值调整后的量化参数对framet进行编码。
QPt m2=clip(QPt+clip(const-(TI_framet>>bit),△QPmin,△QPmax),QPmin,QPmax)
其中,QPt m2表示framet量化参数的第二修正值;
Step5:判断下一个编码帧是否存在,若是则将下一个编码帧设置为当前编码帧,再重新回到Step1;若否,则结束。
实施例二
图3是本发明优选实施例一种基于运动强度检测的量化调整系统结构图,所述系统包括:第一判断模块、第一编码处理模块、运动强度计算模块、第一修正值计算模块、第二编码处理模块、第二修正值计算模块、第三编码处理模块、第四编码处理模块,
第一判断模块,用于判断是否满足“framet是I帧且下一个编码帧存在”,若是,则进入运动强度计算模块,若否则进入第一编码处理模块;
其中,framet为第t帧编码帧,也称为当前编码帧;t表示framet在当前编码序列中的编码序号。
第一编码处理模块,用于对framet编码,然后进入第四编码处理模块;
运动强度计算模块,用于计算framet所在GOP的运动强度TI_framet;
第一修正值计算模块,计算framet量化参数的第一修正值;
第二编码处理模块,用于利用采用所述第一修正值调整后的量化参数对framet进行编码;
第二修正值计算模块,用于将下一个编码帧设置为当前编码帧,并计算framet量化参数的第二修正值;
第三编码处理模块,用于利用采用所述第二修正值调整后的量化参数对framet进行编码;
第四编码处理模块,用于判断下一个编码帧是否存在,若是则将下一个编码帧设置为当前编码帧,再重新回到第一判断模块;若否,则结束。
进一步地,所述第一修正值计算模块中,“计算framet量化参数的第一修正值”具体为:
QPt m1=clip(QPt-clip(const-(TI_framet>>bit),△QPmin,△QPmax),QPmin,QPmax)
其中, QPmin表示编码器设定最小量化参数;QPmax表示编码器设定的最大量化参数;QPt表示RC输出的framet初始量化参数;QPt m1表示framet量化参数的第一修正值;>>表示右位移运算;△QPmin表示量化参数调整下限,一般-10<△QPmin<△QPmax;△QPmax表示量化参数调整上限,一般0<△QPmax<10;const表示量化参数调整常量,一般const=(ceil(numberblock*weight)>>bit)+1,weight表示权重调整因子,一般0.6≤weight<1;ceil(x)表示大于x的最小整数;bit表示位移常量,一般1<bit≤log2numberblock-1。
进一步地,所述第二修正值计算模块中,“计算framet量化参数的第二修正值”具体为:具体为:
QPt m2=clip(QPt+clip(const-(TI_framet>>bit),△QPmin,△QPmax),QPmin,QPmax)
其中,QPt m2表示framet量化参数的第二修正值;
进一步地,图4是图3结构中运动强度计算模块的结构图,所述运动强度计算模块还包括:第一判断模块、第一设置模块、运动强度计算子模块、下采样当前亮度信息帧获取模块、下采样下一个亮度信息帧获取模块、第二设置模块,
第一判断模块,用于判断加速判断变量是否为0,若是则进入第一设置模块,若否则进入下采样当前亮度信息帧获取模块;
第一设置模块,用于设置 然后进入运动强度计算子模块;
运动强度计算子模块,用于利用当前处理帧和下一个处理帧计算framet所在GOP的运动强度TI_framet;
下采样当前亮度信息帧获取模块,用于对framet的亮度信息帧framey,t进行下采样处理,获取
下采样下一个亮度信息帧获取模块,用于对framet+1的亮度信息帧framey,t+1进行下采样处理,获取
第二设置模块,用于设置令 然后进入运动强度计算子模块。
其中,加速判断变量由用户确定,如果要使用加速处理方法,则设置加速判断变量的值为1;否则,则设置加速判断变量的值为0。称为当前处理帧;称为下一个处理帧。
framey,t称为framet的亮度信息帧;为framey,t进行下采样处理后的亮度信息帧,下采样方法可采用公知的最邻近法、双线性插值、三次卷积等。framet+1称为第t+1帧编码帧,也称为下一个编码帧;framey,t+1称为framet+1的亮度信息帧;为framey,t+1进行下采样处理后的亮度信息帧;与应具有相同的分辨率。
进一步地,图5是图4结构中运动强度计算子模块的结构图,所述运动强度计算子模块还包括:块统计变量计算单元、运动强度计算单元;
块统计变量计算单元,用于计算每一个块的块统计变量;
运动强度计算单元,计算framet所在GOP的运动强度TI_framet。
进一步地,所述块统计变量计算单元还包括:块划分子单元;块统计变量计算子单元,
块划分子单元,用于将当前处理帧划分成块;再将下一个处理帧划分成块;
其中,块的大小可以根据需要确定,常用的如16x16、8x8等;当块的大小为16x16,则称为宏块;当宏块进一步划分为大小为n1×n2的块时,则划分的尺寸小一些的块称为子块(n1≤16或者n2≤16,但两者不能同时等于16);
块统计变量计算子单元,根据块划分计算每一个块的块统计变量。
进一步地,所述块统计变量计算子单元中,“根据块划分计算每一个块的块统计变量”具体为:
将当前处理帧的第n个块记为将下一个处理帧的第n个块记为与大小一致。
其中,ft deal(i,j)为第i行第j列的像素值;为第i行第j列的像素值; 表示对ft deal(i,j)与进行减法运算,其中要求ft deal(i,j)属于并且属于然后对所有求取的求均方差。
进一步地,所述运动强度计算单元中,“计算framet所在GOP的运动强度TI_framet”具体为:
其中,
Thres1表示第一判定阈值,其是fps的递减函数,一般可取Thres1=8*(1+24/fps);fps表示编码片源的帧率;表示对满足条件的所有变量求和;numberblock表示一帧图像包含的块总数。
本领域的普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序指令相关硬件来完成的,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质可以为ROM、RAM、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。