贺文强,谢维波
(华侨大学 计算机科学与技术学院,福建 厦门 361021)
监控视频不同于其他用于广告、宣传、娱乐等的多媒体视频,它存在的目的是确保被监控区域的安全、检测被监控区域发生的变动。在相当长的时间里,监控区域是没有变动且冗余的静态场景,因此,按照固定帧率工作的通用视频编解码算法在视频监控系统中并不合适。为了既能灵活有效地检测出被监控区域发生的变动,又不影响监控视频的分辨率,提高监控的效率,同时最大程度地减少视频传输的数据量,本文提出了一种动静态场景分析算法,来检测监控视频中的场景变动,把监控视频分类为静态场景和动态场景视频。通过动静态场景分析算法与编解码算法的结合,实现了一种基于动静态场景分析的监控视频编解码优化方案,该方案能有效区分监控视频的场景状态,并根据不同的场景特征进行不同的处理,一旦检测到静态场景,监控视频数据无需编码和传输。通过把该算法成功移植于OMAPL138,验证了算法在降低码流上的有效性。
动态场景视频即所在区域的视频画面有运动物体出现,与背景帧在某些区域有很大的差别;静态场景视频即视频画面在一定范围内没有变化,与背景图像差别不大。目前,运动检测中最常用的方法有:帧间差分法、背景减除法、光流计算法和基于统计学的方法等[1]。帧间差分法相对于其他运动检测算法,具有算法实现简单、灵敏度高、实时性好、对场景光线和动态环境适应性较强等特点[2]。由于本文只检测视频场景状态即视频中运动物体的有和无,因此很好地避免了帧间差分法在目标检测中目标区域产生“空洞”的问题[3]。基于此,本文提出了基于监控视频的动静态场景分析算法,算法是基于“怎样快速地检索到两帧图像有差别”这个基本问题提出的。场景分析算法不必检测出两帧图像的所有差别,检测的是一帧视频的整体状态,故只需要对有代表性的少数像素点进行运算,这是动静态场景分析算法区别于其他所有运动目标检测算法的最大优势。算法实现步骤如下:
(1)对视频进行前期处理,主要是把彩色图像转化为灰度图像(YUV格式的视频提取Y分量即可)。
(2)对得到的灰度图像进行采样处理,提高算法效率。
(3)设第一帧为背景帧,G(n)表示第 n帧图像,BG表示背景帧,背景帧的更新公式如下:
(4)第二帧开始与背景帧逐像素值相减,相减后大于阈值 T1,则 f(k)等于 1,否则等于 0。G(k,n)表示第 n帧第k个像素点的像素值,其中 1≤k≤M×N(图像有 M行N列),BG(k)表示背景帧第k个点的像素值,公式如下:
(5)f(k)的累加值一旦超过阈值 T2,则判定 G(n)为动态帧且退出,否则为静态帧,公式如下:
动静态场景分析算法与运动目标检测算法的区别如下:
(1)通过动静态场景分析后只有两种状态:动态场景和静态场景。
(2)场景分析算法不必检测出两帧图像的所有差别,检测的是一帧视频的整体状态,只需要对少数像素点进行运算是动静态场景分析算法区别于其他所有运动目标检测算法的最大优势。
(3)场景越复杂,算法运行时间越短。
(4)场景分析算法不求差分图像,满足条件立即退出。
对算法的进一步优化:(1)虽然第(2)步采样会有一定的抑制噪声的能力,但因为是采样后的逐像素相减,还是不可避免地会有噪声的干扰,为了抑制噪声的影响,可以在小区域内利用统计量的方法,如在4个点的小区域内有 3个点的差值大于 T1才判断 f(k)=1;(2)考虑到从中间开始会缩短检索时间且处理算法的DSP有多个运算器,故采用从中间向两端检索的方式,上半部分从左到右从下到上,下半部分从左到右从上到下。
本文用到的HITAV算法,即为翰华信息科技有限公司自主研发的音视频编解码算法,HITAV的基本压缩算法是小波模型(wavelet)[4]、多级树集合群、广义小波和数学形态小波,不同于基于离散余弦(DCT)模型的H264/MPEG4算法。HITAV利用小波模型和多级树集合群的多级分解与收敛算法,它不是靠降帧率(牺牲流畅性)或者利用人的视觉误差(牺牲画质)限制静态场景来实现低码流,而是从源头-视频编码模型上实现真正意义上的低码流,它的编码效率(压缩比)根据不同的分辨率分别是H.264的2~5倍。在监控系统中,HITAV的低码流能大大地提高程序的运行效率和实时性。HITAV编码后的帧结构主要部分如图1所示。
图1 帧格式
其中,width和height表示视频图像的宽和高;添加st_cnt字段用于标示静态场景状态的持续时间;stream_length表示编码后视频数据的长度,本文的场景状态也由stream_length标示,stream_length等于零表示静态场景,stream_length大于零表示动态场景。
编码时,原始视频通过动静态场景分析之后分成动态帧和静态帧,动态帧通过HITAV算法编码,并把标记值flag设为1,编码后的帧结构体中的stream_length不变;只有当flag=1时才做静态帧处理并把处理后的flag值设为0,通过静态帧处理后,stream_length=0,即无数据部分。故经过编码,所有的动态帧都得以压缩,连续出现静态帧表明系统进入静态场景状态,并对第一帧做静态帧处理,其余静态帧抛弃;在处理动态帧时,动态帧中st_cnt记录了在它之前的静态帧量,以便存储。编码流程如图2所示。
图2 编码流程图
解码时,根据接收到的视频数据结构体中的stream_length值判断视频监控的场景状态,如果为动态场景(即stream_length>0)则进行 HITAV算法解码,并把解码后的数据覆盖显示缓冲区;如果为静态场景(即stream_length=0)则标志系统进入静态场景状态,并持续到下一个动态场景帧的出现。解码流程如图3所示。
图3 解码流程图
OMAPL138CPU基于C674xFixed/Floating-Point VLIWDSP+ARM926EJ-S双核设计,集成128 MB DDR2和 512 MB NAND Flash,DDR2作为运行内存,NAND Flash用于存储bootloader、启动时系统环境变量、Linux内核、文件系统。系统接口模块主要有JTAG调试接口、自适应10/100 M网络接口、RS232串口等[5]。
系统灵活运用Davinci架构的异构多核通信的基础组件 Syslink[6],实现了视频数据在 ARM核心和 DSP核心之间的传输。Syslink为异构多核处理器间提供了高效的多核协作和通信机制。系统视频信号处理流程如图4所示。在ARM9中把捕获的视频数据复制到共享内存区,通过Syslink的地址映射,使得DSP得以访问。DSP中运行了基于场景分析的编码/解码算法,ARM9主处理器完成网络功能和本地播放。
图4 视频处理流程图
通过在OMAPL138中同时运行基于动静态场景分析的HITAV算法和原始的HITAV算法,实验生成了两组数据,一组为视频通过动静态场景分析编码后的视频数据,一组为通过原始的HITAV编码后的视频数据。编码后视频帧的长度变化和场景状态变化如图5所示,视频分辨率为480×800,选取其中1 000帧。
图5 编码后帧长度变化和系统场景状态
视频格式为YUV420,一帧原始视频的大小为480×800×1.5 B。由图5可知,通过基于场景分析的HITAV算法编码后长度为零即表示监控视频在静态场景状态,这部分的视频帧在经过该算法后得以滤去。基于场景分析的编解码算法拦截了无意义的静态场景视频数据。有场景分析和无场景分析的静态视频百分比与平均压缩比如表1所示。
表1 压缩比对比
由表1可知,基于场景分析的HITAV算法的平均压缩比明显高于原始HITAV算法的平均压缩比,且静态视频百分比越大,平均压缩比的差值越大。
本文介绍了一种基于动静态场景分析的监控视频编解码优化方案,详细介绍了动静态场景分析算法的基本原理,描述了动静态场景分析算法与HITAV算法的结合。通过实验证明,动静态场景分析算法有效地避免了视频监控中静态场景视频帧的传输,从而降低了视频的传输量,提高了视频的平均压缩比。
[1]SONKA M,HLAVAC V,BOYLE R.图像处理、分析与机器视觉(第二版)[M].艾海舟,武勃,译.北京:人民邮电出版社,2003.
[2]MONNET A,MITTAL A,PARAGIOS N,et al.Background modelingand subtraction ofdynamic scenes[C].IEEE International Conference on Computer Vision,2003:1305-1312.
[3]吕国亮,赵曙光,赵俊.基于三帧差分和连通性检验的图像运动目标检测新方法 [J].液晶与显示,2007,22(1):87-93.
[4]王相海,张跃平.基于小波的图像及视频编码研究进展[J].计算机工程与应用,2004(11):78-80.
[5]Texas Instruments Incorporated.OMAP-L138 C6000 DSP+ARM processor[EB/OL].http://www.ti.com.cn/cn/lit/ds/symlink/omap-l138.pdf,2011.
[6]Texas Instruments Incorporated.Syslink user guide[EB/OL].[2012-09-04](2015-03-01).http://processors.wiki.ti.com/index.php/SysLink_UserGuide.