李克騰,武二永,張 樺
(杭州電子科技大學(xué)計(jì)算機(jī)學(xué)院,浙江杭州310018)
車牌識別是現(xiàn)代交通系統(tǒng)中關(guān)鍵環(huán)節(jié),而車牌定位又是車牌識別中關(guān)鍵步驟。目前,國內(nèi)大多數(shù)車牌識別基于PC機(jī)開發(fā),它具有體積大、功耗高、成本高等缺點(diǎn)[1]。嵌入式系統(tǒng)基本克服了上述問題。基于此,TI公司推出了Davinci系列ARM+DSP雙核處理器,使得ARM端可集中處理諸如圖像采集、通信及存儲等功能,而DSP端則主要完成復(fù)雜圖像處理算法。但ARM和DSP之間協(xié)同通信較為繁瑣,給系統(tǒng)運(yùn)行穩(wěn)定性帶來潛在隱患。為此,TI公司為客戶定制一套名為“Codec Engine”的通信機(jī)制,使得用戶不必關(guān)心DSP端具體實(shí)現(xiàn)過程,只需在ARM端Linux下進(jìn)行編譯、鏈接圖像處理代碼并在代碼中直接調(diào)用即可。
如圖1所示,Codec Engine是連接ARM和DSP的橋梁,是介于應(yīng)用層和信號處理層之間的通信接口模塊。對DSP端而言,需將圖像處理算法集成到符合Codec Engine規(guī)范的IALG[3]接口函數(shù)中,ARM端Linux程序可直接調(diào)用該接口函數(shù),其函數(shù)名、參數(shù)值則通過 VISA(Video、Image、Speech、Audio)API[4]傳遞到DSP端,DSP/BIOS操作系統(tǒng)通過Codec Engine直接查找并調(diào)用該函數(shù)。用戶只需封裝圖像處理算法到IALG接口函數(shù)中,并在Linux端修改相關(guān)編譯配置文件,直接完成移植工作,從而大大簡化了集成工作的復(fù)雜程度,無需關(guān)注ARM端應(yīng)用程序和DSP端圖像處理模塊的通信工作。ARM端通過VISA標(biāo)準(zhǔn)API接口函數(shù)初始化Codec Engine、調(diào)用用戶進(jìn)程完成對應(yīng)函數(shù)功能。
IALG接口的參數(shù)傳遞類型及數(shù)量一般要符合XDIAS(一個eXpressDSP兼容的算法即是一個實(shí)現(xiàn)IALG抽象接口的模塊)規(guī)范,輸入輸出參數(shù)通常封裝到XDM_BufDesc結(jié)構(gòu)體中[3]。對于用戶而言,在DSP端將圖像處理算法往往包含到DSP端的Codecs函數(shù)庫中,由Codec Engine負(fù)責(zé)管理,用戶無需干預(yù)。
圖1 Codec Engine軟件構(gòu)架圖
車牌定位的目的是從圖像中摳出車牌區(qū)域。常用的方法是基于車牌字符區(qū)域邊緣較多且集中這一特征,在垂直和水平方向統(tǒng)計(jì)邊緣累積圖而獲得。首先通過Sobel算子對灰度圖像進(jìn)行邊緣提?。?],然后利用垂直投影獲得N個備選切割帶,再對每個切割帶做水平投影,獲得Mi個備選車牌區(qū)域,i=1,…,N,最后通過車牌諸如長/寬比等的先驗(yàn)知識,啟發(fā)式篩選出最有可能車牌。
對于可能出現(xiàn)車牌切割帶,往往在水平方向具有較多的邊緣。因此,直接對邊緣圖像在y方向進(jìn)行垂直投影,再依峰值大小迭代尋找N個點(diǎn),然后根據(jù)經(jīng)驗(yàn)參數(shù)cy獲得備選切割帶。假設(shè)邊緣圖像為g(i,j),圖像寬度為w,高度為h,則垂直投影函數(shù)為:
假設(shè)第k個峰值為:
然后根據(jù)經(jīng)驗(yàn)切割帶因子cy獲得上下邊界yuk,ylk,cy取0.55:k
然后將該切割帶作為備選,同時將j屬于(yuk,ylk)內(nèi)的py(j)賦值為零,迭代進(jìn)行篩選出N個切割帶。然后對每個切割帶進(jìn)行水平方向(x方向)投影,投影后如圖3所示(第二幅圖橫軸為x軸,縱軸為y軸):
基于車牌邊框在水平方向存在較大梯度跳躍,對px(i)進(jìn)行梯度變換:
對px'(i)查找最大正、負(fù)梯度邊界xpm,xnm:
此后將px'(i),i屬于(xpm,xnm)中賦為零,然后循環(huán)得到M個車牌區(qū)域。
經(jīng)過垂直和水平投影,獲得N×M個備選車牌區(qū)域。但對于標(biāo)準(zhǔn)制式車牌[6],其高度、長寬比、水平投影峰值和面積等因素往往有一定規(guī)則。設(shè)計(jì)篩選因子為a1,a2,a3和a4,分別代表高度、字符邊緣最大強(qiáng)度、字符邊緣密集度和寬/高比例[7],如表1所示。代價函數(shù)C,最小的即為最終遴選車牌。
表1 篩選因子
算法實(shí)驗(yàn)平臺為合眾達(dá)公司的DVS-6446開發(fā)平臺,通過讀取實(shí)驗(yàn)室200幅車牌圖像作為測試依據(jù),分辨率為640×480,對處理后車牌區(qū)域進(jìn)行歸一化。車牌定位算法編寫完成后,定義為void Plate-Locate(unsigned char* pImg,usigned char* pPlate),其中pImg是原始灰度圖像指針,pPlate為返回的車牌圖像區(qū)域指針。
參考Codec Engine的示例代碼videnc_copy工程,算法移植步驟包括:
(1)修改配置文件。具體為修改package.bld配置文件,將PlateLocate.c文件加入到編譯文件列表中;
(2)封裝算法到符合IALG接口函數(shù)中。將PlateLocate函數(shù)嵌入到XDAS_Int32 VIDENCCOPY_TI_process(…,XDM_BufDesc*inBufs,XDM_BufDesc*outBufs,…)接口函數(shù)中,即將main函數(shù)替換為PlateLocate函數(shù),同時參數(shù)傳遞定義為。
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,運(yùn)行./codec_engine01_01_11/examples/codecs/makefile以檢查 XDIAS語法規(guī)則;運(yùn)行./codec_engine01_01_11/examples/server/makefile已編譯生成DSP server可執(zhí)行庫all.x64p文件;
(4)ARM端以encodedecode工程為參考,調(diào)用VIDENC_process(…)函數(shù),測試結(jié)果。
實(shí)驗(yàn)結(jié)果如圖2-4所示,未經(jīng)優(yōu)化,識別耗時9151ms,識別正確率為83.5%。
圖2 灰度變換
圖3 sobel邊緣處理
圖4 定位的車牌
該文提出了一種基于TI達(dá)芬奇DM6446 Codec Engine軟件構(gòu)架下車牌定位算法的研究,首先采用基于邊緣檢測的投影法進(jìn)行車牌定位得到多個候選車牌,其次采用了基于啟發(fā)式篩選的候選車牌算法,以提高車牌定位準(zhǔn)確率,最后把車牌定位函數(shù)移植到Codec Engine軟件構(gòu)架下運(yùn)行。實(shí)驗(yàn)結(jié)果表明在Codec Engine運(yùn)行的車牌定位算法能夠很好對輸入的圖像進(jìn)行處理,能夠很好的定位出車牌的位置,但運(yùn)行耗時相對較大,在優(yōu)化方面有待進(jìn)一步地改進(jìn)。
[1] 張引,潘云鶴.彩色汽車圖像牌照定位新方法[J].中國圖像圖形學(xué)報,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] 阮秋琦,阮字智.數(shù)字圖像處理[M].北京:電子工業(yè)出版社,2005:216-226.
[6] 吳煒,楊曉敏.一種邊緣檢測與掃描線相結(jié)合的車牌定位算法[J].電子技術(shù)應(yīng)用,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.