Contents ...
udn網路城邦
車牌辨識—忽略背景跑得更快
2017/04/07 07:11
瀏覽2,905
迴響0
推薦6
引用0

我的車牌辨識程序真的和別家的不一樣!雖然我不希望被全盤抄襲,但是程式碼保密,演算法原理跟大家分享,讓有興趣的人可以看得深入一點,也給作相關研究的師生或同業參考,我覺得是沒關係的。先用下面三張圖給大家一個印象:

圖一

圖二

首先是一般的影像辨識程序:全彩→灰階→二值化,就是變成黑白圖啦!變黑白的過程需要一個決定黑或白色的灰階門檻值,如果全圖都用一個固定的常數,譬如128亮度以上為白,以下為黑,會有個大問題,就是如果車牌在較暗或較亮的區塊會變成全黑或全白,那就別玩了!所以其實圖二用的門檻值是動態的,譬如較暗的區域門檻值也會低一點,這樣車牌的字與車牌背景還是可以區隔,車牌字元就會顯示出來了!

接下來是畫出這些黑色目標的輪廓,再進行篩選,最終會篩選出「3E-7033」這個車牌!這些後續步驟不是今天要講的重點就先略過了!今天的重點是這麼大量凌亂的輪廓線,處理起來是不是很耗時啊?是的!這正是一般車牌辨識核心都捨棄用輪廓辨識的原因!

輪廓辨識很特別嗎?一點都不!多數人流車流或文件辨識都是用輪廓辨識為主程序的!但是文件辨識時背景一般來說很單純,作人流或車流辨識時背景雖然也和車牌辨識一樣,是自然環境所以非常複雜。但是我們只要看「會動」的目標,所以將前後兩個影像相減,不同的部分才是要看的東西,剩下的輪廓就只有移動中的人車,那就很簡單了!

回到我的問題,要一一處理那麼多圖三中的輪廓好像是不可能的任務,即使不出錯也會花掉多到不合理的時間。這確實是曾經卡住我長達五年的問題,2009年我就建立了輪廓辨識車牌的程序,但是到2014年我才想出夠快的數學方法讓這個程序可以很快完成,讓我的車牌辨識核心快到一秒辨識四五張百萬畫素照片。

但是看看上面幾張圖的標題列,這張照片辨識車牌的時間還是長達288毫秒!原因就是背景實在太複雜了,所以多數停車場安排攝影機時會比這個視野更小,或讓背景變得單純一點。但也不能太小,不然車子稍微有位置偏差就看不到車牌了!聽過某些車牌辨識系統辨識不出來時要讓車子倒退嚕嗎?就是辨識視窗的視野太小的結果。

其中最讓我扼腕的是地面明明是單調平坦不應該有目標的區域,但是在二值化這個階段卻難免會變成一團雜訊區,也代表後續處理的目標物件就很多,即使我的程式跑得快也不應該是這樣用的!太浪費了!是不是有方法可以直接在二值化的階段就「知道」這是單調的背景區,不要硬性區分為黑白色呢?

近日在用這個方法處理身分證字號辨識時終於有了靈感,在製作動態二值化門檻時「順便」收集該點附近的實際亮度差,如果附近亮度變化其實不大就表示不應該有明顯的車牌字元,那就乾脆不作二值化了!效果一級棒,地面變乾淨了,也如願的讓一樣的照片辨識時間大減為213毫秒。進去程式內部看看,實際處理的目標數目從七千個降到三千多個!確實差很多。

圖四

圖五

下面是比較理想的停車場辨識情境照片,照片也小一點,新舊演算法的辨識時間也從89毫秒變成54毫秒!這表示即使不使用多執行緒多核心的平行運算,我的辨識核心就可以一秒鐘辨識近20張影像的車牌!這應該是十分驚人的速度了!因為我這是使用純軟體作的,完全沒有硬體加速(作成IC)的幫忙,會這麼快就真的是演算法很厲害了!

這麼強的演算法,想買了嗎?找逸中軟體就對了!

有誰推薦more
全站分類:心情隨筆 工作職場
自訂分類:教育學習

限會員,要發表迴響,請先登入