摘 要:以在民用領域十分有應用價值的汽車牌照作為目標自動識別(ATR)對象,提出2種分別基于色彩和字符特征的車牌識別算法,通過不同特征的選取,使用Matlab軟件作為研究工具,研究數字圖像的目標識別方法,實現基于特征的快速定位和識別。兩種算法都簡單易行,各有所長,并有所優化選擇。
關鍵詞:數字圖像;自動目標識別;牌照特征;識別算法
中圖分類號:TN911.7文獻標識碼:A
文章編號:1004-373X(2008)22-108-04
Study on Automatic Target Recognition Algorithm of License Plate
ZHANG Ming
(96411Unit of PLA,Xi′an,721006,China)
Abstract:As a more prevalent visible scientific calculational software,Matlab has a powerful processing function in digital image.The thesis takes Matlab as an applied tool,and takes the license plate which has a very high applied value in civil field as Automatic Target Recognition(ATR) target to research the method of object recognize of digital image.Through different characters and arithmetic to achieve fast location and recognition based on character.
Keywords:digital image;automatic target recognition;license-plate character;recognition algorithm
1 引 言
在現代社會中,圖像自動識別技術在軍事和民用的許多領域都得到了日益廣泛的應用。車牌識別技術的研究是圖像識別技術中最常見的一種應用,具有重要的現實意義和理論價值。
一個完整的車牌識別系統一般由圖像輸入、圖像處理(提取特征)和牌照定位識別3部分組成。本文只把重點放在后兩步,著力研究這兩部分的算法和實現過程。
車牌識別系統和其他的圖像識別過程一樣,關鍵在于特征的選擇和提取。
我國的車牌底色和字符顏色種類并不多,而且字符主要是英文字母、數字以及少量漢字組成,這就提供了2個非常明顯的特征:顏色和字符。
但由于車牌的不同,以及檢測時不同的光照條件,給車牌識別增加了難度,很難用一種算法就實現一個完善的系統。
在這里以常用的藍底白字車牌作為基本研究對象,分別利用顏色和字符這兩個特征,采用Matlab 7.0作為開發軟件,對車牌識別算法進行研究,并對比其算法和識別效果。
2 基于顏色特征的車牌自動識別算法
以藍底白字的車牌為目標,用其顏色作為選取和要提取的特征,在輸入原始圖像后,對行和列方向的藍色像素點進行統計,分別得到行和列方向上特征藍色像素的位置,然后用這兩個位置的坐標值對原圖進行截取,即可以得到車牌圖像。
2.1 車牌識別算法實現過程分析
實驗采用圖片主要有3張,分別是car1.jpg,car2.jpg,car3.jpg,如圖1所示:

Matlab在處理JPG格式的真彩圖像時實際上是作為3個RGB矩陣處理,可以用一條簡單的Matlab語句來分別定義3個矩陣:
I=imread(′car1.jpg′);
[y,x,z]=size(I);
myI=double(I);
第一行是將圖像car1.jpg讀取到Matlab的變量I中;第二行是根據圖像I的大小(x和y分別代表I在行和列方向上的像素個數)以及RGB維度(z=1,2,3,分別代表R,G,B)設置三維矩陣大小;最后一行生成一個大小等于圖像I,元素值等于圖像I的相應位置像素的RGB值(三個維度分別存儲R,G,B)的圖像矩陣。
之后,在RGB空間中根據廣義上的“藍色”范圍,對R,G和B分設置一個閾值范圍,在行和列方向上分別統計每個像素的RGB是否在這個閾值范圍內。這個過程在Matlab中屬于一個常用的數組(矩陣)循環查詢的過程,對行和列只需要分別用一個二重循環(每列和每行分別一個循環),循環次數分別等于前面定義圖像矩陣時獲得的y和x的值。
這個過程的關鍵是閾值的選擇。根據RGB色彩空間理論,以8位格式存儲的RGB表示系統R,G和B分別有28個值,其組合出來的色彩則可以有224種。人憑肉眼不可能區分224種顏色,即使假設車牌的底色都是絕對相同的,由于光照、灰塵、水汽、環境對比等的干擾,在原始圖像獲得過程中也會造成圖像顏色與實際顏色存在差別,因此,這里要統計的“藍色”是一類相近色彩的總稱,這給閾值確定帶來了困難。閾值范圍太窄,可能遺漏一些視覺色彩;而閾值范圍太寬,也可能會增加一些實際不存在的視覺色彩,影響識別的效果,甚至造成錯誤。本文根據參考文獻中的相關內容,結合實踐驗證后采用的閾值范圍是:100≤R≤200,40≤G≤200,B≥150。
當完成這個步驟后,每行每列可以得到2個一元函數f(x)和g(y);x和y對應的行和列方向的值;f(x)和g(y)分別代表列和行方向藍色像素點的個數。如果f或g值大于閾值,則代表檢測到了車牌的顏色區域,反之,則表示還沒檢測到車牌的顏色區域。根據這個閾值,設計一個判斷循環,就可以分別在行和列方向得到2個坐標刻度。
由于圖像和算法本身的不足等原因,得到的這4個坐標刻度所圍成的區域并不一定完全和真實的車牌在圖像上的區域吻合,需要根據實驗進行人工修正。利用修正后的4個坐標刻度去截取原圖,就可以得到車牌,完成整個基于顏色特征的車牌照識別過程。
2.2 車牌識別效果及其原因分析
采用色彩特征作為識別依據是簡單直觀的,特別是在周圍色彩干擾比較小時可以非常正確地識別車牌,但是,如果周圍色彩干擾較大時,正確的識別比較困難。在對三張實驗圖片的識別中,對car3.jpg就沒有識別到正確的車牌,卻把圖片中一個藍色路標牌作為目標。
為了分析識別效果,特別提取3張實驗圖片在列和行方向的藍色像素點統計函數f(x)和g(y),并繪制成曲線,分別見圖3中(a)~(c)。
從圖3(a)和圖3(b)中可見,因為兩圖圖像質量較高,色彩的色度和對比度都非常高,而且圖形規則,因此在統計圖上上顯得統計曲線非常規整。而從圖3(c)發現,統計圖上在y方向的統計上時有2個閾值范圍內像素集中區域,在進行4個坐標刻度截取時,首先是y方向產生了統計錯誤,進而影響到x方向的統計(程序設計規定,x方向的統計是在y方向統計的基礎上進行)。

分析原因,這與程序設計上有一定關系:首先本程序采用的色彩RGB值,是筆者參照參考文獻中的先驗值,再根據RGB色彩空間理論和實驗驗證得出的一個修正值,在客觀性和普遍性上有所欠缺;其次本程序對目標的尺寸識別、位移和旋轉等方面上有著很大缺陷,從而導致識別上的誤差乃至完全錯誤;最后,算法中的循環統計還不太完善,導致循環統計錯誤,而影響到定位。

3 基于字符特征的車牌自動識別算法實現
按照良好特征的4個條件:可區別性、可靠性、獨立性和數量少來看字符,車牌字符完全符合以上4個條件。車牌字符一般都是整個圖像中最集中的區域,字符簡單而且變化少,滿足可區別性和數量少的要求。另外車牌上的字符區域與其他圖像區域相比,大的色塊比較少,這樣邊緣比較突出,滿足獨立性和可靠性。
以字符為特征的識別系統流程相對色彩要復雜一些。首先要對輸入圖像進行預處理,其次對圖像進行二值化,再次要削弱圖像中背景和噪聲的干擾,就可以得到一個非常簡單的二值圖像,其中的1值點大部分是目標點,最后只需要用類似于藍色像素統計的辦法統計出1值點,再進行1次閾值判斷就可以得到車牌的位置坐標,從而完成識別。
3.1 車牌識別算法實現過程分析
以上節中識別不成功的car3為例。首先對圖象進行預處理,將24位真彩圖轉化成256級灰度圖。這樣不僅便于后續的圖像快速處理,提高計算運行速度,而且對多顏色圖像進行了統一,避免了顏色造成的干擾。按照現行標準的平均值法,灰度轉化的原理是:g=0.3R+0.59G+0.11B在Matlab中可以使用前面提到過的圖像的格式轉化函數將RGB真彩圖像轉化成灰度圖像。如下所示:
I=imread(′car3.jpg′);
I2=rgb2gray(I);
將圖像二值化后,圖像上只有0值和1值點。0值多半為背景,1值中包含要尋找的字符特征,也有部分景物干擾。二值化過程有效突出了圖像中的邊緣部分,排除大部分背景干擾,達到突出目標的目的,同時也大大降低了后續處理的工作量。
Matlab為二值化過程提供了一個簡便的函數BW=im2bw(I,level),level是歸一化的閾值,取值在[0,1]之間,其取值直接關系到二值化的效果。圖像中灰度大于等于level/256(灰度/256)的像素在二值化后置為1,反之,像素在二值化后被置為0。這樣,如何選取閾值level成了這一步的關鍵。
實踐證明,合理選擇閾值能夠有效地將背景基本置為0。Matlab提供了一個有效閾值計算函數graythresh,這個函數是根據Otsu方法,生成1個閾值,這個閾值將使圖像二值化后區域內部的元素差異最小。
在參考文獻[1]中,也提供了一個計算閾值的經驗公式:T=Gmax-(Gmax-Gmin)/3,T是閾值,Gmax 和Gmin分別是圖像中的最高、最低灰度值。本文選用這個經驗公式作為產生閾值的方法。
然后,再對圖像進行削弱背景和噪聲干擾處理。首先對二值圖像進行邊緣檢測,進一步去除背景的干擾,然后針對噪聲干擾多為獨立點,而字符特征多為短豎線這一特點進行中值濾波,過濾掉噪聲。
在進行邊緣檢測時,常用的幾種邊緣檢測算子是:Robert算子、Sobel算子、Prewitt算子、LOG算子和Canny算子,其具體內容可參考相關文獻。
經過實驗比對,Canny算子最滿足本文去除背景的要求,因此在程序中選用的是Canny算子。
Canny算子是根據著名的Canny三原則(信噪比原則、定位精度原則、單邊緣響應原則)結合獲得的信噪比與定位乘積之最優逼近算子,使用一階導數的極大值表示邊緣。其基本思想是先將圖像使用Gauss函數進行平滑,再根據一階微分的極大值確定邊緣點。Canny算子使用2個閾值來分別檢測強邊緣和弱邊緣,當且僅當弱邊緣與強邊緣相連時,弱邊緣才會出現在輸出中,因此受噪聲干擾較小,能檢測到真正的弱邊緣。邊緣檢測后需要進一步去除噪聲。因為字符多是一些短豎線和短橫線,而背景噪聲很大部分是孤立噪聲,因此,使用中值濾波函數medfilt 2就可以濾除主要噪聲了。根據前面的分析,這里中值濾波采用的模板窗口是一個9行1列的豎線濾波窗口(medfilt 2函數參數為[9 1]),這樣將過濾掉圖像中非短豎線的部分,從而去掉噪聲。
經過前面幾步后,基本就可以獲得一個比較“純凈”的二值圖像,在這個圖像上的字符特征區域有比較密集的“1”值點,還散布有少量殘余背景和噪聲也表現為“1”值點。接下來采用統計的方法對“1”值點分別在行和列方向進行統計,步驟幾乎與采用色彩特征進行識別的統計過程一致,區別只在于色彩特征要求統計閾值的是256級的RGB范圍,而這里只需判斷是否為“1”。
確定車牌位置也于前面的色彩特征識別時確定位置的過程一樣,也是用1個閾值來判斷是否“遇到”了特征字符區域,然后確定4個坐標刻度,然后根據實驗情況對這4個刻度進行修正,最后準確地對車牌實現定位。
3.2 車牌識別效果及其原因分析
通過實驗發現,基于字符特征的車牌自動識別技術對于car1.jpg和car3.jpg都具有良好的識別效果,但對于car2,jpg的識別卻發生錯誤,識別對象變成了右后視鏡。
分析錯誤的原因發現,當car2.jpg轉為灰度圖時就已經出現錯誤的隱患了,車牌部分已經幾乎和周圍的背景完全混在一起,如圖4所示。再轉換為二值圖像,車牌部分完全成了黑色,也就是沒有任何“1”值點,字符特征已經完全被附近的背景所掩蓋,導致錯誤發生,如圖5所示。

分析car2和car1以及car3的區別,可以發現car2圖像中,字符區域字符的特征不明顯,而且字符的顏色和周圍背景的顏色很接近;另外車牌區域和周圍區域的顏色對比度很大,導致在轉換為灰度圖像時,車牌區域相對周圍區域灰度級太低,在二值化時被判決為“0”區域,即被判決為背景,導致識別失敗。這個問題在本算法中無法避免,在實際運用中必須運用其他識別方法輔助進行來解決。
4 結 語
利用Matlab作為工具,結合汽車牌照識別,本文對數字圖像中的目標識別技術進行一定的研究。在前人的工作基礎上,提出2種分別基于色彩和字符特征的車牌識別算法。兩種算法都簡單易行,各有所長,并有所優化選擇。由于客觀條件及時間的限制,這兩個車牌自動識別算法尚不成熟,在以下幾個方面還有一些問題需要解決:
(1) 解決原始圖像來源不同導致的圖像質量差異問題,或者從算法上抑制這些差異造成的影響;
(2) 改進算法,解決相近色彩干擾問題,解決循環統計計數問題;
(3) 進一步提高算法的普遍性,給算法增加一些可選分支,使得算法能適應多種識別需求。
這些問題還需要在后續研究中進一步提高和完善。
參考文獻
[1]何斌,馬天予.數字圖像處理[M].2版.人民郵電出版社,2003.
[2]王耀南,李樹濤,毛建.計算機圖像處理與識別技術[M].北京:高等教育出版社,2001.
[3]廖佩朝.自動目標識別器的發展現狀及應用分析[J].紅外與激光技術,1992(2):1-2.
[4]李弼程,彭天強,彭波,等.智能圖像處理技術[M].北京:電子工業出版社,2004.
[5]聞新,周露,張鴻.Matlab科學圖形構建基礎與應用[M].北京:科學出版社,2002.
[6]容觀澳.計算機圖像處理[M].北京:清華大學出版社,2000.
[7]趙雪春,戚飛虎.基于彩色分割的車牌自動識別技術[J].上海交通大學學報,1998,32(10):4-9.
[8]張煒,王慶,趙榮椿.汽車牌照的實時分割算法[J].西北工業大學學報,2001,19(1):35-37.
[9]清源計算機工作室.Matlab 6.0高級應用——圖形圖像處理[M].北京:機械工業出版社,2001.
[10]郭亞,王水波.基于灰度圖像的車牌定位算法研究與實現.現代電子技術,2008,31(2):137-139.
[11] 陳軒飛,陳志剛.車牌字符的預處理研究.現代電子技術,2005,28(2):63-65.