引言
車牌識别系統是一項比較成熟的技術,并且已經得到了廣泛的應用:
圖1 圖檔識别系統(圖檔來源于百度)
車牌識别技術主要包含三個方面:車牌定位、字元分割和字元識别三個核心子產品。車牌定位是利用車牌的顔色和形狀特征确認并擷取汽車的車牌位置;字元分割是将擷取到的車牌切割成單個字元;字元識别目前主要有基于模闆比對算法和基于人工神經網絡算法對切割的字元進行識别。下面我們對基于MATLAB的車牌識别系統進行詳細的介紹。
本文重點講解車牌定位的實作。
1.圖像資料讀入
這裡所說的車牌識别是基于圖像的車牌識别技術。要想實作車牌識别,首先要從計算機中讀取含有要識别車牌的圖檔,MATLAB常用的讀取圖檔有兩種方式,一是利用uigetfile函數,執行此函數可得到供使用者選擇圖檔檔案的對話框,使用者選擇要識别的圖檔并确定後,會傳回此圖檔的檔案名和路徑名。二是利用imread函數将圖像資料讀出,指派給變量I,進而實作圖像資料的讀入。讀取之後的I矩陣是一個三維矩陣,第一第二維表示圖像的寬和高,第三維表示RGB三色。
圖2 讀取圖檔
素材圖檔來源于百度圖庫。
2. 圖像轉換
我們讀取圖檔之後得到的矩陣式三維資料I,而在處理圖檔時,我們隻需要其中的一種顔色就可以實作圖檔的識别,這樣就降低了資料處理的複雜程度。使用的函數是rgb2gray函數,該函數接收一個彩色圖像,傳回該圖像轉換為灰階圖後的圖像資料,并将該資料指派給變量I1,轉換完之後的I1也是矩陣,但是是二維矩陣,沒有彩色資訊。
圖3 灰階圖像
3. 邊緣檢測
圖像的邊緣檢測是數字圖像處理的基本問題,邊緣檢測的目的是辨別數字圖像中亮度變化明顯的點。圖像屬性中的顯著變化通常反映了屬性的重要事件和變化。經典的邊緣檢測方法,是通過對原始圖像中像素的某小鄰域構造邊緣檢測算子來達到檢測邊緣這一目的來實作的。
常用的邊緣檢測算子有:Roberts Cross算子,Prewitt算子,Sobel算子, Kirsch算子,羅盤算子,Canny算子,Laplacian算子等,本文采用最常用的一階算子Roberts Cross算子,計算得到如下結果:
圖4 邊緣檢測
4. 圖像腐蝕
腐蝕主要用于形态學中除去圖像的某些部分,Matlab用imerode函數實作圖像腐蝕。常見圖像形态學運算:腐蝕、膨脹、開運算、閉運算、骨架抽取等,其中最基本的形态學操作是:膨脹和腐蝕。
膨脹和腐蝕的主要用途:消除噪聲;分割出獨立的圖像元素,在圖像中連接配接相鄰的元素;尋找圖像中明顯的極大值或極小值區;求出圖像的梯度。腐蝕和膨脹是對像素值大的部分而言的,即高亮白部分而不是黑色部分,腐蝕是圖像中的高亮部分被腐蝕掉,領域縮減,效果圖擁有比原圖更小的高亮區域。
是以說,腐蝕之後的圖像是取原圖像更精華的部分,進而去除噪聲。
圖5 圖像的腐蝕
5. 圖像平滑處理
圖像平滑是指用于突出圖像的寬大區域、低頻成分、主幹部分或抑制圖像噪聲和幹擾高頻成分的圖像處理方法,目的是使圖像亮度平緩漸變,減小突變梯度,改善圖像品質。圖像平滑的方法包括:插值方法,線性平滑方法,卷積法等等。這樣的處理方法根據圖像噪聲的不同進行平滑,比如椒鹽噪聲,就采用線性平滑方法。下面給出平滑後的效果圖。
圖6 圖檔的平滑處理
6. 移除小對象
bwareaopen是matlab函數,作用是删除二值圖像BW中面積小于P的對象,預設情況下conn使用8鄰域。本文利用bwareaopen函數對圖像的小對象進行剔除。
圖7 移除小對象
7. 确定車牌位置
通過上面的6步驟處理之後,我們可以看出,已經基本确定了車牌所在的位置,現在需要将車牌在圖檔中的具體坐标确定,以友善下一步的剪裁。
這裡确定車牌位置的思路為:找出圖像矩陣中最大的元素,它所對應的行即為該二值圖像中白色像素點最多的行,該行可認為是靠近車牌中心的一行。 然後我們以這一行為起點,分别向上向下逐行掃描,确定車牌的上邊界(或下邊界)。 同理,我們可以用相同的方法确定出車牌的左邊界和右邊界。
圖8 确定車牌在圖中的位置
8. 剪切出車牌
第7步我們已經确定了車牌在圖中的方位,下面直接剪切出相應的資料即可:
圖9 車牌剪切圖
總結
本文主要講解了車牌識别中的車牌定位問題。(未完待續)