1系统硬件框架结构
由于在实时视频处理系统中,底层算法的数据量大,运算结构相对比较简单,对速度有很高的要求。而高层处理算法控制结构复杂,数据量较底层算法少,故本文采用FPGA+DSP的结构, 其系统的硬件框架如图1所示。本设计采用ADI公司的嵌入式多媒体处理器BF561(BlackFin561)作为算法处理和控制核心,采用 EP3C25F324C8对图像进行预处理和图像的背景提取等算法。BF561拥有2个600 MHz的DSP内核,每个内核提供两套乘法器和ALU,有专门的视频处理硬件单元和视频处理指令,具有丰富的DMA通道和大容量高速的SRAM。 BF561采用MSA结构,可作为RISC处理器使用,也可以作为DSP使用[1]。
1.1视频采集和输出模块
本文采用解码芯片SAA7111将摄像头输出的PAL制信号转换为数字信号。SAA7111是飞利浦公司推出的9位视频解码器,提供6路模拟输入和2个增强型的模数转换器。通过配置SAA7111将PAL制式的模拟基带信号转化为ITU-R BT656的4:2:2格式的YUV信号,并将其送入FPGA中进行预处理。经过预处理后的图像数据再由FPGA重新打包成BT656格式的数据送入到 BF561的PPI口。具体连接图如图2所示。图中,VPD[0..7]是数据输出管脚与FPGA相连,时钟同步信号BF561采用MDMA的方式将原始图像信号存入SDRAM中,供视频跟踪算法使用。视频输出模块采用飞利浦公司视频编码芯片SAA7105将输出信号转化为PAL制式的CVBS信号。标准的YUV数据从FPGA的引脚输出,送到SAA7105的数据管脚上,场、水平和垂直同步信号分别接到FPGA的控制引脚上。SAA7105的参数配置都是通过FPGA产生I2C总线来实现的。
1.2 存储模块
BF561的片上存储器分为两个部分:每个内核各使用100 KB的专用、高速L1存储器和128 KB的大容量共享L2存储器。本系统通过EBIU接口外扩了SDRAM和Flash两种存储器。选取2片MT48L32M16A2来构成SDRAM存储器,μClinux操作系统的映像、图像处理数据和图像处理中间结果可存储在SDRAM中。系统扩展了64 MB的Flash,选用S29GL064M90T芯片存放操作系统的Bootloader和内核程序。
1.3 外围接口模块
外围接口模块包括串口接口、以太网接口和部分通用接口等。本文主要用到串口接口和以太网接口。串口接口的功能是控制云台运动,使运动目标随时在视场范围内,本文选用MAX488芯片实现BF561内的UART接口的电平转换;网络接口的功能是通过系统的嵌入式Web服务器,实现智能监控仪的远程配置、传递监控参数等,采用DM9000即可满足系统需要。
1.4 DSP双核以及FPGA之间的通信
在本系统中,涉及到BF561两个核之间的通信以及BF561与FPGA之间的通信。FPGA给DSP提供图像数据和经过背景提取之后的二值化图像数据,DSP将绘制的波门数据传输到FPGA,FPGA将波门叠加到原始图像后送给SAA7105H显示。常见的双核通信主要采用中断、轮询两种通信方式[2]。中断是利用2个核的中断机制来实现FPGA与DSP之间的通信;轮询是通过在双核的共享寄存器里设置一些信号量,供双核通信与访问。考虑到本系统的应用条件,本文采用轮询的通信方式,将信号量定义存放在L2空间。DSP的异步存储器的地址空间映射到FPGA,通过FPGA操作数据线和地址线,即可完成FPGA与DSP之间的数据交互。
2 软件算法实现
在本设计中,A核运行μClinux操作系统,B核运行视频监控算法。μClinux操作系统主要实现以太网芯片DM9000的驱动、Flash的驱动、嵌入式Web服务器BOA的实现和B核的驱动程序。
2.1 算法
本文实现的智能视频分析仪主要用在视频监控中,智能视频监控的核心内容之一是对特定目标进行自动跟踪。目标跟踪分为运动目标检测、行为识别和目标跟踪3个主要步骤。
运动目标检测是从图像序列中将变化区域从背景图像中提取出来,本文采用目前最常用的运动检测算法即背景消除法。此部分算法主要在FPGA中实现,采用基于改进的自适应混合高斯模型的背景建模方法[3]来得到背景图像。为了节省存储空间和提高运算速度,在背景建模时,将YUV信号转化为图像的灰度值。通过高斯建模得到背景图像B及原始图像A后,为了克服树枝扰动、阳光反射等干扰,采用如下策略进行处理:
然后采用数学形态学的方法对二值化图像C进行处理,得到运动目标的连通域,从而进一步得出运动目标的质心、大小、位置等信息,建立目标链。
行为识别:遍历目标链的每个目标,判断连续各帧之间运动目标的质心位移方向和距离,得出目标的运动轨迹。根据设置好的规则和运动轨迹,判断目标是否满足触发报警的条件。
目标跟踪:在许多监控场景,要求摄像头随着运动目标移动,防止目标运动超出摄像头的视场范围内,从而要求云台随着目标的运动而运动。在本设计中,这种情况下只能由多目标跟踪转为单目标跟踪。目前用于图像跟踪的方法比较多,相关跟踪是一种常用的、有效的和快速的目标跟踪方法。本文采用改进的多模板匹配法对目标进行跟踪,使用多子模板匹配[4]和二值化信息不断修正模板的方法有效地解决了由于模板滑动带来的模板更新问题;采用归一化互相关系数度量模板的相似度;为了克服遮挡问题和提高跟踪的准确性和实时性,采用Kalman滤波器估计目标的运动状态[5],有效地缩小了目标的搜索范围。目标在单位时间内(本文的间隔时间是3帧)其运动状态变化较小,可以认为在单位时间间隔内目标是做匀速运动的,可以建立卡尔曼滤波器模型。观测向量为模板匹配运算后目标的位置,状态向量为目标实际位置和当前的水平垂直速度,为了提高运算速度,分别对水平方向位置和垂直方向位置进行卡尔曼预测。
2.2 软件流程
BF561的视频监控处理流程如图3所示。首先BF561收到FPGA传来的1帧图像,接着BF561读取本帧图像的二值化信息,通过腐蚀膨胀函数和取连通域函数target_mark(),得到当前帧运动目标的大小、重心和位置等信息,然后通过target_update()函数更新目标链,采用基于区域的算法,判断连续的各帧之间运动物体的质心位移方向和距离,判断目标的状态,判断是新目标、原有目标、目标发生合并、目标发生遮挡和目标丢失等。完成目标链的更新后,进入规则检测函数rule_check(),根据目标的轨迹信息判断目标链中的目标是否满足报警条件,若满足报警条件,给出各种报警信号,若不满足,则返回,等待下一次循环。通过对物体运动轨迹的记录,可以实现入侵检测,人、车数量统计,遗留物体检测,摄像头非法遮挡和移位报警等功能。若要实时跟踪目标,则进入target_track()函数,采用卡尔曼滤波器对目标位置进行预测和改进的多子模板匹配算法得到目标的实际位置,控制云台运动保证目标的连续跟踪。实验结果如图4所示,表明本设计能准确、实时地跟踪目标。
本设计实现了智能视频监控仪。其独立的硬件设计结构和丰富的接口,使本平台不仅可用于智能化当前监控系统,也可独立构建新的网络化、智能化的监控系统。