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