鄉下老師
原文網址:http://blog.udn.com/yccsonar/134945395
列印日期:2020/08/07
車燈刺眼時的車牌,我是怎麼辨識成功的!
2020/05/13 11:46:03


這種車牌當然很難辨識,但是具體來說困難在哪裡?先看看它的灰階圖吧!



傳統上要找到字元目標,一定還是要將它們切割出來的!所謂切割就是根據灰階的明暗,找到一個灰階門檻值,希望字元部分的灰階都低於此門檻,可以將字元視為黑色,字元的背景灰階則希望高於此門檻視為白色,這個過程也稱為二值化。


在影像清晰時,字元與背景黑白分明,當然門檻值很好定,譬如字元灰階是5,背景是250,那灰階門檻從6249得到的結果都是一樣的!但是像這張影像,X那個字的字元與背景灰階相差不到5!大約是178183之間,我們就必須有極為聰明準確的演算法找到可以區隔他們的門檻值。


以我目前的演算法,會替圖上每一個點都找到一個最接近合理的門檻值,也就是會依據這個點附近的概略亮度,決定一個最可能將目標凸顯出來的值,將他們以灰階方式畫出來大概是這個樣子:



我希望這些門檻很準,但是目標的灰階範圍實在很狹窄,所以我的預設情況下會切成這個樣子:



描出目標後用大小形狀篩選一下,得到這些可能是字元的目標:



似乎不太理想?當然最後硬湊出來的答案也是錯的!如果這樣就放棄我就不會辨識成功了。那該怎麼做呢?我們可以從前兩圖中看出,字元傾向破碎,2M兩個字都破成一半,小塊的部分就被篩掉了!X則是因為太模糊無法與背景切開,也被篩掉了!那如果門檻值都平均拉高一點,是不是有可能2M就不會破掉了?從灰階圖上看2M的筆劃還是相當連貫的,所以成功機會應該不小,所以根據一些邏輯提高門檻值的運算結果,就可以切出下面這種圖:




雖然最後的X還是無法與背景切開,但是至少六個字元中有五個字是相當完整了!接下來就有趣了,我其實是會根據可能的車牌格式,往左右方嘗試硬切出那些跟背景基本上連在一起的可能目標,最後找到的車牌就是這個樣子了!



從這裡又會再做一次更小範圍也更準確的二值化,右邊的字是不是都變得更完整了?當然車牌左邊硬抓的區域並不是合理的字元,這就需要一點「人工智慧」來判斷了!總之,我可以據此得到正確車牌:2725-MX


好玩嗎?重點就是我確實會用不同標準的高低門檻嘗試切割出目標,當目標模糊時就會有更大的機會切到更理想的位置,最終將車牌辨識出來!老實說,應該沒有人可以直接在灰階的階段就知道要怎麼決定二值化的門檻,方法有非常多種,要用偏高的?還是偏低的?還是不擇手段試到有合理答案為止?就看你有多少可以計算的時間了!


所以這種模糊的影像用我的軟體辨識速度比平常慢一倍時,你不必驚訝!我的設計理念就是這樣的,除非用參數設定限制必須要快一點,否則我就會自我評估要不要繼續自我修正參數重作,做到有合理的答案或最佳答案為止!這是不是就是人工智慧了?沒騙你!我的程式真的會做這些「思考」的!不是抓瞎亂踹的哦!