一种针对转码视频源的去隔行方法及系统
技术领域
本发明涉及视频编解码领域,尤其涉及一种针对转码视频源的去隔行方法及系统。
背景技术
传统的隔行显示转码视频源,由于片源本身的行间闪烁、边缘锯齿等缺陷。如果直接转码此类片源,不进行去隔行处理,转码器将会进一步放大视频的缺陷,从而产生更大的视觉不舒适感,无法满足人们对视频的高质量压缩的要求。目前常用的去隔行技术主要分为两大类:帧内去隔行和帧间去隔行。帧内去隔行技术,计算量小,可以去除边缘锯齿的问题,但由于其只利用了帧内信息,所以无法消除行间闪烁的问题;帧间去隔行技术,则有虚影、梳齿等问题,虽然转码原始码流携带运动信息,可以省去运动搜索的计算量。但通常编码器都采用I帧盲设机制,即设置固定间隔的I帧,这就使得转码原始码流携带的运动信息并不准确。
发明内容
本发明实施例的目的在于提出针对转码视频源的去隔行方法,旨在解决现有技术帧内去隔行技术无法消除行间闪烁、帧间去隔行技术则有虚影、梳齿以及转码原始码流携带的运动信息不准确的问题。
本发明实施例是这样实现的,一种针对转码视频源的去隔行方法,所述方法包括以下步骤:
Step1:判断当前帧是否为I帧,若是则进入Step2;否则进入Step4;
Step2:判断当前帧是否为场景切换帧,若是,则令当前帧类别标识符note=2,进入Step5;否则进入Step3;
Step3:判断当前帧的后一帧是否为场景切换帧,若是,则令note=1,然后进入Step5;否则令note=0,然后进入Step5;
Step4:获取当前帧类别标识符;
Step5:如果note=2,则令frame_p=framet+1、frame_n=framet+2;
如果note=1,则令frame_p=framet-1、frame_n=framet-2;
如果note=0,则令frame_p=framet-1、frame_n=framet+1,
其中,frame_p、frame_n分别表示第一辅助帧和第二辅助帧;framet-2、framet-1、framet+1、framet+2则分别表示当前帧在播放顺序上的前二帧、当前帧在播放顺序上的前一帧、当前帧在播放顺序上的后一帧、当前帧在播放顺序上的后两帧;t为当前帧在该转码视频源的播放序号;
Step6:获取当前帧每一个基本块的隔行标识符;
Step7:根据当前帧每一个基本块的隔行标识符,对当前帧每一个基本块进行去隔行处理;
Step8:判断下一个帧是否存在,如果存在,则将下一个帧设置为当前帧,并令t=t+1,然后重新进入Step1;否则结束。
进一步地,步骤Step1之前还包括步骤:
Step0:判断转码视频源的偶数帧的偶数行是否为采样行,若是,则令采样标识符note_c=0;否则,则令note_c=1。
本发明实施例的另一目的在于提出一种针对转码视频源的去隔行系统,所述系统包括:
采样标识符设置模块,用于根据采样行判断模块的判断结果,当转码视频源的偶数帧的偶数行是采样行,则令采样标识符note_c=0;否则,则令note_c=1;
I帧判断模块,用于判断当前帧是否为I帧;若是,则通知第一场景切换帧判断模块启动执行,若否,则通知帧类别标识符获取装置启动执行;
第一场景切换帧判断模块,用于判断当前帧是否为场景切换帧,若是则进入第一帧类别标识符设置模块,若否,则进入第二场景切换帧判断模块;
第二场景切换帧判断模块,用于判断当前帧的后一帧是否为场景切换帧,进入第一帧类别标识符设置模块;
帧类别标识符获取装置,用于获取当前帧类别标识符,进入辅助帧设置模块;
第一帧类别标识符设置模块,用于根据第一场景切换帧判断模块的判断结果,若当前帧为场景切换帧,则令当前帧类别标识符note=2;并用于根据第二场景切换帧判断模块的判断结果,若当前帧的后一帧为场景切换帧,则令note=1,否则令note=0;
辅助帧设置模块,用于判断如果note=2,则令frame_p=framet+1、frame_n=framet+2;如果note=1,则令frame_p=framet-1、frame_n=framet-2;如果note=0,则令frame_p=framet-1、frame_n=framet+1,
其中,frame_p、frame_n分别表示第一辅助帧和第二辅助帧;framet-2、framet-1、framet+1、framet+2则分别表示当前帧在播放顺序上的前二帧、当前帧在播放顺序上的前一帧、当前帧在播放顺序上的后一帧、当前帧在播放顺序上的后两帧;t为当前帧在该转码视频源的播放序号;
隔行标识符获取装置,用于获取当前帧每一个基本块的隔行标识符;
隔行处理模块,用于根据当前帧每一个基本块的隔行标识符,对当前帧每一个基本块进行去隔行处理;
尾帧判断模块,用于判断下一个帧是否存在,如果存在,则将下一个帧设置为当前帧,并令t=t+1,然后重新进入I帧判断模块;否则结束。
进一步地,所述系统还包括包括:
采样行判断模块,与采样标识符设置模块相连,用于判断转码视频源的偶数帧的偶数行是否采样行,并将判断结果发送给采样标识符设置模块。
本发明的有益效果
本发明提出一种针对转码视频源的去隔行方法及系统。本发明方法利用转码视频源本身携带块的运动信息,获取视频图像的运动区域和静止区域,然后对运动区域采用帧内去隔行技术消除锯齿缺陷。此外,针对转码视频源I帧编码质量影响后续帧间预测的特点,单独设计了场景切换帧的处理模式,可进一步提升隔行转码视频源的编码质量。
附图说明
图1是本发明优选实施例一种针对转码视频源的去隔行方法流程图;
图2是图1方法中步骤Step2的方法流程图;
图3是图1方法中步骤Step6的方法流程图;
图4是本发明优选实施例一种针对转码视频源的去隔行系统结构图;
图5是图4系统中帧类别标识符获取装置的结构图;
图6是图4系统中隔行标识符获取装置的结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对本发明进行进一步详细说明,为了便于说明,仅示出了与本发明实施例相关的部分。应当理解,此处所描写的具体实施例,仅仅用于解释本发明,并不用以限制本发明。
本发明实施例方法提出一种针对转码视频源的去隔行方法及系统。本发明实施例方法利用转码视频源本身携带块的运动信息,获取视频图像的运动区域和静止区域,然后对运动区域采用帧内去隔行技术消除锯齿缺陷。此外,针对转码视频源I帧编码质量影响后续帧间预测的特点,单独设计了场景切换帧的处理模式,可进一步提升隔行转码视频源的编码质量。
实施例一
图1是本发明优选实施例一种针对转码视频源的去隔行方法流程图;所述方法包含以下步骤:
Step0:如果转码视频源的偶数帧的偶数行是采样行,则note_c=0;否则,则note_c=1。其中,note_c为采样标识符。
Step1:如果当前帧为I帧,则进入Step2;否则进入Step4。
Step2:如果当前帧为场景切换帧,则令note=2,进入Step5;否则进入Step3;其中,当前帧是否为场景切换帧的判断方法,可以采用任何已公开的场景检测法。
Step3:判断当前帧的后一帧是否为场景切换帧,若是,则令note=1,然后进入Step5;否则令note=0,然后进入Step5。
Step4:获取当前帧类别标识符。
具体包括以下步骤(图2是图1方法中步骤Step4的方法流程图):
Step41:统计当前帧的广义I基本块数量。
上述广义I基本块数量计算方法:
numbert I=sum(sign(blockk,I))其中,
其中,sum(变量)表示对变量求和;基本块表示当前编码参数允许的最大块,基本子块表示尺寸小于基本块的块;blockk表示当前帧的第k个基本块;k表示基本块在当前编码帧中的位置序号;numbert I表示当前帧广义I基本块数量。
Step42:如果广义I基本块数量大于Thres4*K,则当前帧为场景切换帧,note=2,进入Step5;否则进入Step43。
其中,Thres4为第四判定阈值,通常0.8≤Thres4≤1;K表示当前帧包括的基本块个数。note为当前帧类别标识符。
Step43:统计当前帧在播放顺序上的下一帧的广义I基本块数量。
其中,广义I基本块数量计算方法采用Step41里面的方法。
Step44:如果当前帧在播放顺序上的下一帧的广义I基本块数量大于Thres4*K,则当前帧在播放顺序上的下一帧为场景切换帧,note=1,进入Step5;否则,note=0,进入Step5。
Step5:如果note=2,则frame_p=framet+1、frame_n=framet+2;否则如果note=1,则frame_p=framet-1、frame_n=framet-2;否则,则frame_p=framet-1、frame_n=framet+1。
其中,frame_p、frame_n分别表示第一辅助帧和第二辅助帧;framet-2、framet-1、framet+1、framet+2则分别表示当前帧在播放顺序上的前二帧、当前帧在播放顺序上的前一帧、当前帧在播放顺序上的后一帧、当前帧在播放顺序上的后两帧;t为当前帧在该转码视频源的播放序号。
Step6:获取当前帧每一个基本块的隔行标识符。
具体包括以下步骤(图3是图1方法中步骤Step6的方法流程图):
Step60:如果note=0,则进入Step61;否则,进入Step63。
Step61:计算当前编码帧每一个基本块的运动参数p0。
p0=max((|mvxm|,|mvym|)|sub_blockm∈blockk)
其中,max(变量|条件)表示对满足条件的变量求最大值;sub_blockm表示当前帧的第k个基本块的第m个基本子块;|mvxm|,|mvym|分别sub_blockm在x轴上运动矢量的绝对值、sub_blockm在y轴上运动矢量的绝对值。
Step62:如果p0<Thres5,则notek=1,然后进入Step7;否则notek=0,然后进入Step7。
其中,Thres5为第五判定阈值,通常0<Thres5≤16。notek表示当前帧第k个基本块的隔行标识符;
Step63:计算每一个基本块的亮度预判参数。
如果t%2=note_c,则下面所有的相关公式要求i均为偶数;否则,则下面所有的相关公式要求i均为奇数。
p1=std(y(i,j)|y(i,j)∈blockk)
其中,blockk、block_nk分别表示当前帧的第k个基本块、第二辅助帧的第k个基本块;p1、p2、p3、p4分别表示当前帧第k个基本块的第一亮度预判参数、第二亮度预判参数、第三亮度预判参数、第四亮度预判参数;y(i,j)、y(i+2,j)、y_n(i+1,j)分别表示当前帧第i行第j列亮度值、当前帧第i+2行第j列亮度值、第二辅助帧第i+1行第j列亮度值;std(表达式|条件)表示对满足条件的表达式进行求均方差;(表达式)则表示对满足条件的表达式进行求均值运算。
Step64:根据基本块的亮度预判参数,计算每一个基本块的亮度预判值。即如果p3+Thres1<p2且p1<Thres2*p3且p4<Thres3,则notek=1;否则notek=0。
其中,notek表示当前帧第k个基本块的隔行标识符;Thres1、Thres2、Thres3分别表示第一判定阈值、第二判定阈值、第三判定阈值,一般可取0≤Thres1≤n、0.2≤Thres2≤5、1≤Thres3≤n*n*(60/fps);fps为转码视频源采样帧率,n表示基本块的一行或者一列亮度像素点个数。
Step7:根据当前帧每一个基本块的隔行标识符,对当前帧每一个基本块进行去隔行处理。
其中,对当前帧的第k个基本块的亮度、色度进行去隔行处理方法如下:如果t%2=note_c,则下面所有的相关公式要求i均为偶数;否则,则下面所有的相关公式要求i均为奇数。
其中,y(i+1,j)∈blockk且u(i+1,j)∈blockk且v(i+1,j)∈blockk;u(i,j)、u(i+2,j)、u_p(i+1,j)、u_n(i+1,j)分别表示当前帧第i行第j列u色度值、当前帧第i+2行第j列u色度值、第一辅助帧第i+1行第j列u色度值、第二辅助帧第i+1行第j列u色度值;v(i,j)、v(i+2,j)、v_p(i+1,j)、v_n(i+1,j)分别表示当前帧第i行第j列v色度值、当前帧第i+2行第j列v色度值、第一辅助帧第i+1行第j列v色度值、第二辅助帧第i+1行第j列v色度值。Step8:判断下一个帧是否存在,如果存在,则将下一个帧设置为当前帧,并
令t=t+1,然后重新进入Step1;否则结束。
实施例二
图4是本发明优选实施例一种针对转码视频源的去隔行系统结构图;所述系统包括:
采样行判断模块,用于判断转码视频源的偶数帧的偶数行是否采样行,并将判断结果发送给采样标识符设置模块;
采样标识符设置模块,用于根据采样行判断模块的判断结果,当转码视频源的偶数帧的偶数行是采样行,则令note_c=0;否则,则令note_c=1,note_c为采样标识符;
I帧判断模块,用于判断当前帧是否为I帧;若是,则通知第一场景切换帧判断模块启动执行,若否,则通知帧类别标识符获取装置启动执行;
第一场景切换帧判断模块,用于判断当前帧是否为场景切换帧,若是则进入第一帧类别标识符设置模块,若否,则进入第二场景切换帧判断模块;
第二场景切换帧判断模块,用于判断当前帧的后一帧是否为场景切换帧,进入第一帧类别标识符设置模块;
帧类别标识符获取装置,用于获取当前帧类别标识符,进入辅助帧设置模块;
第一帧类别标识符设置模块,用于根据第一场景切换帧判断模块的判断结果,若当前帧为场景切换帧,则令note=2;并用于根据第二场景切换帧判断模块的判断结果,若当前帧的后一帧为场景切换帧,则令note=1,否则令note=0;
辅助帧设置模块,用于如果note=2,则令frame_p=framet+1、frame_n=framet+2;否则如果note=1,则令frame_p=framet-1、frame_n=framet-2;否则,则frame_p=framet-1、frame_n=framet+1。
其中,frame_p、frame_n分别表示第一辅助帧和第二辅助帧;framet-2、framet-1、framet+1、framet+2则分别表示当前帧在播放顺序上的前二帧、当前帧在播放顺序上的前一帧、当前帧在播放顺序上的后一帧、当前帧在播放顺序上的后两帧;t为当前帧在该转码视频源的播放序号。
隔行标识符获取装置,用于获取当前帧每一个基本块的隔行标识符;
隔行处理模块,用于根据当前帧每一个基本块的隔行标识符,对当前帧每一个基本块进行去隔行处理。
尾帧判断模块,用于判断下一个帧是否存在,如果存在,则将下一个帧设置为当前帧,并令t=t+1,然后重新进入I帧判断模块;否则结束。
进一步地,所述帧类别标识符获取装置还包括(图5是图4系统中帧类别标识符获取装置的结构图):
第一广义I基本块数量统计模块,用于统计当前帧的广义I基本块数量。
上述广义I基本块数量计算方法具体为:
numbert I=sum(sign(blockk,I))其中,
其中,sum(变量)表示对变量求和;基本块表示当前编码参数允许的最大块,基本子块表示尺寸小于基本块的块;blockk表示当前帧的第k个基本块;k表示基本块在当前编码帧中的位置序号;numbert I表示当前帧广义I基本块数量。
第一广义I基本块数量判断模块,用于判断如果广义I基本块数量大于Thres4*K,则确认当前帧为场景切换帧,进入第二帧类别标识符设置模块;否则进入第二广义I基本块数量统计模块。
第二广义I基本块数量统计模块,用于统计当前帧在播放顺序上的下一帧的广义I基本块数量。
第二广义I基本块数量判断模块,用于判断是否当前帧在播放顺序上的下一帧的广义I基本块数量大于Thres4*K,并将判断结果发送给第二帧类别标识符设置模块;
第二帧类别标识符设置模块,用于根据第二广义I基本块数量判断模块发送的判断结果,当前帧在播放顺序上的下一帧的广义I基本块数量大于Thres4*K,则确认当前帧在播放顺序上的下一帧为场景切换帧,令note=1,进入辅助帧设置模块;否则,令note=0,进入辅助帧设置模块;并用于根据第一广义I基本块数量判断模块的判断结果,如果广义I基本块数量大于Thres4*K,则确认当前帧为场景切换帧,令note=2,进入辅助帧设置模块。
进一步地,所述隔行标识符获取装置还包括(图6是图4系统中隔行标识符获取装置的结构图):
帧类别标识符判断模块,用于判断是否note=0,若是,则进入基本块的运动参数计算模块,否则进入基本块亮度预判参数计算模块;
基本块的运动参数计算模块,用于计算当前编码帧每一个基本块的运动参数。
p0=max((|mvxm|,|mvym|)|sub_blockm∈blockk)
其中,max(变量|条件)表示对满足条件的变量求最大值;sub_blockm表示当前帧的第k个基本块的第m个基本子块;|mvxm|,|mvym|分别sub_blockm在x轴上运动矢量的绝对值、sub_blockm在y轴上运动矢量的绝对值。
基本块运动参数阈值判断模块,判断是否p0<Thres5,将判断结果发送给基本块隔行标识符设置模块;其中,Thres5为第五判定阈值,通常0<Thres5≤16。
基本块隔行标识符设置模块,用于根据基本块运动参数阈值判断模块的判断结果,当p0<Thres5时,令notek=1,进入隔行处理模块;否则令notek=0,进入隔行处理模块;notek表示当前帧第k个基本块的隔行标识符;
基本块亮度预判参数计算模块,用于计算每一个基本块的亮度预判参数。
如果t%2=note_c,则下面所有的相关公式要求i均为偶数;否则,则下面所有的相关公式要求i均为奇数。
p1=std(y(i,j)|y(i,j)∈blockk)
其中,blockk、block_nk分别表示当前帧的第k个基本块、第二辅助帧的第k个基本块;p1、p2、p3、p4分别表示当前帧第k个基本块的第一亮度预判参数、第二亮度预判参数、第三亮度预判参数、第四亮度预判参数;y(i,j)、y(i+2,j)、y_n(i+1,j)分别表示当前帧第i行第j列亮度值、当前帧第i+2行第j列亮度值、第二辅助帧第i+1行第j列亮度值;std(表达式|条件)表示对满足条件的表达式进行求均方差;则表示对满足条件的表达式进行求均值运算。
基本块亮度预判值计算模块,用于根据基本块的亮度预判参数,计算每一个基本块的亮度预判值。
即如果p3+Thres1<p2且p1<Thres2*p3且p4<Thres3,则notek=1;否则notek=0。
其中,notek表示当前帧第k个基本块的隔行标识符;Thres1、Thres2、Thres3分别表示第一判定阈值、第二判定阈值、第三判定阈值,一般可取0≤Thres1≤n、0.2≤Thres2≤5、1≤Thres3≤n*n*(60/fps);n表示基本块的一行或者一列亮度像素点个数;fps为转码视频源采样帧率。
本领域的普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序指令相关硬件来完成的,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质可以为ROM、RAM、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。