基于stm32的車牌識別設(shè)計
掃描二維碼
隨時隨地手機看文章
系統(tǒng)介紹
使用STM32F103RCT6作為主控,攝像頭使用OV7670(帶FIFO)。STM32進行了16倍頻。識別過程分別為:圖像采集,二值化,識別車牌區(qū)域,字符分割,字符匹配。
識別過程分析
1.圖像采集:
通過OV7670攝像頭進行圖像采集,采集的圖像大小為320*240像素,像素格式為RGB565。每個像素由兩字節(jié)組成,第一字節(jié)的高五位是Red,第一字節(jié)的低三位和第二字節(jié)的高三位組成Green,第二字節(jié)的低五位是Blue。
2.二值化:
二值化就是讓圖像的像素點矩陣中的每個像素點的灰度值為0(黑色)或者255(白色),讓整個圖片呈現(xiàn)出只有黑色和白色的效果。二值化后的圖像中灰度值范圍是0或者255。
怎樣讓像素點的灰度值轉(zhuǎn)為0或者255?假如灰度值為220的一個像素點,二值化后應(yīng)該為0還是255?這時候需要設(shè)定一個閾值來對像素點進行設(shè)置。
常用二值化方法:
1、取中值
設(shè)置閾值為127,灰度值小于127的為0,大于127的為255。這樣設(shè)置計算量小,計算快。缺點也嚴重:在不同的圖像中,顏色分布差別大,處理效果也不會很好。
程序開始之前設(shè)置R,G,B的閾值,通過閾值判斷將像素設(shè)置為全黑(0x0000)或者全白(0xFFFF).同時根據(jù)色彩的變化記錄每一行的顏色跳變點,由此識別出車牌區(qū)域。
2、取平均值
像素點平均值 = (像素點1灰度值 + 像素點2灰度值 + …… + 像素點n灰度值) / n
3、雙峰法
此方法適用于具有明顯雙峰直方圖的圖像,不適合直方圖中雙峰差別很大或雙峰間的谷比較寬廣而平坦的圖像。該方法認為圖像由前景和背景組成,在灰度直方圖上,前景和背景會形成高峰,在雙峰之間的最低谷處就是閾值。
3.識別車牌區(qū)域:
根據(jù)上一步的二值化,由于車牌區(qū)域跳變點多,由此可以得出車牌區(qū)域。分別記錄車牌區(qū)域的上下高度。然后通過RGB-HSV顏色轉(zhuǎn)換,識別出車牌區(qū)域的左右邊界。
4.字符分割:
我國常見車牌以及排列順序大部分都是按照如下設(shè)計的:漢字、英文字母、點、英文字母、阿拉伯數(shù)字、阿拉伯數(shù)字、阿拉伯數(shù)字、阿拉伯數(shù)字?;谶@個規(guī)律,以及圖像采集高度一致,設(shè)計了如下的分割方法:
1、在內(nèi)存中開辟七個長為車牌長的七分之一和寬為車牌寬的區(qū)域
2、從車牌圖像長邊的巾問向下開始掃描車牌圖像,并把掃描到的所有的點灰度值復(fù)制到0區(qū)域的第四個區(qū)域?qū)?yīng)位置上。然后再從上向下掃描剛掃描過這一努的左邊或右邊,直到所掃描的這一峰上的所有點的灰度都是0時為止,并把這一豎認為是字符的分離處。
3、切割第五到第七個字符。方法就是,切割完了第四個字符之后,再依次掃描剩下的空間,直到所掃描的這一豎上的所有點的灰度值不全為0時,認為是字符的開始并依次掃描直到所掃描的這一豎上的所有點的灰度值全為0時認為是字符的結(jié)束。
4、切割第三到第四個字符。這兩個字符的切割方式與第五到第七個字符一樣。
5、切割第一到第二個字符。當?shù)谌齻€字符切割完之后,我們將遇到一個點,我們也把它看作一個字符,只不過這個點掃描之后就不要了。掃描完這個點之后,我們來切割第二個字符,它的切割方式與前面一樣。切割完了第二個字符之后,再向左掃描,直到所掃描的這一豎上的所有點的灰度值不全為0時,認為是字符的開始,并依次掃描直到所掃描所有剩下的,并填到相應(yīng)的位置,直到剩下的空間填滿。經(jīng)過粗分割后,可以得到一些單個字符區(qū)域和多余的空間。下一步我們將把這些多余的空間去掉。這將更有利于下一步字符的識別。
去除圖像上多余空間:
車牌上的字符經(jīng)過了粗切割所得到的是一些單的字符,但在分配空間時是按照車牌的寬和長的七分之一來分配的;所以這個空間可能大于字符應(yīng)該占的空問。所以,要將多余空間去除。對于第一個字符從第一行開始向下掃描,把那些一行中所有的點的灰度值全為0的點去掉,直到掃描到有一行不全為0時為止。然后再從第一列開始向右掃描把那些一列中所有的點的灰度值全為0的點去掉,直到掃描到有一列不全為0時為止。接下來從最后一行開始向上掃描,把那些一行中所有的點的灰度值全為0的點去掉,直到掃描到有一行不全為0時為止。最后從最后一列開始向左掃描把那些一列中所有的點的灰度值全為0的點去掉,直到掃描到有一列不全為0時為止。重復(fù)上面的步驟完成剩下字符的切割
根據(jù)二值化的結(jié)果,以及記錄的跳變點位置,對字符進行分割,同時記錄字符的左右邊界。
5.字符匹配:
對分割出來的字符進行歸一化處理,這里用到圖片的擴大算法,擴大之后逐一的去進行字符匹配。字符模板事前通過字模軟件轉(zhuǎn)換成二進制數(shù)據(jù)保存在數(shù)組中。最后根據(jù)匹配結(jié)果相似度最大的做為輸出結(jié)果。
歸一化圖像就是要把原來各不相同的字符統(tǒng)一到同一尺寸。因為掃描進來的圖像中字符大小存在較大的差異,而相對來說,統(tǒng)一尺寸的字符識別的標準性更強,準確率自然也更高。具體算法如下:先得到原來字符的高度和寬度,與系統(tǒng)已存字模的數(shù)據(jù)作比較,得出要變換的系數(shù),然后根據(jù)得到的系數(shù)按照插值的方法映射到原圖像中。