曹文平,陳厚錦
一種基于輪廓特征的車牌定位算法
曹文平,陳厚錦
(新鄉(xiāng)學院 機電工程學院,河南 新鄉(xiāng) 453003)
為了方便快捷地檢測到圖片中汽車牌照的位置信息,文章提出了一種基于圖像輪廓特征的車牌定位算法。此算法基于OpenCV數(shù)據(jù)庫中的相關(guān)函數(shù),首先使用圖像預處理操作來增強圖像,然后采用輪廓查找、面積篩選的方式定位車牌,接著根據(jù)車牌的像素信息和寬高比例等特征篩選出符合條件的輪廓,最后使用綠色框線將車牌框選并顯示和保存定位完成的圖像。
輪廓特征;OpenCV數(shù)據(jù)庫;車牌定位算法
近年來,隨著公路交通的高速發(fā)展,人們出行對汽車的依賴度越來越高,而汽車出行帶來的一系列停車收費、高速出入口電子不停車電子收費系統(tǒng)(Electronic Toll Collection, ETC)通道、行駛監(jiān)控、測速和違章拍照等都依賴對車牌號的識別,而車牌位置的精準定位,則是車牌識別的首個關(guān)鍵所在。
目前,很多學者使用各式各樣的算法對車牌定位進行研究,大多數(shù)都是采用基于形態(tài)學特征和顏色特征等方法進行車牌定位。近些年,隨著機器學習的流行,運用深度學習算法慢慢成為主流,如:高艷等[1]基于OpenCV和卷積神經(jīng)網(wǎng)絡的車牌識別研究;常巧紅等[2]基于色調(diào)、飽和度和明度(Hue, Saturation, Value, HSV)色彩空間和數(shù)學形態(tài)學的方法進行車牌定位;馬巧梅等[3]基于改進的YOLOv3算法進行車牌定位。
本文使用PyCharm為集成開發(fā)環(huán)境(Integra- ted Development Environment, IDE),以Python為基礎(chǔ),通過OpenCV視覺工具包,基于圖像的輪廓特征搭建一種車牌定位算法。
圖像預處理包括圖像的灰度化、直方圖均衡化、高斯平滑、sobel梯度計算、二值化以及圖像的腐蝕和膨脹。
通過相機采集到車輛照片信息后,不可避免地會受到天氣、光照、角度、陰影等干擾因素的影響。為了便于快速精準定位圖片中的車牌位置,需要對圖片進行二值化、平滑、濾波等預處理,其具體處理過程如下:
目前相機采集到的圖片一般都是彩色圖,但由于全局直方圖均衡化的輸入?yún)?shù)必須是灰度圖,故運算前需首先將彩色圖像轉(zhuǎn)化為灰度圖像。
直方圖均衡化是首先對在圖像中像素值個數(shù)較多的灰度值(即圖像中有用信息的灰度值)進行擴展,而對像素點個數(shù)較少的灰度值(即圖像中無用信息的灰度值)進行合并,從而增大圖像的對比度,達到增強的目的,使圖像更清晰。
高斯平滑是一種線性平滑濾波器,高斯平滑后圖像中每一個像素點的值都由其本身和鄰域(4鄰域、8鄰域、對角鄰域等)內(nèi)其他像素點的值經(jīng)過加權(quán)平均后得到。
高斯平滑濾波的具體操作包括:首先設(shè)定一個模板,然后依次掃描圖像中的每一個像素點,再計算出模板覆蓋的鄰域內(nèi)像素的加權(quán)平均灰度值,接著用其替代模板中心像素點的灰度值,進而基于二維高斯函數(shù),構(gòu)建權(quán)重矩陣和高斯核,最終對每個像素點進行濾波處理(平滑、去噪)。本文采用的是高斯濾波函數(shù)cv2.GaussianBlur()[4]處理圖像。
中值濾波是取當前像素點及其周圍臨近像素點(一共有奇數(shù)個像素點)的像素值,將這些像素值排序,然后將位于中間位置的像素值作為當前像素點的像素值,其作用主要是在濾除噪聲的同時,能夠保護信號的邊緣,使之不被模糊。
二值化是選取一個全局閾值,然后把整幅圖像分成非黑即白的二值圖像,采用圖像閾值處理函數(shù)cv2.threshol,將圖像中灰度值大于閾值170的像素點賦為255,反之則賦值為0。閾值的合理設(shè)置對圖像二值化后的處理至關(guān)重要,過大導致有效信息缺失,過小則會影響處理速度,從而降低時效性。
圖像梯度計算反映的是圖像變化的速度,對于圖像的邊緣部分,其灰度值變化較大,梯度值(導數(shù)最大)也較大,而對于圖像中相對比較平滑的部分而言,其灰度值變化較小,對應的梯度值也比較小。圖像梯度計算需要求導數(shù),但是圖像梯度一般通過計算像素值的差來得到梯度的近似值(近似導數(shù)值)。將上述運算關(guān)系進一步優(yōu)化,可以得到更復雜的邊緣信息,采用Sobel算子,結(jié)合高斯平滑和微分求導運算,利用局部差分尋找邊緣,計算所得到一個梯度的相似值。
閉運算采用圖像處理中基本的形態(tài)學操作,先對圖像進行膨脹,再進行腐蝕。膨脹是使用像素鄰域內(nèi)的局部極大運算來膨脹一張圖片,腐蝕是使用像素鄰域內(nèi)的局部極小運算來腐蝕一張圖片,二者是一對相反的操作,但是都是針對圖像中的白色(高亮)部分而言。本文膨脹使用dilate()函數(shù),腐蝕使用erode()函數(shù),膨脹和腐蝕操作的核函數(shù)如下:
element1=cv2.getStructuringElement(cv2. MORPH _RECT,(9, 1))
element2=cv2.getStructuringElement(cv2. MORPH_RECT,(9, 7))
其處理過程是先將圖像膨脹一次,讓輪廓突出;然后將圖像腐蝕一次,去掉細節(jié);最后使圖像再次膨脹和腐蝕,讓輪廓更加明顯,圖像預處理結(jié)果如1所示。
圖1 圖像預處理結(jié)果
輸入預處理后圖像,使用函數(shù)cv2.findCon tours查找輪廓并進行提取,而后選擇函數(shù)cv2. RETR_TREE以樹形結(jié)構(gòu)輸出輪廓信息,壓縮水平方向、垂直方向和對角線方向的元素,只保留該方向的終點坐標。
選擇cv2.CHAIN_APPROX_SIMPLE,則con- tours中一個list元素所包含的點之間應該用直線連接起來,這個可以用cv2.drawContours()函數(shù)觀察一下效果。選擇cv2.RETR_TREE,則以樹形結(jié)構(gòu)組織輸出,hierarchy的四列分別對應下一個輪廓編號、上一個輪廓編號、父輪廓編號、子輪廓編號,該值為負數(shù)表示沒有對應項。
確定好輪廓后,計算各個輪廓的面積并進行篩選,小于4 000的刪除,然后使用arcLength函數(shù)計算封閉輪廓的周長或曲線的長度,接著調(diào)用函數(shù)cv2.approxPolyDP(使用Douglas-Peucker算法,將一個連續(xù)光滑的曲線折線化)使其數(shù)字化,再對曲線進行采樣(在曲線上取有限個點),將其變?yōu)檎劬€的同時能夠在一定程度上保持原有曲線的形狀。
由此可知,當采樣時設(shè)定的閾值越小,擬合的越精準,擬合后多邊形的邊和頂點越多。cv2.approxPolyDP的參數(shù)2(epsilon)是一個距離值,表示多邊形的輪廓接近實際輪廓的程度,其值越小,越精確。
輪廓矩形的選擇,使用函數(shù) cv2.minAreaRect()[5]返回一個Box2D結(jié)構(gòu)rect:(最小外接矩形的中心(寬度,高度)即(,),旋轉(zhuǎn)角度),但是要繪制這個矩形,需要矩形4個頂點坐標box需通過函數(shù) cv2.BoxPoints()獲得,返回形式為[[0,0], [1,1],[2,2],[3,3]],得到的最小外接矩形的4個頂點順序、中心坐標、寬度、高度、旋轉(zhuǎn)角度(度數(shù)形式,不是弧度數(shù))的對應關(guān)系如圖2所示。
使用函數(shù)cv2.minAreaRect()找到最小的矩形,計算出四個端點的坐標和矩形的寬和高,由于車牌正常情況下長高比在2.7~5.0,可通過篩選確定車牌區(qū)域位置,如圖3所示。計算后返回三組rect結(jié)構(gòu)數(shù)據(jù)如下:
1.rect is: ((413.5, 341.5), (71.0, 197.0), 90.0) 2.7746478873239435
2.rect is: ((89.0, 263.0), (140.0, 94.0), 90.0) 0.6714285714285714
3.rectis:((702.1650390625,132.81484985351562),(82.64925384521484,221.76129150390625), 4.197668075561523) 0.4604651162790698
圖2 函數(shù)cv2.minAreaRect()矩形選擇示意圖
圖3 車牌區(qū)域查找
根據(jù)查找的車牌輪廓信息,滿足條件為第一組數(shù)據(jù),使用框線標記出車牌區(qū)域,具體定位信息如圖4所示,同時輸出并顯示出帶框線輪廓的車牌圖片如圖5所示。
圖4 圖像車牌定位圖
圖5 車牌定位結(jié)果
車牌的安裝根據(jù)不同的車型,即轎車、運動型多用途汽車(Sport Utility Vehicle, SUV)、貨車、客車以及消防車、救護車、工程救險車和警車等特種車輛,其存在一定的位置差異,且根據(jù)機動車號牌安裝規(guī)定,車牌安裝時橫向水平,縱向夾角不大于±15°[6]。
為了驗證此算法的通用性,通過對二十張不同車型及拍攝角度的車牌照片進行定位,由于此算法是基于車牌輪廓的特征,與其車牌安裝位置及攝像機拍攝角度的差異關(guān)聯(lián)性很小,故其均能準確地定位車牌位置并顯示,證明該算法設(shè)計合理,準確率較好,能夠有效地進行車牌定位??v觀整個車牌定位流程,輪廓查找邏輯及參數(shù)的設(shè)定至關(guān)重要,且輪廓曲線擬合時,設(shè)定的閾值越小,擬合的越精準。
隨著計算機軟件和硬件的發(fā)展,圖像處理的算法層出不窮,車牌定位的方法也多種多樣,但是機器學習算法需要圖形處理器(Graphics Proce- ssing Unit, GPU)對計算機的性能要求比較高等,在滿足定位精度要求的情況下,基于輪廓特征的車牌定位,不僅能夠快速精準的定位,且對硬件的要求也相對較低,故為后續(xù)的識別及應用提供了一種更為經(jīng)濟實用的方法。
[1] 高艷,劉海峰.基于OpenCV和卷積神經(jīng)網(wǎng)絡的車牌識別研究[J].軟件工程,2022,25(5):23-25.
[2] 常巧紅,高滿屯.基于HSV色彩空間與數(shù)學形態(tài)學的車牌定位研究[J].圖學學報,2013,34(4):159-162.
[3] 馬巧梅,王明俊,梁昊然.復雜場景下基于改進YOLOv3的車牌定位檢測算法[J].計算機工程與應用,2021,57 (7):198-208.
[4] SINGH A,PATEL A,RAI A,et al.Face Detection Using Python and OpenCV[J].International Journal of Advances in Engineering and Management,2022,4(4): 103-105.
[5] ATUL K.The AI Learner[EB/OL].(2020-11-03)[2023- 01-05].https://theailearner.com/tag/cv2-minarearect/. 3 Nov 2020/24 Nov 2022.
[6] 道路交通管理標準化技術(shù)委員會.機動車號牌專用固封裝置:GA 804-2019[S].北京:中國標準出版社, 2019.
A License Plate Location Algorithm Based on Contour Features
CAO Wenping, CHEN Houjin
( College of Mechanical and Electrical Engineering, Xinxiang University, Xinxiang 453003, China )
In order to detect the location information of the license plate in the image quickly and conveniently, this paper proposes a license plate location algorithm based on image contour features.Thisalgorithm is based on the correlation function in the OpenCV database.Firstly,usingimagepre-processing operations to enhance images, and then the license plate is located by contour search and area filtering.Then, the eligible contour is filtered according to the pixel information and width height ratio of the license plate. Finally, using the green border to frame the license plate and display and save the image after positioning.
Contour features; OpenCV database; License plate positioning algorithm
TP391.4;U464
A
1671-7988(2023)12-44-04
曹文平(1988-),男,碩士,助教,研究方向為汽車設(shè)計、機器視覺,E-mail:540158097@qq.com。
10.16638/j.cnki.1671-7988.2023.012.009