本发明涉及图像和视频编码中的帧内预测编码技术,特别涉及一种帧内预测编码加速方法。
背景技术:
目前主流的视频编码标准中,关键帧均采用帧内预测编码去除图像的空间冗余,其过程中对亮度分量的每个宏块和宏块中的每个子块进行多种模式的预测和重构,选取最佳预测模式进行帧内编码。
谷歌公司的webp图像压缩算法就是采用了视频编码中的帧内预测编码技术,从而得到优于jpeg格式的压缩比。在webp图像压缩中,首先将亮度分量划分为16x16的宏块,每个宏块有4种可选预测模式;再将每个宏块划分为4x4的子块,每个子块有10种可选预测模式。
现有webp的帧内预测编码中,对于每个4x4子块采取遍历预测模式的方式选取最佳预测模式。需要对10种预测模式进行重构,重构的过程包括离散余弦变换、量化、反量化、反离散余弦变换。现有方式运算量大,不利于实时处理。
技术实现要素:
本发明的目的是提供一种帧内预测编码加速方法,大幅度提升图像和视频编码速度。
为了实现以上目的,本发明是通过以下技术方案实现的:
一种帧内预测编码加速方法,其特点是,包括如下步骤:
s1、获取图像yuv格式,将图像亮度分量y划分为n个宏块,每个宏块划分为i×i子块;
s2、对每个子块进行最邻近子块判断,确定当前子块的初始最佳预测模式;
s3、按初始最佳预测模式进行当前子块重构,根据率失真判断最终预测模式;
s4、比较当前子块率失真rdk,确定最终预测模式;
s5、用最终预测模式对当前子块进行编码,直到所有子块编码完成。
所述的步骤s2包括:
s21、确定当前子块在宏块中的位置;
s22、当已知最邻近子块为横向时,将左侧邻近子块作为最邻近子块;
s23、当已知最邻近子块为纵向时,将上方邻近子块作为最邻近子块;
s24、当已知最邻近子块为横向/纵向/对角其中之一时,对左侧、上方和对角子块的率失真进行比较,取率失真最小的子块作为最邻近子块;
s25、取该最邻近子块的最佳预测模式mprev作为当前子块的初始最佳预测模式m0。
所述的步骤s3包括:
s31、当前子块的重构过程首先利用初始最佳预测模式m0对当前子块sk进行预测,再对预测残差进行离散余弦变换、量化、反量化和反离散余弦变换,进而得到重构子块s’k;
s32、通过当前子块sk和重构子块s’k计算率失真rdk,同时保存预测模式m0对应的率失真rdk。
所述的步骤s4包括如下步骤:
s41、比较当前子块率失真rdk与先前保存的最邻近子块率失真rdprev,
当rdk≤rdprev时,确定将初始最佳预测模式m0作为最终预测模式,同时保存该子块的预测模式和率失真为后续子块使用;否则执行步骤42;
s42、用j种预测模式对当前子块进行重构,根据率失真阈值判断最终预测模式:
遍历预测模式对当前子块进行预测,再对预测残差进行离散余弦变换、量化、反量化和反离散余弦变换,进而得到重构子块s’k;
对每次重构,计算当前子块sk和重构子块s’k的率失真rdk;
遍历过程中,当预测模式与最邻近子块初始最佳预测模式m0相等时,则不进行重构,采用步骤s32中保存的率失真结果;
s43、比较当前子块率失真rdk与预先设置的率失真阈值th;
当rdk≤th时,确定将当前所采用的预测模式mn作为最终预测模式,停止预测模式遍历,同时保存该子块的预测模式和率失真为后续子块使用;否则执行步骤s44;
s44、取预测模式中率失真最小的预测模式作为最终预测模式,在遍历过程中,重构得到的率失真均大于阈值th,则选对应率失真最小的预测模式作为最终预测模式,同时保存该子块的预测模式和率失真为后续子块使用。
所述的步骤s5后还包含:s6,再对下一个宏块执行同样的步骤s2~s5,直到完成整个图像的编码。
本发明与现有技术相比,具有以下优点:
减小了编码的运算量,同时大幅度提升图像和视频编码速度。
第一级加速:根据当前子块最邻近子块的最佳预测模式及相应率失真,确定当前子块的最终预测模式,减少对预测模式的遍历。
第二级加速:根据率失真阈值判断,确定当前子块的最终预测模式,提前结束对预测模式的遍历。
第三级加速:对预测模式进行遍历时,判断预测模式为初始最佳预测模式时,减少对该模块进行一次重构的运算量。
附图说明
图1为本发明一种帧内预测编码加速方法的流程图;
图2为本发明最邻近子块判断流程图;
图3a~3c为三种最邻近子块示意图;
图4是webp编码速度比较结果。
具体实施方式
以下结合附图,通过详细说明一个较佳的具体实施例,对本发明做进一步阐述。
一种帧内预测编码加速方法,包括如下步骤:
获取图像yuv格式,将图像亮度分量y划分为n个宏块,每个宏块划分为4×4子块;
对每个子块进行最邻近子块判断,确定当前子块的初始最佳预测模式;
按初始最佳预测模式进行当前子块重构,根据率失真判断最终预测模式;
比较当前子块率失真rdk,确定最终预测模式;
用最终预测模式对当前子块进行编码,直到所有子块编码完成。
图1示出了一种帧内预测编码加速方法的流程图,该方法包括:
s11:获取图像yuv格式,将图像亮度y划分为n个宏块,每个宏块划分为4x4子块。
对图像的yuv数据按4:2:0采样分割,对亮度分量y按16x16进行宏块划分,再对每个宏块按4x4进行子块划分。
s12:对每个子块进行最邻近子块判断,确定当前子块的初始最佳预测模式。
将当前子块定义为sk(k=0,1,…15)。对子块s1~s15,根据其在宏块中的位置,判断相应的最邻近子块,如图2所示。
当sk为s1、s2、s3时,sk的已知最邻近子块为横向,将左侧邻近子块作为最邻近子块,如图3a所示。
当sk为s4、s8、s12时,sk的已知最邻近子块为纵向,将上方邻近子块作为最邻近子块,如图3b所示。
当sk为其它情况时(s0除外),sk的已知最邻近子块为横向/纵向/对角其中之一。对sk左侧、上方和对角子块的率失真rdk-1、rdk-4和rdk-5进行比较,取率失真最小的子块作为最邻近子块,如图3c所示。
根据上述步骤确定当前子块的最邻近子块,取该最邻近子块的最佳预测模式mprev作为当前子块的初始最佳预测模式m0。
s13:按初始最佳预测模式进行当前子块重构,根据率失真判断最终预测模式。
当前子块的重构过程首先利用初始最佳预测模式m0对当前子块sk进行预测,再对预测残差进行离散余弦变换、量化、反量化和反离散余弦变换,进而得到重构子块s’k。
通过当前子块sk和重构子块s’k计算率失真rdk。同时保存预测模式m0对应的率失真rdk。
s14:确定最终预测模式。
比较当前子块率失真rdk与先前保存的最邻近子块率失真rdprev。
当rdk≤rdprev时,确定将初始最佳预测模式m0作为最终预测模式,同时保存该子块的预测模式和率失真为后续子块使用;否则执行步骤s15。
s15:用10种预测模式对当前子块进行重构,根据率失真阈值判断最终预测模式。
遍历模式0~9对当前子块进行预测,再对预测残差进行离散余弦变换、量化、反量化和反离散余弦变换,进而得到重构子块s’k。
对每次重构,计算当前子块sk和重构子块s’k的率失真rdk。
遍历过程中,当预测模式与最邻近子块初始最佳预测模式m0相等时,则不进行重构,采用步骤s13中保存的率失真结果。
s16:确定最终预测模式。
比较当前子块率失真rdk与预先设置的率失真阈值th。
当rdk≤th时,确定将当前所采用的预测模式mn(0~9其中之一)作为最终预测模式,停止预测模式遍历,同时保存该子块的预测模式和率失真为后续子块使用;否则执行步骤s17。
s17:取预测模式中率失真最小的预测模式作为最终预测模式。
上述遍历过程中,重构得到的率失真均大于阈值th,则选10种预测模式中对应率失真最小的预测模式作为最终预测模式。
同时保存该子块的预测模式和率失真为后续子块使用。
s18:用最终预测模式对当前子块进行编码,直到所有子块编码完成。
采用确定的最终预测模式,对当前子块sk进行编码,直到当前宏块中的所有子块编码完成。
再对下一个宏块执行同样的步骤s12~s18,直到完成整个图像的编码。
为了说明本发明的性能,对不同图像分别采用帧内预测编码加速方法和原始方法进行webp图像编码,具体为:monarch[768x512],boy[768x512],balloon[1136x818],horses[1136x818],market[2048x1536],building[3888x2592],图4为webp编码速度比较结果。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。