蔣理 孫哲民 蔣漢麟 蔡天巍
摘要:車牌識別系統(tǒng)不僅僅是智能交通系統(tǒng)的一個(gè)重要板塊,同時(shí)也在交通的監(jiān)控和管理中起到極其關(guān)鍵的作用。車牌圖片預(yù)處理能夠在短的時(shí)間內(nèi)使得復(fù)雜圖片簡單化,為后繼的車牌定位于識別做好準(zhǔn)備。該文主要介紹了一種圖片預(yù)處理的方法,使用了二值化、邊緣檢測及形態(tài)學(xué)操作等對圖片進(jìn)行處理,并根據(jù)實(shí)際優(yōu)化了參數(shù)和方法。
關(guān)鍵詞:圖片處理;車牌識別;OpenCV
中圖分類號:TP311 ? ? ? ?文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)25-0178-02
Abstract: License plate recognition system is not only an important part of Intelligent transportation system, but also plays an important role in traffic monitoring and management. The preprocessing of license plate image can simplify the complex image in a short time and prepare for the subsequent license plate location recognition. This paper mainly introduces a method of image preprocessing, which uses binarization, edge detection and morphological operation to process the image, and optimizes the parameters and methods according to the actual situation.
Key words: image processing; license plate recognition; OpenCV
車牌識別技術(shù)目前已經(jīng)廣泛應(yīng)用于智能交通系統(tǒng)中。目前,有著很多民用需求,如單位或小區(qū)車輛進(jìn)出管控,停車場監(jiān)控等。車牌圖片預(yù)處理是車牌識別系統(tǒng)的重要組成部分,在系統(tǒng)獲取到含車牌的圖像后,需經(jīng)過車牌預(yù)處理,再進(jìn)行定位與識別。預(yù)處理的主要目的是將圖片簡銳化,突出待識別的區(qū)域,以取得更高的識別率,同時(shí)降低識別模塊的計(jì)算復(fù)雜度。為了滿足企業(yè)需求,本單位多個(gè)專業(yè)聯(lián)合研究開發(fā)了這套車牌識別系統(tǒng),筆者主要做車牌圖片預(yù)處理的軟件設(shè)計(jì)與實(shí)現(xiàn)工作。開發(fā)中主要用到了OpenCV做視覺處理。
1主要技術(shù)簡介
OpenCV是一個(gè)開源的跨平臺計(jì)算機(jī)視覺庫。由于其是由一組C的函數(shù)與部分CPP類所實(shí)現(xiàn),量級輕且效率高,同時(shí)也提供了譬如Python、MATLAB等語言的接口,實(shí)現(xiàn)了諸多在圖像處理與計(jì)算機(jī)視覺領(lǐng)域通用的算法。主要用于解決如:人機(jī)交互、物體識別、圖像分區(qū)、人臉識別、機(jī)器人、動(dòng)作識別與跟蹤等方向的問題,是目前最為主流的視覺處理庫之一。
本系統(tǒng)使用了OpenCV-Python接口。其中支持了Numpy,這是一個(gè)經(jīng)高度優(yōu)化的數(shù)據(jù)操作庫。操作中可以將所有OpenCV數(shù)組結(jié)構(gòu)都轉(zhuǎn)換為Numpy數(shù)組。這也使得與使用Numpy的其他庫(如SciPy和Matplotlib)集成更容易。
2 車牌圖片預(yù)處理
在圖片處理中,圖像分辨率的大小決定了計(jì)算量的大小,這在處理的時(shí)間上會得到反映。為了加快處理的整體速率,首先需要對圖像的分辨率進(jìn)行處理。主要過程為:系統(tǒng)會對讀入的圖片分辨率進(jìn)行檢測,若其高于設(shè)定的閾值,則將其分辨率調(diào)整為指定的大小。
2.1 圖像灰度化
預(yù)處理中灰度化過程是將彩色的圖片轉(zhuǎn)化為只有亮度的圖像的過程。彩色圖片的像素色彩通常由三個(gè)分量:R、G、B所構(gòu)成,每個(gè)分量的范圍都是0-255,但灰度圖像每個(gè)像素只有一種樣本顏色,其位于黑色與白色之間,每個(gè)像素值最大為255(即白色),最小值為0(即黑色)。本系統(tǒng)所使用的是較為簡單的平均灰度處理算法,意為取每個(gè)像素的R、G、B分量數(shù)值的平均值再將其賦回各給個(gè)分量。
本系統(tǒng)使用了函數(shù)cv2.cvtColor(img,cv2.COLOR_BGR_GRAY)對原始圖像進(jìn)行了灰度化處理。
2.2 圖像增強(qiáng)
在對原始圖像進(jìn)行灰度化處理后,車牌圖像與其他部分圖像有時(shí)并沒有較高的對比度,此時(shí)若直接對圖像進(jìn)行邊緣檢測來選取車牌位置很可能會取得較差的效果。因此需要對圖片進(jìn)行增強(qiáng)處理,從而改善在車牌圖像選取時(shí)的視覺效果,突出圖像中的重要信息,并放大在不同物體間的特征差異。目前用于該方向的圖像增強(qiáng)技術(shù)通常有例如:圖像的開操作與閉操作、高斯平滑、中值濾波、灰度拉伸等。
本系統(tǒng)中使用了開運(yùn)算操作,實(shí)現(xiàn)的方法即為先對原圖像進(jìn)行腐蝕運(yùn)算,再對其進(jìn)行膨脹運(yùn)算。其目的就是消去孤立的小點(diǎn)、毛刺等等干擾,并且使面積較大塊的圖像的邊緣變得更加平滑,與此同時(shí)不改變總體的形狀和位置。相較于原始圖像,經(jīng)過圖像增強(qiáng)處理后的車牌的圖像部分與其他部分相比,具有更加明顯的對比度。
2.3 圖像二值化
對灰度圖像進(jìn)行二值化處理就是將其像素的灰度值設(shè)置為0或者255,此時(shí)圖片會顯現(xiàn)出非常分明的黑白效果。擁有256個(gè)亮度強(qiáng)度的灰度圖像依賴適當(dāng)?shù)拈撝翟O(shè)置便可以獲得仍然反映出圖像整體與局部特征的二值化圖像。在數(shù)字圖像的處理應(yīng)用中,其具有十分突出的作用,尤其是在圖像的處理中,有許多以二值化的圖像構(gòu)成的系統(tǒng)。在處理二值化后的圖像時(shí),運(yùn)用封閉、連通邊界定義不交疊的區(qū)域的操作。將灰度值高于閾值的區(qū)域作為目標(biāo)區(qū)域,以灰度值255表示,反之則將其他點(diǎn)視作非目標(biāo)區(qū)域,將灰度值置0。
本系統(tǒng)中采取了自動(dòng)選定灰度閾值大津法來對圖片進(jìn)行二值化處理。將t記作前景圖像與背景圖形的區(qū)分閾值,前景圖形點(diǎn)數(shù)所占圖像比例為w0,平均灰度為u0;背景圖像的像素?cái)?shù)占圖像比例記作w1,而平均灰度記作u1。圖像的總平均灰度為:
該公式目標(biāo)是求類間方差值,由閾值t分割出的前景圖像和背景圖像這兩部分構(gòu)成了整幅圖像,而前景的取值為u0,概率為w0,背景的取值u1,概率為w1,總均值為u,根據(jù)方差的計(jì)算方法可以得到此式。方差是灰度分布均勻性的一種度量,數(shù)值越大越可以反映構(gòu)成圖像的兩部分差別大,當(dāng)部分目標(biāo)誤分為背景或部分背景誤分為目標(biāo)都會導(dǎo)致兩部分差別變小,因此使類間方差值大的分割方式就意味著誤分概率最小。
2.4 邊緣檢測
邊緣檢測是車牌照定位前的關(guān)鍵步驟。邊緣常常是出現(xiàn)在目標(biāo)與目標(biāo)之間或者目標(biāo)與背景圖像之間,邊緣檢測的目的就是定位其邊緣以及減少噪點(diǎn)。將邊緣認(rèn)定為一定數(shù)量的點(diǎn)亮度變化最為激烈的位置,與此同時(shí)將灰度值看作二元函數(shù)值,再計(jì)算這個(gè)亮度變化的導(dǎo)數(shù)作為其邊緣強(qiáng)度。通過設(shè)定閾值判別該點(diǎn)是否為邊緣點(diǎn),若大于閾值則判定為是,反之則否,然后再連通邊緣點(diǎn)來獲得邊緣點(diǎn)集。常用的邊緣檢測算子有例如:Sobel算子、Roberts算子、Prewitt算子等等一階微分算子,Laplacian算子、Marr算子等等二階微分算子,還有非微分邊緣檢測算子Canny算子。
相較于其他的算子,Canny算子更加不易受到噪聲的干擾,能夠檢測到真正的弱邊緣。該方法的優(yōu)點(diǎn)在于使用兩種不同的閾值分別檢測強(qiáng)邊緣和弱邊緣,且僅當(dāng)弱邊緣與強(qiáng)邊緣相連時(shí)才會將弱邊緣包含在輸出的圖像中。因此該方法不易被噪聲所影響,且更加容易檢測出真正的弱邊緣。系統(tǒng)使用了Canny邊緣檢測。其具體的實(shí)現(xiàn)步驟為:
①對二值化圖像進(jìn)行高斯平滑濾波操作,去除噪點(diǎn)。因?yàn)樵肼暿腔叶茸兓謩×业牡胤?,若不能消除在后續(xù)操作中便可能會被識別為邊緣,從而影響邊緣檢測的效果。
②計(jì)算并獲取各像素梯度的強(qiáng)度值與方向信息。采用了Sobel算子的方法來操作,采用卷積方法在圖像的每一個(gè)點(diǎn)上,結(jié)合兩個(gè)方向Gx與Gy的值計(jì)算結(jié)果求出其近似梯度值,根據(jù)Gx與Gy的值計(jì)算得到梯度的方向:
③對非極大值進(jìn)行抑制。由于Sobel算子所檢測出的邊緣通常較粗,為了取得更好的效果就需要抑制梯度值不足夠大的點(diǎn),只保留最大的梯度,從而將邊緣收細(xì)。
④通過設(shè)定雙閾值來對圖像的邊緣進(jìn)行檢測,同時(shí)連接各個(gè)邊緣點(diǎn)。分別給定兩個(gè)閾值記作L1、L2(設(shè)L1>L2),若某點(diǎn)梯度值超過了L1則將其稱作強(qiáng)邊緣,若梯度值位于L1與L2之間則稱作弱邊緣,若梯度值小于L2則認(rèn)為不是邊緣點(diǎn)。此外,當(dāng)弱邊緣周圍為8的鄰域內(nèi)存在強(qiáng)邊緣點(diǎn)時(shí),就認(rèn)定該弱邊緣點(diǎn)為強(qiáng)邊緣點(diǎn)。
3結(jié)論
至此,圖像預(yù)處理完成,為系統(tǒng)后續(xù)車牌定位與識別做好了準(zhǔn)備。在本車牌識別系統(tǒng)中,圖片預(yù)處理部分運(yùn)行良好,運(yùn)算響應(yīng)時(shí)間也達(dá)到了預(yù)期。車牌識別系統(tǒng)已經(jīng)通過內(nèi)部測試,進(jìn)入試用階段。目前使用情況良好,識別率與響應(yīng)速度均達(dá)到要求。
參考文獻(xiàn):
[1] Peter Harrington.MachineLearninginAction[M].北京:人民郵電出版社,2012.
[2] 周志華.機(jī)器學(xué)習(xí)[M].北京:清華大學(xué)出版社,2016.
[3] Ian Goodfellow.Deep Learning[M].北京:人民郵電出版社,2017.
[4] 李立宗.OpenCV輕松入門:面向Python[M].北京:電子工業(yè)出版社,2017.
[5] 王碩,孫洋洋.PyQt 5快速開發(fā)與實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2018.
【通聯(lián)編輯:代影】