如何在 MATLAB 中實現車牌號圖片的識別?
只要求識別圖片中的數字,結果可以用圖像和文本形式表現出來,謝謝!
如果已經檢測到了車牌,那麼可以用如下的方法進行簡單的字元分割及識別:
- 對車牌圖片進行水平及垂直投影,根據波谷的位置,將每個字元提取出來
- 選定一個特徵(甚至可以是原圖的向量化),用樣本庫中的各類字元訓練一個分類器,可以用SVM(libSVM里有MATLAB的介面)
- 調用SVM進行predict。
- = =這方法簡單粗暴,性能差點,但是絕對能用。
謝謝邀請。
這個之前做過類似的。所以在這裡簡單說說。我覺得你選的這個題材不錯,有一定的應用背景,也有一定的技術操作性。所以我就簡單談個思路,具體實現不說,你自己做一做,收穫會很大的。
首先需要明確的是實現車牌號圖片識別的過程。匝道口固定位置的攝像頭拍攝入口車輛車牌,我們做的核心模塊是把圖像的模糊信息數字化,轉換為可存儲的車牌號數字信息,並且通過LED顯示屏進行顯示。針對這個核心的技術部分,可以採用的演算法和相匹配的硬體是可以多種多樣的。一般的崗亭都配有微機,就要開發微機平台的相關軟體演算法;而一般的環境中,高性能的DSP一樣大有可為。
鑒於你要求是在Matlab平台下,那我推薦個演算法,是我自己用過的,BP神經網路。這個模塊在Matlab中有現成的用戶界面,掌握起來很輕鬆。 具體實現的過程是這樣的。BP神經網路屬於智能演算法,在使用的時候需要對神經網路進行訓練。在本例中,大家在用的一個方法是利用excel的表格進行點陣布置,對照車牌的字體形成標準化的字型檔建設,形成矩陣輸入Matlab進行神經網路訓練。這是一個方面。另一個方面是圖像處理部分。拍攝得到的圖像要先進性切邊等標準化的處理。接著是灰度轉換,Matlab有專門圖像處理的函數。建議使用列掃描,你可以想像當列頻率為0時,就是數字和數字的邊界了。以此為基礎就可以將車牌進行切割,得到一個個單個的數字。
好了,接著就是單個數字的匹配問題了。單個數字的圖像數字化後,輸入BP神經網路進行運算。當你訓練完成,收斂理想的情況下,運算的過程是可以不必關注的。Matlab自然會給你理想的結果。但是實際總是不理想的,問題常常出在拍照的第一個的省份標識的字元上。像「贛」(牌照上還不是這麼寫的)、「鄂」、「粵」等等,剛出來的結果確實挺讓人崩潰的。確實我們的設備有限。但是必須明確的一條是,我們是工程師,「沒有什麼是技術無法實現的」!所以,努力吧,你會成功的。而且成功的那一刻是很爽的。前面就是大致上的思路了。還有三點啰嗦一下,希你知會。一個是BP神經網路的優勢還會體現在通過學習,它應對雜訊的能力可以很強的。在你充分訓練的情況下,可做試驗,此演算法應對雜訊的表現值得稱道。當然一個數字被整塊污泥蓋掉的情況另當別論,還是讓司機先擦擦吧。
另一個是如果做得完善一點的話。我們做的原始程序一定是基於藍底白字的小型民用車牌照的。但是對白底、紅黑字的軍用、武警等車輛牌照呢?黃底黑字的客車牌照呢?尺寸略寬的大型車牌照呢?如有需要的話,摩托車牌照呢?電動車牌照呢?技術的完善很累。但好產品就是這樣的。 最後一點就是在此演算法之外,常常會想到的另一個方法是基於模糊識別的演算法。這個模塊的用戶界面Matlab也做得很好,而且乍聽起來也更符合我們的技術要求。我並沒有使用過。但是據使用過的童鞋反饋的情況看,實現起來貌似也並不怎麼輕鬆。所以作為一個信息告訴你。祝你成功!
前面很多人都寫了一些方法,基本的流程差不多都有了,我再補充一些思路:
1 車牌如果檢測出來是一整塊區域,可以先二值化然後分割成一個一個字元。當然如果圖片質量太糟糕沒法二值化可參照第3點
2 取到單個字元後做識別, 特徵很重要,HOG 是個很不錯的選擇,分類器用什麼不是很重要,SVM就可以了, 一般的圖片識別準確率95以上沒問題
3 對於特別困難的圖片, 卷積深層神經網路是大殺器, 前提是有足夠的訓練數據
4 以上都能在MATLAB很方便的實現
推薦一本書
用pattern recognition吧。建立車牌字體的pattern,一一對照即可。簡單有效。
居然是俺的大學畢業論文。。。研究了好久,廢話說了一大篇,最後只能實現部分車牌圖片的識別。。。
沒做過,不過大概有個思路:首先使用銳化、二值化等方法將圖像預處理成二值圖,之後進行字元分割,模式匹配後即可。
推薦閱讀:
※matlab稀疏矩陣使用的是什麼數據結構?
※如何用matlab畫天線的三維方向圖?
※大家都用matlab做過哪些有趣的事兒?
※如何對四旋翼飛行器進行精確的數學建模?
※MATLAB 能幹嘛?