使用stm32f103rct6作為主控,攝像頭使用ov7670(帶fifo)。stm32進行了16倍頻。識別過程分別為:影象採集,二值化,識別車牌區域,字元分割,字元匹配。
通過ov7670攝像頭進行影象採集,採集的影象大小為320*240畫素,畫素格式為rgb565。每個畫素由兩位元組組成,第一位元組的高五位是red,第一位元組的低三位和第二位元組的高三位組成green,第二位元組的低五位是blue。
二值化就是讓影象的畫素點矩陣中的每個畫素點的灰度值為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、雙峰法
此方法適用於具有明顯雙峰直方圖的影象,不適合直方圖中雙峰差別很大或雙峰間的谷比較寬廣而平坦的影象。該方法認為影象由前景和背景組成,在灰度直方圖上,前景和背景會形成高峰,在雙峰之間的最低谷處就是閾值。
根據上一步的二值化,由於車牌區域跳變點多,由此可以得出車牌區域。分別記錄車牌區域的上下高度。然後通過rgb-hsv顏色轉換,識別出車牌區域的左右邊界。
我國常見車牌以及排列順序大部分都是按照如下設計的:漢字、英文本母、點、英文本母、阿拉伯數字、阿拉伯數字、阿拉伯數字、阿拉伯數字。基於這個規律,以及影象採集高度一致,設計了如下的分割方法:
1、在記憶體中開闢七個長為車牌長的七分之一和寬為車牌寬的區域
2、從車牌影象長邊的巾問向下開始掃瞄車牌影象,並把掃瞄到的所有的點灰度值複製到0區域的第四個區域對應位置上。然後再從上向下掃瞄剛掃瞄過這一努的左邊或右邊,直到所掃瞄的這一峰上的所有點的灰度都是0時為止,並把這一豎認為是字元的分離處。
3、切割第五到第七個字元。方法就是,切割完了第四個字元之後,再依次掃瞄剩下的空間,直到所掃瞄的這一豎上的所有點的灰度值不全為0時,認為是字元的開始並依次掃瞄直到所掃瞄的這一豎上的所有點的灰度值全為0時認為是字元的結束。
4、切割第三到第四個字元。這兩個字元的切割方式與第五到第七個字元一樣。
5、切割第一到第二個字元。當第三個字元切割完之後,我們將遇到乙個點,我們也把它看作乙個字元,只不過這個點掃瞄之後就不要了。掃瞄完這個點之後,我們來切割第二個字元,它的切割方式與前面一樣。切割完了第二個字元之後,再向左掃瞄,直到所掃瞄的這一豎上的所有點的灰度值不全為0時,認為是字元的開始,並依次掃瞄直到所掃瞄所有剩下的,並填到相應的位置,直到剩下的空間填滿。經過粗分割後,可以得到一些單個字元區域和多餘的空間。下一步我們將把這些多餘的空間去掉。這將更有利於下一步字元的識別。
去除影象上多餘空間:
車牌上的字元經過了粗切割所得到的是一些單的字元,但在分配空間時是按照車牌的寬和長的七分之一來分配的;所以這個空間可能大於字元應該佔的空問。所以,要將多餘空間去除。對於第乙個字元從第一行開始向下掃瞄,把那些一行中所有的點的灰度值全為0的點去掉,直到掃瞄到有一行不全為0時為止。然後再從第一列開始向右掃瞄把那些一列中所有的點的灰度值全為0的點去掉,直到掃瞄到有一列不全為0時為止。接下來從最後一行開始向上掃瞄,把那些一行中所有的點的灰度值全為0的點去掉,直到掃瞄到有一行不全為0時為止。最後從最後一列開始向左掃瞄把那些一列中所有的點的灰度值全為0的點去掉,直到掃瞄到有一列不全為0時為止。重複上面的步驟完成剩下字元的切割
根據二值化的結果,以及記錄的跳變點位置,對字元進行分割,同時記錄字元的左右邊界。
對分割出來的字元進行歸一化處理,這裡用到的擴大演算法,擴大之後逐一的去進行字元匹配。字元模板事前通過字模軟體轉換成二進位制資料儲存在陣列中。最後根據匹配結果相似度最大的做為輸出結果。
歸一化影象就是要把原來各不相同的字元統一到同一尺寸。因為掃瞄進來的影象中字元大小存在較大的差異,而相對來說,統一尺寸的字元識別的標準性更強,準確率自然也更高。具體演算法如下:先得到原來字元的高度和寬度,與系統已存字模的資料作比較,得出要變換的係數,然後根據得到的係數按照插值的方法對映到原影象中。
STM32識別車牌
本系統以stm32f103rbt6微控制器為主控,控制ov7670攝像頭 帶fifo 進行影象採集,通過模式識別 匹配,最後獲得車牌的識別結果。為盡大可能的提高處理速度,stm32微控制器進行了16倍頻。識別主要過程包括影象採集 二值化分析 識別車牌區域 字元分割 字元匹配五過程。影象採集 影象通過...
微控制器學習(一) 微控制器基礎 STM32
io四種輸入工作模式 io四種輸出工作模 stm32有8個16位定時器 stm32具有強大的異常響應系統,它把能夠打斷當前 執行流程的事件分為異常 exception 和中斷 interrupt 並把它們用乙個表管理起來,編號為 3 6的中斷向量定義為系統異常,編號從7到19的為外部中斷。中斷向量控...
微控制器 STM32庫開發
1.stm32庫開發是什麼?st公司推出的基於cortex m3核心的mcu 微控制器,也就是通常所說的微控制器 倡導使用韌體庫開發,僅通過呼叫庫裡面的api 應用程式介面 就可以迅速搭建乙個程式,寫出各種使用者需要的應用。庫開發方式自頂向下,可以避免對底層暫存器的繁瑣操作,能大大降低學習門檻和開發...