介绍了用数字信号处理器实现视频流控制处理功能的软硬件设计方案。重点论述了如何设计DSP的软件及外围硬件,完成IEEE1394设备自标识及数据传输的详细过程。同时还提出了一种用于运动目标检测的变加权背景恢复算法及其DSP实现方案。这种用DSP实现数字视觉算法的成功尝试,对于实现其他视觉功能具有一定的借鉴意义。
本文介绍了一种以DSP为核心、基于IEEE1394总线的图像实时采集处理系统的软硬件设计。此外还提出了一种易于用DSP实现且存储器资源占用率小的运动目标检测算法。据了解,目前国内外大多数的计算机视觉研究都是用计算机软件处理实现的,因此在实时性和成本方面受计算机平台的制约。本文讨论了一种计算机视觉系统的硬件平台设计方案,并在此平台上实现了运行目标检测。可以说,这是一次用DSP实现计算机视觉算法的成功尝试,对于其它算法的硬件实现有一定的借鉴意义。
图1 硬件系统框图
采用IEEE1394总线作为传输接口是实现实时图像采集的根本保证。IEEE1394是由国际电气和电子工程师协会(IEEE)制定的一种高速串行总线协议。1394总线具有以下优点:
支持热插拔和即插即用:
提供统一的通用接口,并且具有总线供电能力(每一端口的最大输出电流为1.5A,输出电压8~33Vdc);
·传输速率高100~400Mbps;
·不依赖计算机,支持1394设备间的点对点传输。
其中第四点是目前常用的USB2.0总线无法实现的,也正是这一优点使得1394不仅是一种计算机外设连接总线,更是多种消费类电子产品的连接方案。
图2 帧缓存访问次序
另外,为了实现数字视频图像的实时采集和处理,充分发挥1394总线的高速传输速率,笔者选用了TI公司的TMS320VC33数字信号处理器作为主控制器。这是一款高性能浮点DSP,它具有17ns的指令周期和60MIPS的处理能力。
下面将分别介绍这套DSP系统的工作原理,软、硬件设计以及运动目标检测算法的改进和实现。
系统组成及工作原理
本系统是为验证并实现各种计算机视觉算法而搭建的一个硬件平台,用五片512K×8bit的SRAM分别作为帧缓冲和DSP的扩展RAM。还有一片20万门的FPGA用作系统的逻辑控制及以后机器视觉算法的硬件实现。系统的结构框图如图1所示。
系统的工作原理如下:系统上电或复位后,DSP首先从FlashROM中自动装入代码并开始运行,等待1394电缆插入。当电缆插入后,DSP通过解析根节点发来的请求包发出对应的内容作为应答,直至根节点发现该设备。之后,只要根节点发出读数据请求,DSP就根据请求包的内容从帧缓冲RAM中取出 数据,通过1394链路层和物理层芯片将其送到1394总线上。
图像数据的采集、处理和传输三个步骤以流水线的方式,在同一时刻各掌握一片帧缓存RAM的访问权,并行工作。当各个步骤都完成后,在FPGA的控制下同时切换各片帧缓存的控制权,开始流水线的下一个周期。各个步骤对三片帧缓存RAM的控制次序如图2所示。
这种流水线式的电路结构实现了图像采集、图像处理、图像传输三个步骤并行工作,极大地提高了处理的连续性和实时性。
图3 DSP软件流程图
DSP硬件设计
DSP在本系统中的任务有三个:首先是通过链路层和物理层芯片与根节点通信,完成自标识过程;其二是处理采集好的一帧图像,并把它再存回帧缓存;其三是自标识完成后,响应根节点发来的数据读请求,从帧缓冲RAM中读出处理过重的图像数据并送到总线上。整个系统由一片TMS320VC33、一片20万门的 FPGA(EP20k200EBC356)、五片512KB高速SRAM(IS61LV5128AL)、一片Flash(AM29LV400B)、一片 1394链路层芯片(TSB12LV32)、一片1394物理层芯片(TSB41LV04a)以及DSP电源看门狗芯片(PS767D301)组成。其中 TMS320VC33作为主控制器与TSB12LV32的主控制器接口相连。FPGA在DSP的控制下向1394链路层芯片的DataMover端口发送数据。此外FPGA还有地址译码、时序调整以及帧缓存切换等功能。三片SRAM作为帧缓冲存,另外两片作为DSP的扩展RAM,每片RAM内存放一帧图像(300K字节),其访问时间为12ns,因此完全适合TMS320VC33以零等待方式访问。物理层芯片TSB12LV04a只与链路层芯片通信,与 DSP无关,它负责进行总线上的差分模拟信号与系统的数字信号之间的转换。Flash用来存放DSP代码,它经过地址译码直接与DSP相连。DSP复位后由BootLoader将代码从Flash加载到DSP片内RAM中开始运行。可以通过DSP的JTAG接口方便地进行Flash的在系统擦写。由于AM12LV400B的访问时间为70ns,DSP访问Flash时至少应加入5个等待周期。
DSP软件设计
DSP的软件开发是在TI公司提供的Code Composer(CC)环境一,结合DSP硬件仿真器完成。代码的开发根据实际情况使用C语言和汇编语言的混合编程。在实际设备自标识的过程中使用C语言,这是因为这个过程逻辑关系比较复杂,但只在总线复位初始化时执行一次,用C语言可以提高可读性,减小开发难度,同时也不会对系统的性能有太大影响。而在进行图像处理和响应数据读请求包时,则使用了汇编语言。原因是这些代码使用频繁,直接影响系统的速度。
响应1394总线的自标识过程是系统设计的难点,也是1394接口设计最重要的部分。DSP的响应必须符合IEEE1394a协议中规定的自标识步骤,图3描述了DSP的动作流程。
自标识过程实际上是根节点(主机)请求读取叶节点(设备)配置ROM的过程。可以执行事务的1394串行总线节点都应该实现配置ROM,它为配置和参数与设备相关的问题提供了一些必要的信息。例如,对于一个连接到计算机上的1394设备而言,设备中电后,计算机首先读取配置ROM中的内容,从而分辨出这是一个什么样的设备。配置ROM中包含的信息有:
·为识别本设备驱动程序所需要的信息;
·为识别诊断软件所必须的信息;
·为指定设备设计总线的各种性能所需要的信息;
·为指定可选的模块、节点以及元件特征和参数所需要的信息。
正常格式的配置ROM形成了一个树结构,它包括很多分支和叶子,这些分支和叶子都是由指针联系起来的,其中有限选项也有任务项。
DSP要做的就是把配置ROM的内容以异步读应答包的形式发出计算机,而配置ROM的内容是开发人员根据所开发的系统自已定义的。当计算机正确读完配置ROM的内容后,就会显示发现新硬件或自动装入相应的1394设备驱动程序。
所有的1394数据传输都是以包为单位。其中包头含此次传输的传输速率(Spd)、事务标签(tLable)、事务代码(tCode)、源节点ID、目的节点ID等信息。这些信息必须符合协议要求,例如一个读请求数据块应答包,传输速率为400Mbps,那么Spd=10、tCode=7,源节点ID和目的节点ID分别是请求包的目的节点ID和源节点ID,tLable和请求包的相等。
自标识完成后,DSP开始处理采集好的图像数据,同时以中断子程序的方式启动数据发送。由于本系统采用1394总线的异步传输方式,每次数据传输都由主机(PC)发起,所以DSP以中断的方式响应主机发来的读请求,每次中断服务中发送一个数据包。在采集、处理、传输三个步骤中,显然处理是最耗费时间的,为了确保这三个步骤都完成后再切换到流水线的下一个周期,中断子程序中还要判断是否一帧图像已经发完,如果已经发完一帧,则关闭中断,等到图像处理步骤完成后,帧缓存切换完毕再打开中断。
整个软件部分完成后,烧写Flash并实现程序的引导加载(Boot-Loader)也是重要的一步。TMS320VC33的引导加载功能是通过DSP复位后自动运行驻留在片内ROM的地址0x45处的一段代码实现的。这段代码可以根据复位时INT0~INT3引脚上的状态决定装载的源地址(只能是0x1000、 0x400000、0xFFF000或串口0),并将源地址处的代码转移到指定的片内RAM中,然后从指定的程序入口点开始运行。
帧间平均运行检测算法的改进与实现
运动目标检测跟踪是计算机视觉中十分重要的一个热门研究领域,近年来出现了许多新的算法。但可以归结为以下四大类:基于光流场分析的算法、基于主动轮廓的算法、基于编译模型的算法以及基于图像差分的方法。并三种算法与第四种方法相比,具有精度高、定位准并且能够得出运动参数的优点。但是算法的复杂性较高,目前难以在普通的硬件平台上实现实时处理。因此,图像差分方波被广泛用于实时运动检测系统。
在实际应用中差分图像的获得有两种途径:其一是利用相邻两帧之间的差来获得差分图像;其二是通过将当前帧和固定的背景帧相减来获得差分图像。第一种方法在应用中容易出现“空洞”现象,检测结果的大小与目标运动的速度有关,从而影响了动目标检测的精度;第二种方法,由于背景是固定的,那么若外界条件有较明显的变化,例如光照等条件发生变化时,当前的实际背景图像就会发生变化,从而获得的差分图像是不准确的,噪声比较大。故这种方法仅适用于背景条件不变或者是变化限制在一定范围内的情况。
本文针对背景和摄像机都静止这一特定应用场合,选用了基于背景消减的运动检测和跟踪算法。这种算法的关键在于背景重建,在此应用了基于帧间平均的背景重建方法,并在此基础上针对硬件可实现性和处理的实时性提出了改进。最后,为了克服背景消减算法噪声较大的先天不足,采用了形态学滤波的方法去处噪声。
帧间平均算法使用当前帧之间各帧的像素平均值作为当前背景的估计值,如下式所示:
从公式中可以看出,这种算法只需要在图像采集系统的基础上多添加一片帧存储器用来存储估计背景即可,因此对硬件资源要求低。另外,背景是随着n增加逐渐恢复的,所以背景过程并不影响图像处理结果的实时传输和显示。显然,n越大,背景恢复越真实,可以控制n的大小调整处理时间和处理效果之间的平衡。
然而,由于上面的公式中有除法运算,所以无论使用FPGA还是DSP来实现都有一定的困难。以DSP为例,对于本系统所用的TMS320C3x系列DSP来说,一次整数除法运算要用约100条指令,这显然对处理的实时性有很大的影响。
为了克服这一算法缺陷,提出了如下的变加权均值算法:
上式中,各帧取平均值并没有采用相同的加权,而是以2的整数幂2m作为步长,在每个步长内,对已估计出的背景都给予该步长内最大的加权值(2m-1) /2m,这比原算法中背景的加权值(n-1)/n更大,也就是说变加权算法在背景估计中列加依赖于已经估计出的背景,这有利于消除当前帧中噪声对背景估计的影响。在整个背景估计过程中,m截止来,步长也越大,同时已估计出的背景的权重也越大。同时可以看到,除数都变成了2的整数幂,可以用移位来实现,与原算法相比,运算效率提高了近100倍。然而,处理效果并未因此而受到损失,这是因为这种加权值的改变遵循这样一种事实:随着帧数的增加,估计出的背景的可信度越来越高,当前帧对背景的影响也越来越小,所以已估计出的背景在公式中所占的比重也应该越来越大。实验证明:m=6时,已经足可以估计出较为真实的背景了。
DSP的扩展RAM用来了存放已经估计出的背景,将当前帧与背景相减取绝对值,再进行二值化,就得到了运动目标的二值化图像。为了消除噪声的影响,最后使用一个7×7的菱形结构元素对图像进行形态学开运算。最终的结果再存回帧缓存。
图4是处理结构传回主机后,用VC实现的应用程序界面,其中左上角是在原始图像上添加的动目标检测结果,右上角是二值化的动目标,左下角是背景恢复图,右下角是是运动跳跃轨迹;图5是n=64时,恢复出的背景;图6是利用改进的变加权帧间平均算法得到的目标运动检测结果,其中较大的方框是形态学滤波前的检测结果,受到车灯倒影的影响 (如图中白色圆圈标示),检测结果精度很差,内部较小的方框则通过形态学滤波解决了这个问题。
经测试表明:本系统工作稳定,传输速率高(30fps@640×480),处理效果好,可扩展性强,是机器视觉算法硬件实现的一次成功尝试。但是目前的算法还有待改进,例如在保证实时性和硬件易实现性的前提下,大片的灯光倒影很难再用形态学滤波的方法消除。这是下一步要着重解决的问题。