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