1 摘要
該項目要求基于FPGA完成車牌定位算法。本項目擬充分發(fā)掘FPGA并行運算在圖像處理領(lǐng)域的優(yōu)勢,實現(xiàn)基于Adboost算法的車牌檢測硬件架構(gòu),最終完成車牌定位信息的實時輸出。
2 系統(tǒng)原理和技術(shù)特點
2.1 Adaboost車牌定位算法原理
Adaboost車牌定位算法的設(shè)計,分為離線訓(xùn)練模塊和在線識別模塊如圖1所示,離線訓(xùn)練模塊通過對大量正、負樣本的學(xué)習(xí),形成一系列的弱分類器(典型特征),然后依據(jù)權(quán)重把這些弱分類器組合成強分類器,如圖2(a)所示。實際應(yīng)用時,若干個強分類器構(gòu)成如圖2(b)所示的Cascade結(jié)構(gòu),Cascade結(jié)構(gòu)就像一個篩孔可變的篩子,開始的篩孔很大,使得大多數(shù)車牌都能通過,在此基礎(chǔ)上盡量拋棄反例,位置越靠后的篩孔越復(fù)雜,即包含越多的弱分類器,因而也具有更強的分類能力。在線檢測模塊通過離線訓(xùn)練模塊訓(xùn)練好的Cascade結(jié)構(gòu)分類器,使用可以縮放的Haar特征,在待識別圖片上進行多尺度的掃描,最后經(jīng)過后續(xù)處理輸出識別結(jié)果(車牌位置信息)。在線檢測算法流程如圖3所示。首先檢測當前窗口,若未通過分類器則跳出;若通過所有分類器則判定為車牌,然后檢測下一窗口。掃描完當前圖像以后,放大檢測窗口,重新掃描。
Adboost車牌定位算法基于Haar特征,Haar特征由一組矩形構(gòu)成,圖4所示就是幾種Haar特征,黑白矩形內(nèi)像素的灰度加權(quán)和是該特征的特征值。積分圖表示其圖像中任意一點,都是原始圖像中行號和列號均小于該點的像素點像素值之和。利用積分圖可以快速計算矩形的灰度和,即Sum=P1 +P4-P2-P3,其中Pi是積分圖中矩形頂點對應(yīng)的積分值。多個Haar特征組成一個分類器,多個分類器級聯(lián)可以提高檢測精度。
通過對近30000車牌樣本的離線訓(xùn)練,本實驗室已經(jīng)得到能夠適應(yīng)復(fù)雜環(huán)境的Adaboost車牌特征(識別)庫,實現(xiàn)的Adboost車牌檢測算法在固定環(huán)境下拍照車輛圖像,車牌定位識別率可達99%。本次大賽將重點關(guān)注車牌Adaboost算法在線檢測的FPGA實現(xiàn)。
2.2系統(tǒng)工作原理
2.2.1 系統(tǒng)組成
如圖5,整個系統(tǒng)由FPGA完成車牌定位算法,配合外圍的視頻A/D,D/A、存儲器等芯片,完成圖像的采集和定位標記與原始圖像地疊加輸出。
2.2.2 系統(tǒng)方案
FPGA實現(xiàn)的Adaboost車牌定位方案如圖6所示:
系統(tǒng)內(nèi)I2C模塊通過I2C總線配置A/D芯片的寄存器,使得A/D芯片能夠正常工作。
視頻輸入模塊接收A/D芯片輸出的Ycbcr格式的視頻數(shù)據(jù),解碼并提取出圖像灰度數(shù)據(jù)后,將數(shù)據(jù)存到圖像RAM和幀存RAM中。
車牌檢測模塊開始工作,讀取圖像RAM中內(nèi)容,在被檢圖像中掃描是否包含車牌。車牌檢測模塊包括圖像讀取單元,流水線處理單元,分類器讀取單元和檢測單元。如果檢測到車牌,則將車牌信息存儲到檢測結(jié)果合并單元。
車牌檢測模塊工作的同時,圖像縮放單元負責將存儲在幀存RAM中的圖像進行縮小,并存儲到圖像RAM中。
交換處理對象,重復(fù)步驟3-4直到圖像縮小后的大小與掃描窗口相當。
檢測結(jié)果合并單元合并圖像中檢測到的重復(fù)的車牌,減少冗余的窗口以及誤檢的車牌。
繪制單元讀取合并后的車牌位置和大小信息,并在原始圖像中相應(yīng)車牌位置繪制矩形標明。
在步驟1-7的同時,視頻輸出模塊讀取幀存RAM中的圖像數(shù)據(jù),并以VGA格式輸出至D/A芯片,顯示到顯示器上。
重復(fù)以上步驟。[!--empirenews.page--]
2.2.3 功能模塊
整個系統(tǒng)負責接收經(jīng)過流水線計算得到的特征向量值,并根據(jù)這些值以及掃描窗口的平方積分和等信息判斷掃描窗口是否包含車牌。
視頻輸入模塊:視頻輸入單元負責從A/D輸出端接收視頻數(shù)據(jù),并將其中的有效像素提取出來,并產(chǎn)生正確的像素地址信息,保存到幀存中。
視頻輸出單元:視頻輸出單元負責從幀存中讀出需要顯示的圖像,并按照VGA格式輸出至D/A芯片,最終顯示到顯示器上。
圖像讀取單元:圖像讀取單元負責從幀存中讀出掃描窗口,完成列積分和平方積分。
圖像縮放單元:利用掃描窗口檢測圖像時,只能檢測到與掃描窗口大小一致的車牌。圖像縮放單元用于將圖像縮小,使得同樣大小的掃描窗口能夠檢測原圖像中大于掃描窗口的窗口中是否含有車牌。
繪制單元:在原始圖像上繪制車牌位置信息和車牌號碼信息。
流水線處理單元:該流水線包括掃描窗口(存儲陣列)及特征向量兩條流水線,用于計算特征向量的特征值。
結(jié)果合并單元:車牌檢測結(jié)果合并單元的作用就是將車牌區(qū)域周圍的多個合格掃描窗口合并為一個,并去除不包含車牌區(qū)域的偽掃描窗口。
圖像RAM:用來保存從視頻采集模塊接收到的圖像數(shù)據(jù)和縮放以后的圖像數(shù)據(jù)。圖像RAM有兩個寫端口和一個讀端口,寫端口用于向RAM中寫入原始圖像數(shù)據(jù)和縮放以后的圖像數(shù)據(jù);讀端口用于向后繼處理模塊輸出圖像數(shù)據(jù)。
幀存RAM:用來保存從視頻采集模塊接收到的圖像數(shù)據(jù)、車牌位置信息和車牌號碼信息。
Casecade_ROM:用來保存訓(xùn)練得到的Adboost分類器數(shù)據(jù)(特征向量),包括Haar特征中矩形的位置、大小、權(quán)重、閾值、分類器閾值等信息。
分類器讀取單元:它從分類器ROM中讀出分類器數(shù)據(jù),向掃描窗口流水線提供矩形位置、大小、權(quán)重、閾值、分類器閾值等信息
2.3 技術(shù)特點
(1)基于Adboost算法的車牌檢測硬件架構(gòu)設(shè)計;
(2)針對640x480彩色圖像,定位時間<40ms。
(3)固定環(huán)境下,車牌定位識別率99%
3. 技術(shù)路線
本設(shè)計采用45x15的陣列架構(gòu),通過流水線可快速計算矩形灰度和。硬件結(jié)構(gòu)如圖7所示。其中白色45x15個方塊表示當前檢測窗口的行積分,每個單元存放的是在當前所在的行中該像素點之前的像素值之和。橫線填充的方塊存放的是矩形位置數(shù)據(jù)和權(quán)重,豎線填充的方塊存放的是部分灰度和,這兩部分構(gòu)成的特征矢量流水線每時鐘周期流動一次,而行積分陣列(白色方塊)構(gòu)成的流水線僅在當前窗口檢測完畢流動一次,載入新的被檢數(shù)據(jù)。圖像數(shù)據(jù)和分類器數(shù)據(jù)分別保存在圖像RAM和分類器ROM當中。行積分邏輯由一個加法器和45個寄存器構(gòu)成,每45個時鐘周期計算出一行像素的行積分,并輸出到檢測陣列。分類器檢測邏輯接收上一級計算出的矩形灰度和,計算其特征值和相似度,并累加所有的相似度,并與閾值進行比較,判斷是否通過該級分類器。掃描控制邏輯生成圖像RAM的讀地址,控制檢測窗口對當前圖像進行掃描,掃描完畢后,將當前圖像大小乘以3/4,重新掃描,直到被檢圖像與檢測窗口大小一致,則完成一幅圖像的檢測。