李曉莎 林森
摘要:通過(guò)Python開(kāi)發(fā)平臺(tái)和OpenCV機(jī)器視覺(jué)庫(kù)等技術(shù)對(duì)牌照識(shí)別進(jìn)行研究,旨在尋求更為快捷有效的算法。本系統(tǒng)的總體框架分為圖像預(yù)處理、車(chē)牌定位、字符分割和訓(xùn)練識(shí)別等核心模塊。實(shí)驗(yàn)結(jié)果表明該系統(tǒng)具有良好的時(shí)效性和識(shí)別效果。
關(guān)鍵詞:Python;OpenCV;圖像預(yù)處理;字符分割;訓(xùn)練識(shí)別
中圖分類(lèi)號(hào):U491 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2019)06-0095-03
0 引言
智能交通系統(tǒng)(ITS)是將先進(jìn)的數(shù)據(jù)通信、電子控制及人工智能等科技綜合運(yùn)用于整個(gè)交通運(yùn)輸管理體系,使人一車(chē)一路有機(jī)結(jié)合起來(lái),從而構(gòu)建起一種全方位發(fā)揮作用的精準(zhǔn)高效便捷的綜合運(yùn)輸系統(tǒng)。本文介紹了圖像預(yù)處理、牌照定位、字符分割及字符識(shí)別四個(gè)模塊的原理算法,展示本系統(tǒng)的實(shí)現(xiàn)效果,旨在尋求更為快捷有效的算法運(yùn)用于牌照識(shí)別。
1 圖像預(yù)處理
1.1 高斯濾波
本文采用高斯濾波對(duì)原始圖像進(jìn)行降噪處理。高斯濾波方法是使用卷積模板遍歷圖像中的每個(gè)像素點(diǎn),將鄰域內(nèi)像素點(diǎn)被模板確定的高斯加權(quán)平均灰度值替換模板中心像素點(diǎn)的值。二維零均值高斯函數(shù)表達(dá)式為:? ? ? ? ? ? ? ? ?(1)
OpenCV提供了函數(shù)cv2.GaussianBlur(img,(3,3),0)對(duì)圖形進(jìn)行高斯濾波,這里(3,3)表示高斯矩陣的長(zhǎng)與寬都為3,標(biāo)準(zhǔn)差取0時(shí),OpenCV會(huì)根據(jù)高斯矩陣的尺寸自行計(jì)算。如圖1所示為高斯濾波效果圖。
1.2 灰度化
彩色圖片包含了大量的顏色信息,占用較多的存儲(chǔ)空間。為了提高識(shí)別效率,需要對(duì)圖片進(jìn)行預(yù)處理。在RGB模型中,若三分量等值時(shí),則顏色呈現(xiàn)為灰度顏色,其灰度值為R=G=B的像素值。目前主流的灰度化方法是加權(quán)平均法[1],將三分量以不同權(quán)值進(jìn)行加權(quán)平均,即: (2)
其中,分別是讀取RGB的三個(gè)通道的分量值。
OpenCV提供了函數(shù)cv2.cvtColor(img,cv2.COLOR_ BGR2GRAY)對(duì)圖形進(jìn)行灰度化處理,處理后的灰度效果如圖2所示。
1.3 形態(tài)學(xué)處理
數(shù)學(xué)形態(tài)學(xué)的基本思想是使用某個(gè)結(jié)構(gòu)元素去度量和提取圖像中的對(duì)應(yīng)形狀。結(jié)構(gòu)元素指具有某種確定形狀的基本結(jié)構(gòu),結(jié)構(gòu)元素的原點(diǎn)在其幾何中心處,周?chē)袼仃P(guān)于原點(diǎn)對(duì)稱(chēng)[2]。
2 牌照定位和分割
2.1 邊緣檢測(cè)
邊緣檢測(cè)的目的是標(biāo)識(shí)數(shù)字圖像中亮度變化最明顯的像素點(diǎn),剔除了自認(rèn)為不相關(guān)的像素信息,保持圖像原本的結(jié)構(gòu)屬性。本文采用Canny算子進(jìn)行邊緣檢測(cè)。Canny算子是一種多級(jí)檢測(cè)算法[3],被公認(rèn)為邊緣檢測(cè)的最優(yōu)算法,它不容易受噪聲干擾,能夠檢測(cè)到真正的弱邊緣。
OpenCV提供了Canny函數(shù),指定最大和最小閾值為cv2.Canny (img,100,200)。
2.2 輪廓提取
本文調(diào)用OpenCV函數(shù)cv2.findContours(img, cv2.RETR_ TREE, cv2.CHAIN_APPR-OX_SIMPLE) 查找所有封閉區(qū)域的外輪廓。cv2.findContours()函數(shù)返回的輪廓坐標(biāo)值保存在countours集合對(duì)象當(dāng)中,然后調(diào)用函數(shù)cv2.contourArea()計(jì)算輪廓面積,以及函數(shù)cv2.minAreaRect()獲取矩形輪廓的中心坐標(biāo)、寬度、高度、旋轉(zhuǎn)角度,并根據(jù)預(yù)設(shè)區(qū)域面積及縱橫比判別候選區(qū)域。依據(jù)所測(cè)試圖片的紋理特征作為先驗(yàn)知識(shí),設(shè)定牌照區(qū)域的長(zhǎng)寬比范圍在2到5.5之間,同時(shí)設(shè)置牌照區(qū)域允許最大面積為2000像素,經(jīng)判斷對(duì)比排除不在理想范圍內(nèi)的連通區(qū)域。使用函數(shù)cv2.drawContours(img,[box],-1,(0,0,255),thickness=2)進(jìn)行輪廓的顏色填充,查看全部候選輪廓提取效果如圖3所示。
2.3 傾斜矯正
基于仿射變換的傾斜矯正能夠保持二維圖形的平行性及平直性。仿射變換代表的是兩幅圖之間的映射關(guān)系,通常使用2×3矩陣來(lái)表示仿射變換,算法公式如下:
式中,,分別表示待轉(zhuǎn)換和轉(zhuǎn)換后的坐標(biāo),為仿射變換矩陣。
OpenCV提供了仿射變換方法cv2.getAffineTransform(pos1,pos2),根據(jù)變換前后三個(gè)點(diǎn)的對(duì)應(yīng)關(guān)系來(lái)自動(dòng)求解仿射矩陣,然后使用函數(shù)cv2.warpAffine(img,M,(pic_width, pic_hight))將原有圖像旋轉(zhuǎn)變換,達(dá)到傾斜矯正的目的。
2.4 顏色定位
在OpenCV中由RGB轉(zhuǎn)換到HSV的過(guò)程中,圖像以8位三通道的形式保存,每個(gè)顏色分量占用8位,值的范圍為0~255,所以O(shè)penCV將H值的范圍縮小了一半,變?yōu)?°~180°。根據(jù)資料和實(shí)驗(yàn)數(shù)據(jù),獲取OpenCV庫(kù)中HSV空間的藍(lán)黃綠色域值,作為辨別有色牌照的定位依據(jù)。具體色域值如表1所示。
2.5 字符分割與識(shí)別
2.5.1 字符提取分割
(1)水平投影分析:對(duì)二值化圖像作水平投影分析,是從獲取的投影直方圖上計(jì)算出每個(gè)牌照上字符的開(kāi)始(上升點(diǎn))、結(jié)束(下降點(diǎn))位置、字符高度(峰寬度)、字符上下邊框位置等參數(shù)。
(2)垂直投影分析:本文所選取的垂直投影的最佳閾值是該方向投影直方圖的平均值和最小值的五分之一。利用閾值分割出各個(gè)字符區(qū)域,其中包括左右邊框、字符分割點(diǎn)和固定車(chē)牌的鉚釘。通過(guò)對(duì)比寬度大小,一一排除無(wú)效干擾區(qū)域。切割后的車(chē)牌字符圖像如圖4所示。
2.5.2 字符歸一化
本文調(diào)用函數(shù)cv2.copyMakeBorder(part_card,0,0,w,w, cv2.BORDER_CONSTANT,value=[0,0,0]),給各字符填充左右方向上的黑色邊緣,長(zhǎng)度為原字符寬度減去標(biāo)準(zhǔn)尺寸的絕對(duì)值的一半,然后使用cv2.resize()函數(shù)將字符圖像統(tǒng)一尺寸大小,以便在訓(xùn)練識(shí)別時(shí)提高效率和精度。字符歸一化處理如圖5所示。
2.5.3 字符特征提取
(1)Gamma校正:本文采用平方根的方式進(jìn)行Gamma標(biāo)準(zhǔn)化。Gamma校正公式為:? ? ? ? ? ? ? ? ? ? ?(5)
(2)計(jì)算圖像梯度:該步驟主要是為了進(jìn)一步減弱噪聲干擾,獲取輪廓像素信息。梯度計(jì)算公式如下:
(6)
(7)
式中,分別為像素點(diǎn)的水平梯度、垂直梯度及像素值。本文利用Sobel算子對(duì)字符圖像進(jìn)行模板卷積,由以下公式計(jì)算得到每個(gè)像素點(diǎn)處的梯度方向和幅值。水平邊緣算子為,垂直邊緣算子為。
(8)
(9)
其中,為梯度強(qiáng)度,為梯度方向。
(3)統(tǒng)計(jì)梯度方向投影:本文將每個(gè)字符圖像劃分成四個(gè)子圖方塊,對(duì)于每個(gè)子圖計(jì)算梯度方向直方圖,并將該直方圖轉(zhuǎn)換成極坐標(biāo)量化到圓上,根據(jù)需要分割成16個(gè)bins(每組的角度范圍為360°/bins),即整個(gè)直方圖包含16維特征向量。然后計(jì)算加權(quán)其幅度的方向直方圖(16bins)。因此,每個(gè)子圖就會(huì)提供一個(gè)包含16維數(shù)的特征向量,如圖6所示。
2.5.4 SVM算法
支持向量機(jī)(Support Vector Machine, SVM)是一種訓(xùn)練機(jī)器學(xué)習(xí)的二分類(lèi)模型,其決策邊界是對(duì)學(xué)習(xí)樣本求解的最大邊距超平面。
本文構(gòu)建字符分類(lèi)器采用高斯核來(lái)訓(xùn)練機(jī)器學(xué)習(xí),高斯核函數(shù)的計(jì)算公式為:
(10)
選用高斯核訓(xùn)練時(shí),須要指定的參數(shù)。無(wú)論使用哪種核函數(shù),訓(xùn)練時(shí)都要指定一個(gè)正實(shí)數(shù)的懲罰因子。
預(yù)測(cè)時(shí)的分類(lèi)判別函數(shù)為:
(11)
(12)
其中,為超平面的法向量,為分類(lèi)函數(shù)在軸的截距,sgn為符號(hào)函數(shù)。
2.5.5 字符識(shí)別
為了降低計(jì)算量,本文采用一對(duì)多分類(lèi)器,即65種樣本類(lèi)別的任意一種與其他64種構(gòu)成二分類(lèi)器,即只需構(gòu)造65個(gè)二分類(lèi)器,其中針對(duì)漢字分類(lèi)器31個(gè),針對(duì)數(shù)字與英文字母混合分類(lèi)器34個(gè)。
訓(xùn)練分類(lèi)器之前,需要對(duì)每個(gè)字符樣本提取特征數(shù)據(jù),將樣本的特征參數(shù)保存到相應(yīng)的.dat文件。針對(duì)切割好的字符圖像,相繼提取分類(lèi)器所需要的特征參數(shù),按照字符排列順序逐個(gè)代入分類(lèi)函數(shù)式中,計(jì)算后即可獲得相應(yīng)預(yù)測(cè)值。字符牌照識(shí)別效果如圖7-圖9所示。
3 結(jié)語(yǔ)
車(chē)牌識(shí)別系統(tǒng)是現(xiàn)代智能交通工程領(lǐng)域中研究的重點(diǎn)問(wèn)題之一,對(duì)車(chē)輛的自動(dòng)化管理起到了關(guān)鍵作用。本文對(duì)于圖像預(yù)處理、牌照定位、字符分割以及字符訓(xùn)練識(shí)別過(guò)程進(jìn)行了闡述研究,從而在系統(tǒng)測(cè)試時(shí)力爭(zhēng)達(dá)到預(yù)期可觀的顯著效果。
參考文獻(xiàn)
[1] 夏澤舉,董蘭芳.彩色灰度交叉融合的彩色圖像漸變技術(shù)[J].計(jì)算機(jī)仿真,2010,27(12):245-249.
[2] 崔屹.圖象處理與分析:數(shù)學(xué)形態(tài)學(xué)方法及應(yīng)用[M].科學(xué)出版社,2000.
[3] 王文豪,姜明新,趙文東.基于Canny算子改進(jìn)的邊緣檢測(cè)算法[J].中國(guó)科技論文,2017,12(08):910-915.
Research on License Plate Recognition Technology Based on Python+OpenCV
LI Xiao-sha,LIN Sen
(School of Fundamental Sciences, Shengli College China University of Petroleum, Dongying Shandong 257061)
Abstract:This paper studies license plate recognition through Python development platform and OpenCV machine vision library, aiming at finding faster andmore efficient algorithms. The overall framework of the system is divided into core modules such as image preprocessing, license plate location, character segmentation and training recognition. The experimental results show thatthe system has good timeliness and recognition effect.
Key words:Python;OpenCV;Image preprocessing;Character segmentation;Training recognition