发明内容
针对上述现有视频编码技术在视频监控领域应用上的缺陷,本发明提出了一种高效的基于图层分解的视频编码方法,通过对不同图层分别处理,可以最大程度地对静止区域进行压缩,同时,通过利用不同图层间的相关性可以更好地提高运动区域的编码质量。
因此,本发明的第一目的在于提出一种高效的基于图层分解的视频编码方法,该方法在传统视频编码技术的基础上,提出了基于运动目标分割进行图层分解的视频编码技术,它使用视频检测算法,将输入视频先分成静止图层和运动图层视频序列,然后分别编码。对于监控视频序列,由于摄像机通常不运动,在运动目标稀少的场景就经常有大面积的静止区域,这些区域图像内容基本不变,这样,就可以用帧间滤波减少噪声,或增大静止图层图像组的长度,用较小的码率进行编码;对于运动目标区域,由于通常该区域较小,可用较小的码率进行编码,而且间接地增加了静止区域构成的背景图像作为预测参考图像,提高了部分区域的预测精度。因此,这种方法可以较大程度地提高压缩效率,且可提高对运动图层的编码精度,提高运动目标的清晰度。这里所说的图像组定义为即时解码刷新帧(IDR帧)开始到下一个IDR帧之前的一组图像,IDR帧是带有序列头的帧内编码帧,IDR帧以后的图像编码是不参考该IDR帧以前的图像。这里的图像组与H.264和AVS标准中定义的序列等价。
为实现上述技术目的,本发明提供的基于图层分解的视频编码方法对输入视频中的每帧图像的编码包括如下步骤:
A1、将图像分解成静止图层和运动图层,将运动图层图像分入运动图层图像组,静止图层图像分入静止图层图像组;
这里可以使用各种图像检测算法检测运动目标,如混合高斯模型法、帧差法、光流法等,将包含运动目标的区域作为运动图层,将不包含运动目标的区域作为静止图层。一般地,静止图层只有一个,但运动图层可以有一个或多个,即所有运动目标作为一个运动图层,或将不同类的运动目标放在不同运动图层。
分解后的运动图层图像和静止图层图像分别分成图像组,将当前运动图层图像分入运动图层图像组,将当前静止图层图像分入静止图层图像组。
静止图层图像组由一帧或多帧静止图层图像组成,运动图层图像组由一帧或多帧运动图层图像组成。有多个运动图层时,每个运动图层对应一个运动图层图像组。
静止图层图像间的相关性较强,可以选择一个较长的图像组(包含较多帧),从而降低码率。一般地,静止图层图像组预先设定图像组结构和长度,但在摄像机切换等静止图层内容改变时,可以立即形成新的图像组。
运动图层图像组也可预先设定图像组结构和长度,但可在检测到运动目标,即在运动图层有内容时开始第一帧,在没有运动目标时结束。在运动图层图像变化过大时,或在信道改变、请求质量改变时,可改变图像组结构和长度。
A2、分别对当前帧静止图层图像和运动图层图像进行编码,形成包含静止图层或运动图层或静止图层与运动图层编码结果的输出码流;
对分解后的静止图层图像和运动图层图像编码可以按照先静止图层后运动图层的顺序编码也可以两个图层交错编码。例如:对原始图像按照从上到下,从左到右的宏块扫描顺序编码,若是运动区域宏块,则按照运动图层编码方法编码,否则,按照静止图层编码方法编码。
这里形成的码流形式可以是一个或多个码流,如只包含静止图层的码流,只包含运动图层的码流,同时包含静止图层和运动图层的码流。其中运动图层可根据不同运动目标或运动目标种类形成一个或多个码流。
对于前两种码流结构,即只包含静止图层的码流和只包含运动图层的码流,在形成时不参考其他图层的编码数据。
同时包含静止图层和运动图层的码流又存在四种组合:两种图层分别形成的没有关联的码流,两种图层分别形成的有关联的码流,两种图层交错形成的没有关联的码流,两种图层交错形成的有关联的码流。两种图层没有关联的码流是指静止图层和运动图层不做层间参考而形成的码流,这种码流的各个图层可被独立解码,不必等其他图层解码完成,若各个图层独具图像相关信息,如序列头、图像头、条带头等,则形成的静止图层码流和运动图层码流可被独立传输或存贮,这对于只需要运动图层的低码率传输或录像是很有用的;两种图层有关联的码流则是指静止图层和运动图层做层间参考而形成的码流;两种图层分别形成的码流是指静止图层码流和运动图层码流按图层简单叠加复接形成的码流,如静止图层数据在码流前半部分,运动图层在码流后半部分,或其它方式;两种图层交错形成的码流是指静止图层和运动图层按图像块交错复接形成的码流,如按照原始图像宏块顺序排列编码数据而形成的码流。
A3、形成静止图层和运动图层的重建图像;
所述的静止图层重建图像的生成规则为:在有对应本图层重建像素时,取值为该重建像素值,否则为不属于当前帧静止图层像素。按以下方法取值:若存在当前静止图层图像组中以前帧对应像素位置的重建像素值,例如上一帧静止图层重建像素值,则采用该像素值;否则若有当前帧运动图层重建像素值可被利用,则采用该像素值;否则采用某一预先设定的值,如128。
经过多帧的编码更新,静止图层的重建图像会不断趋近于真实背景图像,这为以后静止图层和运动图层的编码提供了一个很好的背景参考帧,对于运动复杂的情况可以提供更好的预测,从而提高了压缩效率。
所述的运动图层重建图像的生成规则为:在有对应本图层重建像素时,取值为该重建像素值,否则为不属于当前帧运动图层像素,按以下方法取值:若存在当前帧静止图层重建像素值可被利用,则采用该像素值;否则采用预先设定的值;
在视频编解码器中,为了去除块效应,一般会对重建图像进行去块滤波后才用作其他帧的参考图像,当重建图像是由多个图层重建值拼接得到的,那么在拼接的边沿处容易出现明显的层间差别,所以在对处于拼接区域的宏块做去块滤波时需要增大滤波强度,特别是加强静止图层一侧像素的滤波强度。
本发明的特点还在于,对静止图层图像或运动图层图像的编码按如下方式之一进行:
(1)当当前帧图像为静止图层图像组或运动图层图像组的第1帧图像时,或被指定为帧内编码帧(I帧)时,或者当前帧设为帧内编码帧可以得到更高性能时,如视频切换或摄像机运动时,对当前帧所有图像块采用帧内预测编码;所述图像块是指宏块、宏块组、宏块中的子块、条带、条带组、子图或整帧图像。图像块用于表达一个区域或作为编码的一个单元。较大图像块中可包含较小的图像块。静止图层和运动图层用一种或一种以上图像块进行表达和编码,即把图像分成一个或多个图像块,一个图层图像可以由一个或多个不同种类的图像块构成。
(2)当当前帧图像确定为跳过模式编码帧时,则采用图层跳过模式进行编码,其重建图像直接复制上一帧的重建图像;
在无运动目标时,运动图层可采用跳过模式编码。
对图像质量和码率要求较低时,或静止图层图像或暂时静止的运动图层图像变化很小时,对静止图层图像或暂时静止的运动图层图像可采用图层跳过模式编码。
(3)当当前帧图像被指定为帧间编码帧(P帧或B帧)时,对其中各图像块依次按如下方式进行编码:当图像块被指定为帧内预测编码时,采用帧内预测编码,否则采用帧间预测编码。一般情况下,在编码帧间编码帧时,对每个图像块都进行帧内预测和帧间预测各编码模式测试,然后选择性能更高的预测模式编码,也可直接指定某些图像块采用帧内预测编码。其中“性能更高”,是指压缩效率更高,或码率更低,或率失真函数值更小,或图像质量更好。
所述帧内预测编码限于图层内预测时称为层内帧内预测编码,帧内预测编码同时利用其他图层编码信息和重建图像进行预测时,称为层间帧内预测编码;所述帧间预测编码也分为层内和层间,因此,共有层内帧间预测、层内帧内预测、层间帧内预测以及层间帧间预测四种预测编码方式。其中的参考图像采用已编码图像的重建图像,或利用重建图像去块滤波后生成的参考图像。用于帧间预测的参考图像需要去块滤波。若生成的码流是包含两个图层没有关联的码流时,则帧内预测编码不采用层间帧内预测编码,且帧间预测编码不采用层间帧间预测编码。
在帧间预测编码中,还包括了各种图像块的跳过模式,如宏块的跳过模式、宏块组的跳过模式、条带的跳过模式、子图的跳过模式等。当图像块运动矢量的残差为零,且图像块预测残差小于一设定阈值,或变换并量化后的系数全为零时,或跳过模式具有最小率失真函数值时,预测残差不需要编码,因而采用跳过模式编码,其重建值即为预测值。
若因视频切换等图像突变,使当前帧所有图像块采用帧内预测编码,这时若当前帧不是图像组的第一帧,则可选择是否重新开始一个图像组,或在用当前重建图像生成参考图像后,保留当前图像组中以前生成的参考图像,形成一个参考图像队列,队列中的参考图像用作以后编码帧的预测参考图像。
本发明的特点还在于:
所述的层内帧内预测,是指各图层的图像块只用本图层内重建图像作为参考图像进行帧内预测,不依赖于其它图层,具体预测过程与传统编码器的帧内预测相一致;
所述的层内帧间预测,是指各图层图像块只采用已编码的本图层重建图像作参考图像的帧间预测,具体预测过程与传统编码器帧间预测相一致;
所述的层间帧内预测,是指各图层的图像块采用其他图层重建图像作为参考图像进行帧内预测,这种预测方式可以提高静止图层和运动图层相邻图像块的预测精度;
所述的层间帧间预测,是指各图层的图像块采用其他图层已编码的重建图像作为参考图像的帧间预测,这种预测方式可以提高物体运动而露出的背景图像部分的预测精度;
前面所述的层间帧内预测和层间帧间预测解决了传统编码器中前景与背景、视频对象间不能相互参考的问题,提高了预测精度和压缩效率,并更好地提高了图像质量。
本发明的特点还在于:
在对各图层进行编码时,对不属于该图层的区域不做编码或采用跳过模式编码。例如,以起始位置、长和宽定义运动图层或静止图层矩形区域,以像素或宏块为单位,在对图层编码时,对不属于本图层的图像块可不做编码,重建像素值从其它图层得到,或直接采用跳过模式编码,重建像素值可选择从其它图层得到或通过跳过模式解码得到。
本发明的特点还在于:
将输入的视频图像分解成静止图层和运动图层的方法为:利用输入图像检测背景图像和运动目标区域,对图像进行分割,将包含运动目标区域像素的图像块作为运动图层,将利用当前帧图像和以前帧图像检测得到的背景图像作为静止图层。因此,运动图层是包含运动目标区域像素的图像块,其中可能也包括背景图像像素。由于运动目标区域一般比较小,可能只有几个宏块,几个宏块组,所以只需要对这些小区域进行编码。
一种图层分割的方法为:当前帧图像检测为运动目标区域的像素直接作为运动图层,当前帧检测为背景图像的像素值直接加入静止图层,与运动目标区域对应的静止图层像素值需要利用三种方式填充:当前帧运动目标区域像素值、或以前帧检测出的背景图像像素值或预先设定的值。另一种图层分割方法为:采用混合高斯模型检测算法进行运动目标检测,将自适应更新的背景图像作为静止图层,将包含运动目标像素的图像块作为运动图层。背景图像和运动目标的检测可以跨图像组地利用以前的图像,即可利用以前所有有效图像进行检测。
如果背景图像和运动目标区域有较多噪声点或块,对其进行去噪处理,即去除背景图像中被误判为运动目标的像素,去除运动目标区域中被误判为背景的像素,这种误判常是由输入图像噪声引起的。如果背景图像和运动目标区域噪声可忽略,则不必对背景图像和运动目标区域进行去噪处理。
在图层分解之前还可对输入视频进行增强处理,提高运动目标检测和分割的正确性,所述的增强处理包括如下一种或几种处理的组合:去抖动、去噪声、灰度变换、屏蔽非感兴趣区域。
本发明的特点还在于:
当对背景图像的分辨率要求不高时,可以在编码前先对静止图层下采样以节省大量码流,采用下采样操作要在码流中给出指示,对于静止图层图像的下采样包括对整个图像组进行下采样,则在序列头中给出指示,或只对其中需要下采样的某些图像(如根据码率控制需要较低码率时的图像帧)进行下采样,则在图像头中给出指示;对经过下采样的静止图层图像编码时,如果其参考图像是未经下采样的运动图层重建图像,则该参考图像可以直接当作一种分数位插值的参考图像,其中与当前下采样图像对应的像素作为整像素参考图像;如果静止图层图像编码时进行了下采样,则在将其重建图像用作未经下采样的静止图层图像的参考图像时,需先对其进行上采样;在将其重建图像用作运动图层参考图像时,也需先对其进行上采样;在将其用于生成未经下采样的图层重建图像时也需先对其进行上采样。与静止图层图像一样,运动图层图像在编码时也可以采用下采样(常为了满足低带宽通信需要),如果运动图层图像的下采样方式与静止图层相同,则将静止图层重建图像用于运动图层参考图像或用于生成未经下采样的图层重建图像时,不必先进行上采样(不包括运动搜索算法需要的上采样)。但重建图像用于输出显示时,应根据要求确定是否进行上采样。根据不同图层的要求采用下采样的方法可以实现压缩率的大幅度的提高,同时保留重要图层的图像细节,这是以前编码标准中所不具备的。
本发明的第二目的在于提供一种基于图层分解的视频编码方法的编码装置,特点在于:
它包括视频输入单元、图层分解单元、静止图层编码单元、运动图层编码单元、静止图层重建图像生成单元、运动图层重建图像生成单元、码流形成单元和码流输出单元,这些单元可用电路模块或软件算法模块实现,其中:
视频输入单元实现视频信号的采集或读入,如模拟视频信号的采集、CCD或CMOS传感器输出信号的采集、从存贮设备中读取图像、将已压缩的码流进行解码而获得数字视频信号、从网络或其它接口获得数字视频信号等;
图层分解单元将图像分解成静止图层和运动图层,这个单元可包括背景图像和运动目标检测算法,基于当前图像及以前图像进行图像分解。当编码装置中包括移动侦测传感器时,移动侦测传感器在有运动目标出现时给出报警信号,编码装置在接收到运动目标入侵警报信号时才开启检测算法检测运动目标,将图像分解成静止图层和运动图层;否则不进行运动目标检测和分割,将整帧图像作为静止图层或作为运动图层,一般作为静止图层更合理。这样做的好处是,可避免没有运动目标时作无效的检测,并在没有运动目标时可提高压缩率,从而可降低功耗和码率。所述的移动侦测传感器可以是各种入侵探测器,如红外入侵探测器、双鉴探测器等,也可以基于视频实现移动检测。
静止图层编码单元和运动图层编码单元分别对静止图层图像和运动图层图像进行编码,静止图层编码单元和运动图层编码单元中均包含了传统编码器中常用的视频编码基本单元,如帧内预测,运动估计,运动补偿,变换量化等,除此以外则添加了层间帧内预测和层间帧间预测二种新的单元,实现了层间参考预测;
静止图层重建图像生成单元和运动图层重建图像生成单元按照前面介绍的生成规则生成各个图层的重建图像,通过去块滤波后用于以后编码帧的帧间预测的参考图像;
码流形成单元对来自静止图层编码单元和运动图层编码单元的数据进行熵编码并复接并形成符合语法规则的码流;根据需要可形成关联的或不关联的一个或多个码流;
码流输出单元实现所形成的码流的输出,可以是存贮到磁盘等存贮设备上,也可以是通过通信接口进行发送。
上述编码装置中,若输入视频是已编码的视频流,如接收到的码流,或已录像的码流,则先对该视频流进行解码,可获得码流中关于宏块的编码信息,再利用这些编码信息对解码后的视频数据进行基于图层分解的视频编码,即进行视频转码。所述的宏块编码信息包括编码模式、量化电平和运动矢量。这种方式的视频转码可用于提高已有录像视频的压缩率,从而增加录像时间,或减小相同录像时间所需要的硬盘容量。
由于视频解码必须与视频编码相对应,采用相应的方法才能对编码后的码流进行解码,因此,本发明的第三目的在于提供一种基于图层分解视频编码的解码方法,对基于图层分解的视频编码得到的码流,根据码流语法和编码规则进行视频解码,其特点在于,对码流的解码方法如下:
首先对码流进行解析,得到图像编码信息,如关于序列、图像、图像块的信息,并将码流分解成静止图层码流和运动图层码流;
当码流为仅包含静止图层、不包含运动图层的码流时,对该静止图层进行解码,输出静止图层解码重建图像。这时的解码方法与目前的H.264或AVS P2是类似的;
当码流为仅包含运动图层、不包含静止图层的码流时,即运动图层图像的编码不依赖于静止图层,则对运动图层进行解码,并输出运动图层解码重建图像;
当码流为既包含静止图层又包含运动图层的码流时,对各个图层码流进行解码,形成静止图层解码重建图像和运动图层解码重建图像;选择静止图层解码重建图像和运动图层解码重建图像之一输出。
所述静止图层解码重建图像的生成规则为:在有对应本图层重建像素时,取值为该重建像素值,否则为不属于当前帧静止图层像素。按以下方法取值:若存在当前静止图层图像组中以前帧对应像素位置的重建像素值,如上一帧静止图层重建像素值,采用该像素值;否则若有当前帧运动图层重建像素值可被利用,则采用该像素值;否则采用预先设定的值,如128。
所述运动图层解码重建图像的生成规则为:在有对应本图层重建像素时,取值为该重建像素值,否则为不属于当前帧运动图层像素,按以下方法取值:若存在当前帧静止图层重建像素值可被利用,则采用该像素值;否则采用某一预先设定的值,如128。
可见,只有对与其它图层不关联的图层进行解码时,才可能采用预先设定的值作为图层解码重建图像的像素值。在运动图层与静止图层关联时,运动图层解码重建图像中包含了静止图层解码重建像素值,是完整的解码重建图像。
本发明的特点还在于:
对于静止图层和运动图层的解码将按照如下方式之一进行:
(1)当当前帧图像为帧内编码帧时,那么该图层内的所有图像块都是采用帧内预测编码方式编码的,相应地,解码时也要采用帧内预测补偿解码;
(2)当当前帧图像为跳过模式编码帧时,那么该图层的图像都是采用图层跳过模式编码的,相应地,解码时也采用图层跳过模式进行解码,其解码重建图像直接复制上一帧的重建图像。
(3)当当前帧图像为帧间编码帧时,那么该图层内部图像块是采用帧内预测编码或帧间预测编码方式编码的,相应地,对图层内各个图像块逐个采用对应的帧内预测补偿解码或帧间预测补偿解码。
所述帧内预测补偿解码采用层内帧内预测或层间帧内预测进行解码;
所述帧间预测补偿解码采用层内帧间预测或层间帧间预测进行解码。
预测补偿是将预测值与码流解码出的像素残差相加得到重建像素值的一个过程,这和传统解码器的做法一致,也是编码的一个逆过程。
上面所述的各种预测方式和编码时的预测方式是一致的,采用层内帧内预测与层内帧间预测的图像块的解码是不依赖其他图层的解码重建图像,可以独立解码而不需要等待其他图层的解码完成,这与目前的H.264等视频解码算法相似。而采用了层间帧内预测和层间帧间预测的图像块的解码是需要依赖其他图层图像的正确解码。具体的预测方法和编码器中介绍的一致。
本发明的特点还在于:
在视频解码时,如果静止图层图像编码时进行了下采样,而它的参考图像是未经下采样的运动图层重建图像时,该参考图像可以直接当作一种分数位插值的参考图像,其中与当前下采样图像对应的像素作为整像素参考图像;经过下采样的静止图层解码重建图像被用作未经下采样的静止图层图像的参考图像时,需先对其进行上采样;在将其用作运动图层参考图像或生成未经下采样的图层重建图像时,也需先对该静止图层重建图像进行上采样。视频解码所采用的下采样和上采样方法必须与编码时完全一样。与静止图层图像一样,运动图层图像在编码时也可以采用下采样(常为了满足低带宽通信需要),如果运动图层图像的下采样方式与静止图层相同,则将静止图层重建图像用于运动图层参考图像或生成图层重建图像时,不必先进行上采样(不包括运动补偿或层间预测补偿算法分数位像素预测需要的上采样)。但解码重建图像用于输出显示时,应根据显示要求确定是否进行上采样。
上述方法中,对某个图层图像的解码,不需要在同一帧其他图层图像全部解码完成后再开始解码,实际上为了解码器的优化,只要该图层图像解码所需要参考的其他图层重建图像数据已存在,就可以开始对该图层图像进行解码。
一般会对解码重建图像进行去块滤波后才用做以后编码帧的参考图像,当解码重建图像是由多个图层重建值拼接得到时,那么在拼接的边沿处容易出现明显的层间差别,所以在对处于拼接区域的宏块做去块滤波时需要增大滤波强度,特别是加强静止图层像侧像素的滤波强度。
本发明的第四目的在于提供一种基于图层分解视频编码的解码装置,该解码装置包括码流输入单元、码流解析、静止图层解码单元、运动图层解码单元、静止图层重建图像生成单元、运动图层重建图像生成单元以及解码图像输出单元,其中:
码流输入单元实现码流的输入,如读取磁盘或光盘上的码流数据,从网络等通信接口接收码流数据等;
码流解析单元根据码流中的语法规则实现对码流的解析,并对其中静止图层和运动图层数据进行熵解码;
静止图层解码单元实现对静止图层数据的解码,包括帧内和帧间预测补偿等解码基本单元,静止图层图像的解码可参考或不参考运动图层重建图像;
静止图层解码单元和运动图层解码单元分别实现对静止图层和运动图层数据的解码,包括只参考本图层内图像的帧内和帧间预测补偿等解码单元,也包括同时参考其他图层重建图像帧内和帧间预测补偿解码;
静止图层重建图像生成单元和运动图层重建图像生成单元分别用于生成对应图层解码重建图像,生成规则与编码时相同,解码重建图像经去块滤波后用于以后解码帧的参考图像;
解码图像输出单元实现所形成的解码重建图像的输出,包括模拟接口输出或数字接口输出。
具体实施方式
下面,结合附图及具体实施例详细介绍本发明提出的基于图层分解的视频编码方法。
附图1是本发明的一种视频编码方法实施例的流程示意图,主要过程如下:
1.1、通过视频采集、通信和读磁盘(或其它存贮介质)的方式输入一幅图像;
1.2、对输入图像利用以前图像进行运动目标分割和去噪,将其分解成静止图层和运动图层,为了便于表达,运动图层的区域为一个包括运动目标的规则区域,例如,由若干宏块组成的矩形区域;
1.3、对静止图层图像进行编码,即根据其在图像组中的帧类型,分别进行帧内编码(I帧)和帧间编码,其中帧间编码包括前向预测(P帧)和双向预测(B帧)编码,在将编码过程中重建的静止图层图像保存在帧存中,用于对以后静止图层图像编码的参考图像;
1.4、对运动图层图像进行编码,根据其在图像组中的帧类型,分别进行帧内编码(I帧)和帧间编码,其中帧间编码包括前向预测(P帧)和双向预测(B帧)编码,在将编码过程中重建的运动图层图像保存在帧存中,用于对以后运动图层图像编码的参考图像;
1.5、静止图层编码结果和运动图层编码结果,包括运动矢量、变换系数、预测模式信息等,均被熵编码,并按一定语法规则形成码流;
1.6、输出所形成的码流,如:存贮到磁盘、通过网络发送等,或用于与音频等码流复接,形成系统流。
附图2是本发明的一种编码器实施例结构示意图,与附图1编码算法相对应,是采用了一个静止图层和一个运动图层的分层编码。整个编码器结构和传统编码器相比,主要的不同在于增加了图层分解处理和运动图层的编码,并在运动图层编码中采用了层间参考模式。运动图层的编码和传统编码器相比,主要是增加了层间帧内预测和层间帧间预测等单元。
图层分解单元负责将待编码图像分解成静止图层和运动图层,该单元可以采用现有的图像检测算法,例如混合高斯模型算法。该单元算法的优劣直接影响到整个编码器的性能,若检测后运动图层内容太多、太复杂,码流将大幅增加;若检测率低,将部分运动物体区域当作背景图像区域,则造成运动目标的丢失。图层分解单元还可包括对静止图层和运动图层的滤波和下采样处理等处理。
静止图层编码采用的功能块是和传统编码器保持一致的,包括帧内预测、帧间预测、残差计算、变换量化、反量化反变换、去块滤波等,这也保证了本算法可以兼容以前的标准,如H.264、AVS等,另外增加了一个重建图像生成单元,用于生成整帧的静止图层重建图像并进行去块滤波,它需要利用当前图层图像组已解码重建的图像,生成规则在前面已有介绍。该重建图像存入帧存用作以后编码帧的参考图像。
运动图层编码的层内帧内预测、层内帧间预测与静止图层类似,但增加了层间帧内预测和层间帧间预测等单元,其中层间帧内预测采用静止图层重建图像作参考图像,其预测值是预测块上边和左边参考块的邻近象素点值通过加权平均得到的值。层间预测单元和以前编码器的区别是采用的参考图像不一样,层内帧内预测和层内帧间预测相当于静止图层的帧内预测和帧间预测,只采用了运动图层内的重建图像作参考图像,而层间预测方式所采用的参考图像利用到了静止图层的重建图像作参考图像,层间预测的好处是对含有部分背景内容的运动图层编码时会预测更准确,甚至会有大量的跳过图像块。运动图层编码结构中也新增了一个重建图像生成单元,用来生成一整幅运动图层重建图像,它需要利用当前图层图像组和静止图层图像组已解码重建的图像并进行去块滤波,生成规则在前面已有介绍。该重建图像存入帧存用作以后编码帧的参考图像。
图中所示的重建图像Fsn′,Fmn′分别代表静止图层重建图像和运动图层重建图像。参考图像Fsn-1′代表来自参考帧存的静止图层帧间预测参考图像,是前一帧的静止图层重建图像。同理,参考图像Fmn-1′代表来自参考帧存的运动图层帧间预测的参考图像。这里考虑二个参考帧,即当前帧和前一帧,也可以扩展为多个参考帧。
静止图层编码变换量化后的数据与运动图层编码变换量化后的数据将分别被熵编码,并按语法规则形成输出码流,用于传输或存贮。
静止图层只进行层内编码也可用运动图层重建图像作为静止图层参考图像。本实施例中,为了简化实现,静止图层只进行层内编码,没有将运动图层重建图像作为静止图层参考图像。
附图3是本发明的一种视频解码实施例示意图,其主要过程如下:
3.1、通过读取磁盘或通信接收获取输入码流;
3.2、对输入码流解析并熵解码,获取必要的编码信息,如接收码流中是否含有运动图层数据,当前流数据是静止图层数据还是运动图层数据,当前待解码图像块采用了哪种预测方式等;
3.3、若当前码流数据是静止图层数据,则对静止图层进行解码。根据解析得到的图像类型及编码方式对当前图像解码,将解码重建的静止图层图像保存在帧存中,用于静止图层图像解码的参考图像,同时用于运动图层解码的参考图像;
3.4、若当前码流数据是运动图层数据,则对运动图层进行解码。根据解析得到的图像类型及编码方式对当前图像解码,在解码重建的运动图层图像保存在帧存中,用于运动图层图像编码的参考图像;
3.5、根据具体需要选择输出图像。解码结果得到了各个图层解码重建图像,将这些重建图像根据不同要求选择输出,如只关注背景变化,则只要输出静止图层内容,同时运动图层可以跳过解码阶段,因为静止图层解码与运动图层无关;如只关注运动目标,则可只输出运动图层解码图像。
本实施例中,还可对帧间编码的参考图像进行去块滤波。一般地,对解码器输出图像和用于帧间预测的参考图像都应该进行去块滤波,以去除分块编码的方块效应。
附图4为本发明的一种解码器实施例结构示意图,与附图3方法相对应。类似于编码器,解码器也是在传统解码器结构中增加了运动图层的解码结构,并在对运动图层解码中采用了层间参考。相应增加的新的解码功能块为图层码流分解、重建图像生成以及运动图层的预测补偿解码相关单元等。
其中图层码流分解是根据码流中信息,如图像头信息判断图像数据是来自运动图层还是静止图层,从而将输入码流分解成静止图层码流和运动图层码流。其它新增解码单元和编码器中的新增单元是基本一致的。
静止图层解码单元和传统解码器一致,将熵解码后的残差数据通过反量化反变换恢复出来,并根据预测模式信息和运动矢量信息,选择与编码时相同的预测方式得到其运动补偿预测值,将预测值与残差相加便得到静止图层的重建图像,已重建图像可作为帧内预测的参考图像,通过重建图像生成和去块滤波后又可作为帧间预测的参考图像。静止图层码流包含运动信息时,必须根据熵解码得到的运动矢量信息进行运动补偿解码。
运动图层数据解码单元增加了多种预测单元,是和编码器相对应的。具体每个单元的预测细节与编码器部分是一致的,数据解码流程与传统解码器也是一致的,这在静止图层的图像解码已作说明。输出选择单元是根据需要选择不同的输出图像。输出选择单元还连接着一个可选的噪声产生单元,用于添加少量仔细观察刚好可觉察的噪声,使得图像不会出现死机的假象。
附图5为本发明的一种视频编码器实施例的总流程图:
5.1、首先初始化编码器存储单元以及图像编码参数。基于图层分解的编码方法是对一帧图像进行多次编码,先是编码静止图层,再编码运动图层,所以要多申请一些存储单元来存储运动图层待编码图像以及重建图像等。图像编码参数也要多出运动图层的相关参数,例如,运动图层的范围参数,运动图层是否采用层间预测的开关参数等;
5.2、输入一帧图像,利用运动检测算法(如混合高斯模型法)分析输入图像,检测运动目标区域,将图像分解成静止图层图像和运动图层图像,并更新若干编码参数。运动图层待编码的图像范围是随着每帧图像运动目标的大小不断变化的,例如,一帧图像的运动目标只占据了原始图像中间若干个宏块范围,那么对这帧运动图层的编码只是对若干个宏块编码,所以需要更新一些和运动图层图像大小范围相关的编码参数。除此以外还要将当前帧静止图层归入静止图层图像组,运动图层归入运动图层图像组。静止图层图像组和运动图层图像组的I帧可以是同时出现,也可以错开。由于I帧数据量较大,I帧错开有助于减少码率抖动。
5.3、根据检测结果对静止图层编码,静止图层的编码流程见附图6及其说明;
5.4、静止图层编码完成后判断是否有运动图层,如果有运动图层,即至少有一个宏块大小的运动目标,则执行步骤5.5,否则跳转到步骤5.6;
5.5、运动图层编码,运动图层具体的编码流程见附图7及其说明;
5.6、运动图层编码完成后对静止图层和运动图层码流进行复接,形成输出码流,判断是否所有图像都编码结束或编码需要被中止,如果没有则跳转到步骤5.1继续下一帧编码,反复操作直至所有图像都编码结束。
附图6所示为静止图层编码一帧图像的一种实施例流程图:
6.1、输入静止图层后,判断是否选择对静止图层下采样,如果选择下采样则在编码前先对静止图层下采样,如将图像的高度和宽度均减小一半,即缩小为原图四分之一大小,修改编码参数,编码这个缩小图像并且在序列头添加一个标志位down_sample;
6.2、判断输入图像类型,若是静止图层图像组的第一帧或指定为I帧的编码帧则采用帧内预测编码,即转至步骤6.3;否则采用帧间预测编码,即转至步骤6.4;
6.3、对输入的所有宏块都采用帧内预测编码,帧内预测编码过程和传统编码器一致,然后转至步骤6.5;
6.4、对输入的每个宏块采用帧间预测编码和帧内预测编码,通过编码代价(如率失真函数)比较选择最佳编码模式。帧内预测编码和帧间预测编码都和传统编码器一致;
6.5、一帧图像编码结束时判断这帧图像的跳过编码宏块是否等于总宏块数,如果相等,则说明前后两帧背景图像基本不变,编码得到的当前帧图像数据不传而跳过帧数static_layer_skip加1;如果不相等,则在静止图层图像头处传输跳过帧数static_layer_skip,并把它清零。对于监控应用,大部分时间都是没有运动目标的,也就是静止图层会出现许多整帧跳过情形,相比于宏块跳过方式,整帧跳过将大量节省码流。另一种做法是,是在当前帧图像头中加入一个帧跳过标志,指示是否整帧跳过。对于一个条带(slice),也可统计条带中是否全为跳过宏块,通过在条带头上设置条带跳过标志指示是否整个条带的宏过均为跳过宏块。
6.6、完成静止图层编码后,按照静止图层重建图像生成规则得到静止图层的重建图像并存入缓存中,写出静止图层码流,然后判断当前帧是否有运动图层,如果没有运动图层,则不编码,并在静止图层头中传输一个标志位motion_layer_flag,没有运动图层时写入0,有运动图层时写入1,当motion_layer_flag等于0,直接进入下一帧编码,否则进入运动图层编码。
附图7所示为运动图层编码一帧图像的一个实施例流程图:
7.1、输入运动图层,该实施例设定只有一个运动图层,即所有运动目标不做区分,都处于同一个运动图层。为了解码需要,该实施例在码流中添加了一个运动图层图像头信息,用来传递运动目标范围参数,根据运动检测算法得到的运动目标范围是用一个规则形状表达的,本实施例使用的表达方式是由若干个宏块组成的矩形,该矩形就是一个子图,子图的范围只要三个参数就能限定:一个参数是子图的起始宏块在整幅图像上的宏块编号motion_picture_start,即整幅图像以宏块为单位从图像左上角开始做光栅扫描,第一个包含运动目标的宏块编号;另一个参数是子图宽度motion_picture_mb_width,是以宏块为单位的;最后一个参数是子图的高度motion_picture_mb_height,也是以宏块为单位。这三个参数是随着检测结果不断变化的,编码器为运动图层申请了一个整幅图像的帧存空间,待编码的子图就处在它的内部,对子图以外的部分不做编码,所以在编码前需确定待编码子图的范围;
7.2、判断运动图层类型,如果是运动图层图像组的第一帧或指定帧内编码帧,即I帧,则用帧内预测编码,转至步骤7.3;否则若是P帧,采用前向预测帧间编码,转至步骤7.4;否则是B帧,采用双向预测帧间编码,转至步骤7.5;
7.3、输入一个待编码宏块,对其进行帧内预测编码。帧内预测编码可以采用层内帧内预测编码和层间帧内预测编码,通过对编码代价的比较选择一个最佳编码模式。层内帧内预测编码只能利用当前子图内的重建图像数据来得到预测值,其他操作和传统的帧内预测编码一致,即得到预测残差,对预测残差变换量化熵编码等。层间帧内预测编码采用的参考图像是当前帧静止图层的重建图像。这两种层间帧内预测模式可以扩展到传统编码器中的帧内预测模式中去,如H.264中的16x16亮度块的4种帧内预测模式可以扩展成6种,4x4亮度块的9种帧内预测模式可以扩展成11种,AVS种的8x8亮度块的5种帧内预测模式可以扩展成7种。如果静止图层编码时采用了下采样操作,则要对静止图层重建图像上采样作为参考图像或生成重建图像。当子图中所有宏块编码完成后跳转至步骤7.6;
7.4、输入一个待编码宏块,对其进行前向预测帧间编码,前向预测帧间编码可以采用层内帧间预测编码、层间帧间预测编码、层内帧内预测编码和层间帧内预测编码,通过对编码代价的比较选择一个最佳编码模式。层内帧内预测编码和层间帧内预测编码与步骤7.3中一致;层内帧间预测编码采用的参考图像是利用已编码的运动图层重建图像产生的;层间帧间预测编码采用的参考图像是已编码的静止图层的重建图像。这两种帧间预测编码是在参考图像上进行运动估计和运动补偿后得到预测值,并对预测残差进行变换量化熵编码等基本操作。在块头信息中,参考图像号mb_reference_index可以增加一些静止图层参考帧序号索引,该序号是对应运动图层参考帧号加上运动图层参考帧总数,例如:运动图层可用参考帧数是2个,即只能利用前两帧运动图层重建图像作为参考,那么前一帧的静止图层参考图像在参考帧中的序号索引就是3,另一帧的静止图层的序号索引为4。当子图中所有宏块编码完成后跳转至步骤7.6;
7.5、输入一个待编码宏块,对其进行双向预测帧间编码,双向预测帧间编码可以采用层内双向预测编码、层间双向预测编码、层内帧内预测编码和层间帧内预测编码,通过对编码代价的比较选择一个最佳编码模式。双向预测编码方法与前向预测帧间编码是基本一致的,只是参考图像包括前向和后向的两幅图像;
7.6、编码完成后判断这个子图的跳过编码宏块数是否等于子图总宏块数,如果相等,则子图数据信息不传而将跳过子图标志motion_layer_skip加1;如果不相等,则在运动图层图中传输跳过子图标志motion_layer_skip,并把它清零。运动图层编码数据直接放在运动图层图像头后面。接着按照运动图层重建图像生成规则产生重建图像,并存入帧存中,用于以后图像帧间预测编码的参考图像;
7.7、完成了运动图层编码,形成复接码流,保存重建图像,进入下一帧编码。
上面介绍的各实施例形成的码流结构是一个包含静止图层和运动图层的码流,还可以根据具体需要形成一个只包含静止图层的码流和只包含运动图层的码流以及它们的组合,我们在序列头处添加了两个标志single_stream和background来说明码流结构。当码流是一个只包含静止图层的码流和只包含运动图层的码流以及它们的组合时,编码模式中的层间编码都不使用。
如果系统中有移动侦测传感器,那么根据传感器得到运动目标入侵报警信号后才开始检测背景和运动目标区域,分解出静止图层和运动图层;没得到报警信号时,不做运动检测,没有运动图层,静止图层就是原始输入图像。
在具体实施中,如果传递背景区域形状参数(包括位置和大小)而不传递运动图层形状参数可以节省码流,则在静止图层头中传递当前帧静止图层范围参数,即背景区域的范围,此时要在各个图层头中添加一个标志来说明是否传递静止图层形状信息,即静止图层的范围参数,这时不传递运动图层形状参数。
当包含有多个运动图层时,可以添加多个运动图层头,并在序列头中添加表示运动图层数量的语法元素。
若运动图层太多,则会增加编解码算法复杂度,增加用于图层描述的比特开销;若将运动区域进行合并,则可减少运动图层数量,但会使运动图层中非运动区域像素大幅增加,不利于提高压缩效率。采用对检测到的运动目标区域进行选择性合并的方法,得到运动图层区域,能使运动图层数量得到控制;另一种方法是采用运动图层区域中的运动像素比例确定是否合并运动区域;或者对二者进行折衷考虑。
附图8为本发明的一种解码器实施例流程图:
8.1、输入要解码的码流,解析序列头,解析到标志位single_stream,若为0,说明该码流是一个包含静止图层和运动图层的码流,否则继续解析下一个bit,下一个标志位background若为1,说明只有静止图层,若为0,则只有运动图层;
8.2、根据序列头解析情况进行不同解码。若只有静止图层,解码流程和传统解码流程基本一致,只是在图像输出时要根据序列头解析得到的down_sample来选择是否对重建图像上采样。若只有运动图层,静止图层图像数据不存在而头信息保留。运动图层根据解析得到的头信息解码而不参考静止图层图像数据。运动图层解码出来的图像是子图形式,子图大小在运动图层头中解析得到,还要按照编码时的重建规则扩展成原始图像尺寸。若既有静止图层又有运动图层,先对静止图层解码,解码重建完后根据motion_layerflag判断是否有运动图层数据,没有则一帧解码完成,有则继续解码运动图层,运动图层按照上面介绍的方法解码重建,只是可以层间预测,层间参考图像要根据down_sample来选择对静止图层重建图像上采样;
8.3、若静止图层或运动图层出现整帧跳过模式,则可选对重建图像添加仔细观察刚可觉察的少量噪声;
8.4、继续输入码流,若检测到结束标志,则该视频序列解码结束,否则进入步骤8.2,继续解码下一帧图像。
解码图像时可以根据motion_layer_flag来给出报警信号。解码输出图像可根据具体需要选择输出,即可以输出静止图层重建图像或运动图层重建图像。上述single_stream、background、down_sample、motion_layer_flag等标志位是编码器形成码流时按码流语法规则嵌入在码流中的。
附图9为一种基于本发明的视频编码装置实施例结构示意图,它具有视频输入单元、图层分解单元、静止图层编码单元、运动图层编码单元、静止图层重建图像生成单元、运动图层重建图像生成单元、码流形成单元和码流输出单元。
视频输入单元实现了视频信号的采集,可以使用各类传感器实时采集视频信号,或采集来自摄像机的视频信号。
图层分解单元将输入视频中的图像分解成静止图层和运动图层,这个单元采用了运动目标检测算法对输入图像进行分割,确定含运动目标的运动图层区域,其它为静止区域。
静止图层编码单元和运动图层编码单元均包括帧内预测、运动估计、运动补偿、模式选择、用于预测残差计算的减法器、变换量化、熵编码、去块滤波、反量化反变换单元、用于重建图像的加法器、参考帧存等基本单元。其中静止图层编码单元中的参考帧存单元为用于存放静止图层重建图像的静止图层参考帧存,其中运动图层编码单元中的参考帧存单元为用于存放运动图层重建图像的运动图层参考帧存。静止图层编码单元在做帧间预测时只使用静止图层参考帧存单元中的图像,而运动图层编码单元可以使用静止图层参考帧存和运动图层参考帧存中的图像。静止图层编码单元和运动图层编码单元的视频编码与一般视频编码器,如H.264、AVS等一致。
静止图层和运动图层重建图像生成单元,用于生成对应图层的一整幅的重建图像,经过去块滤波后存入各自帧存,用于以后编码帧的帧间预测参考,生成方法在前面已有介绍,这里不再赘述。
码流形成单元将来自静止图层编码单元和运动图层编码单元的数据组合成一个符合语法规则的码流。
码流输出单元实现对码流的输出,可以通过通信接口进行输出。
具体应用中还可以添加移动侦测传感器,来辅助图层分解单元,如果没有侦测到运动目标,图层分解单元可以不开启,以减少功耗、降低码率。
附图10为一种基于本发明的解码装置实施例结构示意图,它具有码流输入、码流解析、静止图层解码单元、运动图层解码单元、静止图层重建图像生成单元、运动图层重建图像生成单元和图像输出单元。
码流输入是从硬盘读入视频流的输入接口,或接收视频流的以太网接口,或其它视频输入通信接口。如果输入为包括音频、系统的多媒体数据流,则码流输入单元通过解复接分离出其中的视频流。
码流解析根据语法规则对输入的视频码流进行解析,包括熵解码和去复接等,分离出静止图层码流和运动图层码流,分别输入静止图层解码单元和运动图层解码单元。
静止图层解码单元和运动图层解码单元均包括帧内预测、运动补偿、反量化反变换、去块滤波、参考帧存、模式选择等基本单元。这与常规的视频解码器是一致的。其中静止图层解码单元的参考帧存为静止图层参考帧存,运动图层解码单元的参考帧存除运动图层参考帧存外,还包括静止图层参考帧存,这些帧存分别存放对应图层经去块滤波后的前一帧或几帧解码重建图像,用于帧间预测解码。在本实施例中,静止图层解码时只使用静止图层参考帧存单元中的重建图像,而运动图层解码时根据码流语法选择使用静止图层参考帧存和运动图层参考帧存单元中的重建图像作为参考图像。
静止图层和运动图层重建图像生成单元,用于生成对应图层的一整幅的重建图像,经过去块滤波后存入各自帧存,用于以后编码帧的帧间预测参考,生成方法在前面已有介绍,这里不再赘述。
图像输出单元通过将重建图像传送至输出接口实现,如写入文件、发送到各种通信网络或通过各种显示输出接口输出。
以上各实施例对静止图层编码时都只使用层内预测编码,且在复接两个图层码流时都是每帧按照静止图层和运动图层顺序顺序连接形成的。
我们还可以按照宏块顺序交错形成复接码流,这是一种简化的编码方案,实施流程如图11所示,其步骤说明如下:
11.1、初始化编码器。包括内存分配和混合高斯模型检测算法的初始化。其中内存分配增加了用于保存滤波处理后背景参考帧的帧存,检测算法初始化的作用是形成一个比较好的背景图像用于编码时的精确检测。
11.2、输入待编码图像,检测出运动目标区域,将图像划分成静止图层和运动图层区域。用一个或几个矩形框以宏块为单位标记运动图层并将该矩形框数量及其范围参数写入码流中,即motion_picture_start,motion_picture_mb_width,motion_picture_mb_height。
11.3、对输入图像进行预处理,如对静止图层图像进行帧间帧内滤波处理,对运动图层图像根据需要进行帧内滤波和帧间运动补偿滤波。
11.4、确定静止图层是否作为图层方式跳过编码。若静止图层图像变化可忽略,则可将静止图层进行图层方式跳过编码。
11.5、若静止图层作为图层方式跳过编码,则只将运动图区域逐个输入宏块,并对该宏块进行编码,直到全部运动图层宏块编码完成。转11.7。
11.6、否则逐个输入宏块,并对该宏块进行编码,直到全部运动图层宏块编码完成。若当前图像属于静止图层区域,则编码后用静止图层重建图像更新静止图层参考图像,否则不更新静止图层参考图像;用运动图层重建图像和静止图像重建图像生成一幅运动图层重建图像,该重建图像在编码时用于帧内预测编码、去块滤波后存入参考帧存用于帧间预测编码;各宏块编码时可用静止图层重建图像进行帧间预测编码。
11.7、是否所有帧编码结束,若没有则继续下一帧编码,否则结束编码。
上述对宏块的编码均包括层内帧内、层内帧间、层间帧内和层间帧间预测编码。
静止图层参考图像的产生和更新方法:若当前帧为I帧,则用静止图层重建图像替代参考帧存中的原静止图层参考图像;否则若当前宏块为跳过宏块(包括图层跳过),或当前宏块为运动图层宏块,则参考帧存中的静止图层参考图像不更新;否则用当前重建的宏块先对原静止图层参考图像进行帧间滤波,如加权平均,更新静止图层参考图像,或直接用当前重建的宏块更新静止图层参考图像。
运动图层重建图像的产生方法:若当前宏块为运动图层宏块,则将该宏块重建值直接作为运动图层重建像素值,否则取值为静止图层宏块重建值。
这种方法形成的码流是按宏块顺序依次存放编码数据而不管该宏块是属于哪个图层,这样做的好处是静止图层宏块编码时可以参考当前帧的运动图层已编码宏块数据,即静止图层可以采用层间预测编码,运动图层增加了静止图层重建图像作为参考图像,提高了预测精度。
按宏块交错方式形成的复接码流在解码时可以先解析出运动区域的范围,这样就可以判断解码宏块所属的图层类型。
在AVS-S编码器sm1.0r1版本上实现图11所示的实施例,采用hall_cif测试序列,编码配置如下:编码结构为IPPP…,I帧间隔为48帧,测试序列长度为100帧,开启RDO。
得到的测试结果表明,使用本发明可以在几乎不降低运动目标编码质量的基础上码率降低了30%以上。
最后,需要指出的是,本发明不限于上述实施例,本领域的普通技术人员能从本发明内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。