田櫪文,齊文琴,李 歡
(成都理工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,四川 成都 610059)
車牌是汽車非常重要的一部分。車牌相當(dāng)于車的身份證,是辨別一個(gè)車子的主人關(guān)鍵。因此車牌識(shí)別也變得尤為重要。
停車場的車牌商業(yè)化的識(shí)別會(huì)大大減少人工費(fèi)用,減少人們手動(dòng)化操作,增加了商家的收益。但是在識(shí)別之前需要進(jìn)行車牌分割。一個(gè)好的分割算法,能有效地減少識(shí)別效能。本文主要介紹一種車牌分割的算法,通過OpenCV提供的部分api功能,結(jié)合自己的算法計(jì)算出車牌位置,進(jìn)行合理切割。
OpenCV是一種跨平臺(tái)的計(jì)算機(jī)視覺庫,可以運(yùn)用在多個(gè)平臺(tái)。由于它對(duì)多個(gè)語言提供了接口,所以在工具上選擇OpenCV來執(zhí)行下面的操作。
本文設(shè)置的圖片是針對(duì)停車場車牌的自動(dòng)識(shí)別切割,所以攝像頭位置方向是直擊車牌附近。實(shí)測中,對(duì)于距離稍微遠(yuǎn)一些或者全身車子照有部分圖片實(shí)測成功。車牌因?yàn)楹芴厥?,?duì)于大部分車牌來說成藍(lán)色,這種情況對(duì)于切割具有很大的幫助。
最初的想法是利用均值漂移,但是實(shí)測情況不好,均值漂移無法準(zhǔn)確確定具體位置,而且計(jì)算量過于龐大,對(duì)于停車場使用的分割需求非常大的情況是不利的。另外一種是使用本身的分割算法grabcut,這個(gè)前景后景需要手工找尋前景后景,但是車牌的環(huán)境是不定性的,目標(biāo)位置所以也有不定性,在露天的情況下還需要對(duì)天氣環(huán)境,以及鏡頭的清晰程度進(jìn)行多方面的考慮。于是進(jìn)一步考慮使用形態(tài)學(xué)變換可以進(jìn)行有效的分割。
形態(tài)學(xué)變換是OpenCV重要的一個(gè)操作工具。形態(tài)學(xué)變換主要是可以用來消除不必要的噪音,以及分割出一副圖像中相對(duì)比較獨(dú)立的元素,或者把一些互鄰的元素相互連接起來,所以形態(tài)學(xué)變換在這方面對(duì)分割相當(dāng)?shù)挠行?。本文主要用到腐蝕膨脹,利用轉(zhuǎn)換hsv的方法找尋剩余藍(lán)色的位置,最后利用角度矯正、切割得到。
萬能第一步,首先要使用高斯濾波來初始灰度化的圖片??梢允褂脵?quán)值灰度化的方法,這樣可以使車牌部分灰度值更深[1]。高斯濾波最重要的作用在于降低一些圖片不該有的噪聲。在車子現(xiàn)有的圖片中可以看到,車子反光是最需要處理的一處,而高斯濾波可以有效地減少反光產(chǎn)生的噪音。隨后需要對(duì)圖片邊緣檢測,為后面的圖像腐蝕膨脹做基礎(chǔ),canny算子的方向性保障了邊緣強(qiáng)度的估計(jì),它有一定的能力降噪并且有效地保持若邊緣。
使用多次膨脹腐蝕可以達(dá)到的效果如圖1所示。因?yàn)檐嚺贫际且詸M向的位置排列順序,所以使用橫軸方向的膨脹,使想要的字符都可以順利聯(lián)通起來,但是設(shè)想如果一直使用膨脹將會(huì)有許多小塊的碎片,這時(shí)就需要進(jìn)行多次的腐蝕來將它去除,然后再進(jìn)行幾次膨脹,讓幾次膨脹和腐蝕次數(shù)相同,便于圖像回復(fù)原形態(tài)大小[2]。
腐蝕膨脹后,截取此空白部分,將圖像轉(zhuǎn)換成HSV利用藍(lán)色的特點(diǎn),可以提取藍(lán)色的部分。經(jīng)多圖多次實(shí)驗(yàn)的得出,藍(lán)色色調(diào)(H)為90~120,而飽和度(S)為90~160,明度(V)為80~255。將圖像截取到藍(lán)色區(qū)域期間(見圖2)。
圖1 膨脹腐蝕后效果
當(dāng)然這樣下來的圖片并不是正向的,存在傾斜,這時(shí)就需要對(duì)圖片進(jìn)行角度矯正,角度矯正采取霍夫直線變換,找尋圖片中的直線。另一種方法是街區(qū)后利用黑色區(qū)域計(jì)算角度。但是使用后者對(duì)于其他圖片不能全部適用,所以選擇前者。其次是要充分考慮如何選擇合適的參數(shù),按照比例找尋參數(shù)是非常重要的一點(diǎn),按照原有圖片比例計(jì)算,車牌標(biāo)準(zhǔn)長度為440 mm,一個(gè)字母或數(shù)字長度45 mm,中間一點(diǎn)為10 mm。
圖2 提取藍(lán)色區(qū)域后效果
找到合適參數(shù),計(jì)算出一條直線后,找到兩個(gè)點(diǎn)計(jì)算角度,并截取為小圖(見圖3)。
圖3 校正后截取的小圖
經(jīng)過一系列的處理后難免會(huì)出現(xiàn)一些不必要的噪聲黑點(diǎn),使用二值化將圖像變?yōu)楹诎椎膱D片便于后續(xù)切割。但是二值化后在多張圖片處理后都發(fā)現(xiàn)黑點(diǎn)變多了,如果不提前消除會(huì)有很大的影響。所以繼續(xù)使用膨脹和閉操作進(jìn)行適當(dāng)調(diào)試,由于噪聲多是豎直方向的較多,所以使用y方向的膨脹。
最后進(jìn)行截取。筆者的考慮是進(jìn)行白色區(qū)域檢測,然后利用顯示車牌與圖片大小的比例進(jìn)行有效切割。開始遇上黑色點(diǎn),當(dāng)遇上白色點(diǎn)記錄初始位置推出循環(huán)進(jìn)行下一輪循環(huán),然后持續(xù)遇見白色的點(diǎn)都進(jìn)行跳出循環(huán)。一直持續(xù),遇到白色的點(diǎn)結(jié)束時(shí)記錄結(jié)束位置,然后將兩點(diǎn)位置切割下來。
最后最重要的問題在于有偏旁的漢字和點(diǎn)的處理,于是按照實(shí)際比例設(shè)計(jì)了上限和下限。車牌上點(diǎn)的大小為10 mm乘以圖片寬度和440 mm的比例,如果小于這個(gè)值的兩點(diǎn)距離,予以按比例截取權(quán)限。若大于這個(gè)值且小于一個(gè)單漢字的比例,則不給予權(quán)限切割且按照原比例切割。這樣就可以有效避免偏旁分離的和點(diǎn)的問題(見圖4)[3]。
圖4 分割后的部分圖
此算法運(yùn)用了很多OpenCV的標(biāo)準(zhǔn)庫,但在hsv中的截取藍(lán)色部分和圖像校正,以及后面的單字分割進(jìn)行了部分改進(jìn)。在許多標(biāo)準(zhǔn)庫中函數(shù)的參數(shù)進(jìn)行實(shí)驗(yàn)并校正部分參數(shù)使完美運(yùn)行。經(jīng)過幾輪測試,成功率高達(dá)90%,能達(dá)到預(yù)期的效果。
在不成功的樣品里有幾種情況,一種是圖片太大,所以在后續(xù)的改進(jìn)中可以使用圖像金字塔的格式將圖片向下采樣,減小圖片的大小。
由于圖片分割是給后來的圖像識(shí)別做素材,所以后面的情況將會(huì)把所有的圖片的大小調(diào)整成一致便于機(jī)器學(xué)習(xí)。
圖片分割是一個(gè)很成熟的技術(shù),在各個(gè)領(lǐng)域都有應(yīng)用。不過在實(shí)現(xiàn)算法的同時(shí)還應(yīng)該減少運(yùn)算時(shí)間,減少內(nèi)存消耗。在未來,還將對(duì)分割后的車牌進(jìn)行機(jī)器學(xué)習(xí),讓它達(dá)到真正識(shí)別功能。