胡艷茹
(寧夏師范學院 物理與電子信息工程學院,寧夏 固原 756000)
車牌檢測技術是智慧交通管理系統的重要組成部分,是計算機視覺處理技術、圖像增強算法技術以及數字通信技術的融合,它能夠在停車場、高速公路、智能制造方面產生重要影響,是針對車輛實時檢測的基礎。本文主要介紹車牌圖像獲取、車牌圖像定位的檢測技術。目前車牌的檢測技術還存在受復雜天氣、光照度、車牌磨損、車牌傾斜等因素影響的問題,但總體仍朝著系統化、簡單化的方向發展[1]。
現場可編程門陣列(Field Programmable Gate Array,FPGA)是隨著定制式數字邏輯電路而出現的集成化可編程開發平臺,它能夠解決數字電路的功能簡單化問題,又能夠克服原有的數字邏輯門數量少、體積大、成本低等缺點。作為搭載算法的硬件實現平臺,FPGA 的并行處理能力突出,有著流水線般的處理過程,具有體積小、成本低、速度快等明顯優勢[2]。
因此,本文設計一種基于FPGA 的智能車牌檢測系統,該系統采用邊緣檢測、傾斜矯正、腐蝕膨脹等算法技術,通過FPGA 集成化開發環境平臺進行硬件實現。相比于單片機技術、MATLAB 技術等,該系統能夠顯著提高并行處理效率和檢測速度,在復雜的環境中快速實現車牌的圖像采集以及定位。
OV5640 攝像頭拍攝到的車牌圖像為RGB(紅、綠、藍)彩色圖像格式,該格式占用存儲空間較大,進行圖像處理時比較耗時。此外,實際傳輸的信號為YCbCr(亮度、色度)格式,圖像信息顯示時還需要轉化為RGB 三原色格式。因此,需要對車牌圖像信息作進一步處理[3]。
RGB 轉化為YCbCr 的公式如下:
由于FPGA 直接進行浮點數計算比較麻煩。因此,要先做整數化處理,公式如下:
為了提高車牌圖像檢測定位的效率,需要將RGB(紅、綠、藍)模式的車牌圖像進行灰度化處理。因此,可以將RGB(紅、綠、藍)設為同一格式,采集到的圖像信息就只有一種格式,不含有其他的顏色格式,就可以轉化為灰度化的單色車牌圖像。圖像的灰度化過程是圖像信息的最優化處理過程,這樣的處理方式簡單容易,此外,還能夠提高定位檢測的準確度。灰度值可以用數字表示,其大小代表著灰色圖像的深淺程度[4]。
本設計進行圖像處理時,采用的是求平均值方式,按照一定的權數將R、G、B的值加權,然后求平均值的大小。
式中:r、g、b表示R、G、B的權值大小。由于對顏色的敏感程度不同,因此配置r>g>b效果更好。
圖像增強是為了凸顯所需圖像的邊緣特征而進行的圖像處理方式,能夠去除圖像中的某些雜點部位,使后續邊緣檢測更加明顯[5]。中值濾波能夠去除各種小噪聲,得到一個噪點較小的車牌圖像,而且程序算法在硬件上實現簡單,適用于本設計。因此,本設計采用的圖像增強方法為中值濾波。中值濾波是利用圖像信息數據的緩存,用一個3×3 的窗口數據信息進行掃描,比較窗口內的數據灰度值大小,選取中間的那個灰度值作為該3×3 數據中心像素的灰度值。
1.4.1 基于灰度特征的邊緣檢測
車牌的定位檢測就是在獲取的整個圖像中,檢測出車牌的位置區域。由于獲取的圖像中包含了許多干擾識別的因素,因此本設計對檢測圖像進行灰度化處理后,車牌相比于圖像中其他干擾因素容易被識別,車牌位置區域則能夠得到準確定位。
灰度化處理后的圖像類似于黑白照片的圖像,是攝像頭采集的彩色圖像去除各種色彩信息后,留下的單一色彩圖像。而采用灰度圖像定位檢測的方式只用到了灰度圖像。因此,將圖像色彩設為單一色彩可以降低硬件平臺的處理信息量,提高硬件處理速率[6]。
此外,環境因素、光照條件等也會影響車牌檢測的效率,利用基于灰度特征的圖像檢測方式能夠很好地克服這些因素。由于獲取的圖像中兩種不同區域的交界處灰度值有明顯的變化趨勢,因此利用該變化趨勢以及邊緣檢測算法能夠找到這些邊緣信息,從而找到車牌位置區域。
1.4.2 Sobel 算子邊緣檢測
常用的邊緣檢測算子方式包括Roberts 檢測方式、Sobel檢測方式、Prewitt 檢測方式等。本設計是基于微分算子Sobel 對車牌圖像進行處理,與其他邊緣檢測算子檢測方式對比,提取邊緣輪廓信息后,車牌位置的邊緣輪廓會更加清晰、明顯[7]。
Sobel 邊緣輪廓檢測算子擁有2 組卷積因子。計算方法是利用結果與設定的對照值對比,若大于對照值,則為邊緣部分;否則就不是邊緣部分。
Sobel 算子水平、垂直方向上的2 組矩陣因子為:
利用矩陣因子分別與圖像X像素的x、y方向做卷積,可以得到該像素x和y兩個方向的梯度值。
然后對Gx與Gy分別平方求和,則該像素的梯度值為:
最后將結果與設置的對照值進行比較,如果計算的結果大于設置的比較值則為邊界,否則不是。由此,就可判斷像素點是不是該車牌圖像的邊界區域部分。
1.5.1 腐蝕原理
采用腐蝕算法對車牌圖像進行腐蝕操作,腐蝕是基本的數學形態學處理方式。經過Sobel 算子檢測后,首先要去除車牌圖像中的噪聲點。利用矩陣中像素點的值進行“與”運算,之后車牌區域形成一個連通的區域。這一步可以去除一些噪聲點,圖像中就只剩下車牌和一些細小的噪聲點。腐蝕的結果使得車牌原來的圖像縮小一圈[8]。
1.5.2 膨脹原理
膨脹是基本的數學形態學處理方式,其原理是用結構化的元素模板去處理圖像中的每一個像素點,如果結構化元素模板覆蓋的車牌圖像區域的像素點為黑色,結構化模板覆蓋的對應區域也為黑色,則該像素點就為標記為黑色,否則為白色。膨脹結果使車牌邊界區域會更加明顯[9]。
投影定位就是對車牌的位置區域向水平方向和垂直方向進行投影,確定車輛牌照的位置。向x方向和y方向投影后會形成陰影上、下和左、右的區域。投影定位模塊可設為空閑狀態、清零狀態、投影狀態,向x、y方向進行投影,則投影處于空閑狀態。對投影狀態的車牌區域位置的寄存器設置合適的參照值,當投影到車牌位置的像素點時,則認為是該車牌位置區域的邊界,然后繼續尋找下一個位置點。按照上述方法一直投影,直至x、y方向上的整個車牌位置區域全部被掃描[10]。
車牌檢測系統可分為車牌圖像信息的采集、車牌圖像信息的處理以及車牌圖像信息定位顯示。FPGA 作為整個車牌定位檢測系統的核心,有著較高的圖像信息處理速率。圖1為基于FPGA 的車牌檢測系統的總體結構圖。

圖1 車牌系統的總體框圖
首先OV5640 攝像頭采集車牌圖像,在FPGA 芯片中完成對OV5640 攝像頭的配置,圖像數據信息進入FPGA 芯片后,經過視頻圖像解碼模塊將車牌圖像數據轉化為數字信號YUV,SDRAM 控制模塊驅動SDRAM 以乒乓式操作緩存車牌圖像數據。然后進行中值濾波處理,去除各種孤立的小噪聲點,使圖像邊緣輪廓更加清晰,達到圖像增強的效果。接著利用車牌灰度化后的特征區別于圖像中其他部分的特點,準確快速定位出圖像中車牌的位置。之后進行腐蝕操作,去除車牌區域的噪聲干擾點;進行膨脹操作,使車牌位置的區域更加明顯。最后,對處理后的車牌圖像進行投影,確定車牌的位置區域,實現相關預設功能。
由于圖像中兩種不同區域的交界處,灰度值有明顯的變化,利用該變化趨勢可以找到這些邊緣信息,從而能夠快速準確地找到車牌位置區域。此外,攝像頭拍攝到的車牌圖像為RGB565 格式,該格式占用存儲空間較大,進行圖像處理時比較耗時,因此本設計采用了灰度化處理。本設計采用的灰度化方法為RGB565 轉化成RGB888 圖像格式,接著RGB 888 轉化成YCbCr 模式,最后提取Y,完成灰度化設計。
本設計采用Sobel 的檢測方式進行邊緣檢測,采用先入先出方式(FIFO)實現并行輸入。首先需要利用9 個像素數據組成緩存3×3 的數據窗口,由于提取的像素數據有3 行,因此需要建立2 個FIFO 來緩存圖像像素數據。這樣就可以實現并行輸出,最后將其提取的數據分別與x方向的橫向矩陣因子以及y方向上的縱向矩陣因子做卷積運算,從而實現Sobel 邊緣檢測。
腐蝕模塊的設計是利用30×60 的緩存數據進行“與”操作,如果找到“1”,則輸出第一次運算的結果為“1”,否則為“0”。因為本文選擇的膨脹運算模板有30 行,因而需要29 個行緩存,即29 個FIFO,FIFO1 緩存第一次REG 的結果,FIFO2 緩存第二次的輸出結果,FIFO3 緩存第三次的輸出數據,其他FIFO 以此類推。對FIFO1,FIFO2,…,FIFO29 的數據進行“與”運算,當結果等于1 時,則腐蝕結果為1,否則為0,則整個腐蝕過程結束。腐蝕使整個圖像縮小。圖2 為實現腐蝕模塊流程。

圖2 腐蝕模塊設計流程
膨脹模塊的設計是對模板為9×19 的數據進行緩存,首先對這19 bit 數據進行“或”運算操作,尋找“1”,如果找到“1”,則輸出第一個結果為“1”,否則為“0”。FIFO1 緩存第一次REG 的輸出結果,如果第二次的結果為“1”,則FIFO2 緩存第二次的輸出結果,其他FIFO 依此類推。將FIFO1,FIFO2,…,FIFO8 的輸出數據進行“或”運算,當結果等于0 時,則膨脹結果為0,否則為1。膨脹后圖像明顯變大。圖3 為膨脹模塊設計流程。

圖3 膨脹模塊設計流程
投影定位就是向x、y方向進行投影,則投影狀態處于空閑,對車牌區域位置的寄存器設置合適的參照值,當投影到車牌位置的像素點時,則認為是該車牌位置區域,然后繼續尋找下一個像素點,按照上述方法一直投影,直至x、y方向上顯示出車牌位置區域。
車牌定位檢測系統的實現是采用軟件開發平臺QuartusⅡ進行綜合分析,仿真驗證算法程序。本文以“粵A·2123A”車牌圖像為例進行分析。本設計的全部算法都是利用Verilog語言實現,將程序下載到FPGA 開發板后,進行模塊測試,驗證系統性能。引腳分配完成后再次進行一次全編譯,下載程序進行FPGA 開發板的整體測試。FPGA 擁有多種程序輸入方式,本設計采用的是直接方式,直接下載文件到FPGA的RAM(存儲器)中,通過USB Blaster 程序下載電纜直接下載到FPGA 芯片。
相比于其他邊緣檢測方式,經攝像頭采集到的圖像經過Sobel 檢測,車牌圖像的邊緣輪廓會更加清晰可見,實驗結果如圖4 所示。

圖4 圖像邊緣檢測效果圖
經過邊緣檢測后進行腐蝕操作。腐蝕的目的是去除車牌圖像背景中的干擾點以及一些噪聲點。腐蝕操作后車牌圖像明顯縮小一圈,圖像中只剩下車牌位置和一些細小的雜點,符合預期結果。實驗效果圖如圖5 所示。
膨脹的目的是使車牌區域更加明顯。車牌區域明顯,則可以觀察到字符的邊粘連在一起,形成連通區域。但車牌圖像背景中存在雜物,對于車牌區域的確定會產生很大的影響。膨脹效果圖如圖6 所示。
算法程序通過仿真編譯后,通過USB 串口直接下載到主控芯片中,之后進行FPGA 開發板的整體測試。為了測試本系統的可靠性,采用光照度因素模擬復雜的天氣條件,隨機選取了50 多張車輛圖像,對車牌定位檢測效果進行分析。光照度較強的情況下,定位率達到90.5%;光照度中等的情況下,定位率達到91.5%;光照度較弱的情況下,定位率達到85.0%。圖7 為車牌定位的總體效果圖。從圖中可以看出,車牌的上下邊界被準確地定位出來,由此可見在相對復雜的環境下,車牌定位效果基本上符合預想結果。

圖7 車牌定位效果圖
本文設計一種基于FPGA 的智能車牌檢測系統。該系統采用灰度化、邊緣檢測、腐蝕、膨脹、投影定位等模塊進行圖像處理,采用搭載FPGA 的Verilog 語言進行整體設計。本設計的性能主要取決于車牌的邊緣檢測和投影的相對位置關系。未來將改進算法以提高車牌的檢測速率。