吳忻生,何銀強(qiáng),戚其豐,徐凱春
(華南理工大學(xué),a.自動(dòng)化科學(xué)與工程學(xué)院;b.精密電子制造裝備教育部工程研究中心,廣東 廣州 510640)
隨著社會(huì)經(jīng)濟(jì)發(fā)展,汽車數(shù)量急劇增加,為了提高道路通行能力和行車安全性,減少堵塞和污染,以加強(qiáng)車輛、道路、使用者之間聯(lián)系,使交通運(yùn)輸服務(wù)和管理智能化,交通流運(yùn)行于最佳狀態(tài)的智能交通(ITS)成為發(fā)展的重點(diǎn),而由視頻圖像中獲取車輛和道路信息的車輛檢測(cè)系統(tǒng)是智能交通的重要組成部分和基礎(chǔ)[1]。通過架設(shè)分布式智能監(jiān)控設(shè)備,將視頻信號(hào)在前端自動(dòng)分析處理,將有價(jià)值的信息(如車速、車流量、車種類、道路密度、交通事故)通過網(wǎng)絡(luò)傳輸?shù)浇还苤行挠糜谡{(diào)度和決策。因此,基于視頻圖像的車輛檢測(cè)跟蹤嵌入式系統(tǒng)具有重要的研究意義和實(shí)際價(jià)值。
本文在TI推出的雙核TMS320DM6446(簡(jiǎn)稱DM6446)達(dá)芬奇嵌入式平臺(tái)上,設(shè)計(jì)了道路車輛檢測(cè)跟蹤系統(tǒng),首先最優(yōu)雙閾值對(duì)圖像進(jìn)行閾值分割,同時(shí)與邊緣檢測(cè)結(jié)果融合。針對(duì)車窗進(jìn)行快速填充并提取圖像Blob信息,進(jìn)行跟蹤。對(duì)算法進(jìn)行移植、優(yōu)化,最終實(shí)現(xiàn)道路交通信息的分布式采集。
DM6446[2]是一款利用DaVinci技術(shù)面向視頻和圖像處理的高性能芯片,采用雙核心架構(gòu),提供了高性能的TMS320C64x+DSP內(nèi)核和精簡(jiǎn)指令集(RISC)技術(shù)的32位ARM926EJ-S核心。除此之外,還擁有視頻/矩陣協(xié)處理器,視頻處理子系統(tǒng),以及其他豐富的設(shè)備和接口等[1]。
DM6446提供了VPSS視頻處理子系統(tǒng),包括視頻處理前段(VPFE)和視頻處理后端(VPBE),前者由CCD控制器、預(yù)覽器、縮放、自動(dòng)曝光白平衡、柱狀圖等模塊組成,后者由OSD模塊和視頻編碼器組成,分別用于外部圖像輸入設(shè)備和視頻輸出設(shè)備。
TI的達(dá)芬奇參考軟件框架[2]分為應(yīng)用層、信號(hào)處理層和I/O層。應(yīng)用層屬于ARM一側(cè),提供了定制的Montavista Linux,應(yīng)用工程師在該層可以利用所有Linux資源針對(duì)客戶所需構(gòu)建和開發(fā)各種應(yīng)用軟件。信號(hào)處理層通常都運(yùn)行在DSP一側(cè)負(fù)責(zé)信號(hào)處理,包括音視頻編解碼等codec算法庫(kù)、Engine Server、實(shí)時(shí)操作系統(tǒng)DSP/BIOS以及和ARM通信的模塊,算法工程師在該層創(chuàng)建各種符合xDM標(biāo)準(zhǔn)的Codec算法、構(gòu)建Engine Server、對(duì)內(nèi)存和DSP/BIOS進(jìn)行管理配置。I/O層是針對(duì)DaVinci外設(shè)模塊的驅(qū)動(dòng)程序集合,驅(qū)動(dòng)開發(fā)者在該層可根據(jù)用戶需求重新構(gòu)建內(nèi)核或者更新驅(qū)動(dòng)程序。應(yīng)用層通過Codec Engine的VISA接口來(lái)調(diào)用DSP側(cè)的算法,通過EPSI接口來(lái)訪問和操作DaVinci的外設(shè)。
DSP端負(fù)責(zé)圖像處理算法實(shí)現(xiàn),考慮到硬件性能有限,在最大限度提高準(zhǔn)確率前提下設(shè)計(jì)了一套簡(jiǎn)單有效的車輛檢測(cè)跟蹤算法。由DSP端從共享內(nèi)存中讀取圖像幀,首先進(jìn)行格式轉(zhuǎn)換,提取Y分量,即獲取視頻灰度圖。對(duì)圖像前50幀用疊加法獲得幾乎沒有車的初始背景,利用背景幀和新進(jìn)前景幀進(jìn)行邊緣檢測(cè)和最優(yōu)雙閾值,然后進(jìn)行圖像融合和二值化得到車輛初步的Blob圖像,再經(jīng)過形態(tài)學(xué)處理,用改進(jìn)的快速Floodfill算法,得到各個(gè)Blob的信息,如位置、大小、顏色等,根據(jù)Blob信息對(duì)于粘連和半遮擋的情況進(jìn)行識(shí)別,然后進(jìn)行跟蹤,最后參考跟蹤結(jié)果進(jìn)行背景更新。算法流程圖見圖1。
圖1 車輛檢測(cè)跟蹤算法流程圖
針對(duì)前景圖像與背景圖像相減可能出現(xiàn)正負(fù)的情況,本文根據(jù)文獻(xiàn)[3],采用雙閾值分割,精簡(jiǎn)了文獻(xiàn)[3]的中最優(yōu)評(píng)價(jià)函數(shù),由于該步驟只需得到大概的運(yùn)動(dòng)區(qū)域即可,文獻(xiàn)[3]的細(xì)分割也是沒有必要的。設(shè)定雙閾值閾值-=γ為定值。當(dāng)γ為定值時(shí),上下移動(dòng)如果能夠盡可能消除背景像素,也就是分割出的前景像素最少,則和為最優(yōu)閾值,得到的分割圖像二值化,由下式確定
式中:Mt(ω),It(ω),Bt(ω)分別表示閾值分割后圖像、新進(jìn)圖像、背景圖像的ω像素點(diǎn)。
同時(shí),由于閾值總是在一定范圍變化,只需針對(duì)閾值中心兩邊迭代計(jì)算評(píng)價(jià)函數(shù),求得評(píng)價(jià)函數(shù)最小時(shí)的閾值即為最優(yōu)閾值,極大地減少了運(yùn)算量。
考慮到圖像中邊緣信息,尤其是車輛的邊緣信息不容易受閾值分割等其他因素的影響,對(duì)新進(jìn)圖像同時(shí)用Sobel/Canny算子進(jìn)行邊緣檢測(cè),膨脹之后與上面的閾值分割圖像進(jìn)行融合,能得到更多的車輛信息。最后對(duì)融合后的圖像進(jìn)行腐蝕和膨脹,消除干擾點(diǎn),填充較小的孔洞。
當(dāng)車體某些部分與地面顏色接近時(shí),閾值分割方法難以將兩者分割,表現(xiàn)在Blob圖中為孔洞,尤其車窗部分,孔洞較大,難以用膨脹腐蝕有效解決,本文采用改進(jìn)的Floodfill即漫水填充算法來(lái)對(duì)孔洞進(jìn)行填充。
Floodfill用來(lái)從上面得到的運(yùn)動(dòng)區(qū)域圖像中獲取Blob的四頂點(diǎn)坐標(biāo),從而獲得Blob的大小,位置等信息。Floodfill是區(qū)域填充[4]的一種。其實(shí)質(zhì)是掃描線種子填充,在指定顏色(灰度值)的連通區(qū)域放置種子,通過線掃描的方式,首先填充當(dāng)前掃描線上的位于給定區(qū)域內(nèi)的一區(qū)段,然后確定與這一區(qū)段相鄰的上下兩條掃描線上位于該區(qū)段內(nèi)是否存在需要填充的新區(qū)段,如果存在,則依次把它們保存起來(lái)。反復(fù)這個(gè)過程,直到所保存的各區(qū)段都填上指定的顏色(灰度值)。
掃描線種子填充算法的基本思想是建立一個(gè)存放每條掃描線各填充區(qū)段右端點(diǎn)的堆棧,最初把種子像素壓入堆棧,然后重復(fù)以下4步操作直到棧空為止。
1)從堆棧頂部彈出種子像素。
2)如果種子像素尚未填充,則:
(1)掃描并填充種子所在區(qū)段,找出左右邊界端點(diǎn)xleft和xright;
(2)檢查相鄰的上掃描線區(qū)間[xleft,xright]內(nèi),是否存在需要填充的新區(qū)段,如果存在,則把每個(gè)新區(qū)段在[xleft,xright]內(nèi)的最右邊的像素作為新的種子像素依次壓入堆棧;
(3)檢查相鄰的下掃描線區(qū)間[xleft,xright]內(nèi),是否存在需要填充的新區(qū)段,如果存在的話,則把每個(gè)新區(qū)段在[xleft,xright]內(nèi)的最右邊的像素作為新的種子像素依次壓入堆棧。
本文對(duì)經(jīng)典的Floodfill進(jìn)行了如下改進(jìn):
1)傳統(tǒng)的Floodfill對(duì)每行掃描存在重復(fù),有時(shí)甚至為3次。通過建立新的結(jié)構(gòu)體,記錄當(dāng)前種子(記為子種子)的坐標(biāo),當(dāng)前種子所在掃描線的左右端點(diǎn)坐標(biāo),搜索進(jìn)行的方向(如向上搜索或向下搜索),先于當(dāng)前的掃描線左右端點(diǎn)坐標(biāo),以及種子坐標(biāo)(記為父種子)。通過判斷當(dāng)前子掃描線與父掃描線間的位置關(guān)系以及區(qū)間端點(diǎn)的坐標(biāo)大小關(guān)系,減少了不必要的重復(fù)掃描。
2)在搜索的同時(shí)進(jìn)行填充并返回左右端點(diǎn)坐標(biāo),減少對(duì)像素點(diǎn)的顏色(灰度值)的重復(fù)判斷。
3)通過鏈表來(lái)代替堆棧數(shù)組。
總之,能最大程度地減少掃描回溯次數(shù),減少對(duì)像素點(diǎn)顏色(灰度值)的重復(fù)判斷,減少對(duì)棧的訪問和遞歸時(shí)間。
跟蹤問題實(shí)質(zhì)是特征匹配和尋優(yōu)的過程[5],車輛跟蹤較其他多目標(biāo)跟蹤又有了一定的約束,如檢測(cè)單向多車道時(shí),只考慮車輛沿一個(gè)方向運(yùn)動(dòng),出現(xiàn)車輛軌跡交叉的幾率較小,但又增加了遮擋和粘連的情況,需要重點(diǎn)考慮。
1)特征點(diǎn)的確立
首先通過Blob的大小以及在圖像中所處的位置(與攝像頭的遠(yuǎn)近),將一部分不符合該約束的Blob剔除。再將Blob的中心點(diǎn)、面積、長(zhǎng)寬作為該Blob的特征點(diǎn)。同時(shí),將Blob與新進(jìn)的彩色圖像進(jìn)行模板運(yùn)算,獲取Blob中關(guān)鍵幾點(diǎn)的顏色值,作為該Blob的特征點(diǎn)。用某一幀圖像檢測(cè)結(jié)果作為初始值,將Blob特征點(diǎn)、幀號(hào)存入數(shù)組,具體記錄表格見表1。
表1 記錄車輛Blob特征的表格
2)匹配和尋優(yōu)
首先,通過Blob的的長(zhǎng)寬比,Blob面積/外接矩形面積,判斷車輛的粘連/遮擋情況,并對(duì)粘連/遮擋Blob進(jìn)行跟蹤,在視線范圍內(nèi)若一直存在粘連/遮擋則視為兩輛車或多輛;若分離,則將Blob特征庫(kù)中該Blob信息拆分成2個(gè)Blob,并進(jìn)行跟蹤。車輛跟蹤的特征匹配流程圖如圖2所示。
圖2 車輛跟蹤的特征匹配流程圖
對(duì)于新進(jìn)的車輛Blob,通過特征點(diǎn)匹配,若匹配值低于一定閾值則視為新車。在視野內(nèi)針對(duì)每幀圖像內(nèi)的車輛Blob與Blob特征庫(kù)進(jìn)行特征搜索匹配,概率最大者為跟蹤到的車輛,否則概率低于一定閾值視為新車,當(dāng)車輛中心點(diǎn)坐標(biāo)超過一定范圍視為車輛開出監(jiān)控視野。
同時(shí),將Blob特征庫(kù)中每個(gè)Blob特征賦予一定的權(quán)重,針對(duì)車輛Blob是由遠(yuǎn)及近,對(duì)于跟蹤到的車輛,不斷加強(qiáng)該特征的權(quán)證。
背景更新有很多種方法,如相鄰幀差法、平均幀法、背景建模等方法。本文的背景更新是建立在初始背景和車輛跟蹤結(jié)果的基礎(chǔ)之上,采用可變更新因子的加權(quán)平均幀法。首先,對(duì)于跟蹤到的車輛,其所在Blob區(qū)域不作更新,即α=0。除此之外,其他區(qū)域采用可變更新因子的平均幀法,更新因子由t時(shí)刻進(jìn)來(lái)的圖像與t-1時(shí)刻的背景的相似度確定,相似度越高,更新因子越大,更新速度越快??紤]到系統(tǒng)的計(jì)算能力,相似度簡(jiǎn)化定義為t時(shí)刻進(jìn)來(lái)的圖像與t-1時(shí)刻的背景的灰度值之差
受DSP性能的影響,將基于X86平臺(tái)的VC++程序移植到DM6446嵌入式系統(tǒng),需要重新建立算法驗(yàn)證的程序框架和測(cè)試環(huán)境,以此來(lái)適應(yīng)新平臺(tái)。
首先是建立DM6446的開發(fā)運(yùn)行環(huán)境,安裝DVSDK工具鏈;建立視頻處理框架,如視頻圖像采集、圖像處理算法后顯示。然后,提取原算法相關(guān)的代碼,配置好圖像處理庫(kù)的調(diào)用,修改數(shù)據(jù)類型、內(nèi)存分配方式等。最后,通過共享內(nèi)存的方式,ARM和DSP端之間的數(shù)據(jù)通信,將DSP端處理結(jié)構(gòu)傳遞至ARM端[6]。
由于DM6446平臺(tái)在性能和架構(gòu)方面稍異于X86平臺(tái),尤其是DSP端,為了發(fā)揮DSP的性能,需要有針對(duì)性地對(duì)代碼進(jìn)行優(yōu)化,下面主要從編譯器選項(xiàng)、C語(yǔ)言代碼以及庫(kù)函數(shù)等使用方面進(jìn)行介紹。
1)C代碼級(jí)優(yōu)化
主要是從C語(yǔ)言的編寫風(fēng)格上進(jìn)行優(yōu)化,主要有減少乘法/除法的出現(xiàn)、函數(shù)參數(shù)傳遞優(yōu)化、經(jīng)常使用的小函數(shù)用內(nèi)聯(lián)/宏方式、查表優(yōu)化(空間與時(shí)間權(quán)衡)、條件判斷的優(yōu)化、循環(huán)體展開優(yōu)化等。
2)圖像處理庫(kù)函數(shù)
TI C64x+IMGLIB圖像庫(kù)[7]提供了優(yōu)化過的圖像處理函數(shù),主要四大類,分別是圖像分析、圖像濾波、圖像壓縮/解壓、底層操作函數(shù)(如圖像的加減與或非等)。利用里面的腐蝕膨脹、中值濾波、閾值分割、邊緣檢測(cè)等函數(shù)能極大地加快系統(tǒng)速度。
3)內(nèi)聯(lián)函數(shù)的使用
C64x編譯器提供了許多專門的內(nèi)聯(lián)函數(shù)[8],直接映射為相應(yīng)的嵌入式的匯編指令,其調(diào)用和一般的函數(shù)相同,名稱前用下劃線作標(biāo)識(shí)。內(nèi)聯(lián)函數(shù)主要包括運(yùn)算指令與數(shù)據(jù)打包指令,前者主要通過一條指令即可完成多路數(shù)據(jù)的并行計(jì)算,如_add4(),_avgu4(),_cmpeq4()等;后者主要快速地完成對(duì)內(nèi)存的讀寫,一條指令可以完成讀寫32 位的數(shù)據(jù),如_mem8(),_packl4()等。
4)運(yùn)算庫(kù)的使用
The C62x/64x FastRTS Library:由于DM6446是定點(diǎn)DSP,通常情況下浮點(diǎn)運(yùn)算調(diào)用此浮點(diǎn)運(yùn)算庫(kù)中的函數(shù)來(lái)實(shí)現(xiàn),該庫(kù)針對(duì)C語(yǔ)言編程者優(yōu)化,應(yīng)用于對(duì)速度要求很高的實(shí)時(shí)運(yùn)算,提供了單精度和雙精度的數(shù)學(xué)運(yùn)算函數(shù),如_mpyf()和_mpy()分別表示單、雙精度的乘法運(yùn)算。
5)編譯器優(yōu)化選項(xiàng)
C64x編譯器提供了不同等級(jí)和種類的優(yōu)化選項(xiàng),可以根據(jù)實(shí)際情況,合理搭配優(yōu)化選項(xiàng),可以改善代碼循環(huán)性能,實(shí)現(xiàn)軟件流水操作,提高代碼的并行性。
6)其他優(yōu)化方法
主要有CACHE優(yōu)化、EDMA的使用、匯編(線性匯編)優(yōu)化等,在此不一一介紹。
本文算法已成功移植到DM6446,實(shí)際運(yùn)行效果滿足車輛檢測(cè)跟蹤的實(shí)時(shí)性和穩(wěn)健性,同時(shí)具有很高的準(zhǔn)確性。實(shí)驗(yàn)分兩部分,包括在PC機(jī)上和DM6446平臺(tái)上運(yùn)行,兩者都是以平均25 f/s的速度,處理大小為320×240像素的視頻圖像。圖3為PC機(jī)上運(yùn)行效果圖。其中圖3a為實(shí)時(shí)背景更新圖;圖3b為運(yùn)動(dòng)區(qū)域檢測(cè)結(jié)果,通過本文的分割方法和快速Floodfill填充算法,能準(zhǔn)確完整地檢測(cè)出運(yùn)動(dòng)車輛;圖3c為檢測(cè)結(jié)果,對(duì)檢測(cè)出的車輛用色框圈出;圖3d為跟蹤結(jié)果,每個(gè)Blob塊上的數(shù)字表示其跟蹤號(hào),同為車輛計(jì)數(shù)值;圖3e和圖3f為粘連車輛的檢測(cè)和跟蹤,系統(tǒng)自動(dòng)識(shí)別粘連車輛并進(jìn)行跟蹤,并計(jì)為兩輛。圖4為DM6446嵌入式平臺(tái)與性能效果圖,通過移植和優(yōu)化,全速運(yùn)行,滿足實(shí)時(shí)性要求。
本文適應(yīng)智能交通對(duì)車輛檢測(cè)的需求,提出了一套簡(jiǎn)單有效的視頻檢測(cè)跟蹤方法,同時(shí)將算法移植到DM6446雙核的嵌入式平臺(tái),對(duì)移植方法和優(yōu)化方法進(jìn)行了描述。實(shí)際運(yùn)行表明,本系統(tǒng)的實(shí)時(shí)性、準(zhǔn)確性、穩(wěn)健性均能滿足實(shí)際需要,方便部署,有效地實(shí)現(xiàn)道路車輛的監(jiān)控和調(diào)度。同時(shí),本系統(tǒng)所采用的方法和思路也可為其他的基于視頻的安防、公共安全、人流檢測(cè)等分布式智能監(jiān)控系統(tǒng)借鑒。由于篇幅和時(shí)間所限,本文暫未對(duì)雨雪、夜間等環(huán)境下車輛檢測(cè)問題進(jìn)行探討,暫未論述將檢測(cè)結(jié)果和圖像進(jìn)行遠(yuǎn)程傳輸?shù)膯栴},這些也是下一步工作的重點(diǎn)。
[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]吳忻生,鄧軍,戚其豐.基于最優(yōu)閾值和隨機(jī)標(biāo)號(hào)法的多車輛分割[J].公路交通科技,2011,28(3):125-132.
[4]孫家廣,楊長(zhǎng)貴.計(jì)算機(jī)圖形學(xué)[M].3版.北京:清華大學(xué)出版社,1999.
[5]王文龍,李清泉.基于蒙特卡羅算法的車輛跟蹤方法[J].測(cè)繪學(xué)報(bào),2011,40(2):200-203.
[6]魯達(dá).基于DM6446平臺(tái)的智能視頻監(jiān)控關(guān)鍵算法研究與實(shí)現(xiàn)[D].上海:上海交通大學(xué),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.