kaiyun官方注册
您所在的位置: 首页> 嵌入式技术> 业界动态> 嵌入式运动目标跟踪系统设计

嵌入式运动目标跟踪系统设计

2009-07-17
作者:毛晓波,蔡宗慜,陈铁军

摘 要:通过借鉴嵌入式系统在信号处理、电子技术和计算机等领域的成功应用经验,在分析机器视觉系统特点的基础上,将机器视觉和嵌入式技术相结合,设计一种基于嵌入式处理器S3C2410的目标跟踪系统。介绍了系统工作原理和特点,给出了系统硬件结构图和软件流程,并以智能小车为例进行了目标的识别与跟踪。
关键词:嵌入式系统;机器视觉;目标跟踪;S3C2410

  机器视觉是目前智能机器人领域中的研究热点之一,涉及光电子学、图像处理、模式识别及计算机技术等诸多学科领域,内容极为广泛。机器视觉中图像处理与目标识别的特点是处理数据量大、计算复杂,对算法的实时性和精度要求高。
  目前机器视觉处理平台主要有PC-BASED系统、PLC-BASED系统和FPGA系统。前两种系统体积大、软硬件系统复杂、成本高,使其应用范围受到了限制。后者使用硬件描述语言,算法开发难度大。DSP芯片具有专门的硬件乘法器,可实现单周期乘法与累加运算,具有价格低、速度快等特点,但其I/O接口功能较弱。32位ARM处理器处理能力已接近早期PC机的水平,且具有PC机无法比拟的体积小、价格廉、功耗低、性能强、可靠性高等特点。与DSP相比,其外围接口更加丰富,能够真正地“嵌入”到设备中,而且开放的体系结构也保证系统能够快速升级和更新。本文将机器视觉和嵌入式技术相结合,将机器视觉建立在基于ARM的嵌入式系统平台上,设计一种基于S3C2410的运动目标跟踪系统,为开展微型化嵌入式机器视觉研究进行有益的尝试。
1 系统总体结构与硬件设计方案
  系统总体结构如图1所示。在S3C2410嵌入式系统平台上移植并配置Linux操作系统,针对平台和应用的特点,制作合适的文件系统,编写应用程序。运动目标经USB摄像头实时采集后,送入S3C2410处理器,利用嵌入式处理器的强大运算能力,对采集到的图像进行图像分割、特征提取、形心计算等后期处理,完成目标识别与定位,并控制步进电机,调整摄像头位姿,使摄像头对准运动目标,实现跟踪。实时性好和体积小巧是本嵌入式跟踪系统追求的目标。

  基于ARM体系结构的32位微控制器S3C2410芯片,主频可达200 MHz。它提供了丰富的片内资源:分开的16 KB指令Cache和16 KB数据Cache、MMU虚拟存储器管理、LCD控制器、支持NAND Flash系统引导、系统管理器、3通道UART、4通道DMA、4通道PWM定时器、I/O端口、8通道10位ADC和触摸屏接口、IIC-BUS S3C2410接口、USB主机、USB设备、SD主卡和MMC卡接口等。集高速处理、资源丰富与强大的控制功能于一体,操作系统的配备更是普通DSP和MCU无法比拟的。嵌入式操作系统不仅具备一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件功能等,还具有可裁剪性、实时性、高可靠性、可移植性等特点。Linux操作系统的开源性方便外部设备驱动程序的编写,且开发成本低,现已成为主流的嵌入式操作系统。USB摄像头使用的电源可以直接从USB主板上获取,无需额外电源,增加了设备的便携性且数据传递远快于普通的串口和并口,其价格也大大低于市场上通用的高速图像采集装置。
  综上所述,本系统采用了将Linux移植到ARM系统的方法,使用USB摄像头作为图像采集方式。ARM最小系统由一个核心母版和外部电路构成。核心母板包括SDRM、CPU、核心板接口等。外部电路主要有电源(主板5 V,I/O 3.3 V,CPU内核1.8 V)、LCD、USB接口和电机驱动电路等。Linux自带使用OV511采集芯片的摄像头驱动,市场上大部分CMOS摄像头采用中芯微电子公司ZC301P芯片,后者内置DSP硬件编解码器,采集延时大大缩短。
2 系统软件设计
  基于嵌入式Linux的应用已经遍布很多领域,如移动多媒体设备、手持设备、车载导航系统、机械控制等。它支持多种CPU,包括没有使用MMU的平台。Linux原本是桌面和服务器市场上比较成功的操作系统,由于其免费、开放源码以及良好的代码风格和结构,使它在很短的时间内被移植到各种嵌入式系统中。系统采用Linux操作系统,不但提高了系统的可靠性和开发效率,并且充分发挥了32位CPU的多任务潜力。Linux操作系统的配置包括引导程序、内核和文件系统三个方面。引导程序是操作系统运行之前的一段程序,用来完成初始化设备、建立内存空间的映射图,为操作系统内核准备正确的环境。操作系统采用Linux 2.4.18内核,开发模式采用宿主开发模式,在宿主机上编译内核及应用程序,然后通过网口下载到目标平台运行,通过超级终端调试信息。文件系统负责存储系统配置文件,系统外设驱动程序。在操作系统配置完成后,主要工作是编写驱动程序和应用程序。
2.1 摄像头驱动程序
  驱动程序是应用程序与硬件之间的一个中间软件层,在Linux中对设备驱动的访问也是以文件操作的方式实现。Video4linux是Linux中视频设备的内核驱动,只需在内核配置时静态加载即可。摄像头驱动加载过程为:在Linux Kernel Configuration对话框中,选择配置Multimedia device,设置Video For Linux为Y;点击Video For Linux,设置V4L information in proc file system为Y;回到Linux Kernel Configuration,选择USB support,设置USB OV511 Camera support为Y,然后保存退出,重新编译内核。ZC301摄像头的驱动采用静态加载的方式,具体步骤为:在/kerlnel/driver/usb下,解压驱动,打补丁,在该目录下新建spca5xx文件夹;编译内核,选中SPCA5XXX,执行make dep、make zlmage、make modules命令,在/kernel/driver/usb/spca5xx中产生3个.o文件;用新内核启动insmod的3个.o文件。
2.2 电机驱动程序
  步进电机是作为字符设备进行驱动的。Linux操作系统对字符设备的操作而言,驱动程序需要提供相关的几个操作,分别为open、read、write、ioctl等相关的函数入口点。在驱动程序的实现过程中需要定义这些文件相关的操作,填充进入file_operations结构中。ioctl提供用户程序对设备执行特定命令的方法,如设置设备驱动程序内部参数,控制设备操作特性等操作,调用成功返回非负值。由于对步进电机驱动程序没有相关的输入与输出,只需对I/O控制,驱动程序对于write操作和read操作仅需返回0,对于I/O控制在驱动程序中由ioctl函数实现。步进电机为四相步进电机,采用四相单、双八拍控制。步进电机转速和转向的控制通过改变输出端口高四位脉冲的顺序和频率实现。需要注意的是,由于用到了I/O端口,而在Linux中操作端口要用虚拟地址而非实际的物理地址,所以要修改内核代码。具体细节可参考相关文献[1,2]。
2.3 应用程序
  系统应用程序流程如图2所示。初始化后打开设备文件(摄像头,LCD,电机),查询和确认设备性能,设置捕获的图像的宽和高,设置色深,建立内存映射,读取图像数据,对图像进行处理,驱动电机,关闭设备。图像采集有两种方式:内存映射(mmap)和直接读取设备(read)[3,4]。前者将设备文件映射到内存,绕过I/O访问,使得读取速度更快,但是占用更多系统资源。考虑系统实时性,这里采用内存映射方式。

3 目标跟踪与控制
  由于嵌入式系统对功能、成本、处理能力、体积和可靠性均有严格要求,因此,对运动目标的跟踪,应根据具体的应用环境,选用合适的算法。常见的运动检测算法有帧间差分法、背景差分法和模板匹配法等。帧间差分法和背景差分法计算简单、实时处理效率高,但帧间差分法依赖于图像序列的选取间隔,不适合速度变化的运动跟踪;而背景差分法对场景变化敏感,不适合摄像头运动的情况;板板匹配方法适应性好,但是计算量较大[5,6]。考虑摄像头的图像采集速度、嵌入式处理器的处理能力和运动跟踪场合及速度等方面的要求,这里采用特征匹配的方法。处理过程主要包括运动检测、特征提取、目标定位与摄像机控制。流程如图3所示。


3.1 运动检测
  首先采用背景差分法,将当前图像和参考背景模型相减实现运动目标检测。采用这种方法是因为在运动物体进入监控范围前,摄像机不会发生运动,进入监控范围后,对差分图像直接进行处理,能够检测运动目标所在区域,根据运动区域进行目标特征提取,不需要运动目标的先验知识。常见的背景模型建立方法有两种:一种是以图像序列的平均值作为参考图像;另一种是假定像素服从某种分布模型,如高斯分布,通过一段时间训练获得其参数并不断更新其分布参数。这里采用第一种方法。检测阈值T如下:

其中f(i,j)为当前图像,g(i,j)为背景图像,m、n为图像的维数。当阈值大于T时认为有运动目标进入监视区域。实际环境中,受光线等因素影响,运动目标的阴影也会与运动目标一起被检出,出现“形影不离”的现象,常导致跟踪系统误判。此时,可将式(1)中的前景和背景的图像亮度值用图像色度值取代,可有效地消除阴影的影响[7]。实际应用时取得了较好的效果。
  差分运算初步检出目标后,还需要对图像进行处理,以方便后续的特征提取及目标识别。先对检出的差分图像进行分割,得到图像的二值图像。由于噪声的影响,得到的二值图像有很多的空洞和碎片,采用形态学的方法对图像进行腐蚀膨胀,可滤除噪声,得到较为清晰的结果。对于面积较小、不产生歧义的空洞干扰,可以不予考虑,只对面积较大的联通区域进行标记,以减少计算量。然后标记出最大面积的连通区域,即得到运动目标的所在区域。 原始图像、差分图像及预处理结果如图4所示。


3.2 特征提取
  不变矩是广泛应用的形状特征之一,一些基本的二维形状特征都与矩有直接的关系,被称为旋转、平移、尺度不变量。其具有稳定性好、易于实现、匹配效率高的特点。这里简单介绍不变矩的理论。对于非负整数p和q,二维数字图像f(x,y)在平面R2上的p+q原始矩、中心矩和归一化中心矩的算法如下:

式中,M和N为图像水平和垂直方向的维数,f(m,n)是图像在点(m,n)处的灰度值,为图像的重心坐标,


  利用归一化的二阶和三阶中心矩组合得到图像的7个不变矩,这7个不变矩对平移、旋转、尺度具有一定的适应性。选用前4个不变矩作为特征向量,然后保存特征向量作为识别规则。

  首先,在当前图像的灰度图像中,根据运动目标所在联通区域的坐标,计算运动目标的特征向量,然后,提取运动目标的颜色信息。
3.3 目标定位与摄像机控制
  提取运动目标的特征后,对新读取的每一帧图像转化为灰度图像,进行阈值分割、边缘提取、腐蚀膨胀处理后,对各联通单元进行标记。计算各联通单元的特征向量,与模板特征向量匹配度最高的即为运动目标区域。这里选择目标区域的重心定位。在复杂背景情况下,有时不能很好地提取运动目标的特征。当特征匹配失败时,可以结合图像的颜色信息,增加跟踪的稳定性。然后根据重心的坐标与图像中心坐标的位置,由步进电机调整摄像头的位姿使摄像头镜头对准目标。由重心的坐标和图像中心像素的坐标(X0,Y0)即可表示出运动目标偏离摄像机镜头中心的偏移量(x,y),根据偏移量方向和正负,建立控制规则库,调整电机转动的方向、速度和摄像机位姿。摄像机位姿调整分为水平、垂直两个方向。以水平方向为例介绍控制规则集:
  If x>=X1 then m=M1
  If x<-X1 then m=-M1
  If x>=X2 then m=M2
  If x<-X2 then m=-M2
  ……
  If |x|<=Xn then m=0
  其中,x表示水平方向偏移量的大小,m表示步进电机转动的脉冲数;X1、X2、…为常数,表示偏移量划分边界;M1、M2、…为常数,表示电机输出脉冲数量。相邻两帧的跟踪结果如图5所示。


  本文研究了基于ARM处理器的嵌入式跟踪系统,利用图像信息实现运动目标跟踪,算法简单有效;在速度和精度两方面作了折中,具有体积小、性价比高的特点,适合于嵌入式系统。嵌入式操作系统的植入提高了系统功能的可裁剪性和扩展性,使系统具有良好的开放性。该系统的设计方案已在仿生机器视觉系统中成功应用。


参考文献
[1] 田泽.嵌入式系统开发与应用[M].北京:北京航空航天大学出版社,2005.
[2] 赵敏,刘振兴.基于嵌入式Linux的步进电机驱动程序设计[J].微计算机信息,2008,13(051):113-114.
[3] 孟超,张曦煌.基于嵌入式系统的图像采集与传输设计[J].计算机工程与设计,2008,29(17):4415-4416.
[4] Video4 Linux User′s Manual.http:/www.v4l.com.cn.
[5] 杨淑莹.VC++图像处理程序设计[M].北京:清华大学出版社,2003.
[6] 邵文珅,黄爱民,韦庆.动态场景下运动目标跟踪方法研究[J].计算机仿真,2006,05(50):181-184.
[7] 毛晓波,谢晓芳,张晓林.消除运动物体阴影的最大色度差分检测法[J].电子技术应用,2007,33(1).

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306116;邮箱:aet@chinaaet.com。
Baidu
map