数字图像处理:基于MATLAB的车牌识别项目
學(xué)過了數(shù)字圖像處理,就進(jìn)行一個綜合性強(qiáng)的小項(xiàng)目來鞏固一下知識吧。前陣子編寫調(diào)試了一套基于MATLAB的車牌識別的項(xiàng)目的代碼。今天又重新改進(jìn)了一下代碼,識別的效果好一點(diǎn)了,也精簡了一些代碼。這里沒有使用神經(jīng)網(wǎng)絡(luò)等,只是用了最基礎(chǔ)的數(shù)字圖像處理算法,最后通過模板匹配,得到結(jié)果。
源碼下載鏈接:
下載鏈接(注意:有兩套,第二套是后來改進(jìn)的,都能運(yùn)行的)
運(yùn)行結(jié)果:
這里讀取了車牌圖片目錄中的第一幅圖片,并顯示出來了原圖像;隨后計(jì)算出車牌的區(qū)域,進(jìn)行圖像切割,單獨(dú)把車牌提取出來;最后,從圖像中切割出每個字符,并與事先準(zhǔn)備好的模板進(jìn)行匹配,找到與其誤差最小的模板就認(rèn)為是對應(yīng)的字符。
這里是另外一個識別車牌號的結(jié)果。
程序思路:
第一步:從原圖像中切割出車牌,去除無用信息
1、讀取原圖像。
2、將原始彩色圖像轉(zhuǎn)換成灰度圖像,并顯示直方圖(如果分布十分不均勻,使用直方圖均衡化處理)。
3、使用roberts算子進(jìn)行邊緣檢測(MATLAB中調(diào)用edge函數(shù))。
4、圖像腐蝕(去除不需要的邊緣信息,盡可能只保留車牌上字符的輪廓)。
5、圖像膨脹(平滑圖像輪廓,圖中沒能完全濾出車牌之外的所有邊緣信息,剩下了一部分,其實(shí)就是車牌上的那個奧迪標(biāo)志,后面還要想辦法把它給去掉)。
6、從圖像中移除小塊對象(調(diào)用bwareaopen()函數(shù),從圖像中刪除所有少于2200像素8鄰接的區(qū)域,最后只剩下車牌區(qū)域了)。
7、根據(jù)最后圖像中“白色”的那部分界定車牌所處的區(qū)域,并重新在原圖像中進(jìn)行切割,得到車牌的圖像。
第二步:從前面得到的車牌圖像中切割出每個字符
1、先將車牌圖像轉(zhuǎn)換為灰度圖像并繪制直方圖。
2、為增強(qiáng)對比度,對灰度圖像再做直方圖均衡化。
3、將圖像二值化。
4、中值濾波,濾除一些無用信息。
5、調(diào)用編寫的my_imsplit.m和getword.m腳本,計(jì)算每個字符的位置,并逐一進(jìn)行切割,得到只儲存單一字符的圖像。
6、與準(zhǔn)備好的字符模板比對,計(jì)算出與其誤差最小的某個字符模板,識別為對應(yīng)的字符。
最后的識別結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的数字图像处理:基于MATLAB的车牌识别项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pygame:编写一个小游戏
- 下一篇: Zedboard学习(三):PL下流水灯