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