基于圖像采集的汽車車牌定位識別,軟硬件協同
1項目概述
在圖像采集與處理的過程中,一般來說前端的數據處理相對后端來說數據量大但是操作相對簡單,如果利用CPU等串行結構的處理器來進行運算的話會大大占用其資源,大大影響了整個圖像采集與處理的時間;而FPGA則與CPU相反,其并行的結構會使圖像處理算法簡單的部分變得十分高效,因此,在圖像采集與預處理過程中涉及到的一些簡單的算法如果利用FPGA來實現的話將會使整個圖像采集與處理的時間大大減少。
汽車車牌的定位識別需要對攝像機拍攝的含有汽車車牌的圖片中的車牌的位置信息進行檢測,并將檢測結果輸出,經過這樣的預處理后,圖像中車牌數據的獲取就會變得相當省時省力了,處理時間的大大縮短對于對圖像處理時間有嚴格要求的收費卡口以及交通路口來說是求之不得的。
2項目任務
本項目的主要任務是利用攝像機以及FPGA開發板,設計一個可以在交通路口和收費卡口對來往車輛的車牌進行預處理的系統,實現對車輛進行圖像拍攝,并對圖像中的車牌進行識別,輸出車牌在圖片中的位置坐標等信息。
3 方案設計
3.1 系統框圖
本項目的系統框圖如圖1所示。電源及FPGA的Flash存儲器等未畫出來。
CMOS相機通過接口與FPGA內部的CMOS傳感器數據獲取模塊相連,由數據獲取模塊配置相機并發送控制信號來控制相機采圖。采得的圖是Bayer格式的圖像,為方便圖像的存儲與處理先將其轉換為RGB格式的圖像,然后將轉換完后的RGB數據通過SDRAM控制器存儲到SDRAM中。
圖1 系統框圖
同時,通過VGA控制器將存儲在SDRAM中的數據利用DAC轉換為符合VGA格式的模擬信號,然后通過顯示器顯示,這樣就完成了圖像的采集與顯示。通過顯示器顯示是為便于實時了解圖像處理的結果,易于算法設計者進行算法的設計與改進。
車牌定位是通過 Image Process模塊實現的,處理完之后將提取的車牌坐標信息輸出,可以通過USB傳輸到PC,也可以傳輸到DSP以進行后續處理。
3.2硬件平臺各部分說明
3.2.1 FPGA開發板
本項目基于Nexys™3 Spartan-6 FPGA 開發板,核心處理器為Xilinx公司的 Spartan-6 FPGA。該項目會用到的板上主要資源為:
● Xilinx Spartan6 XC6LX16-CS324
● 16Mbyte Micron Cellular RAM
● 16Mbyte Micron Parallel PCM
● Digilent Adept USB2 port
● VHDC expansion connector
● 8-bit VGA
XC6LX16-CS324是Xilinx公司Spartan-6系列的FPGA,具有豐富的邏輯資源和存儲資源,非常適合進行一些簡單算法的實現。FPGA用于配置與控制Camera,通過Camera采集圖像,獲取Camera輸出圖像數據并將其存儲到Cellular RAM,然后對圖像數據進行處理。所有圖像處理算法均在FPGA上實現。
Cellular RAM是一種PSRAM 設備,具備類似 SRAM 的架構、隱藏的刷新操作和 SRAM 管腳兼容性等特點。此混合內存集 SRAM 和 DRAM 的優點于一身,兼具低功耗與高速讀寫功能。由于FPGA內部存儲空間有限,因此本項目用Cellular RAM緩存圖像,這樣就省去了人工刷新RAM的步驟,大大降低了數據存取的復雜度。
Digilent USB2 port用于為板卡提供電源,對FPGA進行編程和將車牌坐標信息傳輸到PC顯示。
VHDC connector是為擴展板卡功能而預留的IO口,該項目用此接口連接Camera。
8-bit VGA接口用于將處理后的圖像輸出到顯示器,以便直觀的觀察圖像處理的效果。
3.2.2 CMOS相機
圖像采集部分選用Terasic公司的TRDB-D5M系列彩色攝像頭,該系列攝像頭具有500萬像素,具有2752x2004個總像素,其中有效像素為2592x1944個像素,多余的像素可以避免在進行圖像處理時由于邊緣梯度太大而可能導致的邊緣效應。該系列相機的接口為數字接口,可以通過這些接口對相機的寄存器進行設置,從而調整相機的拍攝模式、焦距以及曝光時間等,可以與FPGA很好的配合,且操作方便、速度較快,相當適合做FPGA圖像處理的圖像獲取設備。
3.3 圖像結構及相機接口
由于采用的是是Terasic的CMOS相機,該款相機采用的是Micron的MT9P001系列CMOS圖像傳感器,圖2所示為該相機所使用的傳感器的像素分布圖。圖3為相機模塊的輸出接口引腳定義。
圖2 CMOS傳感器像素結構
在上圖所示的Rigion II為有效的像素區域,Rigion I為為邊緣區域,其有效寬度為100 pixels,有效避免了在進行圖像處理時可能造成的邊緣效應。
圖3 相機模塊的輸出接口引腳定義
該相機是專門為FPGA開發人員設計的,因此其輸出為數字信號,且控制線、數據線等時序都較為清晰,且提供了許多實用的功能。這大大降低了對圖像采集的設計難度。
4.圖像算法
車牌定位方法的一個共同出發點是通過牌照區域的特征來判斷牌照。可利用的車牌特征可以概括如下:
(1)車牌區域內的邊緣灰度直方圖統計特征:有兩個明顯且分離的分布中心。
(2)車牌的幾何特征:車牌的寬、高比例在一定范圍內。
(3)車牌區域的灰度分布特征:穿過車牌的水平直線其灰度呈現連續的峰、谷、峰的分布。
(4)車牌區域水平或垂直投影特征:車牌區域水平或垂直投影呈現連續的峰、谷、峰的分布。
(5)車牌形狀特征和字符捧列格式特征:車牌有矩形邊框,字符位于矩形框中且有間隔。
(6)頻譜特征:對圖形作行或列的DFT變換,其頻譜圖中包含車牌位置信息。除此之外,車牌字符的紋理特征、字符與背景之間的灰度特征、車牌的字符顏色與底色的固定搭配、車牌的結構特征等越來越多地的車牌特征也正被發掘出來作為車牌定位算法的依據。
根據車牌的不同特征,可以采用不同的定位方法。目前車牌定位的方法很多,最常見的定位技術主要有基于邊緣檢測的方法、基于彩色分割的方法、基于小波變換的方法、基于遺傳算法的方法、基于數學形態學的車牌定位和基于灰度圖像紋理特征分析的方法等,車牌定位算法在車牌識別技術中占有很重要地位,一個車牌識別系統的識別率往往取決于車牌定位的成功率及準確度,考慮到FPGA適合做數據量大且運算簡單重復的特點,我們將采用基于數學形態學的方法來進行定位。
對采集存儲在Cellular RAM中的圖像進行處理的過程分為兩大步:預處理和車牌定位。其具體流程如下:
圖4 圖像處理流程
● 灰度化
通過CMOS攝像機或數碼相機等設備拍攝的汽車圖像以二進制格式存放在FPGA中,在預處理前的圖像都是彩色圖像。彩色圖像又稱RGB圖像,它是利用R、G、B 3個分量表示一個像素的顏色,R、G、B分別代表紅、綠、藍3種不同的顏色。通過三基色可以合成出任一顏色。所以對于一個尺寸為m×n的彩色圖像來說,存儲為一個m×n×3的多維數組 由于彩色圖像中所含的信息比較分散,而且數據處理量很大,因此我們需要首先對車流彩色圖像進行預處理,本項目的算法是基于灰度圖像,因此首先將RGB圖像轉化為灰度圖。
FPGA實現:直接提取G通道的數據即可。
● 直方圖均衡
直方圖均衡化是一種圖像對比度增強的方法,它的實質是通過減少圖像的灰度級以換取對比度的增大。
● 圖像去噪
采集的圖像由于各種原因難免會引入噪聲,因此有必要對噪聲進行消除或減小,以便于后續處理。本項目初步選擇中值濾波來減小噪聲,中值濾波是一種非線性的圖像平滑法,它對脈沖干擾級椒鹽噪聲的抑制效果好,在抑制隨機噪聲的同時能有效保護邊緣少受模糊。
● 二值化
為了更好的利用車牌的某些特征將車牌從圖像中突顯出來,為車牌定位打好基礎,再將預處理的圖像轉換為二值圖像。二值化算法又稱為閾值算法,常見的二值化方法有動態閾值法、局部閾值法及全局閾值法,典型的全局閾值法有Otsu、迭代法等,其目的就是要找出一個合適的閾值,將待處理的區域劃分為前景和背景兩個部分。我們認為車牌區域是車流圖像的前景區,其他的部分都看成是背景區.因此簡單來說,對于梯度圖像的二值化實際上就是確定一個最佳的分割闕值,可根據具體的實驗結果選取合適的方法。
● 邊緣提取
邊緣是圖像最基本的特征之一,是圖像分割、紋理分析及圖像識別所依賴的重要依據。在汽車圖像中,牌照區域內含有豐富的邊緣包括水平邊緣、垂直邊緣和斜向邊緣,而其它區域則很少具有這個特點,故可通過邊緣檢測技術來尋找存在較多邊緣的區域,來很好的突現車牌區域的水平梯度特征,從而使其與背景圖像有效的分開。邊緣提取可以基于灰度圖像,也可以基于彩色圖像,由于彩色圖像的背景復雜且數據量大,因此選擇采用二值圖像進行邊緣提取。
FPGA實現:本項目采用初步選用sobel邊緣檢測算法,如圖5所示。
Gx與Gy是x與y方向的模板,處理時需要將圖像像素與模板做卷積。在用C語言實現該算法時很簡單,因為圖像像素都存儲在二維數據內,根據數組的下標即可獲取像素的值,但Verilog不能做到這點,因此需采用其他方法,下面以Gx與圖像卷積為例來說明用Verilog的實現方法。
圖5 Sobel邊緣檢測模板
檢測過程中需要實現下面的運算:
X1 * P1 + X2 * P2 + X3 * P3 + X4 * P4 + X5 * P5 + X6 * P6 + X7 * P7 + X8 * P8 + X9 * P9
對于x1-x9的獲取很簡單,可用parameter直接定義,而對于p1-p9的獲取就成為關鍵問題,因為p1-p9是依次傳入的,沒有C語言的位址概念,也沒有二維數組的概念,因此可設計3條line buffer做以上運算,Line buffer的結構如下。
圖6 line buffer結構
如上圖所示的電路,Data是圖像數據,從第一行開始,依次傳輸給Line0的輸入端。Line0、Line1、Line2為移位寄存器,每個移位寄存器的深度為圖像的行寬。由于圖像中相鄰兩行中上下相鄰的數據從一維的角度來看恰好是一個行寬,因此可以發現每次Line0、Line1、Line2所輸出的數據均是相鄰三行中同一位置的數據,同時,相鄰時刻同一移位寄存器輸出的數據在當前行上是相鄰的,于是可以發現,每一時刻P1~P9共9個數據就是進行邊緣檢測所需要的矩陣,獲得數據矩陣后利用乘法器將每個數據與邊緣檢測模板對應位置上的數據相乘,然后通過并行加法器將其相乘即可獲得邊緣檢測后圖像上每個點的值。
● 形態學處理
數學形態學是由一組形態學的代數運算子組成的,它的基本運算有4個: 膨脹(或擴張)、腐蝕(或侵蝕)、開啟和閉合, 它們在二值圖像和灰度圖像中各有特點。數學形態學方法利用一個稱作結構元素的“探針”收集圖像的信息,當探針在圖像中不斷移動時, 便可考察圖像各個部分之間的相互關系,從而了解圖像的結構特征。數學形態學基于探測的思想,與人的FOA(Focus Of Attention)的視覺特點有類似之處。作為探針的結構元素,可直接攜帶知識(形態、大小、甚至加入灰度和色度信息)來探測、研究圖像的結構特點。在車牌識別中引進形態學算法可以簡化FPGA中實現方法的復雜度,充分利用FPGA擅長簡單、數據量大的算法的特點,使算法的準確度與速度都有了很大的提升。
在本項目中,可先采用結構元素對二值汽車圖像作腐蝕運算以去除一些噪聲,在去噪基礎上,使用結構元素作閉運算,使車牌區域形成連通的區域。經過形態學運算,車牌區域已形成閉合的連通區域,然后對連通區域作標記。
FPGA實現:結構元素可以用parameter直接定義,難點依然在于圖像像素的獲取。這里同樣可以采取邊緣檢測中提到的line buffer,只是所做的運算不同。
● 精確定位
形態學處理后的圖像可能包含干擾區域,因此,在連通區域標記的基礎上,計算出每個連通區域的外接矩形框,并利用車牌的先驗知識確定車牌區域的位置。該方法可以較好地確定圖像中車牌區域的位置,且算法簡單、實時性較強。
在以上各步驟中,灰度化、去噪、二值化、邊緣提取形態學處理等算法可用Verilog HDL實現,精確定位算法涉及到連通區域分析,相對復雜,可考慮利用Microblaze實現。
評論