向海霞、王卫星[2]提出一种利用卡尔曼滤波对背景进行预测与更新算法;张彦[3]等人提出一种将基于特征点的方法和基于像素点的背景建模方法相结合的背景更新算法。但这些算法复杂,难以在硬件上实现,只适合利用软件方式实现,很难提高速度,达到实时性要求。而2009年徐方明、卢官明[4]提出基于改进surendra型背景更新算法的运动目标检测算法,通过改变静态阈值为动态阈值,利用动态阈值更新背景模型,再将当前图像和当前更新背景做差运算之后产生差分图像。该算法在有运动目标存在的情况下提取出可靠的背景模型,并且能够自适应地对背景模型进行较为精确的更新,更新速度较快。但所采用的是软件方式实现,执行速度不高。本文采用改进的surendra背景更新算法,针对该算法的特点进行硬件结构分析,利用FPGA流水线任务处理技术以及并行处理的优点,采用硬件方式对动态背景下运动目标的提取进行实时检测。
1 改进型surendra背景更新算法原理
改进surendra型背景更新算法的基本思想是事先将背景图像储存下来,利用当前帧图像减去背景图像,从而比较得出运动目标。由于周围环境的变化造成图像背景的变化,采用传统静态阈值更新背景将不能很好地适应环境的变化,需要动态阈值实时更新背景,以便更好地分割前景和背景。这里采用基于灰度直方图中图像最大灰度值与最小值灰度值的均值作为图像的分割阈值。总体实现分为四个步骤:初始帧图像的建立、动态阈值的求取、背景帧图像的更新和差值图像的求取。改进型surendra背景更新算法结构如图1所示。

将采集到的最初M帧图像数据进行平均,以这M帧图像的均值图像作为最起始的背景图像。这样初始背景图像为最真实的背景图像,减小了以单帧作为起始背景图像时,因外界环境的突变而带来的背景图像不准确的可能性。其描述如下:

2 改进型surendra背景更新算法硬件实现特点分析
(1)初始背景帧图像的建立。为了能客观地反映原始背景图像的特点,需要将最开始的M帧图像进行存储再求平均,所以需要采用双端口RAM[5,6]对M帧图像进行存储。这里综合考虑图像速度和所占用资源情况,COUNTER计数用于将前M帧图像进行存储再求平均作为初始帧的背景图像。在求平均时,需要用到除法,可以通过移位方式求平均,减小资源的占用。初始背景帧图像原理如图2所示。

(3)对图像存储的三端口RAM采用分时复用的方式,节约了资源占用率。同时将这两个三端口RAM的数据并行处理,同步实现对背景图像数据和当前帧图像数据的存取操作,并且将阈值模块、更新算法模块和差值模块采用流水线技术,可以大量节省对图像数据的处理时间。


(1)背景帧图像的建立与存储
总体硬件结构如图4所示。选择模块A是一个选择开关,用于控制前M帧的图像数据和第M+1帧及以后图像数据的输入流向。在前M帧时,选择模块A将其每一帧的数据输入到均值模块中,均值模块将其每一帧图像数据的对应像素坐标的像素值相加,存入到双端口RAM A中,同时在下一帧图像数据输入到均值模块时将双端口RAM A中的图像数据输出,使其和下一帧对应的图像数据相加,并将结果重新存入RAM A中。当第M帧图像数据在均值模块中相加时,求对应图像像素坐标的均值,并将其均值输入到双端口RAM A进行锁存,同时选择模块A将第M+1帧及其以后的图像数据输入到三端口RAM B中。


在第M+1帧数据输入到三端口RAM B中时,RAM端口控制模块在RAM B写使能端WRB有效时启动RAM B 读端口Qa的读使能端RDBa有效,将第M+1帧数据读出。分别定义两个寄存器,将每个时钟来的有效数据进行比较,分别存储最大像素值和最小像素值,求出最大值和最小值之后,将两数相加并右移一位求取均值。此时选择模块B选通RAM A,RAM端口控制模块使其RAM A的读端口RDA有效。在第M+2帧以后,选择模块B选通RAM B端口,关闭RAM A的读端口RDA。
(3)背景图像的更新
当RAM A的读端口RDA有效时, RAM B读端口Qa的读使能RDBa无效。在RDA有效后的第1个CLK的上升沿时,将双端口RAM A中的初始背景数据b0(i,j)和RAM C中读端口Qa的数据I1(i,j)读出到更新背景算法模块,此时RAM C中读出的数据I1(i,j)=0。
更新背景算法模块RDA有效后的第2个CLK的上升沿时启动有效的判断,若输入的I1(i,j)与b0(i,j)满足Ik(i,j)<T1,则将此时的背景像素值变换为b1(i,j)=ηI1(i,j)+(1-η)b0(i,j),否则b1(i,j)=b0(i,j)。当求出第一个新的背景值b0(0,0)时,更新背景算法模块同时使RAM C写端口WRC有效,将b1(i,j)输入到RAM C暂存。在第三个CLK的上升沿,启动RAM B读端口Qb的使能信号RDBb和RAM C读端口Qb的使能信号RDCb有效,同步读出当前帧的图像数据I1(i,j)和更新后的背景图像数据b0(i,j)。此时第M+1帧的有效图像数据和当前帧的背景图像数据同步输出到差分模块中。利用流水线方式,依次将第M+2帧及其以后的图像数据存入到RAM B中,并利用RAM B和RAM C进行背景更新,将更新后的背景数据与当前帧数据同步输出。这里以η=0.875,即η=1/4+1/8来进行硬件设计,SEL用于判断是背景值不变还是背景像素需要更新,DELAY用于保证数据的同步性。算法结构如图6所示。

4 实验验证
图7(a)为模型飞机在不同运动时刻不同姿态的帧图像;图7(b)为固定阈值背景更新、更新速率为0.875时所提取到的目标飞机;图7(c)为动态阈值背景更新、更新速率也为0.875时所提取到的目标飞机。可见动态阈值能更有效适应动态环境运动目标物体的提取。

参考文献
[1] HUANG Weiyao,LIU Zhijing,PAN Wenjuan.The precise recognition of moving object in complex background[C]. Third International Conference on Natural Computation,2007(2):246-252.
[2] 向海霞,王卫星.车辆检测中的自适应背景更新算法研究[J].计算机工程与应用,2009,45(11):235-237.
[3] 张彦,周忠,吴威.一种用于运动物体检测的自适应更新背景模型[J].计算机辅助设计与图形学学报,2008,20(10):1317-1321.
[4] 徐方明,卢官明.基于改进surendra背景更新算法的运动目标检测算法[J].山西电子技术,2009(5):39-40.
[5] 王绍雷,赵进创,周毅.基于FPGA的图像边缘检测系统的设计[J].电子技术应用,2007(6):40-42.
[6] 鲁恒.视频图像灰度信号直方图均衡的FPGA实现[J].电子技术应用,2006(11):105-107.