基于Codec Engine下车牌定位方法研究
2011-09-04李克腾武二永
李克腾,武二永,张 桦
(杭州电子科技大学计算机学院,浙江杭州310018)
0 引言
车牌识别是现代交通系统中关键环节,而车牌定位又是车牌识别中关键步骤。目前,国内大多数车牌识别基于PC机开发,它具有体积大、功耗高、成本高等缺点[1]。嵌入式系统基本克服了上述问题。基于此,TI公司推出了Davinci系列ARM+DSP双核处理器,使得ARM端可集中处理诸如图像采集、通信及存储等功能,而DSP端则主要完成复杂图像处理算法。但ARM和DSP之间协同通信较为繁琐,给系统运行稳定性带来潜在隐患。为此,TI公司为客户定制一套名为“Codec Engine”的通信机制,使得用户不必关心DSP端具体实现过程,只需在ARM端Linux下进行编译、链接图像处理代码并在代码中直接调用即可。
1 Codec Engine算法植入架构
如图1所示,Codec Engine是连接ARM和DSP的桥梁,是介于应用层和信号处理层之间的通信接口模块。对DSP端而言,需将图像处理算法集成到符合Codec Engine规范的IALG[3]接口函数中,ARM端Linux程序可直接调用该接口函数,其函数名、参数值则通过 VISA(Video、Image、Speech、Audio)API[4]传递到DSP端,DSP/BIOS操作系统通过Codec Engine直接查找并调用该函数。用户只需封装图像处理算法到IALG接口函数中,并在Linux端修改相关编译配置文件,直接完成移植工作,从而大大简化了集成工作的复杂程度,无需关注ARM端应用程序和DSP端图像处理模块的通信工作。ARM端通过VISA标准API接口函数初始化Codec Engine、调用用户进程完成对应函数功能。
IALG接口的参数传递类型及数量一般要符合XDIAS(一个eXpressDSP兼容的算法即是一个实现IALG抽象接口的模块)规范,输入输出参数通常封装到XDM_BufDesc结构体中[3]。对于用户而言,在DSP端将图像处理算法往往包含到DSP端的Codecs函数库中,由Codec Engine负责管理,用户无需干预。
图1 Codec Engine软件构架图
2 车牌定位方法
车牌定位的目的是从图像中抠出车牌区域。常用的方法是基于车牌字符区域边缘较多且集中这一特征,在垂直和水平方向统计边缘累积图而获得。首先通过Sobel算子对灰度图像进行边缘提取[5],然后利用垂直投影获得N个备选切割带,再对每个切割带做水平投影,获得Mi个备选车牌区域,i=1,…,N,最后通过车牌诸如长/宽比等的先验知识,启发式筛选出最有可能车牌。
2.1 投影分割车牌
对于可能出现车牌切割带,往往在水平方向具有较多的边缘。因此,直接对边缘图像在y方向进行垂直投影,再依峰值大小迭代寻找N个点,然后根据经验参数cy获得备选切割带。假设边缘图像为g(i,j),图像宽度为w,高度为h,则垂直投影函数为:
假设第k个峰值为:
然后根据经验切割带因子cy获得上下边界yuk,ylk,cy取0.55:k
然后将该切割带作为备选,同时将j属于(yuk,ylk)内的py(j)赋值为零,迭代进行筛选出N个切割带。然后对每个切割带进行水平方向(x方向)投影,投影后如图3所示(第二幅图横轴为x轴,纵轴为y轴):
基于车牌边框在水平方向存在较大梯度跳跃,对px(i)进行梯度变换:
对px'(i)查找最大正、负梯度边界xpm,xnm:
此后将px'(i),i属于(xpm,xnm)中赋为零,然后循环得到M个车牌区域。
2.2 启发式筛选车牌
经过垂直和水平投影,获得N×M个备选车牌区域。但对于标准制式车牌[6],其高度、长宽比、水平投影峰值和面积等因素往往有一定规则。设计筛选因子为a1,a2,a3和a4,分别代表高度、字符边缘最大强度、字符边缘密集度和宽/高比例[7],如表1所示。代价函数C,最小的即为最终遴选车牌。
表1 筛选因子
3 实验研究
算法实验平台为合众达公司的DVS-6446开发平台,通过读取实验室200幅车牌图像作为测试依据,分辨率为640×480,对处理后车牌区域进行归一化。车牌定位算法编写完成后,定义为void Plate-Locate(unsigned char* pImg,usigned char* pPlate),其中pImg是原始灰度图像指针,pPlate为返回的车牌图像区域指针。
参考Codec Engine的示例代码videnc_copy工程,算法移植步骤包括:
(1)修改配置文件。具体为修改package.bld配置文件,将PlateLocate.c文件加入到编译文件列表中;
(2)封装算法到符合IALG接口函数中。将PlateLocate函数嵌入到XDAS_Int32 VIDENCCOPY_TI_process(…,XDM_BufDesc*inBufs,XDM_BufDesc*outBufs,…)接口函数中,即将main函数替换为PlateLocate函数,同时参数传递定义为。
inBufs->numBufs=1;inBufs->bufSizes=w*h;//w和h分别代表原始图像高度和宽度
inBufs[0]=pImg;outBufs->numBufs=1;outBufs-> bufSizes=w0*h0;//w0,h0 分别代表车牌图像宽度和高度outBufs[0]=pPlate;
(3)编译、链接DSP Server,运行./codec_engine01_01_11/examples/codecs/makefile以检查 XDIAS语法规则;运行./codec_engine01_01_11/examples/server/makefile已编译生成DSP server可执行库all.x64p文件;
(4)ARM端以encodedecode工程为参考,调用VIDENC_process(…)函数,测试结果。
实验结果如图2-4所示,未经优化,识别耗时9151ms,识别正确率为83.5%。
图2 灰度变换
图3 sobel边缘处理
图4 定位的车牌
4 结束语
该文提出了一种基于TI达芬奇DM6446 Codec Engine软件构架下车牌定位算法的研究,首先采用基于边缘检测的投影法进行车牌定位得到多个候选车牌,其次采用了基于启发式筛选的候选车牌算法,以提高车牌定位准确率,最后把车牌定位函数移植到Codec Engine软件构架下运行。实验结果表明在Codec Engine运行的车牌定位算法能够很好对输入的图像进行处理,能够很好的定位出车牌的位置,但运行耗时相对较大,在优化方面有待进一步地改进。
[1] 张引,潘云鹤.彩色汽车图像牌照定位新方法[J].中国图像图形学报,2001,6(4):374-377.
[2] 卓均飞,胡煜.基于边缘检测和投影法的车牌定位算法研究[J].科技通报,2009,26(3):439-441.
[3] Texas Instruments,Codec Engine Application Developer's Guide[R].Texas,TI:2006.
[4] Texas Instruments,TMS320DM6446 Digital Media System on-Chip[R].Texas,TI:2007.
[5] 阮秋琦,阮字智.数字图像处理[M].北京:电子工业出版社,2005:216-226.
[6] 吴炜,杨晓敏.一种边缘检测与扫描线相结合的车牌定位算法[J].电子技术应用,2005,(2):43-46.
[7] Hans A,Ron J.High performance license plate recognition system[J].IEEE Transaction on Pattern Analysis and Machine Intelligence,1998,7(9):132 -137.