基於STM32單片機的車牌識別

GitHub代碼地址
視頻演示地址
QQ交流羣:658384577

系統介紹

   使用STM32F103RCT6作爲主控,攝像頭使用OV7670(帶FIFO)。STM32進行了16倍頻。識別過程分別爲:圖像採集,二值化,識別車牌區域,字符分割,字符匹配。

識別過程分析

1.圖像採集:

   通過OV7670攝像頭進行圖像採集,採集的圖像大小爲320*240像素,像素格式爲RGB565。每個像素由兩字節組成,第一字節的高五位是Red,第一字節的低三位和第二字節的高三位組成Green,第二字節的低五位是Blue。

2.二值化:

   二值化就是讓圖像的像素點矩陣中的每個像素點的灰度值爲0(黑色)或者255(白色),讓整個圖片呈現出只有黑色和白色的效果。二值化後的圖像中灰度值範圍是0或者255。
   怎樣讓像素點的灰度值轉爲0或者255?假如灰度值爲220的一個像素點,二值化後應該爲0還是255?這時候需要設定一個閾值來對像素點進行設置。
   常用二值化方法:
   1、取中值
      設置閾值爲127,灰度值小於127的爲0,大於127的爲255。這樣設置計算量小,計算快。缺點也嚴重:在不同的圖像中,顏色分佈差別大,處理效果也不會很好。
   程序開始之前設置R,G,B的閾值,通過閾值判斷將像素設置爲全黑(0x0000)或者全白(0xFFFF).同時根據色彩的變化記錄每一行的顏色跳變點,由此識別出車牌區域。
   2、取平均值
      像素點平均值 = (像素點1灰度值 + 像素點2灰度值 + …… + 像素點n灰度值) / n
   3、雙峯法
      此方法適用於具有明顯雙峯直方圖的圖像,不適合直方圖中雙峯差別很大或雙峯間的谷比較寬廣而平坦的圖像。該方法認爲圖像由前景和背景組成,在灰度直方圖上,前景和背景會形成高峯,在雙峯之間的最低谷處就是閾值。

3.識別車牌區域:

   根據上一步的二值化,由於車牌區域跳變點多,由此可以得出車牌區域。分別記錄車牌區域的上下高度。然後通過RGB-HSV顏色轉換,識別出車牌區域的左右邊界。

4.字符分割:

   我國常見車牌以及排列順序大部分都是按照如下設計的:漢字、英文字母、點、英文字母、阿拉伯數字、阿拉伯數字、阿拉伯數字、阿拉伯數字。基於這個規律,以及圖像採集高度一致,設計瞭如下的分割方法:
   1、在內存中開闢七個長爲車牌長的七分之一和寬爲車牌寬的區域
   2、從車牌圖像長邊的巾問向下開始掃描車牌圖像,並把掃描到的所有的點灰度值複製到0區域的第四個區域對應位置上。然後再從上向下掃描剛掃描過這一努的左邊或右邊,直到所掃描的這一峯上的所有點的灰度都是0時爲止,並把這一豎認爲是字符的分離處。
   3、切割第五到第七個字符。方法就是,切割完了第四個字符之後,再依次掃描剩下的空間,直到所掃描的這一豎上的所有點的灰度值不全爲0時,認爲是字符的開始並依次掃描直到所掃描的這一豎上的所有點的灰度值全爲0時認爲是字符的結束。
   4、切割第三到第四個字符。這兩個字符的切割方式與第五到第七個字符一樣。
   5、切割第一到第二個字符。當第三個字符切割完之後,我們將遇到一個點,我們也把它看作一個字符,只不過這個點掃描之後就不要了。掃描完這個點之後,我們來切割第二個字符,它的切割方式與前面一樣。切割完了第二個字符之後,再向左掃描,直到所掃描的這一豎上的所有點的灰度值不全爲0時,認爲是字符的開始,並依次掃描直到所掃描所有剩下的,並填到相應的位置,直到剩下的空間填滿。經過粗分割後,可以得到一些單個字符區域和多餘的空間。下一步我們將把這些多餘的空間去掉。這將更有利於下一步字符的識別。
   去除圖像上多餘空間:
   車牌上的字符經過了粗切割所得到的是一些單的字符,但在分配空間時是按照車牌的寬和長的七分之一來分配的;所以這個空間可能大於字符應該佔的空問。所以,要將多餘空間去除。對於第一個字符從第一行開始向下掃描,把那些一行中所有的點的灰度值全爲0的點去掉,直到掃描到有一行不全爲0時爲止。然後再從第一列開始向右掃描把那些一列中所有的點的灰度值全爲0的點去掉,直到掃描到有一列不全爲0時爲止。接下來從最後一行開始向上掃描,把那些一行中所有的點的灰度值全爲0的點去掉,直到掃描到有一行不全爲0時爲止。最後從最後一列開始向左掃描把那些一列中所有的點的灰度值全爲0的點去掉,直到掃描到有一列不全爲0時爲止。重複上面的步驟完成剩下字符的切割
   根據二值化的結果,以及記錄的跳變點位置,對字符進行分割,同時記錄字符的左右邊界。

5.字符匹配:

   對分割出來的字符進行歸一化處理,這裏用到圖片的擴大算法,擴大之後逐一的去進行字符匹配。字符模板事前通過字模軟件轉換成二進制數據保存在數組中。最後根據匹配結果相似度最大的做爲輸出結果。
   歸一化圖像就是要把原來各不相同的字符統一到同一尺寸。因爲掃描進來的圖像中字符大小存在較大的差異,而相對來說,統一尺寸的字符識別的標準性更強,準確率自然也更高。具體算法如下:先得到原來字符的高度和寬度,與系統已存字模的數據作比較,得出要變換的係數,然後根據得到的係數按照插值的方法映射到原圖像中。

實物圖

在這裏插入圖片描述

發佈了27 篇原創文章 · 獲贊 43 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章