基于FPGA的图像采集和快速移动物体检测
扫描二维码
随时随地手机看文章
摘 要: 提出了一种图像采集和快速移动物体检测的设计,即通过FPGA实现对摄像头的初始化及数据采集,并通过自定义的传输协议将FPGA缓存中的数据传输给ARM7处理器,实现图像数据的快速传输。根据适用范围,本文提出了自适应二值化阀值及相关的检测算法改进。这对于小型的、低功耗实用型的监控系统具有一定的实用价值。
关键词: 图像采集; FGPA; 移动物体检验
近年来,计算机技术、通信技术、微电子技术迅猛发展,数字监控系统逐步从传统方式的监控系统走向小型化、多样化和智能化。监控系统的发展首先是从图像采集开始的,本文根据项目需要提出了一种基于FPGA的图像采集和移动物体检测的设计方案,用以实现对特定背景下的图像采集和移动物体快速检测。
1 系统总体设计
本系统主要由摄像头初始化模块、图像采集模块、数据传输模块和运动物体检测模块构成。本系统中所使用的FPGA[1]芯片型号是FUSION系列的AFS600。如果只是完成本文中所要实现的内容,则完全可以选择更低性能的FPGA芯片,例如ProASIC3系列的A3P060;如果所选择的芯片没有片内RAM或者片内RAM很小,需要对本文的设计做适当的调整才能完成相应的功能。
本系统中,由FPGA模拟SCCB对摄像头(OV7670)进行初始化,控制端获取图像时再启动FPGA对一幅图像进行采集,将采集到的数据放入一个双端口的RAM存储器中,并将数据传输给控制端。控制端间隔一段时间就通过FPGA采集一幅图像,通过对这些连续的图像进行处理,判定是否有移动物体出现,如果有则可以启动报警系统。本系统中控制端是ARM7系列开发板,图像采集的相关原理图如图1所示。
2 FPGA图像采集端
2.1 摄像头的初始化
本系统实验所使用的摄像头是OV7670,其感官阵列共656×488个像素。OV7670通过SCCB总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率为8 bit的影响数据。用于VGA图像显示最高可达30帧/s。用户可以完全控制图像质量、数据格式和传输方式。摄像头内部包含伽玛曲线、白平衡、饱和度、色度等,这些设置均通过SCCB总线接口完成。
SCCB是和I2C相同的一个协议。SCCB由一根数据线(SIO_D)和一根时钟线(SIO_C)构成,数据线是双向传输的,时钟线是由主机完全控制的。本系统中主机是由FPGA芯片来担任的,对摄像头初始化的过程只是由主机对摄像头内部的寄存器写入数据,不需要完成从摄像头接收数据的过程,而且对摄像头(OV7670)寄存器写入指令的格式很统一。指令由3 B构成,第1个字节为命令字节,对于本文中的摄像头其内容是0x42;第2个字节是一个8 bit寄存器地址;第3个字节为所要修改的寄存器内容。
根据以上分析,通过FPGA实现摄像头初始化的过程简化了SCCB传输协议,不再考虑接收数据;而且由于发送数据固定为24 bit,如果再加上起始、终止和确认位,总共需要传输的状态位为29 bit,通过状态机机制即可很轻松地编写FPGA代码。本系统中将实验所产生的FPGA信号通过逻辑分析仪提取,结果如图2所示。
2.2 图像采集
图像采集要用到OV7670的3个同步信号,分别为VSYNC(场同步信号)、HREF(行同步信号)和PCLK(像素同步信号),三者的时序关系如图3所示。VSYNC的上升沿表示一帧新图像的到来,下降沿则表示一帧图像数据采集的开始;HREF的上升沿表示一行图像数据的开始,HREF为高电平即可开始有效的数据采集;PCLK下降沿表明数据的产生,PCLK每出现一个下降沿,OV7670 摄像头便传输一个像素数据。最后,当下一个VSYNC信号上升沿到来,表明一帧图像输出结束,同时表示下一帧图像输出开始。从图3中可以看出,当PCLK下降沿到来时摄像头就会更新输出下一个数据;要通过FPGA采集图像数据就要选定一个稳定的图像数据采样点,通过分析图像可知,在PCLK为上升沿时最适合图像数据的采样。
本系统中,FPGA采样得到的数据暂存于一个双端口的内部RAM缓冲存储器中。当收到采集图像命令时,系统首先复位双端口RAM的写地址,每当PCLK上升沿到来时FPGA将数据总线上的数据保存下来,接着再将获得的数据写入双端口缓冲区中,每写完一个数据便对写地址做加1的操作。其主要流程如图4所示,在用Verilog语言实现对图像数据采集时,检测PCLK上升沿并将总线数据保存到寄存器是在一个周期内完成的,将寄存器中的数据存入双端口RAM是在下一个周期完成的,即如果输入时钟为48 MHz,则通过FPGA可以对24 MHz的像素频率(PCLK)的输出图像进行采集。其采集频率即使对640×480的图像也能达到30帧/s以上的速度。提高图像采集的速度瓶颈关键在图像从FPGA传输到控制端的过程中,因此提高数据的传输速度显得非常重要。
2.3 数据传输
本系统通过一个双端口RAM存储器来做缓冲,与使用外部SRAM相比,其好处是实现简单、不需要外接SRAM芯片,同时作为FPGA内部RAM,其处理速度很快可以达到350 MHz。但是RAM缓冲区的大小有限,不能够存储一幅完整的图像,如果控制端读取数据太慢,可能会使原有的缓冲数据被覆盖。从图3中可以看出,在每一行数据传输结束后都有很长一段行同步时间,通过使用缓冲区可以有效利用这段时间来传输数据。
数据传输过程的实现流程如图5所示,该数据传输过程中使用4根控制线和8根数据线。4根控制线分别是开始(start)、结束(finish)、接收状态(R_ready)和发送状态(S_ready)。图5(a)为FPGA发送端的控制流程,图5(b)为数据接收端的控制流程。发送端中rdata为从RAM缓冲区中读出的数据,raddress为双端口读地址,waddress为双端口写地址,数据采集完毕为采集过程结束的标志。
3 处理器控制端
3.1 移动物体检测研究现状
目前比较常用的运动物体检测的方法主要有3种,分别是光流法、背景差法和帧差法。光流法的基本原理是给图像中的每一个像素分配一个速度矢量,根据各个像素的速度矢量特征,对图像进行动态分析[2],但光流计算方法相当复杂,且抗噪性能差;帧差法的基本原理是利用图像序列相邻两帧之间的差异计算出变化的像素[3];背景差法的主要思想是通过对序列图像建立一个背景模型,估算出当前的最优背景图像,再通过对前景图像与背景图像的差分来判断场景中的运动物体[4]。
3.2 移动物体检测
由于处理速度和资源都十分有限,本系统需要通过无线网络来传输图像,在这样的硬件条件下难以完成视频采集,如果使用帧差法前后两帧之间的差异可能会很大;并且本系统主要起到监控报警的功能,通常所监控的环境移动物体很少,所以选用背景差法进行运动物体检测。
3.2.1 移动物体检测流程
首先要获取初始图像,系统上电后将第一次获取的图像作为初始背景,初始背景并不一定准确,但是随着时间的推移,在自适应背景更新的过程中背景将会越来越趋近于真实的背景;接下来,将采集到的图像与背景做差,得到背景差图像,再对背景差图像做中值滤波处理;之后,对中值滤波后的背景差图像做二值化,从而提取出移动物体即背景差图中的白色部分,在对图像二值化过程中,本系统根据实际应用环境采用自适应的二值化阈值。
3.2.2 中值滤波
由于噪声和运动的相关性,会出现一部分残留的噪声和运动物体内部空洞的现象,需要利用形态学中开和闭运算进行必要的后处理。在众多预处理方法中,中值滤波作为一种常用的图像预处理方法,能够有效地去除噪声、平滑图像,并能够有效地保留图像的边缘信息,所以本系统采用中值滤波来处理图像。
本系统所采用的是快速中值滤波[5]。快速中值滤波的处理过程为:首先获得需要中值滤波处理的像素及其周围像素,结果为一个3×3矩阵;然后分别计算每一行中3个数据的最大值max、中值med和最小值min;再在上面求得的3个最小值中求最大值max_of_min,最大值中求最小值min_of_max,中值中求中值med_of_med;最后在max_of_min、min_of_max和med_of_med中求中值middle,middle即为所求,把3×3矩阵的中间值换成middle就完成了对Data5的中值滤波处理。
3.2.3 自适应阈值
由于阈值的大小对移动物体的检测主要表现在:当阈值定得较大时,会忽略背景差图中的一些微小变化;当阈值定得太小,又会导致出现太多的移动物体,造成错误的移动物体检测。因此,可以根据经验给移动物体个数规定一个上限和一个下限。当检测到的移动物体个数大于所规定的上限时就适当的增大阈值,当移动物体个数小于所设置的下限时就适当地增大阈值。阈值的变化不是无限的,而是在所容忍的范围之内变化的。本系统经过上述一系列处理后得到的结果如图6、图7所示:图6为包含移动物体及背景的图像,图7为经过一系列处理后得到的对移动物体二值化处理后的结果,其中白色部分为移动物体。