本發(fā)明屬于計算機(jī)視覺和智能交通技術(shù)領(lǐng)域,具體涉及一種基于投影的車牌字符切割方法。
背景技術(shù):
隨著智能交通領(lǐng)域的不斷發(fā)展,目前在道路交通監(jiān)控、自動收費(fèi)系統(tǒng)、小區(qū)車輛管理系統(tǒng)及安全監(jiān)測等方面都需要對車牌進(jìn)行準(zhǔn)確得識別。車牌識別技術(shù)一般是每個字符分開識別,所以要在識別之前進(jìn)行車牌字符的準(zhǔn)確切割。
當(dāng)前有許多車牌字符切割的方法,其中與本發(fā)明較接近的技術(shù)方案為:專利(許毅杰。申請?zhí)枺?01310263494.8,名稱:一種基于灰度直方圖二值化的車牌字符分割方法)提出一種基于灰度直方圖二值化的車牌字符分割方法,該方法首先利用車牌圖像的灰度直方圖和灰度均值計算得到合適的二值化閾值對車牌圖像進(jìn)行二值化,然后對二值化之后的圖像進(jìn)行水平方向投影分割得到二值化圖像中間部分,對水平切割后的二值化圖像進(jìn)行垂直方向投影分割得到字符,根據(jù)標(biāo)準(zhǔn)字符寬度對得到的字符進(jìn)行粘連情況處理,這種方法沒有考慮很多復(fù)雜的情況,比如車牌兩邊的污漬很可能被錯誤的當(dāng)做車牌字符,而且中國車牌第一個中文字存在左右偏旁的關(guān)系,也可能被錯誤的當(dāng)做兩個字符;專利(俞勝鋒,王輝,吳越,徐志江,孟利民,張標(biāo)標(biāo),杜克林,王毅。申請?zhí)枺?01110405227.0,名稱:一種車牌字符分割方法)提出了一種新的車牌字符分割方法,該方法先根據(jù)水平方向上灰度跳變小于14判斷車牌上下切割線,去除上下邊框,然后利用垂直投影法對字符進(jìn)行粗分割,最后根據(jù)字符中心間距、字符寬度和實際車牌字符寬高比等信息先確定第一第二個字符的區(qū)域,然后確定其他字符區(qū)域,該方法主要是對存在粘連情況的車牌很容易切割失敗,抗干擾能力比較弱;專利(張卡,尼秀明,何佳,范浩。申請?zhí)枺?01510658142.1,名稱:一種基于典型位置的車牌字符分割方法)提出一種基于典型位置的車牌字符分割方法,該方法首先通過水平投影曲線定位到車牌字符的上下邊緣位置,進(jìn)行水平切割,然后對分類器訓(xùn)練車牌2-3字符位置區(qū)域,利用該分類器在車牌圖像中找到2-3字符位置,推導(dǎo)出其他字符左右邊界,根據(jù)預(yù)測的邊界位置在垂直投影曲線中找到附近的曲線突變的位置確定為字符左右邊緣進(jìn)行字符切割,該方法需要多次在車牌圖像中預(yù)測車牌字符2-3位置,然后進(jìn)行概率計算,比較耗時,而且根據(jù)2-3字符位置推測其他字符左右邊界會有一定的偏差,車牌字符間距本身就比較近,所以在垂直投影曲線上相鄰字符的左右邊界在曲線上的突變位置也是很近的,容易導(dǎo)致分割不精確;文獻(xiàn)(古利超。車輛圖像中的車牌定位及字符分割算法研究[D]。重慶:重慶大學(xué),2012)提出了一種投影和連通區(qū)域相結(jié)合的字符分割方法,先對二值化車牌圖像進(jìn)行連通區(qū)域檢測,然后進(jìn)行水平投影和垂直投影,確定字符寬高,對于寬高小于字符寬高的相鄰連通區(qū)域進(jìn)行合并,最后在各個連通區(qū)域加矩形邊框提取字符,該方法簡單,但是抗噪能力弱,容易受到車牌污漬的影響導(dǎo)致分割錯誤;文獻(xiàn)(白建華。車牌字符分割及識別算法研究[D]。西安:西安電子科技大學(xué),2010)提出了一種車牌字符分割算法,該算法也是先進(jìn)行水平投影進(jìn)行車牌水平切割,去除上下邊框,然后利用垂直投影進(jìn)行字符切割,然后對粘連字符根據(jù)兩個字符中心點(diǎn)或者字符寬高比進(jìn)行分割,最后對斷裂字符進(jìn)行處理,即切割得到的相鄰兩個字符寬度之和等于標(biāo)準(zhǔn)字符寬度,則兩個字符認(rèn)為是斷裂的進(jìn)行合并,該方法沒有對字符以外的污漬區(qū)域進(jìn)行處理,容易把字符左右兩邊的污漬當(dāng)做字符,導(dǎo)致正確的字符缺失;文獻(xiàn)(遲曉君,孟慶春?;谕队疤卣髦档能嚺谱址指钏惴╗J]。計算機(jī)應(yīng)用研究,2006,4:256-257)提出了一種基于投影特征值的車牌字符分割算法,該算法首先對二值化車牌進(jìn)行垂直投影,根據(jù)每列像素點(diǎn)灰度值之和計算一個特征值,由先驗知識確定第一個字符分割點(diǎn)在車牌第二和第三個字符之間作為起始點(diǎn),然后在垂直投影圖中向左向右分別掃描,掃描到投影圖中大于特征值的波峰就可以確定一個字符分割點(diǎn),然后對分割好的字符進(jìn)行水平分割,該算法運(yùn)用先驗知識算出車牌第二和第三個字符之間的位置作為起點(diǎn)位置,很有可能算出的位置會與實際有偏差,這對之后其他字符的分割都會產(chǎn)生影響,而且對于存在粘連情況或者有污漬的車牌都會容易分割錯誤,抗噪能力弱,對于存在左右偏旁的中文字,則很容易會被分割成兩個字符。
綜上所述,當(dāng)前車牌字符切割的方法存在著如下不足:(1)受到車牌上污漬的影響導(dǎo)致字符分割錯誤,抗干擾能力弱;(2)對車牌字符粘連的情況沒有考慮,容易分割錯誤;(3)對于存在左右偏旁的中文字容易分割成兩個或多個字符;(4)計算復(fù)雜,耗時;(5)由先驗知識推導(dǎo)位置不精確,導(dǎo)致字符分割得不精確。
技術(shù)實現(xiàn)要素:
針對當(dāng)前車牌字符切割方法難以解決的不足,本發(fā)明提出了一種基于投影的車牌字符切割方法。
所述的一種基于投影的車牌字符切割方法,其特征在于包括如下步驟:
步驟1:對車牌圖像進(jìn)行二值化,使二值化的車牌為白底黑字,然后進(jìn)行傾斜矯正,對矯正后的圖片大小歸一化,二值化圖像的高度為height;
步驟2:對步驟1獲得的車牌圖像進(jìn)行水平切割,形成新的圖像levelCutImage;
步驟3:對步驟2)得到的圖像levelCutImage進(jìn)行垂直切割,具體步驟如下:
步驟3.1:創(chuàng)建一個存放車牌字符圖像的集合charList,計算圖像levelCutImage在width1/2處的豎直掃描線上的黑色像素點(diǎn)總數(shù)count1,如果count1>0,執(zhí)行步驟3.2,否則直接執(zhí)行步驟3.3,其中width1為圖像levelCutImage的寬度;
步驟3.2:從圖像levelCutImage中提取中間的字符圖像,存入charList中,具體步驟如下:
步驟3.2.1:從圖像levelCutImage的width1/2處開始,逐列向右掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1<1,則停止掃描,此時掃描線的位置記為字符右切割線cL1的位置;
步驟3.2.2:從圖像levelCutImage的width1/2處開始,逐列向左掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1<1,則停止掃描,此時掃描線的位置記為字符左切割線cL2的位置;
步驟3.2.3:從圖像levelCutImage中提取矩形區(qū)域(cL2,0,cL1-cL2,height1)對應(yīng)的部分作為字符圖像charImage,如果charImage中總的黑色像素點(diǎn)個數(shù)大于預(yù)先設(shè)定的閾值,則把charImage添加到charList中,否則不做處理,其中height1為圖像levelCutImage的高度;
步驟3.3:從圖像levelCutImage的中間往右提取一個還沒有提取到的字符圖像,存入charList中,具體步驟如下:
步驟3.3.1:從圖像levelCutImage的width1/2處往右還沒有掃描到的地方開始,往右逐列掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1>0,則把此時掃描線的位置記為字符左切割線cL2的位置,繼續(xù)往右逐列掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1<1,則停止掃描,此時掃描線的位置記為字符右切割線cL1的位置;
步驟3.3.2:從圖像levelCutImage中提取矩形區(qū)域(cL2,0,cL1-cL2,height1)內(nèi)的部分作為字符圖像charImage,如果charImage中總的黑色像素點(diǎn)個數(shù)大于預(yù)先設(shè)定的閾值,則把charImage添加到charList中,否則不做處理;
步驟3.4:從圖像levelCutImage的中間往左提取一個還沒有提取到的字符圖像,存入charList中,具體步驟如下:
步驟3.4.1:從圖像levelCutImage的width1/2處往左還沒有掃描到的地方開始,往左逐列掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1>0,則把此時掃描線的位置記為字符右切割線cL1的位置,繼續(xù)往左逐列掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1<1,則停止掃描,此時掃描線的位置記為字符左切割線cL2的位置;
步驟3.4.2:從圖像levelCutImage中提取矩形區(qū)域(cL2,0,cL1-cL2,height1)內(nèi)的部分作為字符圖像charImage,如果charImage中總的黑色像素點(diǎn)個數(shù)大于預(yù)先設(shè)定的閾值,則把charImage插入到charList頭部,否則不做處理,繼續(xù)進(jìn)入步驟3.3,直到charList中元素個數(shù)不小于7個或者圖像levelCutImage左右兩邊都已經(jīng)掃描結(jié)束,則停止循環(huán);
步驟4:對charList中存在字符粘連的圖像進(jìn)行拆分,直到在charList中找不到圖像寬度大于widthAvg的圖像為止;
步驟5:保證charList中的圖像總數(shù)為7個,具體步驟如下:
步驟5.1:如果charList中的圖像總數(shù)小于7,則說明切割失敗,如果charList中的圖像總數(shù)等于7,則直接進(jìn)入步驟6,如果charList中的圖像總數(shù)大于7,則進(jìn)入步驟5.2;
步驟5.2:根據(jù)charList中每個字符圖像在levelCutImage圖像中的左右邊界位置,在charList中找到一個在levelCutImage中離width1/2處的豎直線最近的字符圖像,以這個字符圖像為中心,在charList中分別往左往右選取3個字符圖像,把charList中除了這7個字符圖像以外的其他圖像都刪除;
步驟6:對charList中第一個字符圖像進(jìn)行再處理,具體處理步驟如下:
步驟6.1:計算charList中除了第一個字符圖像以外的其他6個字符圖像的平均寬度,記為avgWidth;
步驟6.2:記第一個字符圖像在levelCutImage中的右切割線cL1等于charList中第一個字符在levelCutImage中右邊界的位置,左切割線cL2=cL1-avgWidth;
步驟6.3:從levelCutImage中選取矩形區(qū)域(cL2,0,cL1-cL2,height1)內(nèi)的部分圖像作為第一個字符圖像,替換charList中的第一個字符圖像。
所述的一種基于投影的車牌字符切割方法,其特征在于步驟2中的對車牌圖像進(jìn)行水平切割的具體步驟如下:
步驟2.1:從步驟1獲得的車牌圖像的height/2處開始,逐行向上掃描,直到在掃描線上車牌圖像的黑色像素點(diǎn)總數(shù)count<threshold,則停止掃描,此時掃描線的位置記為上切割線cutLine1的位置,其中height為步驟1獲得的二值化圖像的高度,threshold為預(yù)先設(shè)定的閾值;
步驟2.2:從步驟1獲得的車牌圖像的height/2處開始,逐行向下掃描,直到在掃描線上車牌圖像的黑色像素點(diǎn)總數(shù)count<threshold,則停止掃描,此時掃描線的位置記為下切割線cutLine2的位置;
步驟2.3:去除步驟1獲得的車牌圖像中cutLine1以上的部分圖像和cutLine2以下的部分圖像,留下車牌圖像中間部分形成新的圖像levelCutImage。
所述的一種基于投影的車牌字符切割方法,其特征在于步驟4中對charList中存在字符粘連的圖像進(jìn)行拆分的具體步驟如下:
步驟4.1:根據(jù)公式(1)計算車牌字符圖像平均寬度widthAvg;
widthAvg=width1/7 (1)
步驟4.2:統(tǒng)計charList中圖像寬度小于widthAvg的圖像的個數(shù)記為num,計算charList中圖像寬度小于widthAvg的圖像的寬度之和記為widthSum,根據(jù)公式(2)重新計算widthAvg的值;
步驟4.3:在charList中找到一個圖像寬度大于widthAvg的圖像記為tempImg,記該圖像在charList中的索引值為i,在charList中把該圖像移除;
步驟4.4:把tempImg從右往左按照字符寬度widthAvg進(jìn)行分割,每分割出一個字符圖像,則把該字符圖像插入到charList中索引值i處,分割到最左邊一個字符圖像的時候,如果該圖像寬度不小于widthAvg/2,則插入到charList中索引值i處,否則舍棄,然后重新進(jìn)入步驟4.3,直到在charList中找不到圖像寬度大于widthAvg的圖像為止。
通過使用本發(fā)明的方法切割車牌字符,與現(xiàn)有技術(shù)相比,其有益效果如下:
1)本發(fā)明通過先進(jìn)行車牌水平切割再進(jìn)行垂直切割,可以避免上下污漬對于字符分割的影響,且字符垂直切割從中間往兩邊切,切滿7個字符則停止切割,避免把車牌左右邊框誤認(rèn)為字符,以及避免左右污漬干擾;
2)本發(fā)明在對存在粘連情況的字符進(jìn)行重新分割的時候,選取的字符分割寬度為已經(jīng)切割得到的字符中確定不存在粘連情況的字符圖像的平均寬度,更加符合實際情況,提高字符分割正確率;
3)本發(fā)明對粘連情況處理之后存在字符圖像大于7個的,提取在車牌圖像中最靠近中間位置的7個字符,因為兩邊可能受污漬干擾錯認(rèn)為字符,大大提高了字符分割正確率;
4)本發(fā)明通過對第1個中文字符進(jìn)行再處理,根據(jù)其他6個字符的平均寬度重新進(jìn)行定位得到第一個中文字符圖像,可以避免中文字符左右偏旁導(dǎo)致字符中間斷裂的情況。
附圖說明
圖1為本發(fā)明實施例選取的用于切割的二值化車牌圖像;
圖2為本發(fā)明水平切割后的二值化車牌圖像。
圖3為本發(fā)明最終切割得到的車牌字符圖像。
具體實施方式
下面結(jié)合實施例來詳細(xì)闡述本發(fā)明的車牌傾斜矯正方法的具體實施方式。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用于解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明的一種基于投影的車牌字符切割方法,具體步驟如下:
步驟1:對車牌圖像進(jìn)行二值化,使二值化的車牌為白底黑字,然后進(jìn)行傾斜矯正,對矯正后的圖片大小歸一化,在本實例中圖片大小歸一化為長度204像素,寬度54像素,得到如圖1所示的結(jié)果;
步驟2:對步驟1獲得的車牌圖像進(jìn)行水平切割,本實例中水平切割的效果圖如圖2所示,具體步驟如下:
步驟2.1:從步驟1獲得的車牌圖像的height/2處開始,逐行向上掃描,直到在掃描線上車牌圖像的黑色像素點(diǎn)總數(shù)count<threshold,則停止掃描,此時掃描線的位置記為上切割線cutLine1的位置,其中height為步驟1獲得的二值化圖像的高度,threshold為預(yù)先設(shè)定的閾值,這個閾值主要根據(jù)車牌圖片大小來設(shè)定,圖片越大,設(shè)定得越大,圖片越小,設(shè)定得越小,在本實例中threshold設(shè)定為20;
步驟2.2:從步驟1獲得的車牌圖像的height/2處開始,逐行向下掃描,直到在掃描線上車牌圖像的黑色像素點(diǎn)總數(shù)count<threshold,則停止掃描,此時掃描線的位置記為下切割線cutLine2的位置;
步驟2.3:去除步驟1獲得的車牌圖像中cutLine1以上的部分圖像和cutLine2以下的部分圖像,留下車牌圖像中間部分形成新的圖像levelCutImage;
步驟3:對圖像levelCutImage進(jìn)行垂直切割,具體步驟如下:
步驟3.1:創(chuàng)建一個存放車牌字符圖像的集合charList,計算圖像levelCutImage在width1/2處的豎直掃描線上的黑色像素點(diǎn)總數(shù)count1,如果count1>0,執(zhí)行步驟3.2,否則直接執(zhí)行步驟3.3,其中width1為圖像levelCutImage的寬度;
步驟3.2:從圖像levelCutImage中提取中間的字符圖像,存入charList中,具體步驟如下:
步驟3.2.1:從圖像levelCutImage的width1/2處開始,逐列向右掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1<1,則停止掃描,此時掃描線的位置記為字符右切割線cL1的位置;
步驟3.2.2:從圖像levelCutImage的width1/2處開始,逐列向左掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1<1,則停止掃描,此時掃描線的位置記為字符左切割線cL2的位置;
步驟3.2.3:從圖像levelCutImage中提取矩形區(qū)域(cL2,0,cL1-cL2,height1)內(nèi)的部分作為字符圖像charImage,如果charImage中總的黑色像素點(diǎn)個數(shù)大于預(yù)先設(shè)定的閾值,則把charImage添加到charList中,否則不做處理,這個預(yù)先設(shè)定的閾值主要根據(jù)車牌圖片大小來設(shè)定,圖片越大,設(shè)定得越大,圖片越小,設(shè)定得越小,在本實例中該閾值設(shè)定為50,其中height1為圖像levelCutImage的高度;
步驟3.3:從圖像levelCutImage的中間往右提取一個還沒有提取到的字符圖像,存入charList中,具體步驟如下:
步驟3.3.1:從圖像levelCutImage的width1/2處往右還沒有掃描到的地方開始,往右逐列掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1>0,則把此時掃描線的位置記為字符左切割線cL2的位置,繼續(xù)往右逐列掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1<1,則停止掃描,此時掃描線的位置記為字符右切割線cL1的位置;
步驟3.3.2:從圖像levelCutImage中提取矩形區(qū)域(cL2,0,cL1-cL2,height1)內(nèi)的部分作為字符圖像charImage,如果charImage中總的黑色像素點(diǎn)個數(shù)大于預(yù)先設(shè)定的閾值,則把charImage添加到charList中,否則不做處理,這個預(yù)先設(shè)定的閾值跟步驟3.2.3中的一樣,在本實例中該閾值設(shè)定為50;
步驟3.4:從圖像levelCutImage的中間往左提取一個還沒有提取到的字符圖像,存入charList中,具體步驟如下:
步驟3.4.1:從圖像levelCutImage的width1/2處往左還沒有掃描到的地方開始,往左逐列掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1>0,則把此時掃描線的位置記為字符右切割線cL1的位置,繼續(xù)往左逐列掃描,直到在掃描線上圖像levelCutImage的黑色像素點(diǎn)總數(shù)count1<1,則停止掃描,此時掃描線的位置記為字符左切割線cL2的位置;
步驟3.4.2:從圖像levelCutImage中提取矩形區(qū)域(cL2,0,cL1-cL2,height1)內(nèi)的部分作為字符圖像charImage,如果charImage中總的黑色像素點(diǎn)個數(shù)大于預(yù)先設(shè)定的閾值,則把charImage插入到charList頭部,否則不做處理,這個預(yù)先設(shè)定的閾值跟步驟3.2.3中的一樣,在本實例中該閾值設(shè)定為50,繼續(xù)進(jìn)入步驟3.3,直到charList中元素個數(shù)不小于7個或者圖像levelCutImage左右兩邊都已經(jīng)掃描結(jié)束,則停止循環(huán);
步驟4:對charList中存在字符粘連的圖像進(jìn)行拆分,具體步驟如下:
步驟4.1:根據(jù)公式(1)計算車牌字符圖像平均寬度widthAvg;
widthAvg=width1/7 (1)
步驟4.2:統(tǒng)計charList中圖像寬度小于widthAvg的圖像的個數(shù)記為num,計算charList中圖像寬度小于widthAvg的圖像的寬度之和記為widthSum,根據(jù)公式(2)重新計算widthAvg的值;
步驟4.3:在charList中找到一個圖像寬度大于widthAvg的圖像記為tempImg,記該圖像在charList中的索引值為i,在charList中把該圖像移除;
步驟4.4:把tempImg從右往左按照字符寬度widthAvg進(jìn)行分割,每分割出一個字符圖像,則把該字符圖像插入到charList中索引值i處,分割到最左邊一個字符圖像的時候,如果該圖像寬度不小于widthAvg/2,則插入到charList中索引值i處,否則舍棄,然后重新進(jìn)入步驟4.3,直到在charList中找不到圖像寬度大于widthAvg的圖像為止;
步驟5:保證charList中的圖像總數(shù)為7個,具體步驟如下:
步驟5.1:如果charList中的圖像總數(shù)小于7,則說明切割失敗,如果charList中的圖像總數(shù)等于7,則直接進(jìn)入步驟6,如果charList中的圖像總數(shù)大于7,則進(jìn)入步驟5.2;
步驟5.2:根據(jù)charList中每個字符圖像在levelCutImage圖像中的左右邊界位置,在charList中找到一個在levelCutImage中離width1/2處的豎直線最近的字符圖像,以這個字符圖像為中心,在charList中分別往左往右選取3個字符圖像,把charList中除了這7個字符圖像以外的其他圖像都刪除;
步驟6:對charList中第一個字符圖像進(jìn)行再處理,具體處理步驟如下:
步驟6.1:計算charList中除了第一個字符圖像以外的其他6個字符圖像的平均寬度,記為avgWidth;
步驟6.2:記第一個字符圖像在levelCutImage中的右切割線cL1等于charList中第一個字符在levelCutImage中右邊界的位置,左切割線cL2=cL1-avgWidth;
步驟6.3:從levelCutImage中選取矩形區(qū)域(cL2,0,cL1-cL2,height1)內(nèi)的部分圖像作為第一個字符圖像,替換charList中的第一個字符圖像,本實例中最終得到如圖3所示的字符圖像分割結(jié)果。