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