APP下载

基于DM6446的视频车辆检测跟踪系统设计和实现

2012-06-25吴忻生何银强戚其丰徐凯春

电视技术 2012年7期
关键词:扫描线像素阈值

吴忻生,何银强,戚其丰,徐凯春

(华南理工大学,a.自动化科学与工程学院;b.精密电子制造装备教育部工程研究中心,广东 广州 510640)

随着社会经济发展,汽车数量急剧增加,为了提高道路通行能力和行车安全性,减少堵塞和污染,以加强车辆、道路、使用者之间联系,使交通运输服务和管理智能化,交通流运行于最佳状态的智能交通(ITS)成为发展的重点,而由视频图像中获取车辆和道路信息的车辆检测系统是智能交通的重要组成部分和基础[1]。通过架设分布式智能监控设备,将视频信号在前端自动分析处理,将有价值的信息(如车速、车流量、车种类、道路密度、交通事故)通过网络传输到交管中心用于调度和决策。因此,基于视频图像的车辆检测跟踪嵌入式系统具有重要的研究意义和实际价值。

本文在TI推出的双核TMS320DM6446(简称DM6446)达芬奇嵌入式平台上,设计了道路车辆检测跟踪系统,首先最优双阈值对图像进行阈值分割,同时与边缘检测结果融合。针对车窗进行快速填充并提取图像Blob信息,进行跟踪。对算法进行移植、优化,最终实现道路交通信息的分布式采集。

1 系统总体结构

1.1 硬件结构

DM6446[2]是一款利用DaVinci技术面向视频和图像处理的高性能芯片,采用双核心架构,提供了高性能的TMS320C64x+DSP内核和精简指令集(RISC)技术的32位ARM926EJ-S核心。除此之外,还拥有视频/矩阵协处理器,视频处理子系统,以及其他丰富的设备和接口等[1]。

DM6446提供了VPSS视频处理子系统,包括视频处理前段(VPFE)和视频处理后端(VPBE),前者由CCD控制器、预览器、缩放、自动曝光白平衡、柱状图等模块组成,后者由OSD模块和视频编码器组成,分别用于外部图像输入设备和视频输出设备。

1.2 软件结构

TI的达芬奇参考软件框架[2]分为应用层、信号处理层和I/O层。应用层属于ARM一侧,提供了定制的Montavista Linux,应用工程师在该层可以利用所有Linux资源针对客户所需构建和开发各种应用软件。信号处理层通常都运行在DSP一侧负责信号处理,包括音视频编解码等codec算法库、Engine Server、实时操作系统DSP/BIOS以及和ARM通信的模块,算法工程师在该层创建各种符合xDM标准的Codec算法、构建Engine Server、对内存和DSP/BIOS进行管理配置。I/O层是针对DaVinci外设模块的驱动程序集合,驱动开发者在该层可根据用户需求重新构建内核或者更新驱动程序。应用层通过Codec Engine的VISA接口来调用DSP侧的算法,通过EPSI接口来访问和操作DaVinci的外设。

2 车辆检测、跟踪算法

DSP端负责图像处理算法实现,考虑到硬件性能有限,在最大限度提高准确率前提下设计了一套简单有效的车辆检测跟踪算法。由DSP端从共享内存中读取图像帧,首先进行格式转换,提取Y分量,即获取视频灰度图。对图像前50帧用叠加法获得几乎没有车的初始背景,利用背景帧和新进前景帧进行边缘检测和最优双阈值,然后进行图像融合和二值化得到车辆初步的Blob图像,再经过形态学处理,用改进的快速Floodfill算法,得到各个Blob的信息,如位置、大小、颜色等,根据Blob信息对于粘连和半遮挡的情况进行识别,然后进行跟踪,最后参考跟踪结果进行背景更新。算法流程图见图1。

图1 车辆检测跟踪算法流程图

2.1 最优双阈值分割和边缘检测融合的运动区域检测

针对前景图像与背景图像相减可能出现正负的情况,本文根据文献[3],采用双阈值分割,精简了文献[3]的中最优评价函数,由于该步骤只需得到大概的运动区域即可,文献[3]的细分割也是没有必要的。设定双阈值阈值-=γ为定值。当γ为定值时,上下移动如果能够尽可能消除背景像素,也就是分割出的前景像素最少,则和为最优阈值,得到的分割图像二值化,由下式确定

式中:Mt(ω),It(ω),Bt(ω)分别表示阈值分割后图像、新进图像、背景图像的ω像素点。

同时,由于阈值总是在一定范围变化,只需针对阈值中心两边迭代计算评价函数,求得评价函数最小时的阈值即为最优阈值,极大地减少了运算量。

考虑到图像中边缘信息,尤其是车辆的边缘信息不容易受阈值分割等其他因素的影响,对新进图像同时用Sobel/Canny算子进行边缘检测,膨胀之后与上面的阈值分割图像进行融合,能得到更多的车辆信息。最后对融合后的图像进行腐蚀和膨胀,消除干扰点,填充较小的孔洞。

2.2 快速区域填充算法

当车体某些部分与地面颜色接近时,阈值分割方法难以将两者分割,表现在Blob图中为孔洞,尤其车窗部分,孔洞较大,难以用膨胀腐蚀有效解决,本文采用改进的Floodfill即漫水填充算法来对孔洞进行填充。

Floodfill用来从上面得到的运动区域图像中获取Blob的四顶点坐标,从而获得Blob的大小,位置等信息。Floodfill是区域填充[4]的一种。其实质是扫描线种子填充,在指定颜色(灰度值)的连通区域放置种子,通过线扫描的方式,首先填充当前扫描线上的位于给定区域内的一区段,然后确定与这一区段相邻的上下两条扫描线上位于该区段内是否存在需要填充的新区段,如果存在,则依次把它们保存起来。反复这个过程,直到所保存的各区段都填上指定的颜色(灰度值)。

扫描线种子填充算法的基本思想是建立一个存放每条扫描线各填充区段右端点的堆栈,最初把种子像素压入堆栈,然后重复以下4步操作直到栈空为止。

1)从堆栈顶部弹出种子像素。

2)如果种子像素尚未填充,则:

(1)扫描并填充种子所在区段,找出左右边界端点xleft和xright;

(2)检查相邻的上扫描线区间[xleft,xright]内,是否存在需要填充的新区段,如果存在,则把每个新区段在[xleft,xright]内的最右边的像素作为新的种子像素依次压入堆栈;

(3)检查相邻的下扫描线区间[xleft,xright]内,是否存在需要填充的新区段,如果存在的话,则把每个新区段在[xleft,xright]内的最右边的像素作为新的种子像素依次压入堆栈。

本文对经典的Floodfill进行了如下改进:

1)传统的Floodfill对每行扫描存在重复,有时甚至为3次。通过建立新的结构体,记录当前种子(记为子种子)的坐标,当前种子所在扫描线的左右端点坐标,搜索进行的方向(如向上搜索或向下搜索),先于当前的扫描线左右端点坐标,以及种子坐标(记为父种子)。通过判断当前子扫描线与父扫描线间的位置关系以及区间端点的坐标大小关系,减少了不必要的重复扫描。

2)在搜索的同时进行填充并返回左右端点坐标,减少对像素点的颜色(灰度值)的重复判断。

3)通过链表来代替堆栈数组。

总之,能最大程度地减少扫描回溯次数,减少对像素点颜色(灰度值)的重复判断,减少对栈的访问和递归时间。

2.3 车辆跟踪

跟踪问题实质是特征匹配和寻优的过程[5],车辆跟踪较其他多目标跟踪又有了一定的约束,如检测单向多车道时,只考虑车辆沿一个方向运动,出现车辆轨迹交叉的几率较小,但又增加了遮挡和粘连的情况,需要重点考虑。

1)特征点的确立

首先通过Blob的大小以及在图像中所处的位置(与摄像头的远近),将一部分不符合该约束的Blob剔除。再将Blob的中心点、面积、长宽作为该Blob的特征点。同时,将Blob与新进的彩色图像进行模板运算,获取Blob中关键几点的颜色值,作为该Blob的特征点。用某一帧图像检测结果作为初始值,将Blob特征点、帧号存入数组,具体记录表格见表1。

表1 记录车辆Blob特征的表格

2)匹配和寻优

首先,通过Blob的的长宽比,Blob面积/外接矩形面积,判断车辆的粘连/遮挡情况,并对粘连/遮挡Blob进行跟踪,在视线范围内若一直存在粘连/遮挡则视为两辆车或多辆;若分离,则将Blob特征库中该Blob信息拆分成2个Blob,并进行跟踪。车辆跟踪的特征匹配流程图如图2所示。

图2 车辆跟踪的特征匹配流程图

对于新进的车辆Blob,通过特征点匹配,若匹配值低于一定阈值则视为新车。在视野内针对每帧图像内的车辆Blob与Blob特征库进行特征搜索匹配,概率最大者为跟踪到的车辆,否则概率低于一定阈值视为新车,当车辆中心点坐标超过一定范围视为车辆开出监控视野。

同时,将Blob特征库中每个Blob特征赋予一定的权重,针对车辆Blob是由远及近,对于跟踪到的车辆,不断加强该特征的权证。

2.4 背景更新

背景更新有很多种方法,如相邻帧差法、平均帧法、背景建模等方法。本文的背景更新是建立在初始背景和车辆跟踪结果的基础之上,采用可变更新因子的加权平均帧法。首先,对于跟踪到的车辆,其所在Blob区域不作更新,即α=0。除此之外,其他区域采用可变更新因子的平均帧法,更新因子由t时刻进来的图像与t-1时刻的背景的相似度确定,相似度越高,更新因子越大,更新速度越快。考虑到系统的计算能力,相似度简化定义为t时刻进来的图像与t-1时刻的背景的灰度值之差

3 DM6446移植及代码优化策略

受DSP性能的影响,将基于X86平台的VC++程序移植到DM6446嵌入式系统,需要重新建立算法验证的程序框架和测试环境,以此来适应新平台。

首先是建立DM6446的开发运行环境,安装DVSDK工具链;建立视频处理框架,如视频图像采集、图像处理算法后显示。然后,提取原算法相关的代码,配置好图像处理库的调用,修改数据类型、内存分配方式等。最后,通过共享内存的方式,ARM和DSP端之间的数据通信,将DSP端处理结构传递至ARM端[6]。

由于DM6446平台在性能和架构方面稍异于X86平台,尤其是DSP端,为了发挥DSP的性能,需要有针对性地对代码进行优化,下面主要从编译器选项、C语言代码以及库函数等使用方面进行介绍。

1)C代码级优化

主要是从C语言的编写风格上进行优化,主要有减少乘法/除法的出现、函数参数传递优化、经常使用的小函数用内联/宏方式、查表优化(空间与时间权衡)、条件判断的优化、循环体展开优化等。

2)图像处理库函数

TI C64x+IMGLIB图像库[7]提供了优化过的图像处理函数,主要四大类,分别是图像分析、图像滤波、图像压缩/解压、底层操作函数(如图像的加减与或非等)。利用里面的腐蚀膨胀、中值滤波、阈值分割、边缘检测等函数能极大地加快系统速度。

3)内联函数的使用

C64x编译器提供了许多专门的内联函数[8],直接映射为相应的嵌入式的汇编指令,其调用和一般的函数相同,名称前用下划线作标识。内联函数主要包括运算指令与数据打包指令,前者主要通过一条指令即可完成多路数据的并行计算,如_add4(),_avgu4(),_cmpeq4()等;后者主要快速地完成对内存的读写,一条指令可以完成读写32 位的数据,如_mem8(),_packl4()等。

4)运算库的使用

The C62x/64x FastRTS Library:由于DM6446是定点DSP,通常情况下浮点运算调用此浮点运算库中的函数来实现,该库针对C语言编程者优化,应用于对速度要求很高的实时运算,提供了单精度和双精度的数学运算函数,如_mpyf()和_mpy()分别表示单、双精度的乘法运算。

5)编译器优化选项

C64x编译器提供了不同等级和种类的优化选项,可以根据实际情况,合理搭配优化选项,可以改善代码循环性能,实现软件流水操作,提高代码的并行性。

6)其他优化方法

主要有CACHE优化、EDMA的使用、汇编(线性汇编)优化等,在此不一一介绍。

4 实验结果与分析

本文算法已成功移植到DM6446,实际运行效果满足车辆检测跟踪的实时性和稳健性,同时具有很高的准确性。实验分两部分,包括在PC机上和DM6446平台上运行,两者都是以平均25 f/s的速度,处理大小为320×240像素的视频图像。图3为PC机上运行效果图。其中图3a为实时背景更新图;图3b为运动区域检测结果,通过本文的分割方法和快速Floodfill填充算法,能准确完整地检测出运动车辆;图3c为检测结果,对检测出的车辆用色框圈出;图3d为跟踪结果,每个Blob块上的数字表示其跟踪号,同为车辆计数值;图3e和图3f为粘连车辆的检测和跟踪,系统自动识别粘连车辆并进行跟踪,并计为两辆。图4为DM6446嵌入式平台与性能效果图,通过移植和优化,全速运行,满足实时性要求。

5 小结

本文适应智能交通对车辆检测的需求,提出了一套简单有效的视频检测跟踪方法,同时将算法移植到DM6446双核的嵌入式平台,对移植方法和优化方法进行了描述。实际运行表明,本系统的实时性、准确性、稳健性均能满足实际需要,方便部署,有效地实现道路车辆的监控和调度。同时,本系统所采用的方法和思路也可为其他的基于视频的安防、公共安全、人流检测等分布式智能监控系统借鉴。由于篇幅和时间所限,本文暂未对雨雪、夜间等环境下车辆检测问题进行探讨,暂未论述将检测结果和图像进行远程传输的问题,这些也是下一步工作的重点。

[1]DICKMANNS E.The development of machine vision for road vehicles in the last decade[C]//Proc.IEEE Intelligent Vehicle Symposium,2002.[S.l.]:IEEE Press,2002:268-281.

[2]Texas Instruments.TMS320DM6446 digital media system on-chip[EB/OL].[2011-06-20].http://www.ti.com/cn/litv/pdf/sprs283h.

[3]吴忻生,邓军,戚其丰.基于最优阈值和随机标号法的多车辆分割[J].公路交通科技,2011,28(3):125-132.

[4]孙家广,杨长贵.计算机图形学[M].3版.北京:清华大学出版社,1999.

[5]王文龙,李清泉.基于蒙特卡罗算法的车辆跟踪方法[J].测绘学报,2011,40(2):200-203.

[6]鲁达.基于DM6446平台的智能视频监控关键算法研究与实现[D].上海:上海交通大学,2009.

[7]Texas Instruments.TMS320C64x+DSP image/video processing library(v2.0.1)programmer's guide[EB/OL].[2011-06-20].http://www.ti.com/cn/litv/pdf/spruf30a.

[8]Texas Instruments.TMS320C6000 CPU and instruction set[EB/OL].[2011-06-20].http://www.ti.com/cn/litv/pdf/spru189.

猜你喜欢

扫描线像素阈值
像素前线之“幻影”2000
一种基于线扫描的受损一维条形码识别方法
小波阈值去噪在深小孔钻削声发射信号处理中的应用
“像素”仙人掌
基于自适应阈值和连通域的隧道裂缝提取
基于扫描线模型的机载激光点云滤波算法
ÉVOLUTIONDIGAE Style de vie tactile
比值遥感蚀变信息提取及阈值确定(插图)
室内表面平均氡析出率阈值探讨
扫描线点云数据的曲面重构技术研究